qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PULL 03/31] hw/char: QOM'ify escc.c


From: Mark Cave-Ayland
Subject: Re: [Qemu-devel] [PULL 03/31] hw/char: QOM'ify escc.c
Date: Tue, 31 May 2016 23:13:34 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.8.0

On 27/05/16 11:06, Paolo Bonzini wrote:

> From: xiaoqiang zhao <address@hidden>
> 
> * Drop the old SysBus init function and use instance_init
> * Call qemu_chr_add_handlers in the realize callback
> 
> Signed-off-by: xiaoqiang zhao <address@hidden>
> Message-Id: <address@hidden>
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
>  hw/char/escc.c | 30 +++++++++++++++++++-----------
>  1 file changed, 19 insertions(+), 11 deletions(-)
> 
> diff --git a/hw/char/escc.c b/hw/char/escc.c
> index 7bf09a0..8e6a7df 100644
> --- a/hw/char/escc.c
> +++ b/hw/char/escc.c
> @@ -983,9 +983,10 @@ void slavio_serial_ms_kbd_init(hwaddr base, qemu_irq irq,
>      sysbus_mmio_map(s, 0, base);
>  }
>  
> -static int escc_init1(SysBusDevice *dev)
> +static void escc_init1(Object *obj)
>  {
> -    ESCCState *s = ESCC(dev);
> +    ESCCState *s = ESCC(obj);
> +    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
>      unsigned int i;
>  
>      s->chn[0].disabled = s->disabled;
> @@ -994,17 +995,26 @@ static int escc_init1(SysBusDevice *dev)
>          sysbus_init_irq(dev, &s->chn[i].irq);
>          s->chn[i].chn = 1 - i;
>          s->chn[i].clock = s->frequency / 2;
> -        if (s->chn[i].chr) {
> -            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
> -                                  serial_receive1, serial_event, &s->chn[i]);
> -        }
>      }
>      s->chn[0].otherchn = &s->chn[1];
>      s->chn[1].otherchn = &s->chn[0];
>  
> -    memory_region_init_io(&s->mmio, OBJECT(s), &escc_mem_ops, s, "escc",
> +    memory_region_init_io(&s->mmio, obj, &escc_mem_ops, s, "escc",
>                            ESCC_SIZE << s->it_shift);
>      sysbus_init_mmio(dev, &s->mmio);
> +}
> +
> +static void escc_realize(DeviceState *dev, Error **errp)
> +{
> +    ESCCState *s = ESCC(dev);
> +    unsigned int i;
> +
> +    for (i = 0; i < 2; i++) {
> +        if (s->chn[i].chr) {
> +            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
> +                                  serial_receive1, serial_event, &s->chn[i]);
> +        }
> +    }
>  
>      if (s->chn[0].type == mouse) {
>          qemu_add_mouse_event_handler(sunmouse_event, &s->chn[0], 0,
> @@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
>          s->chn[1].hs = qemu_input_handler_register((DeviceState 
> *)(&s->chn[1]),
>                                                     &sunkbd_handler);
>      }
> -
> -    return 0;
>  }
>  
>  static Property escc_properties[] = {
> @@ -1032,10 +1040,9 @@ static Property escc_properties[] = {
>  static void escc_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
> -    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>  
> -    k->init = escc_init1;
>      dc->reset = escc_reset;
> +    dc->realize = escc_realize;
>      dc->vmsd = &vmstate_escc;
>      dc->props = escc_properties;
>      set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
> @@ -1045,6 +1052,7 @@ static const TypeInfo escc_info = {
>      .name          = TYPE_ESCC,
>      .parent        = TYPE_SYS_BUS_DEVICE,
>      .instance_size = sizeof(ESCCState),
> +    .instance_init = escc_init1,
>      .class_init    = escc_class_init,
>  };

Unfortunately this patch causes OpenBIOS to freeze on startup under
qemu-system-ppc (presumably as there is a problem accessing the serial
port). You can reproduce this by starting qemu-system-ppc with no
parameters against the commits below:

Bad : e7c9136977cb99c6eb52c9139f7b8d8b5fa87db9
Good: b138e654a0525f009e7e7c96fc67d74baf3e011b

Note that you'll currently need to use the above two hashes to reproduce
the issue against git master as another regression has just crept in.


ATB,

Mark.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]