diff mbox

pci: pass bridge update to secondary bus

Message ID 20100706112327.GA20108@redhat.com
State New
Headers show

Commit Message

Michael S. Tsirkin July 6, 2010, 11:23 a.m. UTC
bridge config write should trigger updates
on the secondary bus. never on the primary bus.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---

Compile-tested only.
Isaku Yamahata, could you review this please?
You wrote the code, and you seem to have some bridged setups.

 hw/pci.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

Comments

Isaku Yamahata July 7, 2010, 2:04 a.m. UTC | #1
On Tue, Jul 06, 2010 at 02:23:27PM +0300, Michael S. Tsirkin wrote:
> bridge config write should trigger updates
> on the secondary bus. never on the primary bus.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> 
> Compile-tested only.
> Isaku Yamahata, could you review this please?
> You wrote the code, and you seem to have some bridged setups.

The code looks good.

Should PCIBridge::bus be renamed to something like
PCIBridge::secondary_bus (or sec_bus for short) in order
to avoid confusion?
The redundant local variable, secondary_bus, was deliberately
introduced to emphasize that it's a secondary bus.
And I was confused by that.
Anyway such a change should be done by another patch.

> 
>  hw/pci.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 926cf63..011d83e 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -1513,7 +1513,9 @@ static void pci_bridge_write_config(PCIDevice *d,
>          /* memory base/limit, prefetchable base/limit and
>             io base/limit upper 16 */
>          ranges_overlap(address, len, PCI_MEMORY_BASE, 20)) {
> -        pci_bridge_update_mappings(d->bus);
> +        PCIBridge *s = container_of(d, PCIBridge, dev);
> +        PCIBus *secondary_bus = &s->bus;
> +        pci_bridge_update_mappings(secondary_bus);
>      }
>  }
>  
> -- 
> 1.7.2.rc0.14.g41c1c
>
Blue Swirl July 7, 2010, 5:31 p.m. UTC | #2
On Tue, Jul 6, 2010 at 11:23 AM, Michael S. Tsirkin <mst@redhat.com> wrote:
> bridge config write should trigger updates
> on the secondary bus. never on the primary bus.

If this is true, shouldn't updates happen on all buses from secondary
to subordinate? Do we know which of these are immediately below
primary bus?

>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>
> Compile-tested only.
> Isaku Yamahata, could you review this please?
> You wrote the code, and you seem to have some bridged setups.
>
>  hw/pci.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/hw/pci.c b/hw/pci.c
> index 926cf63..011d83e 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -1513,7 +1513,9 @@ static void pci_bridge_write_config(PCIDevice *d,
>         /* memory base/limit, prefetchable base/limit and
>            io base/limit upper 16 */
>         ranges_overlap(address, len, PCI_MEMORY_BASE, 20)) {
> -        pci_bridge_update_mappings(d->bus);
> +        PCIBridge *s = container_of(d, PCIBridge, dev);
> +        PCIBus *secondary_bus = &s->bus;
> +        pci_bridge_update_mappings(secondary_bus);
>     }
>  }
>
> --
> 1.7.2.rc0.14.g41c1c
>
>
Michael S. Tsirkin July 7, 2010, 5:36 p.m. UTC | #3
On Wed, Jul 07, 2010 at 05:31:39PM +0000, Blue Swirl wrote:
> On Tue, Jul 6, 2010 at 11:23 AM, Michael S. Tsirkin <mst@redhat.com> wrote:
> > bridge config write should trigger updates
> > on the secondary bus. never on the primary bus.
> 
> If this is true, shouldn't updates happen on all buses from secondary
> to subordinate? Do we know which of these are immediately below
> primary bus?

pci_bridge_update_mappings does this already.

> >
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> >
> > Compile-tested only.
> > Isaku Yamahata, could you review this please?
> > You wrote the code, and you seem to have some bridged setups.
> >
> >  hw/pci.c |    4 +++-
> >  1 files changed, 3 insertions(+), 1 deletions(-)
> >
> > diff --git a/hw/pci.c b/hw/pci.c
> > index 926cf63..011d83e 100644
> > --- a/hw/pci.c
> > +++ b/hw/pci.c
> > @@ -1513,7 +1513,9 @@ static void pci_bridge_write_config(PCIDevice *d,
> >         /* memory base/limit, prefetchable base/limit and
> >            io base/limit upper 16 */
> >         ranges_overlap(address, len, PCI_MEMORY_BASE, 20)) {
> > -        pci_bridge_update_mappings(d->bus);
> > +        PCIBridge *s = container_of(d, PCIBridge, dev);
> > +        PCIBus *secondary_bus = &s->bus;
> > +        pci_bridge_update_mappings(secondary_bus);
> >     }
> >  }
> >
> > --
> > 1.7.2.rc0.14.g41c1c
> >
> >
Michael S. Tsirkin July 8, 2010, 1:25 p.m. UTC | #4
On Wed, Jul 07, 2010 at 11:04:51AM +0900, Isaku Yamahata wrote:
> On Tue, Jul 06, 2010 at 02:23:27PM +0300, Michael S. Tsirkin wrote:
> > bridge config write should trigger updates
> > on the secondary bus. never on the primary bus.
> > 
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> > 
> > Compile-tested only.
> > Isaku Yamahata, could you review this please?
> > You wrote the code, and you seem to have some bridged setups.
> 
> The code looks good.
> 
> Should PCIBridge::bus be renamed to something like
> PCIBridge::secondary_bus (or sec_bus for short) in order
> to avoid confusion?
> The redundant local variable, secondary_bus, was deliberately
> introduced to emphasize that it's a secondary bus.
> And I was confused by that.
> Anyway such a change should be done by another patch.

Sure. Send a patch.

> > 
> >  hw/pci.c |    4 +++-
> >  1 files changed, 3 insertions(+), 1 deletions(-)
> > 
> > diff --git a/hw/pci.c b/hw/pci.c
> > index 926cf63..011d83e 100644
> > --- a/hw/pci.c
> > +++ b/hw/pci.c
> > @@ -1513,7 +1513,9 @@ static void pci_bridge_write_config(PCIDevice *d,
> >          /* memory base/limit, prefetchable base/limit and
> >             io base/limit upper 16 */
> >          ranges_overlap(address, len, PCI_MEMORY_BASE, 20)) {
> > -        pci_bridge_update_mappings(d->bus);
> > +        PCIBridge *s = container_of(d, PCIBridge, dev);
> > +        PCIBus *secondary_bus = &s->bus;
> > +        pci_bridge_update_mappings(secondary_bus);
> >      }
> >  }
> >  
> > -- 
> > 1.7.2.rc0.14.g41c1c
> > 
> 
> -- 
> yamahata
diff mbox

Patch

diff --git a/hw/pci.c b/hw/pci.c
index 926cf63..011d83e 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -1513,7 +1513,9 @@  static void pci_bridge_write_config(PCIDevice *d,
         /* memory base/limit, prefetchable base/limit and
            io base/limit upper 16 */
         ranges_overlap(address, len, PCI_MEMORY_BASE, 20)) {
-        pci_bridge_update_mappings(d->bus);
+        PCIBridge *s = container_of(d, PCIBridge, dev);
+        PCIBus *secondary_bus = &s->bus;
+        pci_bridge_update_mappings(secondary_bus);
     }
 }