pci: ARI is a PCIe v2 feature
PATCH RESEND 1/1 pci: ARI is a PCIe v2 feature
The function pci_enable_ari() may mistakenly set the downstream port of a v1 PCIe switch in ARI Forwarding mode. This is a PCIe v2 feature, and with an SR-IOV device on that switch port believing the switch above is ARI capable it may attempt to use functions 8-255, translating into invalid (non-zero) device numbers for that bus. This has been seen to cause Completion Timeouts and general misbehaviour including hangs and panics.
---
drivers/pci/pci.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-)
drivers/pci/pci.c +6 -1
@@ -1905,7 +1905,7 @@ void pci_enable_ari(struct pci_dev *dev) {int pos;u32 cap; -u16 ctrl; +u16 flags, ctrl;struct pci_dev *bridge;if (!pci_is_pcie (dev) || dev->devfn)
@@ -1923,6 +1923,11 @@ void pci_enable_ari(struct pci_dev *dev)if (!pos)return ; +/* ARI is a PCIe v2 feature */ +pci_read_config_word (bridge, pos +PCI_EXP_FLAGS , &flags); +if ((flags &PCI_EXP_FLAGS_VERS ) <2 ) +return ; +pci_read_config_dword (bridge, pos +PCI_EXP_DEVCAP2 , &cap);if (!(cap &PCI_EXP_DEVCAP2_ARI ))return ;
Quoted 7 lines · On Wed, 13 Jul 2011 10:14:33 -0700 Chris Wright <[email protected]> wrote:
The function
pci_enable_ari()may mistakenly set the downstream port of a v1 PCIe switch in ARI Forwarding mode. This is a PCIe v2 feature, and with an SR-IOV device on that switch port believing the switch above is ARI capable it may attempt to use functions 8-255, translating into invalid (non-zero) device numbers for that bus. This has been seen to cause Completion Timeouts and general misbehaviour including hangs and panics.
Thanks Chris, your earlier one is still sitting in my queue, but I wasn't going to send it for 3.0 as it didn't seem that critical. Do you think it is? If so you can send it directly to Linus with my ack as I don't have anything else queued, or just wait until the merge window when it will be put into the stable tree as well.
Thanks,
Jesse
Quoted 11 lines · * Jesse Barnes ([email protected]) wrote:
Quoted 7 lines · On Wed, 13 Jul 2011 10:14:33 -0700 Chris Wright <[email protected]> wrote:
The function
pci_enable_ari()may mistakenly set the downstream port of a v1 PCIe switch in ARI Forwarding mode. This is a PCIe v2 feature, and with an SR-IOV device on that switch port believing the switch above is ARI capable it may attempt to use functions 8-255, translating into invalid (non-zero) device numbers for that bus. This has been seen to cause Completion Timeouts and general misbehaviour including hangs and panics.
Quoted 5 lines
Thanks Chris, your earlier one is still sitting in my queue, but I wasn't going to send it for 3.0 as it didn't seem that critical. Do you think it is? If so you can send it directly to Linus with my ack as I don't have anything else queued, or just wait until the merge window when it will be put into the stable tree as well.
Cool, just wanted to make sure it wasn't lost. I think it's fine to merge in next window and let it filter back to -stable. While I've seen it cause panics, it's not a regression and the conditions required are very specific (possibly including buggy BIOS).
thanks,
-chris
Jesse Barnes
AppliedQuoted 7 lines · On Wed, 13 Jul 2011 10:14:33 -0700 Chris Wright <[email protected]> wrote:
The function
pci_enable_ari()may mistakenly set the downstream port of a v1 PCIe switch in ARI Forwarding mode. This is a PCIe v2 feature, and with an SR-IOV device on that switch port believing the switch above is ARI capable it may attempt to use functions 8-255, translating into invalid (non-zero) device numbers for that bus. This has been seen to cause Completion Timeouts and general misbehaviour including hangs and panics.
Applied, thanks.
Signature · 1 line
Jesse Barnes, Intel Open Source Technology Center