mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
PCI/P2PDMA: Add Intel Haswell client host bridge to allowlist
P2P DMA between two devices that do not share an upstream bridge is only
permitted when the traffic goes through a host bridge that is listed in
pci_p2pdma_whitelist[] with REQ_SAME_HOST_BRIDGE.
The Haswell client host bridge (8086:0c08, e.g. H97/H87/B85) is not in that
list, and cpu_supports_p2pdma() returns false on Intel, so
calc_map_type_and_dist() refuses P2P for any pair of devices behind
different root ports of the same host bridge, even though that root complex
handles the traffic correctly.
Measured on an ASUS H97-PRO with a Xeon E3-1231 v3 (Haswell, 8086:0c08 at
00:00.0) and two GPUs on separate root ports of that host bridge (00:01.0
and 00:1c.4):
- pci_p2pdma_distance() < 0 before the change; peer access granted after
(amdgpu stops reporting "PCIe P2P access ... is not supported by the
chipset" and hipDeviceCanAccessPeer() returns true in both directions)
- 10 KB cross-device copy: 62-75 us vs 130-131 us host-staged (~2x)
- 512 MB cross-device copy verified byte-wise against a known buffer:
no corruption
- tensor-parallel LLM inference (>25 GB model across both GPUs):
+53% tokens/s
REQ_SAME_HOST_BRIDGE is the correct flag here: the two devices share the
upstream bridge (two root ports of one host bridge) rather than sitting
behind a PCIe switch.
This entry only permits P2P DMA to be used on this platform, it does not
force it: the existing checks on ACS redirect, on the map type and on
pci_p2pdma_distance() all still apply. Tested on one board only, so the
usual caveat applies - broad testing on other Haswell boards would be
needed before this can be considered generally safe.
Signed-off-by: Scott Lee <dsix123@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20261005132651.18368-1-dsix123@gmail.com
This commit is contained in:
parent
6a0b9a75b9
commit
0b9df403dd
|
|
@ -545,6 +545,8 @@ static const struct pci_p2pdma_whitelist_entry {
|
|||
/* Intel Xeon E7 v3/Xeon E5 v3/Core i7 */
|
||||
{PCI_VENDOR_ID_INTEL, 0x2f00, REQ_SAME_HOST_BRIDGE},
|
||||
{PCI_VENDOR_ID_INTEL, 0x2f01, REQ_SAME_HOST_BRIDGE},
|
||||
/* Intel Haswell (client) */
|
||||
{PCI_VENDOR_ID_INTEL, 0x0c08, REQ_SAME_HOST_BRIDGE},
|
||||
/* Intel Skylake-E */
|
||||
{PCI_VENDOR_ID_INTEL, 0x2030, 0},
|
||||
{PCI_VENDOR_ID_INTEL, 0x2031, 0},
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user