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: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12208 Reviewed-by: Tom Nabarro <tom.nabarro@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
f9fccbae63
commit
91aee82d74
@ -1125,8 +1125,8 @@ vmd_reset_root_ports(struct vmd_pci_bus *bus)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
header = (volatile void *)(bus->vmd->cfg_vaddr + CONFIG_OFFSET_ADDR(bus->bus_number,
|
header = (volatile void *)(bus->vmd->cfg_vaddr +
|
||||||
devfn, 0, 0));
|
CONFIG_OFFSET_ADDR(bus->config_bus_number, devfn, 0, 0));
|
||||||
if (vmd_device_is_root_port(header) && !vmd_device_is_enumerated(header)) {
|
if (vmd_device_is_root_port(header) && !vmd_device_is_enumerated(header)) {
|
||||||
vmd_reset_base_limit_registers(header);
|
vmd_reset_base_limit_registers(header);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user