From: Huy Nguyen Date: Mon, 8 Jan 2018 10:15:37 +0000 (+0200) Subject: IB/core: Remove the locking for character device bitmaps X-Git-Tag: v4.19~1637^2~138 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=008b656f429824a1987f28150d66eaf8f26d58a1;p=platform%2Fkernel%2Flinux-rpi.git 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: Huy Nguyen Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe --- diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c index d4de187..608176e 100644 --- a/drivers/infiniband/core/user_mad.c +++ b/drivers/infiniband/core/user_mad.c @@ -129,7 +129,6 @@ static struct class *umad_class; 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 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, int devnum; dev_t base; - spin_lock(&port_lock); devnum = find_first_zero_bit(dev_map, IB_UMAD_MAX_PORTS); if (devnum >= IB_UMAD_MAX_PORTS) { - spin_unlock(&port_lock); devnum = find_overflow_devnum(device); if (devnum < 0) return -1; - spin_lock(&port_lock); port->dev_num = devnum + IB_UMAD_MAX_PORTS; base = devnum + overflow_maj; set_bit(devnum, overflow_map); @@ -1189,7 +1185,6 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, base = devnum + base_dev; set_bit(devnum, dev_map); } - spin_unlock(&port_lock); port->ib_dev = device; port->port_num = port_num; diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c index 381fd9c..9e06f81 100644 --- a/drivers/infiniband/core/uverbs_main.c +++ b/drivers/infiniband/core/uverbs_main.c @@ -69,7 +69,6 @@ enum { static struct class *uverbs_class; -static DEFINE_SPINLOCK(map_lock); static DECLARE_BITMAP(dev_map, IB_UVERBS_MAX_DEVICES); 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) INIT_LIST_HEAD(&uverbs_dev->uverbs_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); if (devnum >= IB_UVERBS_MAX_DEVICES) { - spin_unlock(&map_lock); devnum = find_overflow_devnum(); if (devnum < 0) goto err; - spin_lock(&map_lock); uverbs_dev->devnum = devnum + IB_UVERBS_MAX_DEVICES; base = devnum + overflow_maj; set_bit(devnum, overflow_map); @@ -1079,7 +1075,6 @@ static void ib_uverbs_add_one(struct ib_device *device) base = devnum + IB_UVERBS_BASE_DEV; set_bit(devnum, dev_map); } - spin_unlock(&map_lock); rcu_assign_pointer(uverbs_dev->ib_dev, device); uverbs_dev->num_comp_vectors = device->num_comp_vectors;