All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Isaku Yamahata <yamahata@valinux.co.jp>
Cc: skandasa@cisco.com, etmartin@cisco.com, wexu2@cisco.com,
	qemu-devel@nongnu.org, kraxel@redhat.com, pbonzini@redhat.com
Subject: [Qemu-devel] Re: [PATCH v2 0/6] qdev reset refactoring and pci bus reset
Date: Wed, 24 Nov 2010 12:59:43 +0200	[thread overview]
Message-ID: <20101124105943.GD23493@redhat.com> (raw)
In-Reply-To: <20101124071514.GA5118@valinux.co.jp>

On Wed, Nov 24, 2010 at 04:15:14PM +0900, Isaku Yamahata wrote:
> On Wed, Nov 24, 2010 at 07:27:58AM +0200, Michael S. Tsirkin wrote:
> > Right. So let's add an inline helper to avoid code duplication here?
> > 
> > pci: fix bus walk under secondary bus reset
> > 
> > Take into account secondary bus reset bit for
> > bus walk: devices behind a reset bus should not
> > respond to configuration cycles.
> > 
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > 
> > 
> > diff --git a/hw/pci.c b/hw/pci.c
> > index d02f980..0c15b13 100644
> > --- a/hw/pci.c
> > +++ b/hw/pci.c
> > @@ -1540,6 +1540,16 @@ void pci_bridge_update_mappings(PCIBus *b)
> >      }
> >  }
> >  
> > +/* Whether a given bus number is in range of the secondary
> > + * bus of the given bridge device. */
> > +static bool pci_secondary_bus_in_range(PCIDevice *dev, int bus_num)
> > +{
> > +    return !(pci_get_word(dev->config + PCI_BRIDGE_CONTROL) &
> > +             PCI_BRIDGE_CTL_BUS_RESET) /* Don't walk the bus if it's reset. */ &&
> > +        dev->config[PCI_SECONDARY_BUS] < bus_num &&
> > +        bus_num <= dev->config[PCI_SUBORDINATE_BUS];
> > +}
> > +
> >  PCIBus *pci_find_bus(PCIBus *bus, int bus_num)
> >  {
> >      PCIBus *sec;
> > @@ -1552,20 +1562,21 @@ PCIBus *pci_find_bus(PCIBus *bus, int bus_num)
> >          return bus;
> >      }
> >  
> > +    /* Consider all bus numbers in range for the host pci bridge. */
> > +    if (bus->parent_dev &&
> > +        !pci_secondary_bus_in_range(bus->parent_dev, bus_num)) {
> > +        return NULL;
> > +    }
> > +
> >      /* try child bus */
> > -    if (!bus->parent_dev /* host pci bridge */ ||
> > -        (bus->parent_dev->config[PCI_SECONDARY_BUS] < bus_num &&
> > -         bus_num <= bus->parent_dev->config[PCI_SUBORDINATE_BUS])) {
> > -        for (; bus; bus = sec) {
> > -            QLIST_FOREACH(sec, &bus->child, sibling) {
> > -                assert(sec->parent_dev);
> > -                if (sec->parent_dev->config[PCI_SECONDARY_BUS] == bus_num) {
> > -                    return sec;
> > -                }
> > -                if (sec->parent_dev->config[PCI_SECONDARY_BUS] < bus_num &&
> > -                    bus_num <= sec->parent_dev->config[PCI_SUBORDINATE_BUS]) {
> > -                    break;
> > -                }
> > +    for (; bus; bus = sec) {
> > +        QLIST_FOREACH(sec, &bus->child, sibling) {
> > +            assert(sec->parent_dev);
> > +            if (sec->parent_dev->config[PCI_SECONDARY_BUS] == bus_num) {
> > +                return sec;
> > +            }
> > +            if (pci_secondary_bus_in_range(sec->parent_dev, bus_num)) {
> 
> This condition should be "if (!pci_...)"

Why? We are looking for a device on the given bus that claims the given
bus_num.  If we find one, break out of the inner loop and walk down to
the child.

> 
> > +                break;
> >              }
> >          }
> >      }
> > 
> > > -- 
> > > yamahata
> > 
> 
> -- 
> yamahata

  reply	other threads:[~2010-11-24 11:00 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-19  9:55 [Qemu-devel] [PATCH v2 0/6] qdev reset refactoring and pci bus reset Isaku Yamahata
2010-11-19  9:55 ` [Qemu-devel] [PATCH v2 1/6] qbus: add functions to walk both devices and busses Isaku Yamahata
2010-11-19  9:55 ` [Qemu-devel] [PATCH v2 2/6] qdev: reset qdev along with qdev tree Isaku Yamahata
2010-12-16 19:31   ` Stefan Weil
2010-12-16 23:48     ` Michael S. Tsirkin
2010-12-17  0:24       ` Anthony Liguori
2010-12-17 14:45         ` Peter Maydell
2010-12-17 14:56           ` Anthony Liguori
2010-12-20 12:58             ` Markus Armbruster
2010-12-20 19:40               ` Stefan Weil
2010-12-20 21:01                 ` Markus Armbruster
2010-12-17  4:29     ` Isaku Yamahata
2010-12-17  4:47       ` Isaku Yamahata
2010-12-18 18:11         ` Stefan Weil
2010-12-19 13:25           ` Michael S. Tsirkin
2010-11-19  9:56 ` [Qemu-devel] [PATCH v2 3/6] qdev: introduce reset call back for qbus level Isaku Yamahata
2010-11-19  9:56 ` [Qemu-devel] [PATCH v2 4/6] qdev: introduce a helper function which triggers reset from a given device Isaku Yamahata
2010-11-19  9:56 ` [Qemu-devel] [PATCH v2 5/6] pci: make use of qdev reset frame work to pci bus reset Isaku Yamahata
2010-11-19  9:56 ` [Qemu-devel] [PATCH v2 6/6] pci bridge: implement secondary " Isaku Yamahata
2010-11-19 12:00   ` [Qemu-devel] " Michael S. Tsirkin
2010-11-22  7:54 ` [Qemu-devel] Re: [PATCH v2 0/6] qdev reset refactoring and pci " Michael S. Tsirkin
2010-11-22 10:43   ` Isaku Yamahata
2010-11-22 10:54     ` Michael S. Tsirkin
2010-11-22 22:53     ` Michael S. Tsirkin
2010-11-23 18:10       ` Michael S. Tsirkin
2010-11-24  2:37         ` Isaku Yamahata
2010-11-24  5:27           ` Michael S. Tsirkin
2010-11-24  7:15             ` Isaku Yamahata
2010-11-24 10:59               ` Michael S. Tsirkin [this message]
2010-11-24 11:09                 ` 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=20101124105943.GD23493@redhat.com \
    --to=mst@redhat.com \
    --cc=etmartin@cisco.com \
    --cc=kraxel@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=skandasa@cisco.com \
    --cc=wexu2@cisco.com \
    --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 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.