qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Isaku Yamahata <yamahata@valinux.co.jp>
Cc: blauwirbel@gmail.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH 1/2] pci/bridge: allocate PCIBus dynamically for PCIBridge.
Date: Tue, 6 Jul 2010 15:18:52 +0300	[thread overview]
Message-ID: <20100706121852.GA20208@redhat.com> (raw)
In-Reply-To: <8ab6e42be20518d6491e0cd0d5985f7df6912c01.1278037560.git.yamahata@valinux.co.jp>

On Fri, Jul 02, 2010 at 11:30:11AM +0900, Isaku Yamahata wrote:
> allocate PCIBus dynamically for PCIBridge and bug fix of
> pci_unregister_secondary_bus().

could you make the bugfix a separate patch please?

> This is a preparation for splitting out pci_bridge functions.
> Since PCIBus is private to pci.c, PCIBridge won't be able to
> contain PCIBus in its structure.
> 
> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>

I think this becomes too complex: as bridge configuration affects
the bus operation, you might end up sticking a pointer to the device
in the bus. A similar arrangement is in place in with piix_pci, and I would
love to get rid of it, too.

Let's just put PCIBus in a header? It could be a new header
named pci_internals.h or something like this.

> ---
>  hw/pci.c |   25 ++++++++++++++-----------
>  1 files changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 08652e8..fdf02d0 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -286,23 +286,27 @@ PCIBus *pci_register_bus(DeviceState *parent, const char *name,
>      return bus;
>  }
>  
> -static void pci_register_secondary_bus(PCIBus *parent,
> -                                       PCIBus *bus,
> -                                       PCIDevice *dev,
> -                                       pci_map_irq_fn map_irq,
> -                                       const char *name)
> +static PCIBus *pci_register_secondary_bus(PCIBus *parent,
> +                                          PCIDevice *dev,
> +                                          pci_map_irq_fn map_irq,
> +                                          const char *name)
>  {
> -    qbus_create_inplace(&bus->qbus, &pci_bus_info, &dev->qdev, name);
> +    PCIBus *bus;
> +    bus = pci_bus_new(&dev->qdev, name, 0);
> +
>      bus->map_irq = map_irq;
>      bus->parent_dev = dev;
>  
>      QLIST_INSERT_HEAD(&parent->child, bus, sibling);
> +
> +    return bus;

This does more than we need: pci_bus_new
was created for host bus so it will also register in
reset and vmstate lists.

>  }
>  
>  static void pci_unregister_secondary_bus(PCIBus *bus)
>  {
>      assert(QLIST_EMPTY(&bus->child));
>      QLIST_REMOVE(bus, sibling);
> +    qbus_free(&bus->qbus);
>  }
>  
>  int pci_bus_num(PCIBus *s)
> @@ -1527,7 +1531,7 @@ PCIDevice *pci_nic_init_nofail(NICInfo *nd, const char *default_model,
>  
>  typedef struct {
>      PCIDevice dev;
> -    PCIBus bus;
> +    PCIBus *bus;
>      uint32_t vid;
>      uint32_t did;
>  } PCIBridge;
> @@ -1628,8 +1632,7 @@ static int pci_bridge_initfn(PCIDevice *dev)
>  static int pci_bridge_exitfn(PCIDevice *pci_dev)
>  {
>      PCIBridge *s = DO_UPCAST(PCIBridge, dev, pci_dev);
> -    PCIBus *bus = &s->bus;
> -    pci_unregister_secondary_bus(bus);
> +    pci_unregister_secondary_bus(s->bus);
>      return 0;
>  }
>  
> @@ -1646,8 +1649,8 @@ PCIBus *pci_bridge_init(PCIBus *bus, int devfn, bool multifunction,
>      qdev_init_nofail(&dev->qdev);
>  
>      s = DO_UPCAST(PCIBridge, dev, dev);
> -    pci_register_secondary_bus(bus, &s->bus, &s->dev, map_irq, name);
> -    return &s->bus;
> +    s->bus = pci_register_secondary_bus(bus, &s->dev, map_irq, name);
> +    return s->bus;
>  }
>  
>  PCIDevice *pci_bridge_get_device(PCIBus *bus)
> -- 
> 1.7.1.1

  reply	other threads:[~2010-07-06 12:24 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-02  2:30 [Qemu-devel] [PATCH 0/2] pci: split out bridge code into pci_bridge Isaku Yamahata
2010-07-02  2:30 ` [Qemu-devel] [PATCH 1/2] pci/bridge: allocate PCIBus dynamically for PCIBridge Isaku Yamahata
2010-07-06 12:18   ` Michael S. Tsirkin [this message]
2010-07-07  2:38     ` [Qemu-devel] " Isaku Yamahata
2010-07-07 11:47       ` Michael S. Tsirkin
2010-07-08  6:39         ` Isaku Yamahata
2010-07-08 14:04       ` Michael S. Tsirkin
2010-07-08 15:43         ` Isaku Yamahata
2010-07-08 16:49           ` Michael S. Tsirkin
2010-07-09  2:07             ` Isaku Yamahata
2010-07-16  1:46             ` Isaku Yamahata
2010-07-16  7:35               ` Michael S. Tsirkin
2010-07-02  2:30 ` [Qemu-devel] [PATCH 2/2] pci/bridge: split out pci bridge code into pci_bridge.c from pci.c Isaku Yamahata

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=20100706121852.GA20208@redhat.com \
    --to=mst@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yamahata@valinux.co.jp \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).