Commit 91aee82d authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Tomasz Zawadzki
Browse files

vmd: use config_bus_number when resetting root ports



The config_bus_number is an offset within the config space reserved for
the devices behind the VMD, while bus_number refers to the actual bus
number assigned by VMD that depend on the VMCAP and VMCONFIG registers.
So, to access the mapped config space we have to use config_bus_number.

We didn't do that when resetting root ports', which could lead to
segfaults if these values were different, as we'd access unmapped
memory.

Fixes #2451

Change-Id: I4e7bbb81400462284014565099bec98f6171c8c9
Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12208


Reviewed-by: default avatarTom Nabarro <tom.nabarro@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent f9fccbae
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1125,8 +1125,8 @@ vmd_reset_root_ports(struct vmd_pci_bus *bus)
			continue;
		}

		header = (volatile void *)(bus->vmd->cfg_vaddr + CONFIG_OFFSET_ADDR(bus->bus_number,
					   devfn, 0, 0));
		header = (volatile void *)(bus->vmd->cfg_vaddr +
					   CONFIG_OFFSET_ADDR(bus->config_bus_number, devfn, 0, 0));
		if (vmd_device_is_root_port(header) && !vmd_device_is_enumerated(header)) {
			vmd_reset_base_limit_registers(header);
		}