Commit 700a05bd authored by Jialin Zhang's avatar Jialin Zhang
Browse files

PCI/IOV: Add pci_sriov_numvfs_lock to support enable pci sriov concurrently

hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8BLQX


CVE: NA

--------------------------------

"echo sriov_totalvfs > /sys/bus/pci/devices/$PF_BDF/sriov_numvfs"
concurrently may cause the following warnings:

Warning 1:
sysfs: cannot create duplicate filename
'/devices/pci0000:95/0000:95:00.0/pci_bus/0000:97'

Call trace:
 dump_backtrace+0x0/0x200
 show_stack+0x20/0x30
 dump_stack+0xf0/0x138
 sysfs_warn_dup+0x6c/0x90
 sysfs_create_dir_ns+0xf8/0x11c
 create_dir+0x30/0x18c
 kobject_add_internal+0x5c/0x190
 kobject_add+0x98/0x110
 device_add+0x100/0x4a0
 device_register+0x28/0x40
 pci_alloc_child_bus+0x184/0x24c
 pci_add_new_bus+0x20/0xa4
 pci_iov_add_virtfn+0x2a8/0x31c
 sriov_enable+0x20c/0x4d0
 pci_enable_sriov+0x38/0x50
 virtio_pci_sriov_configure+0x3c/0xf4 [virtio_pci]
 sriov_numvfs_store+0xb0/0x1b0
 dev_attr_store+0x20/0x34
 sysfs_kf_write+0x4c/0x5c
 kernfs_fop_write_iter+0x130/0x1c0
 new_sync_write+0xf0/0x194
 vfs_write+0x224/0x2c0
 ksys_write+0x74/0x104
 __arm64_sys_write+0x24/0x30
 el0_svc_common.constprop.0+0x7c/0x1bc
 do_el0_svc+0x2c/0xa4
 el0_svc+0x20/0x30
 el0_sync_handler+0xb0/0xb4
 el0_sync+0x160/0x180

The reason is that different VFs may create the same pci bus number
and try to add new bus concurrently in virtfn_add_bus.

Warning 2:
proc_dir_entry 'pci/0000:97' already registered

Call trace:
 proc_register+0x100/0x190
 proc_mkdir+0x6c/0xa0
 pci_proc_attach_device+0xfc/0x120
 pci_bus_add_device+0x40/0xd0
 pci_iov_add_virtfn+0x2c8/0x31c
 sriov_enable+0x20c/0x4d0
 pci_enable_sriov+0x38/0x50
 virtio_pci_sriov_configure+0x3c/0xf4 [virtio_pci]
 sriov_numvfs_store+0xb0/0x1b0
 dev_attr_store+0x20/0x34
 sysfs_kf_write+0x4c/0x5c
 kernfs_fop_write_iter+0x130/0x1c0
 new_sync_write+0xf0/0x194
 vfs_write+0x224/0x2c0
 ksys_write+0x74/0x104
 __arm64_sys_write+0x24/0x30
 el0_svc_common.constprop.0+0x7c/0x1bc
 do_el0_svc+0x2c/0xa4
 el0_svc+0x20/0x30
 el0_sync_handler+0xb0/0xb4
 el0_sync+0x160/0x180

The reason is that different VFs may create '/proc/bus/pci/bus_number'
directory using the same bus number in pci_proc_attach_device concurrently.

Mutex lock can avoid potential conflict.
With the patch below the warnings above are no longer appear.

Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parent 9ee0824e
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment