Commit 008b656f authored by Huy Nguyen's avatar Huy Nguyen Committed by Jason Gunthorpe

IB/core: Remove the locking for character device bitmaps

Remove the locks that protect character device bitmaps of
uverbs, umad and issm.

The character device bitmaps are accessed in "client->add" and
"client->remove" calls from ib_register_device and ib_unregister_device
respectively. These calls are already protected by the "device_mutex"
mutex. Thus, the spinlocks are not needed.
Signed-off-by: default avatarHuy Nguyen <huyn@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 6f301e06
...@@ -129,7 +129,6 @@ static struct class *umad_class; ...@@ -129,7 +129,6 @@ static struct class *umad_class;
static const dev_t base_dev = MKDEV(IB_UMAD_MAJOR, IB_UMAD_MINOR_BASE); static const dev_t base_dev = MKDEV(IB_UMAD_MAJOR, IB_UMAD_MINOR_BASE);
static DEFINE_SPINLOCK(port_lock);
static DECLARE_BITMAP(dev_map, IB_UMAD_MAX_PORTS); static DECLARE_BITMAP(dev_map, IB_UMAD_MAX_PORTS);
static void ib_umad_add_one(struct ib_device *device); static void ib_umad_add_one(struct ib_device *device);
...@@ -1172,15 +1171,12 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, ...@@ -1172,15 +1171,12 @@ static int ib_umad_init_port(struct ib_device *device, int port_num,
int devnum; int devnum;
dev_t base; dev_t base;
spin_lock(&port_lock);
devnum = find_first_zero_bit(dev_map, IB_UMAD_MAX_PORTS); devnum = find_first_zero_bit(dev_map, IB_UMAD_MAX_PORTS);
if (devnum >= IB_UMAD_MAX_PORTS) { if (devnum >= IB_UMAD_MAX_PORTS) {
spin_unlock(&port_lock);
devnum = find_overflow_devnum(device); devnum = find_overflow_devnum(device);
if (devnum < 0) if (devnum < 0)
return -1; return -1;
spin_lock(&port_lock);
port->dev_num = devnum + IB_UMAD_MAX_PORTS; port->dev_num = devnum + IB_UMAD_MAX_PORTS;
base = devnum + overflow_maj; base = devnum + overflow_maj;
set_bit(devnum, overflow_map); set_bit(devnum, overflow_map);
...@@ -1189,7 +1185,6 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, ...@@ -1189,7 +1185,6 @@ static int ib_umad_init_port(struct ib_device *device, int port_num,
base = devnum + base_dev; base = devnum + base_dev;
set_bit(devnum, dev_map); set_bit(devnum, dev_map);
} }
spin_unlock(&port_lock);
port->ib_dev = device; port->ib_dev = device;
port->port_num = port_num; port->port_num = port_num;
......
...@@ -69,7 +69,6 @@ enum { ...@@ -69,7 +69,6 @@ enum {
static struct class *uverbs_class; static struct class *uverbs_class;
static DEFINE_SPINLOCK(map_lock);
static DECLARE_BITMAP(dev_map, IB_UVERBS_MAX_DEVICES); static DECLARE_BITMAP(dev_map, IB_UVERBS_MAX_DEVICES);
static ssize_t (*uverbs_cmd_table[])(struct ib_uverbs_file *file, static ssize_t (*uverbs_cmd_table[])(struct ib_uverbs_file *file,
...@@ -1062,15 +1061,12 @@ static void ib_uverbs_add_one(struct ib_device *device) ...@@ -1062,15 +1061,12 @@ static void ib_uverbs_add_one(struct ib_device *device)
INIT_LIST_HEAD(&uverbs_dev->uverbs_file_list); INIT_LIST_HEAD(&uverbs_dev->uverbs_file_list);
INIT_LIST_HEAD(&uverbs_dev->uverbs_events_file_list); INIT_LIST_HEAD(&uverbs_dev->uverbs_events_file_list);
spin_lock(&map_lock);
devnum = find_first_zero_bit(dev_map, IB_UVERBS_MAX_DEVICES); devnum = find_first_zero_bit(dev_map, IB_UVERBS_MAX_DEVICES);
if (devnum >= IB_UVERBS_MAX_DEVICES) { if (devnum >= IB_UVERBS_MAX_DEVICES) {
spin_unlock(&map_lock);
devnum = find_overflow_devnum(); devnum = find_overflow_devnum();
if (devnum < 0) if (devnum < 0)
goto err; goto err;
spin_lock(&map_lock);
uverbs_dev->devnum = devnum + IB_UVERBS_MAX_DEVICES; uverbs_dev->devnum = devnum + IB_UVERBS_MAX_DEVICES;
base = devnum + overflow_maj; base = devnum + overflow_maj;
set_bit(devnum, overflow_map); set_bit(devnum, overflow_map);
...@@ -1079,7 +1075,6 @@ static void ib_uverbs_add_one(struct ib_device *device) ...@@ -1079,7 +1075,6 @@ static void ib_uverbs_add_one(struct ib_device *device)
base = devnum + IB_UVERBS_BASE_DEV; base = devnum + IB_UVERBS_BASE_DEV;
set_bit(devnum, dev_map); set_bit(devnum, dev_map);
} }
spin_unlock(&map_lock);
rcu_assign_pointer(uverbs_dev->ib_dev, device); rcu_assign_pointer(uverbs_dev->ib_dev, device);
uverbs_dev->num_comp_vectors = device->num_comp_vectors; uverbs_dev->num_comp_vectors = device->num_comp_vectors;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment