Merge branch 'pci/virtualization'
- Cache VF config space size to optimize enumeration of many VFs (KarimAllah Ahmed) - Remove unnecessary <linux/pci-ats.h> include (Bjorn Helgaas) * pci/virtualization: PCI/IOV: Remove unnecessary include of <linux/pci-ats.h> PCI/IOV: Use VF0 cached config space size for other VFs
This commit is contained in:
Коммит
eff81b6f7b
|
@ -13,7 +13,6 @@
|
|||
#include <linux/export.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pci-ats.h>
|
||||
#include "pci.h"
|
||||
|
||||
#define VIRTFN_ID_LEN 16
|
||||
|
@ -133,6 +132,8 @@ static void pci_read_vf_config_common(struct pci_dev *virtfn)
|
|||
&physfn->sriov->subsystem_vendor);
|
||||
pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,
|
||||
&physfn->sriov->subsystem_device);
|
||||
|
||||
physfn->sriov->cfg_size = pci_cfg_space_size(virtfn);
|
||||
}
|
||||
|
||||
int pci_iov_add_virtfn(struct pci_dev *dev, int id)
|
||||
|
|
|
@ -290,6 +290,7 @@ struct pci_sriov {
|
|||
u16 driver_max_VFs; /* Max num VFs driver supports */
|
||||
struct pci_dev *dev; /* Lowest numbered PF */
|
||||
struct pci_dev *self; /* This PF */
|
||||
u32 cfg_size; /* VF config space size */
|
||||
u32 class; /* VF device */
|
||||
u8 hdr_type; /* VF header type */
|
||||
u16 subsystem_vendor; /* VF subsystem vendor */
|
||||
|
|
|
@ -1439,12 +1439,29 @@ static int pci_cfg_space_size_ext(struct pci_dev *dev)
|
|||
return PCI_CFG_SPACE_EXP_SIZE;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
static bool is_vf0(struct pci_dev *dev)
|
||||
{
|
||||
if (pci_iov_virtfn_devfn(dev->physfn, 0) == dev->devfn &&
|
||||
pci_iov_virtfn_bus(dev->physfn, 0) == dev->bus->number)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
int pci_cfg_space_size(struct pci_dev *dev)
|
||||
{
|
||||
int pos;
|
||||
u32 status;
|
||||
u16 class;
|
||||
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
/* Read cached value for all VFs except for VF0 */
|
||||
if (dev->is_virtfn && !is_vf0(dev))
|
||||
return dev->physfn->sriov->cfg_size;
|
||||
#endif
|
||||
|
||||
if (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_EXTCFG)
|
||||
return PCI_CFG_SPACE_SIZE;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче