Skip to content

Commit

Permalink
Staging: line6: only allocate a buffer if it is needed
Browse files Browse the repository at this point in the history
Only allocate the version request buffer if it is needed, not when the
module starts up.  This will let us make the module_init path much
smaller.

CC: Markus Grabner <grabner@icg.tugraz.at>
CC: Stefan Hajnoczi <stefanha@gmail.com>
CC: Julia Lawall <julia@diku.dk>
CC: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Greg Kroah-Hartman committed Apr 23, 2012
1 parent 305b876 commit c46b8a6
Showing 1 changed file with 17 additions and 30 deletions.
47 changes: 17 additions & 30 deletions drivers/staging/line6/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,15 +92,10 @@ const unsigned char line6_midi_id[] = {
Code to request version of POD, Variax interface
(and maybe other devices).
*/
static const char line6_request_version0[] = {
static const char line6_request_version[] = {
0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7
};

/*
Copy of version request code with GFP_KERNEL flag for use in URB.
*/
static const char *line6_request_version;

struct usb_line6 *line6_devices[LINE6_MAX_DEVICES];

/**
Expand Down Expand Up @@ -336,8 +331,21 @@ int line6_send_raw_message_async(struct usb_line6 *line6, const char *buffer,
*/
int line6_version_request_async(struct usb_line6 *line6)
{
return line6_send_raw_message_async(line6, line6_request_version,
sizeof(line6_request_version0));
char *buffer;
int retval;

buffer = kmalloc(sizeof(line6_request_version), GFP_ATOMIC);
if (buffer == NULL) {
dev_err(line6->ifcdev, "Out of memory");
return -ENOMEM;
}

memcpy(buffer, line6_request_version, sizeof(line6_request_version));

retval = line6_send_raw_message_async(line6, buffer,
sizeof(line6_request_version));
kfree(buffer);
return retval;
}

/*
Expand Down Expand Up @@ -1297,29 +1305,9 @@ static struct usb_driver line6_driver = {
*/
static int __init line6_init(void)
{
int retval;

printk(KERN_INFO "%s driver version %s\n", DRIVER_NAME, DRIVER_VERSION);

retval = usb_register(&line6_driver);

if (retval) {
err("usb_register failed. Error number %d", retval);
return retval;
}

line6_request_version = kmalloc(sizeof(line6_request_version0),
GFP_KERNEL);

if (line6_request_version == NULL) {
err("Out of memory");
return -ENOMEM;
}

memcpy((char *)line6_request_version, line6_request_version0,
sizeof(line6_request_version0));

return retval;
return usb_register(&line6_driver);
}

/*
Expand Down Expand Up @@ -1347,7 +1335,6 @@ static void __exit line6_exit(void)
}

usb_deregister(&line6_driver);
kfree(line6_request_version);
}

module_init(line6_init);
Expand Down

0 comments on commit c46b8a6

Please sign in to comment.