usertools: fix device binding with kernel tools
The following sequence of operation gives error in binding devices
1) Bind a device using dpdk-devbind.py
2) Unbind the device using kernel tools(/sys/bus/pci/device/driver/unbind)
3) Bind the device using kernel tools(/sys/bus/pci/driver/new_id and
/sys/bus/pci/driver/bind)
The bind failure was due to cached driver name in 'driver_override'.
Fix it by writing 'null' to driver_override just after binding a
device so that any method of binding/unbinding can be used.
Fixes: 2fc3502935
("usertools: use optimized driver override scheme to bind")
Reported-by: Lijuan A Tu <lijuanx.a.tu@intel.com>
Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
This commit is contained in:
parent
aafaea3d3b
commit
720b7a0582
@ -386,25 +386,6 @@ def unbind_one(dev_id, force):
|
||||
"Skipping unbind" % (dev_id))
|
||||
return
|
||||
|
||||
# For kernels > 3.15 driver_override is used to bind a device to a driver.
|
||||
# Before unbinding it, overwrite driver_override with empty string so that
|
||||
# the device can be bound to any other driver
|
||||
filename = "/sys/bus/pci/devices/%s/driver_override" % dev_id
|
||||
if os.path.exists(filename):
|
||||
try:
|
||||
f = open(filename, "w")
|
||||
except:
|
||||
print("Error: unbind failed for %s - Cannot open %s"
|
||||
% (dev_id, filename))
|
||||
sys.exit(1)
|
||||
try:
|
||||
f.write("\00")
|
||||
f.close()
|
||||
except:
|
||||
print("Error: unbind failed for %s - Cannot open %s"
|
||||
% (dev_id, filename))
|
||||
sys.exit(1)
|
||||
|
||||
# write to /sys to unbind
|
||||
filename = "/sys/bus/pci/drivers/%s/unbind" % dev["Driver_str"]
|
||||
try:
|
||||
@ -507,6 +488,25 @@ def bind_one(dev_id, driver, force):
|
||||
bind_one(dev_id, saved_driver, force)
|
||||
return
|
||||
|
||||
# For kernels > 3.15 driver_override is used to bind a device to a driver.
|
||||
# Before unbinding it, overwrite driver_override with empty string so that
|
||||
# the device can be bound to any other driver
|
||||
filename = "/sys/bus/pci/devices/%s/driver_override" % dev_id
|
||||
if os.path.exists(filename):
|
||||
try:
|
||||
f = open(filename, "w")
|
||||
except:
|
||||
print("Error: unbind failed for %s - Cannot open %s"
|
||||
% (dev_id, filename))
|
||||
sys.exit(1)
|
||||
try:
|
||||
f.write("\00")
|
||||
f.close()
|
||||
except:
|
||||
print("Error: unbind failed for %s - Cannot open %s"
|
||||
% (dev_id, filename))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def unbind_all(dev_list, force=False):
|
||||
"""Unbind method, takes a list of device locations"""
|
||||
|
Loading…
Reference in New Issue
Block a user