projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
06dc660
)
PCI: Do not enable AtomicOps on VFs
author
Selvin Xavier
<selvin.xavier@broadcom.com>
Sat, 11 Sep 2021 10:03:05 +0000
(
03:03
-0700)
committer
Bjorn Helgaas
<bhelgaas@google.com>
Thu, 4 Nov 2021 18:41:37 +0000
(13:41 -0500)
Host crashes when pci_enable_atomic_ops_to_root() is called for VFs with
virtual buses. The virtual buses added to SR-IOV have bus->self set to NULL
and host crashes due to this.
PID: 4481 TASK:
ffff89c6941b0000
CPU: 53 COMMAND: "bash"
...
#3 [
ffff9a9481713808
] oops_end at
ffffffffb9025cd6
#4 [
ffff9a9481713828
] page_fault_oops at
ffffffffb906e417
#5 [
ffff9a9481713888
] exc_page_fault at
ffffffffb9a0ad14
#6 [
ffff9a94817138b0
] asm_exc_page_fault at
ffffffffb9c00ace
[exception RIP: pcie_capability_read_dword+28]
RIP:
ffffffffb952fd5c
RSP:
ffff9a9481713960
RFLAGS:
00010246
RAX:
0000000000000001
RBX:
ffff89c6b1096000
RCX:
0000000000000000
RDX:
ffff9a9481713990
RSI:
0000000000000024
RDI:
0000000000000000
RBP:
0000000000000080
R8:
0000000000000008
R9:
ffff89c64341a2f8
R10:
0000000000000002
R11:
0000000000000000
R12:
ffff89c648bab000
R13:
0000000000000000
R14:
0000000000000000
R15:
ffff89c648bab0c8
ORIG_RAX:
ffffffffffffffff
CS: 0010 SS: 0018
#7 [
ffff9a9481713988
] pci_enable_atomic_ops_to_root at
ffffffffb95359a6
#8 [
ffff9a94817139c0
] bnxt_qplib_determine_atomics at
ffffffffc08c1a33
[bnxt_re]
#9 [
ffff9a94817139d0
] bnxt_re_dev_init at
ffffffffc08ba2d1
[bnxt_re]
Per PCIe r5.0, sec 9.3.5.10, the AtomicOp Requester Enable bit in Device
Control 2 is reserved for VFs. The PF value applies to all associated VFs.
Return -EINVAL if pci_enable_atomic_ops_to_root() is called for a VF.
Link:
https://lore.kernel.org/r/1631354585-16597-1-git-send-email-selvin.xavier@broadcom.com
Fixes: 35f5ace5dea4 ("RDMA/bnxt_re: Enable global atomic ops if platform supports")
Fixes: 430a23689dea ("PCI: Add pci_enable_atomic_ops_to_root()")
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
drivers/pci/pci.c
patch
|
blob
|
history
diff --git
a/drivers/pci/pci.c
b/drivers/pci/pci.c
index c63598c1cdd8534290b05f60c08431a066a13dd9..e55d944ff30f17467e685be14904e68960d4b33e 100644
(file)
--- a/
drivers/pci/pci.c
+++ b/
drivers/pci/pci.c
@@
-3719,6
+3719,14
@@
int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask)
struct pci_dev *bridge;
u32 cap, ctl2;
+ /*
+ * Per PCIe r5.0, sec 9.3.5.10, the AtomicOp Requester Enable bit
+ * in Device Control 2 is reserved in VFs and the PF value applies
+ * to all associated VFs.
+ */
+ if (dev->is_virtfn)
+ return -EINVAL;
+
if (!pci_is_pcie(dev))
return -EINVAL;