mirror of https://github.com/proxmox/mirror_qemu
vl.c: Remove compile time limit on number of serial ports
Instead of having a fixed sized global serial_hds[] array, use a local dynamically reallocated one, so we don't have a compile time limit on how many serial ports a system has. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Thomas Huth <thuth@redhat.com> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20180420145249.32435-13-peter.maydell@linaro.orgmaster
parent
2cd4f8acb0
commit
6af2692e86
|
@ -161,8 +161,6 @@ void hmp_pcie_aer_inject_error(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
#define MAX_SERIAL_PORTS 4
|
#define MAX_SERIAL_PORTS 4
|
||||||
|
|
||||||
extern Chardev *serial_hds[MAX_SERIAL_PORTS];
|
|
||||||
|
|
||||||
/* Return the Chardev for serial port i, or NULL if none */
|
/* Return the Chardev for serial port i, or NULL if none */
|
||||||
Chardev *serial_hd(int i);
|
Chardev *serial_hd(int i);
|
||||||
|
|
||||||
|
|
15
vl.c
15
vl.c
|
@ -154,7 +154,8 @@ QEMUClockType rtc_clock;
|
||||||
int vga_interface_type = VGA_NONE;
|
int vga_interface_type = VGA_NONE;
|
||||||
static DisplayOptions dpy;
|
static DisplayOptions dpy;
|
||||||
int no_frame;
|
int no_frame;
|
||||||
Chardev *serial_hds[MAX_SERIAL_PORTS];
|
static int num_serial_hds = 0;
|
||||||
|
static Chardev **serial_hds = NULL;
|
||||||
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
|
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
|
||||||
Chardev *virtcon_hds[MAX_VIRTIO_CONSOLES];
|
Chardev *virtcon_hds[MAX_VIRTIO_CONSOLES];
|
||||||
Chardev *sclp_hds[MAX_SCLP_CONSOLES];
|
Chardev *sclp_hds[MAX_SCLP_CONSOLES];
|
||||||
|
@ -2496,30 +2497,28 @@ static int foreach_device_config(int type, int (*func)(const char *cmdline))
|
||||||
|
|
||||||
static int serial_parse(const char *devname)
|
static int serial_parse(const char *devname)
|
||||||
{
|
{
|
||||||
static int index = 0;
|
int index = num_serial_hds;
|
||||||
char label[32];
|
char label[32];
|
||||||
|
|
||||||
if (strcmp(devname, "none") == 0)
|
if (strcmp(devname, "none") == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (index == MAX_SERIAL_PORTS) {
|
|
||||||
error_report("too many serial ports");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
snprintf(label, sizeof(label), "serial%d", index);
|
snprintf(label, sizeof(label), "serial%d", index);
|
||||||
|
serial_hds = g_renew(Chardev *, serial_hds, index + 1);
|
||||||
|
|
||||||
serial_hds[index] = qemu_chr_new(label, devname);
|
serial_hds[index] = qemu_chr_new(label, devname);
|
||||||
if (!serial_hds[index]) {
|
if (!serial_hds[index]) {
|
||||||
error_report("could not connect serial device"
|
error_report("could not connect serial device"
|
||||||
" to character backend '%s'", devname);
|
" to character backend '%s'", devname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
index++;
|
num_serial_hds++;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Chardev *serial_hd(int i)
|
Chardev *serial_hd(int i)
|
||||||
{
|
{
|
||||||
assert(i >= 0);
|
assert(i >= 0);
|
||||||
if (i < ARRAY_SIZE(serial_hds)) {
|
if (i < num_serial_hds) {
|
||||||
return serial_hds[i];
|
return serial_hds[i];
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue