Re: [PATCH 0/7] disable bridge ari forwarding after connected ari device hot removed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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(-)
>>
>>
>>
>> .
>>
> 
> 
> 
> .
> 


-- 
Thanks!
Yijing

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux