From: "Hervé Poussineau" <hpoussin@reactos.org>
To: "Andreas Färber" <andreas.faerber@web.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
Anthony Liguori <anthony@codemonkey.ws>
Subject: Re: [Qemu-devel] [PATCH 2/2] i82378: cleanup implementation
Date: Tue, 30 Jul 2013 22:06:30 +0200 [thread overview]
Message-ID: <51F81CC6.8090104@reactos.org> (raw)
In-Reply-To: <51F6E46A.6080708@web.de>
Andreas Färber a écrit :
> Hi,
>
> Am 23.07.2013 23:16, schrieb Hervé Poussineau:
>> - i82378 only exists on PCI bus ; do not split implementation in 2 structures
>> - remove BARs, which are not specified in datasheet
>> - replace custom isa_mmio implementation by PCI bus IO region usage
>> - use QOM casts when required
>>
>> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
>
> Thanks for adopting some of the latest patterns without being asked to!
>
> I've queued this with some style changes, but apart from testing issues
> as CC'ed, I have a major question/concern in the bottom...
>
>> ---
>> hw/isa/i82378.c | 220 ++++++++++++-------------------------------------------
>> 1 file changed, 48 insertions(+), 172 deletions(-)
>>
>> diff --git a/hw/isa/i82378.c b/hw/isa/i82378.c
>> index de71d81..f2045de 100644
>> --- a/hw/isa/i82378.c
>> +++ b/hw/isa/i82378.c
[...]
>> @@ -159,19 +52,36 @@ static void i82378_request_out0_irq(void *opaque, int irq, int level)
>> static void i82378_request_pic_irq(void *opaque, int irq, int level)
>> {
>> DeviceState *dev = opaque;
>> - PCIDevice *pci = DO_UPCAST(PCIDevice, qdev, dev);
>> - PCIi82378State *s = DO_UPCAST(PCIi82378State, pci_dev, pci);
>> -
>> - qemu_set_irq(s->state.i8259[irq], level);
>> + qemu_set_irq(I82378(dev)->i8259[irq], level);
>
> Changed that back to a variable s - FOO(bar)->baz is undesired.
OK
>
>> }
>>
>> -static void i82378_init(DeviceState *dev, I82378State *s)
>> +static void i82378_realize(DeviceState *dev, Error **errp)
>> {
>> - ISABus *isabus = ISA_BUS(qdev_get_child_bus(dev, "isa.0"));
>> - ISADevice *pit;
>> + PCIDevice *pci = PCI_DEVICE(dev);
>> + I82378State *s = I82378(dev);
>> + DeviceClass *dc;
>> + uint8_t *pci_conf;
>> + ISABus *isabus;
>> ISADevice *isa;
>> qemu_irq *out0_irq;
>>
>> + dc = DEVICE_CLASS(object_class_get_parent(object_get_class(OBJECT(dev))));
>
> This is going into uncharted territories. ;) I consider it wrong to use
> object_get_class() - we should use object_class_by_name() to allow for
> derived types and I'll put it into a macro that I'll try to align with
> Peter C.'s and my QOM work.
OK
>> + assert(dc);
>
> This shouldn't be necessary?
OK. It can be removed.
>
>> + dc->realize(dev, errp);
>> + if (error_is_set(errp)) {
>> + return;
>
> This doesn't do what you want. You need a local err variable to return
> here, errp might be NULL => !error_is_set(errp).
OK
[...]
>>
>> - k->init = pci_i82378_init;
>> k->vendor_id = PCI_VENDOR_ID_INTEL;
>> k->device_id = PCI_DEVICE_ID_INTEL_82378;
>> k->revision = 0x03;
>> k->class_id = PCI_CLASS_BRIDGE_ISA;
>> - k->subsystem_vendor_id = 0x0;
>> - k->subsystem_id = 0x0;
>> - dc->vmsd = &vmstate_pci_i82378;
>> - dc->props = i82378_properties;
>> + dc->realize = i82378_realize;
>> + dc->vmsd = &vmstate_i82378;
>
> (FWIW dc->categories has been merged here.)
Yes, but it has been merged after I sent this patch...
>
>> + dc->no_user = 1;
>
> Why do you do this? For one, according to Anthony it should no longer be
> used, and for another, Paolo's endianness-test (make check) is using
> -device i82378 for various other ppc and sh4 machines IIUC. make check
> still succeeds for ppc with this patch though, so that might be due tot
> -device ignoring DeviceClass::no_user?
I probably copied it from another chipset device, maybe i440fx.
I don't really mind removing it.
Yes, I double-checked that make check still works for all architectures.
> Hoping to get this in shape for -rc1.
Sure. Should I send a v2, as it seems you already queued it?
Hervé
next prev parent reply other threads:[~2013-07-30 20:06 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-23 21:16 [Qemu-devel] [PATCH 0/2] prep/i82378: simplify and enhance i82378 chipset implementation Hervé Poussineau
2013-07-23 21:16 ` [Qemu-devel] [PATCH 1/2] prep_pci: set isa_mem_base in the PCI host bridge Hervé Poussineau
2013-07-23 22:33 ` Andreas Färber
2013-07-24 5:37 ` Hervé Poussineau
2013-07-23 21:16 ` [Qemu-devel] [PATCH 2/2] i82378: cleanup implementation Hervé Poussineau
2013-07-29 21:53 ` Andreas Färber
2013-07-30 20:06 ` Hervé Poussineau [this message]
2013-07-31 17:06 ` Andreas Färber
2013-07-31 17:23 ` Andreas Färber
2013-07-31 18:58 ` Hervé Poussineau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51F81CC6.8090104@reactos.org \
--to=hpoussin@reactos.org \
--cc=andreas.faerber@web.de \
--cc=anthony@codemonkey.ws \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.