diff mbox

PCI: Fix device node for virtual bus

Message ID 1415760163-12517-1-git-send-email-gwshan@linux.vnet.ibm.com (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Gavin Shan Nov. 12, 2014, 2:42 a.m. UTC
pci_set_bus_of_node() sets virtual PCI bus's device node to PHB's
device node wrongly. The patch fixes the issue.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 drivers/pci/of.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Bjorn Helgaas Nov. 12, 2014, 2:55 a.m. UTC | #1
On Tue, Nov 11, 2014 at 7:42 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
> pci_set_bus_of_node() sets virtual PCI bus's device node to PHB's
> device node wrongly. The patch fixes the issue.

This needs more detail.  How is this bug visible to users?  Is there a
bug report?  Is this a regression?  Should it be marked for stable?

We use "virtual bus" to refer to buses created for SR-IOV VFs that are
not on the same bus as the PF.  These virtual buses have no bridge
device leading to them.  But I think you're talking about something
totally different.  Or maybe that *is* what you're talking about,
since this patch resembles 2ba29e270e97 ("PCI: Use pci_is_root_bus()
to check for root bus").

Bjorn

> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
> ---
>  drivers/pci/of.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/of.c b/drivers/pci/of.c
> index f092993..7b2256b 100644
> --- a/drivers/pci/of.c
> +++ b/drivers/pci/of.c
> @@ -31,9 +31,9 @@ void pci_release_of_node(struct pci_dev *dev)
>
>  void pci_set_bus_of_node(struct pci_bus *bus)
>  {
> -       if (bus->self == NULL)
> +       if (pci_is_root_bus(bus))
>                 bus->dev.of_node = pcibios_get_phb_of_node(bus);
> -       else
> +       else if (bus->self)
>                 bus->dev.of_node = of_node_get(bus->self->dev.of_node);
>  }
>
> --
> 1.8.3.2
>
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Gavin Shan Nov. 12, 2014, 3:11 a.m. UTC | #2
On Tue, Nov 11, 2014 at 07:55:19PM -0700, Bjorn Helgaas wrote:
>On Tue, Nov 11, 2014 at 7:42 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>> pci_set_bus_of_node() sets virtual PCI bus's device node to PHB's
>> device node wrongly. The patch fixes the issue.
>
>This needs more detail.  How is this bug visible to users?  Is there a
>bug report?  Is this a regression?  Should it be marked for stable?
>

I don't have opened bug for it. I just found the problem (maybe not
a problem) when reading the code: The original implementation binds
PHB device-tree node with "virtual bus", which doesn't make sense.

Yes, I guess it should be marked for stable if you don't object.

>We use "virtual bus" to refer to buses created for SR-IOV VFs that are
>not on the same bus as the PF.  These virtual buses have no bridge
>device leading to them.  But I think you're talking about something
>totally different.  Or maybe that *is* what you're talking about,
>since this patch resembles 2ba29e270e97 ("PCI: Use pci_is_root_bus()
>to check for root bus").
>

"virtual bus" here is the buses created for SR-IOV VFs. Yes, the
code changes resembles commit 2ba29e270e97.

Thanks,
Gavin

>Bjorn
>
>> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
>> ---
>>  drivers/pci/of.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/pci/of.c b/drivers/pci/of.c
>> index f092993..7b2256b 100644
>> --- a/drivers/pci/of.c
>> +++ b/drivers/pci/of.c
>> @@ -31,9 +31,9 @@ void pci_release_of_node(struct pci_dev *dev)
>>
>>  void pci_set_bus_of_node(struct pci_bus *bus)
>>  {
>> -       if (bus->self == NULL)
>> +       if (pci_is_root_bus(bus))
>>                 bus->dev.of_node = pcibios_get_phb_of_node(bus);
>> -       else
>> +       else if (bus->self)
>>                 bus->dev.of_node = of_node_get(bus->self->dev.of_node);
>>  }
>>
>> --
>> 1.8.3.2
>>
>

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Nov. 12, 2014, 4:08 a.m. UTC | #3
On Tue, Nov 11, 2014 at 8:11 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
> On Tue, Nov 11, 2014 at 07:55:19PM -0700, Bjorn Helgaas wrote:
>>On Tue, Nov 11, 2014 at 7:42 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>>> pci_set_bus_of_node() sets virtual PCI bus's device node to PHB's
>>> device node wrongly. The patch fixes the issue.
>>
>>This needs more detail.  How is this bug visible to users?  Is there a
>>bug report?  Is this a regression?  Should it be marked for stable?
>>
>
> I don't have opened bug for it. I just found the problem (maybe not
> a problem) when reading the code: The original implementation binds
> PHB device-tree node with "virtual bus", which doesn't make sense.

Does this result in something being wrong in sysfs?  How is this bug
visible to users?

> Yes, I guess it should be marked for stable if you don't object.
>
>>We use "virtual bus" to refer to buses created for SR-IOV VFs that are
>>not on the same bus as the PF.  These virtual buses have no bridge
>>device leading to them.  But I think you're talking about something
>>totally different.  Or maybe that *is* what you're talking about,
>>since this patch resembles 2ba29e270e97 ("PCI: Use pci_is_root_bus()
>>to check for root bus").
>>
>
> "virtual bus" here is the buses created for SR-IOV VFs. Yes, the
> code changes resembles commit 2ba29e270e97.
>
> Thanks,
> Gavin
>
>>Bjorn
>>
>>> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
>>> ---
>>>  drivers/pci/of.c | 4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/pci/of.c b/drivers/pci/of.c
>>> index f092993..7b2256b 100644
>>> --- a/drivers/pci/of.c
>>> +++ b/drivers/pci/of.c
>>> @@ -31,9 +31,9 @@ void pci_release_of_node(struct pci_dev *dev)
>>>
>>>  void pci_set_bus_of_node(struct pci_bus *bus)
>>>  {
>>> -       if (bus->self == NULL)
>>> +       if (pci_is_root_bus(bus))
>>>                 bus->dev.of_node = pcibios_get_phb_of_node(bus);
>>> -       else
>>> +       else if (bus->self)
>>>                 bus->dev.of_node = of_node_get(bus->self->dev.of_node);
>>>  }
>>>
>>> --
>>> 1.8.3.2
>>>
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Gavin Shan Nov. 12, 2014, 5:24 a.m. UTC | #4
On Tue, Nov 11, 2014 at 09:08:23PM -0700, Bjorn Helgaas wrote:
>On Tue, Nov 11, 2014 at 8:11 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>> On Tue, Nov 11, 2014 at 07:55:19PM -0700, Bjorn Helgaas wrote:
>>>On Tue, Nov 11, 2014 at 7:42 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>>>> pci_set_bus_of_node() sets virtual PCI bus's device node to PHB's
>>>> device node wrongly. The patch fixes the issue.
>>>
>>>This needs more detail.  How is this bug visible to users?  Is there a
>>>bug report?  Is this a regression?  Should it be marked for stable?
>>>
>>
>> I don't have opened bug for it. I just found the problem (maybe not
>> a problem) when reading the code: The original implementation binds
>> PHB device-tree node with "virtual bus", which doesn't make sense.
>
>Does this result in something being wrong in sysfs?  How is this bug
>visible to users?
>

No, I don't think it caused anything wrong in sysfs. So I'm not sure
it's a real problem and need the fix. Please judge.

Thanks,
Gavin

>> Yes, I guess it should be marked for stable if you don't object.
>>
>>>We use "virtual bus" to refer to buses created for SR-IOV VFs that are
>>>not on the same bus as the PF.  These virtual buses have no bridge
>>>device leading to them.  But I think you're talking about something
>>>totally different.  Or maybe that *is* what you're talking about,
>>>since this patch resembles 2ba29e270e97 ("PCI: Use pci_is_root_bus()
>>>to check for root bus").
>>>
>>
>> "virtual bus" here is the buses created for SR-IOV VFs. Yes, the
>> code changes resembles commit 2ba29e270e97.
>>
>> Thanks,
>> Gavin
>>
>>>Bjorn
>>>
>>>> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
>>>> ---
>>>>  drivers/pci/of.c | 4 ++--
>>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/pci/of.c b/drivers/pci/of.c
>>>> index f092993..7b2256b 100644
>>>> --- a/drivers/pci/of.c
>>>> +++ b/drivers/pci/of.c
>>>> @@ -31,9 +31,9 @@ void pci_release_of_node(struct pci_dev *dev)
>>>>
>>>>  void pci_set_bus_of_node(struct pci_bus *bus)
>>>>  {
>>>> -       if (bus->self == NULL)
>>>> +       if (pci_is_root_bus(bus))
>>>>                 bus->dev.of_node = pcibios_get_phb_of_node(bus);
>>>> -       else
>>>> +       else if (bus->self)
>>>>                 bus->dev.of_node = of_node_get(bus->self->dev.of_node);
>>>>  }
>>>>
>>>> --
>>>> 1.8.3.2
>>>>
>>>
>>
>

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Nov. 12, 2014, 7:02 p.m. UTC | #5
On Tue, Nov 11, 2014 at 10:24 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
> On Tue, Nov 11, 2014 at 09:08:23PM -0700, Bjorn Helgaas wrote:
>>On Tue, Nov 11, 2014 at 8:11 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>>> On Tue, Nov 11, 2014 at 07:55:19PM -0700, Bjorn Helgaas wrote:
>>>>On Tue, Nov 11, 2014 at 7:42 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>>>>> pci_set_bus_of_node() sets virtual PCI bus's device node to PHB's
>>>>> device node wrongly. The patch fixes the issue.
>>>>
>>>>This needs more detail.  How is this bug visible to users?  Is there a
>>>>bug report?  Is this a regression?  Should it be marked for stable?
>>>>
>>>
>>> I don't have opened bug for it. I just found the problem (maybe not
>>> a problem) when reading the code: The original implementation binds
>>> PHB device-tree node with "virtual bus", which doesn't make sense.
>>
>>Does this result in something being wrong in sysfs?  How is this bug
>>visible to users?
>>
>
> No, I don't think it caused anything wrong in sysfs. So I'm not sure
> it's a real problem and need the fix. Please judge.

Well, that's not really the way I work.  If somebody proposes a patch,
I expect the changelog to be an argument for why the patch is needed.
I'm not disagreeing with your patch; I'm just trying to get you to
provide the justification for it.  I'm not an OF expert, so it's not
obvious to me.  I probably could spend some time researching it and
convince myself, but I would rather have *you* convince me :)

>>> Yes, I guess it should be marked for stable if you don't object.

Once we know what the user-visible effect of this change is, it will
probably be obvious whether it should be marked for stable.  If it
doesn't really fix anything, it probably should not go to stable.

Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Gavin Shan Nov. 13, 2014, 12:45 a.m. UTC | #6
On Wed, Nov 12, 2014 at 12:02:08PM -0700, Bjorn Helgaas wrote:
>On Tue, Nov 11, 2014 at 10:24 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>> On Tue, Nov 11, 2014 at 09:08:23PM -0700, Bjorn Helgaas wrote:
>>>On Tue, Nov 11, 2014 at 8:11 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>>>> On Tue, Nov 11, 2014 at 07:55:19PM -0700, Bjorn Helgaas wrote:
>>>>>On Tue, Nov 11, 2014 at 7:42 PM, Gavin Shan <gwshan@linux.vnet.ibm.com> wrote:
>>>>>> pci_set_bus_of_node() sets virtual PCI bus's device node to PHB's
>>>>>> device node wrongly. The patch fixes the issue.
>>>>>
>>>>>This needs more detail.  How is this bug visible to users?  Is there a
>>>>>bug report?  Is this a regression?  Should it be marked for stable?
>>>>>
>>>>
>>>> I don't have opened bug for it. I just found the problem (maybe not
>>>> a problem) when reading the code: The original implementation binds
>>>> PHB device-tree node with "virtual bus", which doesn't make sense.
>>>
>>>Does this result in something being wrong in sysfs?  How is this bug
>>>visible to users?
>>>
>>
>> No, I don't think it caused anything wrong in sysfs. So I'm not sure
>> it's a real problem and need the fix. Please judge.
>
>Well, that's not really the way I work.  If somebody proposes a patch,
>I expect the changelog to be an argument for why the patch is needed.
>I'm not disagreeing with your patch; I'm just trying to get you to
>provide the justification for it.  I'm not an OF expert, so it's not
>obvious to me.  I probably could spend some time researching it and
>convince myself, but I would rather have *you* convince me :)
>

Thank you for the detailed explaining. I'm trying to convince you.
Please drop it in case I fail :)

Basically, we have 3 types of buses with SR-IOV case inclusive:
(A) root bus leading from PHB; (B) normal bus leading from PCI
bridge; (C) virtual bus to hold SR-IOV VFs. A's device node is set
to PHB's device node and B's device node is equal to parent PCI
bridge's device node. So the device node of PCI bus is set that
one of parent device (either PHB or PCI bridge for A/B). For (C),
the bus's device node would be NULL, which is consistent with that
its parent device is NULL.

Kernel code can convert PCI bus to its corresponding device node
with function pci_bus_to_OF_node(). The code is usually unware
what type (PHB, PCI bridge or device) the device node is. With
current code, we poke the PHB device node for SR-IOV virtual buses.
and potentially wrong properties retrieved. I personally don't
think it's appropriate and it's worthy to have NULL device nodes
for those virtual buses.

>>>> Yes, I guess it should be marked for stable if you don't object.
>
>Once we know what the user-visible effect of this change is, it will
>probably be obvious whether it should be marked for stable.  If it
>doesn't really fix anything, it probably should not go to stable.
>

Yep, it's not good candidate for stable.

Thanks,
Gavin

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Nov. 20, 2014, 11:11 p.m. UTC | #7
On Wed, Nov 12, 2014 at 01:42:43PM +1100, Gavin Shan wrote:
> pci_set_bus_of_node() sets virtual PCI bus's device node to PHB's
> device node wrongly. The patch fixes the issue.
> 
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>

Applied to pci/misc for v3.19, thanks!

Thanks for explaining this to me.  It seems obvious now that I look at the
code.

> ---
>  drivers/pci/of.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/of.c b/drivers/pci/of.c
> index f092993..7b2256b 100644
> --- a/drivers/pci/of.c
> +++ b/drivers/pci/of.c
> @@ -31,9 +31,9 @@ void pci_release_of_node(struct pci_dev *dev)
>  
>  void pci_set_bus_of_node(struct pci_bus *bus)
>  {
> -	if (bus->self == NULL)
> +	if (pci_is_root_bus(bus))
>  		bus->dev.of_node = pcibios_get_phb_of_node(bus);
> -	else
> +	else if (bus->self)
>  		bus->dev.of_node = of_node_get(bus->self->dev.of_node);
>  }
>  
> -- 
> 1.8.3.2
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/pci/of.c b/drivers/pci/of.c
index f092993..7b2256b 100644
--- a/drivers/pci/of.c
+++ b/drivers/pci/of.c
@@ -31,9 +31,9 @@  void pci_release_of_node(struct pci_dev *dev)
 
 void pci_set_bus_of_node(struct pci_bus *bus)
 {
-	if (bus->self == NULL)
+	if (pci_is_root_bus(bus))
 		bus->dev.of_node = pcibios_get_phb_of_node(bus);
-	else
+	else if (bus->self)
 		bus->dev.of_node = of_node_get(bus->self->dev.of_node);
 }