diff options
author | Yu Zhao <yu.zhao@intel.com> | 2009-05-18 01:51:33 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2009-05-18 06:25:58 -0400 |
commit | e277d2fc79d6abb86fafadb58dca0b9c498a9aa7 (patch) | |
tree | 6f7a6c5bf2b300bec9fa76266eeb9089dc82e651 /drivers/pci/pci.h | |
parent | 302b4215daa0a704c843da40fd2529e5757a72da (diff) |
PCI: handle Virtual Function ATS enabling
The SR-IOV spec requires that the Smallest Translation Unit and
the Invalidate Queue Depth fields in the Virtual Function ATS
capability are hardwired to 0. If a function is a Virtual Function,
then and set its Physical Function's STU before enabling the ATS.
Signed-off-by: Yu Zhao <yu.zhao@intel.com>
Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/pci/pci.h')
-rw-r--r-- | drivers/pci/pci.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 3c2ec64f78e9..f73bcbedf37c 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h | |||
@@ -234,6 +234,8 @@ struct pci_ats { | |||
234 | int pos; /* capability position */ | 234 | int pos; /* capability position */ |
235 | int stu; /* Smallest Translation Unit */ | 235 | int stu; /* Smallest Translation Unit */ |
236 | int qdep; /* Invalidate Queue Depth */ | 236 | int qdep; /* Invalidate Queue Depth */ |
237 | int ref_cnt; /* Physical Function reference count */ | ||
238 | int is_enabled:1; /* Enable bit is set */ | ||
237 | }; | 239 | }; |
238 | 240 | ||
239 | #ifdef CONFIG_PCI_IOV | 241 | #ifdef CONFIG_PCI_IOV |
@@ -255,7 +257,7 @@ extern int pci_ats_queue_depth(struct pci_dev *dev); | |||
255 | */ | 257 | */ |
256 | static inline int pci_ats_enabled(struct pci_dev *dev) | 258 | static inline int pci_ats_enabled(struct pci_dev *dev) |
257 | { | 259 | { |
258 | return !!dev->ats; | 260 | return dev->ats && dev->ats->is_enabled; |
259 | } | 261 | } |
260 | #else | 262 | #else |
261 | static inline int pci_iov_init(struct pci_dev *dev) | 263 | static inline int pci_iov_init(struct pci_dev *dev) |