Skip to content

Commit

Permalink
HID: hiddev: Use vzalloc to allocate hiddev_list
Browse files Browse the repository at this point in the history
Everytime a HID device is opened, a new hiddev_list is allocated with
kzalloc. This requires 64KB of physically contiguous memory, which could
easily push a heavily loaded system over the edge.

Allocating the same amount of memory with vmalloc shouldn't be nearly as
demanding, so let's do that instead. The memory isn't used for DMA and
doesn't look particularly performance sensitive, so this should be safe.

Signed-off-by: Havard Skinnemoen <hskinnemoen@google.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Havard Skinnemoen authored and Jiri Kosina committed Apr 27, 2012
1 parent 9f1f463 commit d4f0e4d
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions drivers/hid/usbhid/hiddev.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <linux/hid.h>
#include <linux/hiddev.h>
#include <linux/compat.h>
#include <linux/vmalloc.h>
#include "usbhid.h"

#ifdef CONFIG_USB_DYNAMIC_MINORS
Expand Down Expand Up @@ -250,13 +251,13 @@ static int hiddev_release(struct inode * inode, struct file * file)
} else {
mutex_unlock(&list->hiddev->existancelock);
kfree(list->hiddev);
kfree(list);
vfree(list);
return 0;
}
}

mutex_unlock(&list->hiddev->existancelock);
kfree(list);
vfree(list);

return 0;
}
Expand All @@ -278,7 +279,7 @@ static int hiddev_open(struct inode *inode, struct file *file)
hid = usb_get_intfdata(intf);
hiddev = hid->hiddev;

if (!(list = kzalloc(sizeof(struct hiddev_list), GFP_KERNEL)))
if (!(list = vzalloc(sizeof(struct hiddev_list))))
return -ENOMEM;
mutex_init(&list->thread_lock);
list->hiddev = hiddev;
Expand Down Expand Up @@ -322,7 +323,7 @@ static int hiddev_open(struct inode *inode, struct file *file)
mutex_unlock(&hiddev->existancelock);
bail:
file->private_data = NULL;
kfree(list);
vfree(list);
return res;
}

Expand Down

0 comments on commit d4f0e4d

Please sign in to comment.