Commit 6af2692e authored by Peter Maydell's avatar Peter Maydell
Browse files

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: default avatarPeter Maydell <peter.maydell@linaro.org>
Reviewed-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
Tested-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20180420145249.32435-13-peter.maydell@linaro.org
parent 2cd4f8ac
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -161,8 +161,6 @@ void hmp_pcie_aer_inject_error(Monitor *mon, const QDict *qdict);

#define MAX_SERIAL_PORTS 4

extern Chardev *serial_hds[MAX_SERIAL_PORTS];

/* Return the Chardev for serial port i, or NULL if none */
Chardev *serial_hd(int i);

+7 −8
Original line number Diff line number Diff line
@@ -154,7 +154,8 @@ QEMUClockType rtc_clock;
int vga_interface_type = VGA_NONE;
static DisplayOptions dpy;
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 *virtcon_hds[MAX_VIRTIO_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 index = 0;
    int index = num_serial_hds;
    char label[32];

    if (strcmp(devname, "none") == 0)
        return 0;
    if (index == MAX_SERIAL_PORTS) {
        error_report("too many serial ports");
        exit(1);
    }
    snprintf(label, sizeof(label), "serial%d", index);
    serial_hds = g_renew(Chardev *, serial_hds, index + 1);

    serial_hds[index] = qemu_chr_new(label, devname);
    if (!serial_hds[index]) {
        error_report("could not connect serial device"
                     " to character backend '%s'", devname);
        return -1;
    }
    index++;
    num_serial_hds++;
    return 0;
}

Chardev *serial_hd(int i)
{
    assert(i >= 0);
    if (i < ARRAY_SIZE(serial_hds)) {
    if (i < num_serial_hds) {
        return serial_hds[i];
    }
    return NULL;