From: Jiang Liu <jiang.liu@huawei.com>
To: Yijing Wang <wangyijing@huawei.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Hanjun Guo <guohanjun@huawei.com>, <linux-pci@vger.kernel.org>,
Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH 0/7] disable bridge ari forwarding after connected ari device hot removed
Date: Tue, 9 Oct 2012 15:51:08 +0800 [thread overview]
Message-ID: <5073D76C.9090304@huawei.com> (raw)
In-Reply-To: <5073D56C.40705@huawei.com>
When scanning PCI devices for hot-add, it guarantee function 0 is scanned
at first. And when destroying PCI devices for hot-removal, we also need to
destroy function 0 at last, but currently there's no such guarantees.
On 2012-10-9 15:42, Yijing Wang wrote:
> On 2012/10/9 11:42, Jiang Liu wrote:
>> How about this patch, which disables ARI when adding new PCI devices?
>> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
>> index 5485883..c841aa6 100644
>> --- a/drivers/pci/pci.c
>> +++ b/drivers/pci/pci.c
>> @@ -2016,13 +2016,14 @@ void pci_free_cap_save_buffers(struct pci_dev *dev)
>> void pci_enable_ari(struct pci_dev *dev)
>> {
>
> I think it's ok. Delay to disable ARI until next hot add is safe.
> Maybe rename as pci_configure_ari is better.
>
>> u32 cap;
>> + bool enable = true;
>> struct pci_dev *bridge;
>>
>> if (pcie_ari_disabled || !pci_is_pcie(dev) || dev->devfn)
>> return;
>>
>> if (!pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI))
>> - return;
>> + enable = false;
>>
>> bridge = dev->bus->self;
>> if (!bridge)
>> @@ -2032,8 +2033,15 @@ void pci_enable_ari(struct pci_dev *dev)
>> if (!(cap & PCI_EXP_DEVCAP2_ARI))
>> return;
>>
>> - pcie_capability_set_word(bridge, PCI_EXP_DEVCTL2, PCI_EXP_DEVCTL2_ARI);
>> - bridge->ari_enabled = 1;
>> + if (enable) {
>> + pcie_capability_set_word(bridge, PCI_EXP_DEVCTL2,
>> + PCI_EXP_DEVCTL2_ARI);
>> + bridge->ari_enabled = 1;
>> + } else {
>> + pcie_capability_clear_word(bridge, PCI_EXP_DEVCTL2,
>> + PCI_EXP_DEVCTL2_ARI);
>> + bridge->ari_enabled = 0;
>> + }
>> }
>>
>> /**
>>
>> On 2012-10-9 11:03, Yijing Wang wrote:
>>> pci_enable_ari will be called if an ARI pci device found, then set its bridge ARI Forwarding Enable
>>> bit in Device Control 2 Register. But the bridge ARI Forwarding Enable bit will never be cleared
>>> when an ARI device hot removed.
>>>
>>> my steps:
>>> 1. Hot add an ARI pci device;
>>> 2. Hot remove the ARI pci device;
>>> 3. Hot add an non ARI pci device;
>>>
>>> In this case, after setp 3, we could only find fun 0 of non ARI pci device because of its bridge ARI Forwarding Enable
>>> bit set.
>>>
>>> As PCIe Spec 2.0(6.13/441) recommends:
>>> "Following a hot-plug event below a Downstream Port, it is strongly recommended that software
>>> Clear the ARI Forwarding Enable bit in the Downstream Port until software determines that a
>>> newly added component is in fact an ARI Device"
>>>
>>> This series of patches fix this problem.
>>>
>>> Yijing Wang (7):
>>> PCI: rework pci_enable_ari for support disable ari forwarding
>>> PCI, acpiphp: disable ARI forwarding for acpiphp
>>> PCI, pciehp: disable ARI forwarding for pciehp
>>> PCI, cpqphp: disable ARI forwarding for cpqphp
>>> PCI, shpchp: disable ARI forwarding for shpchp
>>> PCI, sgi: disable ARI forwarding for sgiphp
>>> PCI, ibmphp: disable ARI forwarding for ibmphp
>>>
>>> drivers/pci/hotplug/acpiphp_glue.c | 1 +
>>> drivers/pci/hotplug/cpci_hotplug_pci.c | 1 +
>>> drivers/pci/hotplug/cpqphp_pci.c | 1 +
>>> drivers/pci/hotplug/ibmphp_core.c | 1 +
>>> drivers/pci/hotplug/pciehp_pci.c | 1 +
>>> drivers/pci/hotplug/sgi_hotplug.c | 1 +
>>> drivers/pci/hotplug/shpchp_pci.c | 1 +
>>> drivers/pci/pci.c | 16 +++++++++++-----
>>> drivers/pci/pci.h | 2 +-
>>> drivers/pci/probe.c | 2 +-
>>> 10 files changed, 20 insertions(+), 7 deletions(-)
>>>
>>>
>>>
>>> .
>>>
>>
>>
>>
>> .
>>
>
>
next prev parent reply other threads:[~2012-10-09 7:52 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-09 3:03 [PATCH 0/7] disable bridge ari forwarding after connected ari device hot removed Yijing Wang
2012-10-09 3:03 ` [PATCH 1/7] PCI: rework pci_enable_ari for support disable ari forwarding Yijing Wang
2012-10-09 3:03 ` [PATCH 2/7] PCI, acpiphp: disable ARI forwarding for acpiphp Yijing Wang
2012-10-09 3:03 ` [PATCH 3/7] PCI, pciehp: disable ARI forwarding for pciehp Yijing Wang
2012-10-09 3:03 ` [PATCH 4/7] PCI, cpqphp: disable ARI forwarding for cpqphp Yijing Wang
2012-10-09 3:03 ` [PATCH 5/7] PCI, shpchp: disable ARI forwarding for shpchp Yijing Wang
2012-10-09 3:03 ` [PATCH 6/7] PCI, sgi: disable ARI forwarding for sgiphp Yijing Wang
2012-10-09 3:03 ` [PATCH 7/7] PCI, ibmphp: disable ARI forwarding for ibmphp Yijing Wang
2012-10-09 3:08 ` [PATCH 0/7] disable bridge ari forwarding after connected ari device hot removed Jiang Liu
2012-10-09 3:15 ` Yijing Wang
2012-10-09 3:42 ` Jiang Liu
2012-10-09 7:42 ` Yijing Wang
2012-10-09 7:51 ` Jiang Liu [this message]
2012-10-09 8:14 ` Yijing Wang
2012-10-09 8:16 ` Jiang Liu
2012-10-09 8:47 ` Jiang Liu
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=5073D76C.9090304@huawei.com \
--to=jiang.liu@huawei.com \
--cc=bhelgaas@google.com \
--cc=guohanjun@huawei.com \
--cc=linux-pci@vger.kernel.org \
--cc=wangyijing@huawei.com \
--cc=yinghai@kernel.org \
/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.