Commit c39860e6 authored by Marc-André Lureau's avatar Marc-André Lureau Committed by Paolo Bonzini
Browse files

char: replace qemu_chr_claim/release with qemu_chr_fe_init/deinit



Now that all front end use qemu_chr_fe_init(), we can move chardev
claiming in init(), and add a function deinit() to release the chardev
and cleanup handlers.

The qemu_chr_fe_claim_no_fail() for property are gone, since the
property will raise an error instead. In other cases, where there is
already an error path, an error is raised instead. Finally, other cases
are handled by &error_abort in qemu_chr_fe_init().

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20161022095318.17775-19-marcandre.lureau@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 5d300164
Loading
Loading
Loading
Loading
+1 −9
Original line number Diff line number Diff line
@@ -100,10 +100,6 @@ static void rng_egd_opened(RngBackend *b, Error **errp)
                  "Device '%s' not found", s->chr_name);
        return;
    }
    if (qemu_chr_fe_claim(chr) != 0) {
        error_setg(errp, QERR_DEVICE_IN_USE, s->chr_name);
        return;
    }
    if (!qemu_chr_fe_init(&s->chr, chr, errp)) {
        return;
    }
@@ -149,11 +145,7 @@ static void rng_egd_finalize(Object *obj)
{
    RngEgd *s = RNG_EGD(obj);

    if (s->chr.chr) {
        qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, NULL, NULL);
        qemu_chr_fe_release(s->chr.chr);
    }

    qemu_chr_fe_deinit(&s->chr);
    g_free(s->chr_name);
}

+1 −2
Original line number Diff line number Diff line
@@ -1494,6 +1494,7 @@ void gdb_exit(CPUArchState *env, int code)
  put_packet(s, buf);

#ifndef CONFIG_USER_ONLY
  qemu_chr_fe_deinit(&s->chr);
  qemu_chr_delete(chr);
#endif
}
@@ -1752,8 +1753,6 @@ int gdbserver_start(const char *device)
        chr = qemu_chr_new_noreplay("gdb", device);
        if (!chr)
            return -1;

        qemu_chr_fe_claim_no_fail(chr);
    }

    s = gdbserver_state;
+0 −1
Original line number Diff line number Diff line
@@ -1976,7 +1976,6 @@ static void pxa2xx_fir_realize(DeviceState *dev, Error **errp)
    PXA2xxFIrState *s = PXA2XX_FIR(dev);

    if (s->chr.chr) {
        qemu_chr_fe_claim_no_fail(s->chr.chr);
        qemu_chr_fe_set_handlers(&s->chr, pxa2xx_fir_is_empty,
                                 pxa2xx_fir_rx, pxa2xx_fir_event, s, NULL);
    }
+0 −1
Original line number Diff line number Diff line
@@ -285,7 +285,6 @@ void *mcf_uart_init(qemu_irq irq, CharDriverState *chr)
    s->irq = irq;
    if (chr) {
        qemu_chr_fe_init(&s->chr, chr, &error_abort);
        qemu_chr_fe_claim_no_fail(chr);
        qemu_chr_fe_set_handlers(&s->chr, mcf_uart_can_receive,
                                 mcf_uart_receive, mcf_uart_event, s, NULL);
    }
+1 −1
Original line number Diff line number Diff line
@@ -905,7 +905,7 @@ void serial_realize_core(SerialState *s, Error **errp)

void serial_exit_core(SerialState *s)
{
    qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, NULL, NULL);
    qemu_chr_fe_deinit(&s->chr);
    qemu_unregister_reset(serial_reset, s);
}

Loading