forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'for-3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/…
…helgaas/pci Pull PCI update from Bjorn Helgaas: "Host bridge hotplug: - Untangle _PRT from struct pci_bus (Bjorn Helgaas) - Request _OSC control before scanning root bus (Taku Izumi) - Assign resources when adding host bridge (Yinghai Lu) - Remove root bus when removing host bridge (Yinghai Lu) - Remove _PRT during hot remove (Yinghai Lu) SRIOV - Add sysfs knobs to control numVFs (Don Dutile) Power management - Notify devices when power resource turned on (Huang Ying) Bug fixes - Work around broken _SEG on HP xw9300 (Bjorn Helgaas) - Keep runtime PM enabled for unbound PCI devices (Huang Ying) - Fix Optimus dual-GPU runtime D3 suspend issue (Dave Airlie) - Fix xen frontend shutdown issue (David Vrabel) - Work around PLX PCI 9050 BAR alignment erratum (Ian Abbott) Miscellaneous - Add GPL license for drivers/pci/ioapic (Andrew Cooks) - Add standard PCI-X, PCIe ASPM register #defines (Bjorn Helgaas) - NumaChip remote PCI support (Daniel Blueman) - Fix PCIe Link Capabilities Supported Link Speed definition (Jingoo Han) - Convert dev_printk() to dev_info(), etc (Joe Perches) - Add support for non PCI BAR ROM data (Matthew Garrett) - Add x86 support for host bridge translation offset (Mike Yoknis) - Report success only when every driver supports AER (Vijay Pandarathil)" Fix up trivial conflicts. * tag 'for-3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (48 commits) PCI: Use phys_addr_t for physical ROM address x86/PCI: Add NumaChip remote PCI support ath9k: Use standard #defines for PCIe Capability ASPM fields iwlwifi: Use standard #defines for PCIe Capability ASPM fields iwlwifi: collapse wrapper for pcie_capability_read_word() iwlegacy: Use standard #defines for PCIe Capability ASPM fields iwlegacy: collapse wrapper for pcie_capability_read_word() cxgb3: Use standard #defines for PCIe Capability ASPM fields PCI: Add standard PCIe Capability Link ASPM field names PCI/portdrv: Use PCI Express Capability accessors PCI: Use standard PCIe Capability Link register field names x86: Use PCI setup data PCI: Add support for non-BAR ROMs PCI: Add pcibios_add_device EFI: Stash ROMs if they're not in the PCI BAR PCI: Add and use standard PCI-X Capability register names PCI/PM: Keep runtime PM enabled for unbound PCI devices xen-pcifront: Handle backend CLOSED without CLOSING PCI: SRIOV control and status via sysfs (documentation) PCI/AER: Report success only when every device has AER-aware driver ...
- Loading branch information
Showing
45 changed files
with
1,147 additions
and
268 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -222,3 +222,37 @@ Description: | |
satisfied too. Reading this attribute will show the current | ||
value of d3cold_allowed bit. Writing this attribute will set | ||
the value of d3cold_allowed bit. | ||
|
||
What: /sys/bus/pci/devices/.../sriov_totalvfs | ||
Date: November 2012 | ||
Contact: Donald Dutile <[email protected]> | ||
Description: | ||
This file appears when a physical PCIe device supports SR-IOV. | ||
Userspace applications can read this file to determine the | ||
maximum number of Virtual Functions (VFs) a PCIe physical | ||
function (PF) can support. Typically, this is the value reported | ||
in the PF's SR-IOV extended capability structure's TotalVFs | ||
element. Drivers have the ability at probe time to reduce the | ||
value read from this file via the pci_sriov_set_totalvfs() | ||
function. | ||
|
||
What: /sys/bus/pci/devices/.../sriov_numvfs | ||
Date: November 2012 | ||
Contact: Donald Dutile <[email protected]> | ||
Description: | ||
This file appears when a physical PCIe device supports SR-IOV. | ||
Userspace applications can read and write to this file to | ||
determine and control the enablement or disablement of Virtual | ||
Functions (VFs) on the physical function (PF). A read of this | ||
file will return the number of VFs that are enabled on this PF. | ||
A number written to this file will enable the specified | ||
number of VFs. A userspace application would typically read the | ||
file and check that the value is zero, and then write the number | ||
of VFs that should be enabled on the PF; the value written | ||
should be less than or equal to the value in the sriov_totalvfs | ||
file. A userspace application wanting to disable the VFs would | ||
write a zero to this file. The core ensures that valid values | ||
are written to this file, and returns errors when values are not | ||
valid. For example, writing a 2 to this file when sriov_numvfs | ||
is not 0 and not 2 already will return an error. Writing a 10 | ||
when the value of sriov_totalvfs is 8 will return an error. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,9 @@ | |
Copyright (C) 2009 Intel Corporation | ||
Yu Zhao <[email protected]> | ||
|
||
Update: November 2012 | ||
-- sysfs-based SRIOV enable-/disable-ment | ||
Donald Dutile <[email protected]> | ||
|
||
1. Overview | ||
|
||
|
@@ -24,10 +27,21 @@ real existing PCI device. | |
|
||
2.1 How can I enable SR-IOV capability | ||
|
||
The device driver (PF driver) will control the enabling and disabling | ||
of the capability via API provided by SR-IOV core. If the hardware | ||
has SR-IOV capability, loading its PF driver would enable it and all | ||
VFs associated with the PF. | ||
Multiple methods are available for SR-IOV enablement. | ||
In the first method, the device driver (PF driver) will control the | ||
enabling and disabling of the capability via API provided by SR-IOV core. | ||
If the hardware has SR-IOV capability, loading its PF driver would | ||
enable it and all VFs associated with the PF. Some PF drivers require | ||
a module parameter to be set to determine the number of VFs to enable. | ||
In the second method, a write to the sysfs file sriov_numvfs will | ||
enable and disable the VFs associated with a PCIe PF. This method | ||
enables per-PF, VF enable/disable values versus the first method, | ||
which applies to all PFs of the same device. Additionally, the | ||
PCI SRIOV core support ensures that enable/disable operations are | ||
valid to reduce duplication in multiple drivers for the same | ||
checks, e.g., check numvfs == 0 if enabling VFs, ensure | ||
numvfs <= totalvfs. | ||
The second method is the recommended method for new/future VF devices. | ||
|
||
2.2 How can I use the Virtual Functions | ||
|
||
|
@@ -40,13 +54,22 @@ requires device driver that is same as a normal PCI device's. | |
3.1 SR-IOV API | ||
|
||
To enable SR-IOV capability: | ||
(a) For the first method, in the driver: | ||
int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn); | ||
'nr_virtfn' is number of VFs to be enabled. | ||
(b) For the second method, from sysfs: | ||
echo 'nr_virtfn' > \ | ||
/sys/bus/pci/devices/<DOMAIN:BUS:DEVICE.FUNCTION>/sriov_numvfs | ||
|
||
To disable SR-IOV capability: | ||
(a) For the first method, in the driver: | ||
void pci_disable_sriov(struct pci_dev *dev); | ||
(b) For the second method, from sysfs: | ||
echo 0 > \ | ||
/sys/bus/pci/devices/<DOMAIN:BUS:DEVICE.FUNCTION>/sriov_numvfs | ||
|
||
To notify SR-IOV core of Virtual Function Migration: | ||
(a) In the driver: | ||
irqreturn_t pci_sriov_migration(struct pci_dev *dev); | ||
|
||
3.2 Usage example | ||
|
@@ -88,6 +111,22 @@ static void dev_shutdown(struct pci_dev *dev) | |
... | ||
} | ||
|
||
static int dev_sriov_configure(struct pci_dev *dev, int numvfs) | ||
{ | ||
if (numvfs > 0) { | ||
... | ||
pci_enable_sriov(dev, numvfs); | ||
... | ||
return numvfs; | ||
} | ||
if (numvfs == 0) { | ||
.... | ||
pci_disable_sriov(dev); | ||
... | ||
return 0; | ||
} | ||
} | ||
|
||
static struct pci_driver dev_driver = { | ||
.name = "SR-IOV Physical Function driver", | ||
.id_table = dev_id_table, | ||
|
@@ -96,4 +135,5 @@ static struct pci_driver dev_driver = { | |
.suspend = dev_suspend, | ||
.resume = dev_resume, | ||
.shutdown = dev_shutdown, | ||
.sriov_configure = dev_sriov_configure, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/* | ||
* This file is subject to the terms and conditions of the GNU General Public | ||
* License. See the file "COPYING" in the main directory of this archive | ||
* for more details. | ||
* | ||
* Numascale NumaConnect-specific header file | ||
* | ||
* Copyright (C) 2012 Numascale AS. All rights reserved. | ||
* | ||
* Send feedback to <[email protected]> | ||
* | ||
*/ | ||
|
||
#ifndef _ASM_X86_NUMACHIP_NUMACHIP_H | ||
#define _ASM_X86_NUMACHIP_NUMACHIP_H | ||
|
||
extern int __init pci_numachip_init(void); | ||
|
||
#endif /* _ASM_X86_NUMACHIP_NUMACHIP_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.