Emil Tantilov
5b0948dfe1
PCI: Lock each enable/disable num_vfs operation in sysfs
...
Enabling/disabling SRIOV via sysfs by echo-ing multiple values
simultaneously:
# echo 63 > /sys/class/net/ethX/device/sriov_numvfs&
# echo 63 > /sys/class/net/ethX/device/sriov_numvfs
# sleep 5
# echo 0 > /sys/class/net/ethX/device/sriov_numvfs&
# echo 0 > /sys/class/net/ethX/device/sriov_numvfs
results in the following bug:
kernel BUG at drivers/pci/iov.c:495!
invalid opcode: 0000 [#1 ] SMP
CPU: 1 PID: 8050 Comm: bash Tainted: G W 4.9.0-rc7-net-next #2092
RIP: 0010:[<ffffffff813b1647>]
[<ffffffff813b1647>] pci_iov_release+0x57/0x60
Call Trace:
[<ffffffff81391726>] pci_release_dev+0x26/0x70
[<ffffffff8155be6e>] device_release+0x3e/0xb0
[<ffffffff81365ee7>] kobject_cleanup+0x67/0x180
[<ffffffff81365d9d>] kobject_put+0x2d/0x60
[<ffffffff8155bc27>] put_device+0x17/0x20
[<ffffffff8139c08a>] pci_dev_put+0x1a/0x20
[<ffffffff8139cb6b>] pci_get_dev_by_id+0x5b/0x90
[<ffffffff8139cca5>] pci_get_subsys+0x35/0x40
[<ffffffff8139ccc8>] pci_get_device+0x18/0x20
[<ffffffff8139ccfb>] pci_get_domain_bus_and_slot+0x2b/0x60
[<ffffffff813b09e7>] pci_iov_remove_virtfn+0x57/0x180
[<ffffffff813b0b95>] pci_disable_sriov+0x65/0x140
[<ffffffffa00a1af7>] ixgbe_disable_sriov+0xc7/0x1d0 [ixgbe]
[<ffffffffa00a1e9d>] ixgbe_pci_sriov_configure+0x3d/0x170 [ixgbe]
[<ffffffff8139d28c>] sriov_numvfs_store+0xdc/0x130
...
RIP [<ffffffff813b1647>] pci_iov_release+0x57/0x60
Use the existing mutex lock to protect each enable/disable operation.
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
CC: Alexander Duyck <alexander.h.duyck@intel.com>
2017-02-03 13:42:38 -06:00
..
2016-12-15 12:46:48 -08:00
2016-12-24 11:46:01 -08:00
2016-12-15 12:46:48 -08:00
2016-11-21 16:25:39 -06:00
2015-08-13 15:59:59 -05:00
2016-11-17 18:44:56 -06:00
2016-12-06 13:45:49 -06:00
2016-08-22 11:09:33 +10:00
2015-04-24 15:36:50 +02:00
2017-02-03 13:42:38 -06:00
2016-09-06 10:53:32 -05:00
2016-06-15 10:10:49 +02:00
2016-12-15 12:46:48 -08:00
2015-10-16 13:07:14 +01:00
2016-12-12 11:25:04 -06:00
2016-10-03 09:43:21 -05:00
2016-02-29 12:03:19 -06:00
2016-12-15 12:46:48 -08:00
2014-06-10 20:20:19 -06:00
2017-02-03 13:42:38 -06:00
2016-12-12 11:25:05 -06:00
2017-02-03 13:42:38 -06:00
2016-12-15 12:46:48 -08:00
2016-12-24 11:46:01 -08:00
2017-01-28 14:46:02 -06:00
2016-11-17 18:44:56 -06:00
2016-11-29 18:05:09 -06:00
2016-04-11 14:34:32 -05:00
2016-09-10 20:30:31 +02:00
2015-04-08 14:17:10 -05:00
2016-12-12 11:25:11 -06:00
2015-07-30 16:19:53 -05:00
2016-12-24 11:46:01 -08:00
2016-06-20 13:24:20 -05:00
2016-11-07 13:55:26 +01:00