igb_uio: remove device reset in release

More error reported for device reset in release() [1],
when device pass-through to the guest, host kernel crash on guest exit.

Removing the reset completely.

This is close to reverting commit b58eedfc7d [2], taking into account
previous fix to remove reset in open as well [3], but not exactly same.

With latest code, interrupts are enabled in uio open() callback and
disabled in uio release() callback, so when a DPDK application exit
device interrupts are disabled. Previously interrupts were only enabled
once in igb_uio module insert and disabled in module removal.

Also with latest code device set as bus master in open() and master
cleared in release(), clearing bus master should prevent further DMA
which was one of the target of the initial patch.

The initial intention was also to reset the device to be sure it has
been left in proper state, but currently that part is missing because of
reported problem(s).

Still igb_uio should be safer comparing to the pre b58eedfc7d state.

[1]
http://dpdk.org/ml/archives/dev/2017-November/081459.html

[2]
b58eedfc7d ("igb_uio: issue FLR during open and release of device file")

[3]
f73b38e924 ("igb_uio: remove device reset in open")

Fixes: e3a64deae2 ("igb_uio: prevent reset for bnx2x devices")
Fixes: b58eedfc7d ("igb_uio: issue FLR during open and release of device file")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
Ferruh Yigit 2017-11-07 22:29:13 +00:00 committed by Thomas Monjalon
parent 7a62910653
commit 369db3ae8e
2 changed files with 0 additions and 27 deletions

View File

@ -132,22 +132,3 @@ static bool pci_check_and_mask_intx(struct pci_dev *pdev)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0)
#define HAVE_PCI_MSI_MASK_IRQ 1
#endif
#define BROADCOM_PCI_VENDOR_ID 0x14E4
static const struct pci_device_id no_reset_pci_tbl[] = {
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x164f) }, /* 57711 */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x168a) }, /* 57800 */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x168e) }, /* 57810 */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x163d) }, /* 57811 */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x168d) }, /* 57840_OBS */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16a1) }, /* 57840_4_10 */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16a2) }, /* 57840_2_20 */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16ae) }, /* 57810_MF */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x163e) }, /* 57811_MF */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16a4) }, /* 57840_MF */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16a9) }, /* 57800_VF */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16af) }, /* 57810_VF */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x163f) }, /* 57811_VF */
{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16ad) }, /* 57840_VF */
{ 0 },
};

View File

@ -348,11 +348,6 @@ igbuio_pci_open(struct uio_info *info, struct inode *inode)
return 0;
}
static bool is_device_excluded_from_reset(struct pci_dev *pdev)
{
return !!pci_match_id(no_reset_pci_tbl, pdev);
}
static int
igbuio_pci_release(struct uio_info *info, struct inode *inode)
{
@ -365,9 +360,6 @@ igbuio_pci_release(struct uio_info *info, struct inode *inode)
/* stop the device from further DMA */
pci_clear_master(dev);
if (!is_device_excluded_from_reset(dev))
pci_reset_function(dev);
return 0;
}