pci: set PCI memory enable before mapping PCI BAR
This change mitigates software faults issued by some versions of the linux kernel vfio-pci driver when VF PCI BARs are used without setting the memory enable bit in the PCI configuration. This problem is mentionned in https://lkml.org/lkml/2020/6/25/628 Change-Id: Idc177be4a5adb6ee467b4dd8f055f133ff267fe1 Type: improvement Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
This commit is contained in:

committed by
Damjan Marion

parent
8950c27255
commit
70fc36f268
@ -1134,9 +1134,21 @@ vlib_pci_map_region_int (vlib_main_t * vm, vlib_pci_dev_handle_t h,
|
||||
clib_error_t *error;
|
||||
int flags = MAP_SHARED;
|
||||
u64 size = 0, offset = 0;
|
||||
u16 command;
|
||||
|
||||
pci_log_debug (vm, p, "map region %u to va %p", bar, addr);
|
||||
|
||||
if ((error = vlib_pci_read_config_u16 (vm, h, 4, &command)))
|
||||
return error;
|
||||
|
||||
if (!(command & PCI_COMMAND_MEMORY))
|
||||
{
|
||||
pci_log_debug (vm, p, "setting memory enable bit");
|
||||
command |= PCI_COMMAND_MEMORY;
|
||||
if ((error = vlib_pci_write_config_u16 (vm, h, 4, &command)))
|
||||
return error;
|
||||
}
|
||||
|
||||
if ((error = vlib_pci_region (vm, h, bar, &fd, &size, &offset)))
|
||||
return error;
|
||||
|
||||
|
Reference in New Issue
Block a user