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:
parent
2ff78c0c2b
commit
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)
|
static int ir_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||||
{
|
{
|
||||||
char *buffer;
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
dbg("%s - port %d", __func__, port->number);
|
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 */
|
/* Start reading from the device */
|
||||||
usb_fill_bulk_urb(
|
usb_fill_bulk_urb(
|
||||||
port->read_urb,
|
port->read_urb,
|
||||||
|
@ -585,6 +560,11 @@ static int __init ir_init(void)
|
||||||
{
|
{
|
||||||
int retval;
|
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);
|
retval = usb_serial_register(&ir_device);
|
||||||
if (retval)
|
if (retval)
|
||||||
goto failed_usb_serial_register;
|
goto failed_usb_serial_register;
|
||||||
|
|
Loading…
Reference in New Issue