diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2018-08-01 18:47:47 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2018-08-01 20:59:25 -0400 |
commit | 6078091c9fa899b0fd7097ae2af933554c2d989f (patch) | |
tree | ace91fd6231d3f81ac0d300dc730dbffd640de18 | |
parent | 4e2ec39ddbf3d78bc3b576a775fd5b4e4ff4af34 (diff) |
Input: evdev - switch to bitmap API
Switch to bitmap API, i.e. bitmap_alloc(), bitmap_zalloc(), to show
clearly what we are allocating. Besides that it returns pointer of
bitmap type instead of opaque void *.
While here, replace memcpy() with bitmap_copy() for sake of consistency.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r-- | drivers/input/evdev.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index c81c79d01d93..370206f987f9 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c | |||
@@ -481,7 +481,7 @@ static int evdev_release(struct inode *inode, struct file *file) | |||
481 | evdev_detach_client(evdev, client); | 481 | evdev_detach_client(evdev, client); |
482 | 482 | ||
483 | for (i = 0; i < EV_CNT; ++i) | 483 | for (i = 0; i < EV_CNT; ++i) |
484 | kfree(client->evmasks[i]); | 484 | bitmap_free(client->evmasks[i]); |
485 | 485 | ||
486 | kvfree(client); | 486 | kvfree(client); |
487 | 487 | ||
@@ -925,17 +925,15 @@ static int evdev_handle_get_val(struct evdev_client *client, | |||
925 | { | 925 | { |
926 | int ret; | 926 | int ret; |
927 | unsigned long *mem; | 927 | unsigned long *mem; |
928 | size_t len; | ||
929 | 928 | ||
930 | len = BITS_TO_LONGS(maxbit) * sizeof(unsigned long); | 929 | mem = bitmap_alloc(maxbit, GFP_KERNEL); |
931 | mem = kmalloc(len, GFP_KERNEL); | ||
932 | if (!mem) | 930 | if (!mem) |
933 | return -ENOMEM; | 931 | return -ENOMEM; |
934 | 932 | ||
935 | spin_lock_irq(&dev->event_lock); | 933 | spin_lock_irq(&dev->event_lock); |
936 | spin_lock(&client->buffer_lock); | 934 | spin_lock(&client->buffer_lock); |
937 | 935 | ||
938 | memcpy(mem, bits, len); | 936 | bitmap_copy(mem, bits, maxbit); |
939 | 937 | ||
940 | spin_unlock(&dev->event_lock); | 938 | spin_unlock(&dev->event_lock); |
941 | 939 | ||
@@ -947,7 +945,7 @@ static int evdev_handle_get_val(struct evdev_client *client, | |||
947 | if (ret < 0) | 945 | if (ret < 0) |
948 | evdev_queue_syn_dropped(client); | 946 | evdev_queue_syn_dropped(client); |
949 | 947 | ||
950 | kfree(mem); | 948 | bitmap_free(mem); |
951 | 949 | ||
952 | return ret; | 950 | return ret; |
953 | } | 951 | } |
@@ -1003,13 +1001,13 @@ static int evdev_set_mask(struct evdev_client *client, | |||
1003 | if (!cnt) | 1001 | if (!cnt) |
1004 | return 0; | 1002 | return 0; |
1005 | 1003 | ||
1006 | mask = kcalloc(sizeof(unsigned long), BITS_TO_LONGS(cnt), GFP_KERNEL); | 1004 | mask = bitmap_zalloc(cnt, GFP_KERNEL); |
1007 | if (!mask) | 1005 | if (!mask) |
1008 | return -ENOMEM; | 1006 | return -ENOMEM; |
1009 | 1007 | ||
1010 | error = bits_from_user(mask, cnt - 1, codes_size, codes, compat); | 1008 | error = bits_from_user(mask, cnt - 1, codes_size, codes, compat); |
1011 | if (error < 0) { | 1009 | if (error < 0) { |
1012 | kfree(mask); | 1010 | bitmap_free(mask); |
1013 | return error; | 1011 | return error; |
1014 | } | 1012 | } |
1015 | 1013 | ||
@@ -1018,7 +1016,7 @@ static int evdev_set_mask(struct evdev_client *client, | |||
1018 | client->evmasks[type] = mask; | 1016 | client->evmasks[type] = mask; |
1019 | spin_unlock_irqrestore(&client->buffer_lock, flags); | 1017 | spin_unlock_irqrestore(&client->buffer_lock, flags); |
1020 | 1018 | ||
1021 | kfree(oldmask); | 1019 | bitmap_free(oldmask); |
1022 | 1020 | ||
1023 | return 0; | 1021 | return 0; |
1024 | } | 1022 | } |