From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Chen, Tiejun" <tiejun.chen@intel.com>
Cc: pbonzini@redhat.com, xen-devel@lists.xensource.com,
qemu-devel@nongnu.org, stefano.stabellini@eu.citrix.com
Subject: Re: [Qemu-devel] [v2][PATCH 2/5] hw:pci-host:piix: split i440fx_init
Date: Thu, 31 Jul 2014 17:44:17 +0200 [thread overview]
Message-ID: <20140731154417.GB3898@redhat.com> (raw)
In-Reply-To: <53DA1690.6020905@intel.com>
On Thu, Jul 31, 2014 at 06:12:32PM +0800, Chen, Tiejun wrote:
> On 2014/7/31 17:53, Michael S. Tsirkin wrote:
> >On Thu, Jul 31, 2014 at 05:26:41PM +0800, Chen, Tiejun wrote:
> >>On 2014/7/31 17:10, Michael S. Tsirkin wrote:
> >>>On Thu, Jul 31, 2014 at 02:31:36PM +0800, Tiejun Chen wrote:
> >>>>We'd like to split i440fx_init and then we can share something
> >>>>with other stuff.
> >>>>
> >>>>Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
> >>>
> >>>I think this is too much work for very little benefit.
> >>>Just pass const char *type to i440fx_init.
> >>
> >>You know we will introduce that faked PCIe device represented that PCH
> >>later,
> >
> >Later when? On top of this patch series? Would like to see it all
> >before applying this ...
>
> I will send this with other IGD stuff after this series is fine to you since
> its just creating a simple PCIe device.
>
> I think you should know this whole story since as you guys discussed we
> don't fix that PCH at 1f.0.
And this works with all legacy drivers and with windows
drivers?
> So it may be like this,
>
> static int create_pseudo_pch_isa_bridge(PCIBus *bus, XenHostPCIDevice *hdev)
> {
>
> struct PCIDevice *dev;
>
> char rid;
>
> /* We havt to use a simple PCI device to fake this ISA bridge
> * to avoid making some confusion to BIOS and ACPI.
> */
> dev = pci_create(bus, -1, "pseudo-intel-pch-isa-bridge");
>
> qdev_init_nofail(&dev->qdev);
> pci_config_set_vendor_id(dev->config, XEN_SUBSYSTEM_ID));
> ^
> I don't remember this exactly.
> pci_config_set_device_id(dev->config, hdev->device_id);
This is a hack anyway, how about reverse-decoding
required device id from the supplied card instead of
poking at the host?
You can do it when card is initialized.
>
> return 0;
> }
> >
> >>so how to distinguish them? Are you saying I should check the type
> >>like this?
> >>
> >>if(Xen-Type)
> >>{}
> >>else
> >>{}
> >>
> >
> >No! Put the code in init function for the respective class,
> >pass type as an argument:
>
> If you mean we don't introduce any "if/else", I still don't understand how
> to insert such that function above, could you show this exactly?
>
> Tiejun
Stick it in the constructor for your xen pt device.
> >
> >----
> >i440fx: make types configurable at run-time
> >
> >Xen wants to supply a different pci and host devices,
> >inheriting i440fx devices. Make types configurable.
> >
> >Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> >
> >-->
> >
> >diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> >index be8fdfe..86f295a 100644
> >--- a/include/hw/i386/pc.h
> >+++ b/include/hw/i386/pc.h
> >@@ -230,7 +230,11 @@ extern int no_hpet;
> > struct PCII440FXState;
> > typedef struct PCII440FXState PCII440FXState;
> >
> >-PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn,
> >+#define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost"
> >+#define TYPE_I440FX_PCI_DEVICE "i440FX"
> >+
> >+PCIBus *i440fx_init(const char *host_type, const char *pci_type,
> >+ PCII440FXState **pi440fx_state, int *piix_devfn,
> > ISABus **isa_bus, qemu_irq *pic,
> > MemoryRegion *address_space_mem,
> > MemoryRegion *address_space_io,
> >diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> >index 31125b7..e0979cd 100644
> >--- a/hw/i386/pc_piix.c
> >+++ b/hw/i386/pc_piix.c
> >@@ -194,7 +194,9 @@ static void pc_init1(MachineState *machine,
> > }
> >
> > if (pci_enabled) {
> >- pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, &isa_bus, gsi,
> >+ pci_bus = i440fx_init(TYPE_I440FX_PCI_HOST_BRIDGE,
> >+ TYPE_I440FX_PCI_DEVICE,
> >+ &i440fx_state, &piix3_devfn, &isa_bus, gsi,
> > system_memory, system_io, machine->ram_size,
> > below_4g_mem_size,
> > above_4g_mem_size,
> >diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> >index e0e0946..0cd82b8 100644
> >--- a/hw/pci-host/piix.c
> >+++ b/hw/pci-host/piix.c
> >@@ -40,7 +40,6 @@
> > * http://download.intel.com/design/chipsets/datashts/29054901.pdf
> > */
> >
> >-#define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost"
> > #define I440FX_PCI_HOST_BRIDGE(obj) \
> > OBJECT_CHECK(I440FXState, (obj), TYPE_I440FX_PCI_HOST_BRIDGE)
> >
> >@@ -91,7 +90,6 @@ typedef struct PIIX3State {
> > MemoryRegion rcr_mem;
> > } PIIX3State;
> >
> >-#define TYPE_I440FX_PCI_DEVICE "i440FX"
> > #define I440FX_PCI_DEVICE(obj) \
> > OBJECT_CHECK(PCII440FXState, (obj), TYPE_I440FX_PCI_DEVICE)
> >
> >@@ -305,7 +303,8 @@ static int i440fx_initfn(PCIDevice *dev)
> > return 0;
> > }
> >
> >-PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
> >+PCIBus *i440fx_init(const char *host_type, const char *pci_type,
> >+ PCII440FXState **pi440fx_state,
> > int *piix3_devfn,
> > ISABus **isa_bus, qemu_irq *pic,
> > MemoryRegion *address_space_mem,
> >@@ -325,7 +324,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
> > unsigned i;
> > I440FXState *i440fx;
> >
> >- dev = qdev_create(NULL, TYPE_I440FX_PCI_HOST_BRIDGE);
> >+ dev = qdev_create(NULL, host_type);
> > s = PCI_HOST_BRIDGE(dev);
> > b = pci_bus_new(dev, NULL, pci_address_space,
> > address_space_io, 0, TYPE_PCI_BUS);
> >@@ -333,7 +332,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
> > object_property_add_child(qdev_get_machine(), "i440fx", OBJECT(dev), NULL);
> > qdev_init_nofail(dev);
> >
> >- d = pci_create_simple(b, 0, TYPE_I440FX_PCI_DEVICE);
> >+ d = pci_create_simple(b, 0, pci_type);
> > *pi440fx_state = I440FX_PCI_DEVICE(d);
> > f = *pi440fx_state;
> > f->system_memory = address_space_mem;
> >
> >
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Chen, Tiejun" <tiejun.chen@intel.com>
Cc: pbonzini@redhat.com, xen-devel@lists.xensource.com,
qemu-devel@nongnu.org, stefano.stabellini@eu.citrix.com
Subject: Re: [v2][PATCH 2/5] hw:pci-host:piix: split i440fx_init
Date: Thu, 31 Jul 2014 17:44:17 +0200 [thread overview]
Message-ID: <20140731154417.GB3898@redhat.com> (raw)
In-Reply-To: <53DA1690.6020905@intel.com>
On Thu, Jul 31, 2014 at 06:12:32PM +0800, Chen, Tiejun wrote:
> On 2014/7/31 17:53, Michael S. Tsirkin wrote:
> >On Thu, Jul 31, 2014 at 05:26:41PM +0800, Chen, Tiejun wrote:
> >>On 2014/7/31 17:10, Michael S. Tsirkin wrote:
> >>>On Thu, Jul 31, 2014 at 02:31:36PM +0800, Tiejun Chen wrote:
> >>>>We'd like to split i440fx_init and then we can share something
> >>>>with other stuff.
> >>>>
> >>>>Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
> >>>
> >>>I think this is too much work for very little benefit.
> >>>Just pass const char *type to i440fx_init.
> >>
> >>You know we will introduce that faked PCIe device represented that PCH
> >>later,
> >
> >Later when? On top of this patch series? Would like to see it all
> >before applying this ...
>
> I will send this with other IGD stuff after this series is fine to you since
> its just creating a simple PCIe device.
>
> I think you should know this whole story since as you guys discussed we
> don't fix that PCH at 1f.0.
And this works with all legacy drivers and with windows
drivers?
> So it may be like this,
>
> static int create_pseudo_pch_isa_bridge(PCIBus *bus, XenHostPCIDevice *hdev)
> {
>
> struct PCIDevice *dev;
>
> char rid;
>
> /* We havt to use a simple PCI device to fake this ISA bridge
> * to avoid making some confusion to BIOS and ACPI.
> */
> dev = pci_create(bus, -1, "pseudo-intel-pch-isa-bridge");
>
> qdev_init_nofail(&dev->qdev);
> pci_config_set_vendor_id(dev->config, XEN_SUBSYSTEM_ID));
> ^
> I don't remember this exactly.
> pci_config_set_device_id(dev->config, hdev->device_id);
This is a hack anyway, how about reverse-decoding
required device id from the supplied card instead of
poking at the host?
You can do it when card is initialized.
>
> return 0;
> }
> >
> >>so how to distinguish them? Are you saying I should check the type
> >>like this?
> >>
> >>if(Xen-Type)
> >>{}
> >>else
> >>{}
> >>
> >
> >No! Put the code in init function for the respective class,
> >pass type as an argument:
>
> If you mean we don't introduce any "if/else", I still don't understand how
> to insert such that function above, could you show this exactly?
>
> Tiejun
Stick it in the constructor for your xen pt device.
> >
> >----
> >i440fx: make types configurable at run-time
> >
> >Xen wants to supply a different pci and host devices,
> >inheriting i440fx devices. Make types configurable.
> >
> >Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> >
> >-->
> >
> >diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> >index be8fdfe..86f295a 100644
> >--- a/include/hw/i386/pc.h
> >+++ b/include/hw/i386/pc.h
> >@@ -230,7 +230,11 @@ extern int no_hpet;
> > struct PCII440FXState;
> > typedef struct PCII440FXState PCII440FXState;
> >
> >-PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn,
> >+#define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost"
> >+#define TYPE_I440FX_PCI_DEVICE "i440FX"
> >+
> >+PCIBus *i440fx_init(const char *host_type, const char *pci_type,
> >+ PCII440FXState **pi440fx_state, int *piix_devfn,
> > ISABus **isa_bus, qemu_irq *pic,
> > MemoryRegion *address_space_mem,
> > MemoryRegion *address_space_io,
> >diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> >index 31125b7..e0979cd 100644
> >--- a/hw/i386/pc_piix.c
> >+++ b/hw/i386/pc_piix.c
> >@@ -194,7 +194,9 @@ static void pc_init1(MachineState *machine,
> > }
> >
> > if (pci_enabled) {
> >- pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, &isa_bus, gsi,
> >+ pci_bus = i440fx_init(TYPE_I440FX_PCI_HOST_BRIDGE,
> >+ TYPE_I440FX_PCI_DEVICE,
> >+ &i440fx_state, &piix3_devfn, &isa_bus, gsi,
> > system_memory, system_io, machine->ram_size,
> > below_4g_mem_size,
> > above_4g_mem_size,
> >diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> >index e0e0946..0cd82b8 100644
> >--- a/hw/pci-host/piix.c
> >+++ b/hw/pci-host/piix.c
> >@@ -40,7 +40,6 @@
> > * http://download.intel.com/design/chipsets/datashts/29054901.pdf
> > */
> >
> >-#define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost"
> > #define I440FX_PCI_HOST_BRIDGE(obj) \
> > OBJECT_CHECK(I440FXState, (obj), TYPE_I440FX_PCI_HOST_BRIDGE)
> >
> >@@ -91,7 +90,6 @@ typedef struct PIIX3State {
> > MemoryRegion rcr_mem;
> > } PIIX3State;
> >
> >-#define TYPE_I440FX_PCI_DEVICE "i440FX"
> > #define I440FX_PCI_DEVICE(obj) \
> > OBJECT_CHECK(PCII440FXState, (obj), TYPE_I440FX_PCI_DEVICE)
> >
> >@@ -305,7 +303,8 @@ static int i440fx_initfn(PCIDevice *dev)
> > return 0;
> > }
> >
> >-PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
> >+PCIBus *i440fx_init(const char *host_type, const char *pci_type,
> >+ PCII440FXState **pi440fx_state,
> > int *piix3_devfn,
> > ISABus **isa_bus, qemu_irq *pic,
> > MemoryRegion *address_space_mem,
> >@@ -325,7 +324,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
> > unsigned i;
> > I440FXState *i440fx;
> >
> >- dev = qdev_create(NULL, TYPE_I440FX_PCI_HOST_BRIDGE);
> >+ dev = qdev_create(NULL, host_type);
> > s = PCI_HOST_BRIDGE(dev);
> > b = pci_bus_new(dev, NULL, pci_address_space,
> > address_space_io, 0, TYPE_PCI_BUS);
> >@@ -333,7 +332,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
> > object_property_add_child(qdev_get_machine(), "i440fx", OBJECT(dev), NULL);
> > qdev_init_nofail(dev);
> >
> >- d = pci_create_simple(b, 0, TYPE_I440FX_PCI_DEVICE);
> >+ d = pci_create_simple(b, 0, pci_type);
> > *pi440fx_state = I440FX_PCI_DEVICE(d);
> > f = *pi440fx_state;
> > f->system_memory = address_space_mem;
> >
> >
next prev parent reply other threads:[~2014-07-31 15:44 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-31 6:31 [Qemu-devel] [v2][PATCH 0/5] xen: introduce new machine for IGD passthrough Tiejun Chen
2014-07-31 6:31 ` Tiejun Chen
2014-07-31 6:31 ` [Qemu-devel] [v2][PATCH 1/5] hw:i386:pc_piix: split pc_init1() Tiejun Chen
2014-07-31 6:31 ` Tiejun Chen
2014-07-31 6:31 ` [Qemu-devel] [v2][PATCH 2/5] hw:pci-host:piix: split i440fx_init Tiejun Chen
2014-07-31 6:31 ` Tiejun Chen
2014-07-31 9:10 ` [Qemu-devel] " Michael S. Tsirkin
2014-07-31 9:10 ` Michael S. Tsirkin
2014-07-31 9:26 ` [Qemu-devel] " Chen, Tiejun
2014-07-31 9:26 ` Chen, Tiejun
2014-07-31 9:53 ` [Qemu-devel] " Michael S. Tsirkin
2014-07-31 9:53 ` Michael S. Tsirkin
2014-07-31 10:12 ` [Qemu-devel] " Chen, Tiejun
2014-07-31 10:12 ` Chen, Tiejun
2014-07-31 12:10 ` [Qemu-devel] " Chen, Tiejun
2014-07-31 12:10 ` Chen, Tiejun
2014-07-31 15:47 ` [Qemu-devel] " Michael S. Tsirkin
2014-07-31 15:47 ` Michael S. Tsirkin
2014-08-01 2:40 ` [Qemu-devel] " Chen, Tiejun
2014-08-01 2:40 ` Chen, Tiejun
2014-07-31 15:44 ` Michael S. Tsirkin [this message]
2014-07-31 15:44 ` Michael S. Tsirkin
2014-08-01 2:35 ` [Qemu-devel] " Chen, Tiejun
2014-08-01 2:35 ` Chen, Tiejun
2014-08-04 7:11 ` [Qemu-devel] " Chen, Tiejun
2014-08-04 7:11 ` Chen, Tiejun
2014-07-31 6:31 ` [Qemu-devel] [v2][PATCH 3/5] xen:hw:pci-host:piix: create host bridge to passthrough Tiejun Chen
2014-07-31 6:31 ` Tiejun Chen
2014-07-31 6:31 ` [Qemu-devel] [v2][PATCH 4/5] xen:hw:pci-host:piix: introduce xen_igd_passthrough_i440fx_init Tiejun Chen
2014-07-31 6:31 ` Tiejun Chen
2014-07-31 6:31 ` [Qemu-devel] [v2][PATCH 5/5] xen:hw:i386:pc_piix: introduce new machine for IGD passthrough Tiejun Chen
2014-07-31 6:31 ` Tiejun Chen
2014-07-31 8:58 ` [Qemu-devel] [v2][PATCH 0/5] xen: " Michael S. Tsirkin
2014-07-31 8:58 ` Michael S. Tsirkin
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=20140731154417.GB3898@redhat.com \
--to=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tiejun.chen@intel.com \
--cc=xen-devel@lists.xensource.com \
/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.