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

2016-06-01 Thread xiaoqiang zhao



在 2016年06月01日 15:04, Mark Cave-Ayland 写道:

On 01/06/16 04:06, xiaoqiang zhao wrote:


在 2016年6月1日,06:13,Mark Cave-Ayland  写道:


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

From: xiaoqiang zhao 

* Drop the old SysBus init function and use instance_init
* Call qemu_chr_add_handlers in the realize callback

Signed-off-by: xiaoqiang zhao 
Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_...@163.com>
Signed-off-by: Paolo Bonzini 
---
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, >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, >chn[i]);
-}
 }
 s->chn[0].otherchn = >chn[1];
 s->chn[1].otherchn = >chn[0];

-memory_region_init_io(>mmio, OBJECT(s), _mem_ops, s, "escc",
+memory_region_init_io(>mmio, obj, _mem_ops, s, "escc",
   ESCC_SIZE << s->it_shift);
 sysbus_init_mmio(dev, >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, >chn[i]);
+}
+}

 if (s->chn[0].type == mouse) {
 qemu_add_mouse_event_handler(sunmouse_event, >chn[0], 0,
@@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
 s->chn[1].hs = qemu_input_handler_register((DeviceState *)(>chn[1]),
_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 = _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.



Mark:
Sorry for the inconvenience. This problem is due to the incorrect property 
value in the realize stage. I have fix this and the test is passed.

No problem.


Paolo:  Do i need to send a new version or just this one?

The original patch has already applied to git master, so please send
your fix as a separate patch.


ATB,

Mark.


Ok, coming soon ;-)




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

2016-06-01 Thread Mark Cave-Ayland
On 01/06/16 04:06, xiaoqiang zhao wrote:

>> 在 2016年6月1日,06:13,Mark Cave-Ayland  写道:
>>
>>> On 27/05/16 11:06, Paolo Bonzini wrote:
>>>
>>> From: xiaoqiang zhao 
>>>
>>> * Drop the old SysBus init function and use instance_init
>>> * Call qemu_chr_add_handlers in the realize callback
>>>
>>> Signed-off-by: xiaoqiang zhao 
>>> Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_...@163.com>
>>> Signed-off-by: Paolo Bonzini 
>>> ---
>>> 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, >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, 
>>> >chn[i]);
>>> -}
>>> }
>>> s->chn[0].otherchn = >chn[1];
>>> s->chn[1].otherchn = >chn[0];
>>>
>>> -memory_region_init_io(>mmio, OBJECT(s), _mem_ops, s, "escc",
>>> +memory_region_init_io(>mmio, obj, _mem_ops, s, "escc",
>>>   ESCC_SIZE << s->it_shift);
>>> sysbus_init_mmio(dev, >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, 
>>> >chn[i]);
>>> +}
>>> +}
>>>
>>> if (s->chn[0].type == mouse) {
>>> qemu_add_mouse_event_handler(sunmouse_event, >chn[0], 0,
>>> @@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
>>> s->chn[1].hs = qemu_input_handler_register((DeviceState 
>>> *)(>chn[1]),
>>>_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 = _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.
>>
>>
> 
> Mark:
>Sorry for the inconvenience. This problem is due to the incorrect property 
> value in the realize stage. I have fix this and the test is passed.

No problem.

> Paolo:  Do i need to send a new version or just this one?

The original patch has already applied to git master, so please send
your fix as a separate patch.


ATB,

Mark.




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

2016-05-31 Thread xiaoqiang zhao


> 在 2016年6月1日,06:13,Mark Cave-Ayland  写道:
> 
>> On 27/05/16 11:06, Paolo Bonzini wrote:
>> 
>> From: xiaoqiang zhao 
>> 
>> * Drop the old SysBus init function and use instance_init
>> * Call qemu_chr_add_handlers in the realize callback
>> 
>> Signed-off-by: xiaoqiang zhao 
>> Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_...@163.com>
>> Signed-off-by: Paolo Bonzini 
>> ---
>> 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, >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, 
>> >chn[i]);
>> -}
>> }
>> s->chn[0].otherchn = >chn[1];
>> s->chn[1].otherchn = >chn[0];
>> 
>> -memory_region_init_io(>mmio, OBJECT(s), _mem_ops, s, "escc",
>> +memory_region_init_io(>mmio, obj, _mem_ops, s, "escc",
>>   ESCC_SIZE << s->it_shift);
>> sysbus_init_mmio(dev, >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, 
>> >chn[i]);
>> +}
>> +}
>> 
>> if (s->chn[0].type == mouse) {
>> qemu_add_mouse_event_handler(sunmouse_event, >chn[0], 0,
>> @@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
>> s->chn[1].hs = qemu_input_handler_register((DeviceState 
>> *)(>chn[1]),
>>_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 = _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.
> 
> 

Mark:
   Sorry for the inconvenience. This problem is due to the incorrect property 
value in the realize stage. I have fix this and the test is passed.

Paolo:  Do i need to send a new version or just this one?




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

2016-05-31 Thread Mark Cave-Ayland
On 27/05/16 11:06, Paolo Bonzini wrote:

> From: xiaoqiang zhao 
> 
> * Drop the old SysBus init function and use instance_init
> * Call qemu_chr_add_handlers in the realize callback
> 
> Signed-off-by: xiaoqiang zhao 
> Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_...@163.com>
> Signed-off-by: Paolo Bonzini 
> ---
>  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, >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, >chn[i]);
> -}
>  }
>  s->chn[0].otherchn = >chn[1];
>  s->chn[1].otherchn = >chn[0];
>  
> -memory_region_init_io(>mmio, OBJECT(s), _mem_ops, s, "escc",
> +memory_region_init_io(>mmio, obj, _mem_ops, s, "escc",
>ESCC_SIZE << s->it_shift);
>  sysbus_init_mmio(dev, >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, >chn[i]);
> +}
> +}
>  
>  if (s->chn[0].type == mouse) {
>  qemu_add_mouse_event_handler(sunmouse_event, >chn[0], 0,
> @@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
>  s->chn[1].hs = qemu_input_handler_register((DeviceState 
> *)(>chn[1]),
> _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 = _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.




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

2016-05-27 Thread Paolo Bonzini
From: xiaoqiang zhao 

* Drop the old SysBus init function and use instance_init
* Call qemu_chr_add_handlers in the realize callback

Signed-off-by: xiaoqiang zhao 
Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_...@163.com>
Signed-off-by: Paolo Bonzini 
---
 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, >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, >chn[i]);
-}
 }
 s->chn[0].otherchn = >chn[1];
 s->chn[1].otherchn = >chn[0];
 
-memory_region_init_io(>mmio, OBJECT(s), _mem_ops, s, "escc",
+memory_region_init_io(>mmio, obj, _mem_ops, s, "escc",
   ESCC_SIZE << s->it_shift);
 sysbus_init_mmio(dev, >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, >chn[i]);
+}
+}
 
 if (s->chn[0].type == mouse) {
 qemu_add_mouse_event_handler(sunmouse_event, >chn[0], 0,
@@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
 s->chn[1].hs = qemu_input_handler_register((DeviceState *)(>chn[1]),
_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 = _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,
 };
 
-- 
2.5.5