USB: ir-usb: allow custom bulk buffer size without reallocation
Use usb_serial_driver bulk_in_size and bulk_out_size to make sure buffers of appropriate sizes are allocated in the first place rather than reallocating them at every open. Signed-off-by: Johan Hovold <jhovold@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
2ff78c0c2b
Коммит
6f6ed69694
|
@ -297,35 +297,10 @@ static int ir_startup(struct usb_serial *serial)
|
|||
|
||||
static int ir_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
{
|
||||
char *buffer;
|
||||
int result = 0;
|
||||
|
||||
dbg("%s - port %d", __func__, port->number);
|
||||
|
||||
if (buffer_size) {
|
||||
/* override the default buffer sizes */
|
||||
buffer = kmalloc(buffer_size, GFP_KERNEL);
|
||||
if (!buffer) {
|
||||
dev_err(&port->dev, "%s - out of memory.\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
kfree(port->read_urb->transfer_buffer);
|
||||
port->read_urb->transfer_buffer = buffer;
|
||||
port->read_urb->transfer_buffer_length = buffer_size;
|
||||
port->bulk_in_buffer = buffer;
|
||||
|
||||
buffer = kmalloc(buffer_size, GFP_KERNEL);
|
||||
if (!buffer) {
|
||||
dev_err(&port->dev, "%s - out of memory.\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
kfree(port->write_urb->transfer_buffer);
|
||||
port->write_urb->transfer_buffer = buffer;
|
||||
port->write_urb->transfer_buffer_length = buffer_size;
|
||||
port->bulk_out_buffer = buffer;
|
||||
port->bulk_out_size = buffer_size;
|
||||
}
|
||||
|
||||
/* Start reading from the device */
|
||||
usb_fill_bulk_urb(
|
||||
port->read_urb,
|
||||
|
@ -585,6 +560,11 @@ static int __init ir_init(void)
|
|||
{
|
||||
int retval;
|
||||
|
||||
if (buffer_size) {
|
||||
ir_device.bulk_in_size = buffer_size;
|
||||
ir_device.bulk_out_size = buffer_size;
|
||||
}
|
||||
|
||||
retval = usb_serial_register(&ir_device);
|
||||
if (retval)
|
||||
goto failed_usb_serial_register;
|
||||
|
|
Загрузка…
Ссылка в новой задаче