mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-16 23:45:31 +08:00
[media] staging: lirc: clean error handling in probe()
We have reorganized the error handling into a simpler and more canonical format. Additionally we removed extra empty lines, switched to devm_kzalloc(), and substitute 'minor' by 'ret' in the igorplugusb_remote_probe() function. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
51dd4d70fc
commit
1444fbf268
@ -240,10 +240,6 @@ static int unregister_from_lirc(struct igorplug *ir)
|
||||
dprintk(DRIVER_NAME "[%d]: calling lirc_unregister_driver\n", devnum);
|
||||
lirc_unregister_driver(d->minor);
|
||||
|
||||
kfree(d);
|
||||
ir->d = NULL;
|
||||
kfree(ir);
|
||||
|
||||
return devnum;
|
||||
}
|
||||
|
||||
@ -377,20 +373,16 @@ static int igorplugusb_remote_poll(void *data, struct lirc_buffer *buf)
|
||||
return -ENODATA;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int igorplugusb_remote_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id)
|
||||
{
|
||||
struct usb_device *dev = NULL;
|
||||
struct usb_device *dev;
|
||||
struct usb_host_interface *idesc = NULL;
|
||||
struct usb_endpoint_descriptor *ep;
|
||||
struct igorplug *ir = NULL;
|
||||
struct lirc_driver *driver = NULL;
|
||||
int devnum, pipe, maxp;
|
||||
int minor = 0;
|
||||
char buf[63], name[128] = "";
|
||||
int mem_failure = 0;
|
||||
int ret;
|
||||
|
||||
dprintk(DRIVER_NAME ": usb probe called.\n");
|
||||
@ -416,24 +408,18 @@ static int igorplugusb_remote_probe(struct usb_interface *intf,
|
||||
dprintk(DRIVER_NAME "[%d]: bytes_in_key=%zu maxp=%d\n",
|
||||
devnum, CODE_LENGTH, maxp);
|
||||
|
||||
mem_failure = 0;
|
||||
ir = kzalloc(sizeof(struct igorplug), GFP_KERNEL);
|
||||
if (!ir) {
|
||||
mem_failure = 1;
|
||||
goto mem_failure_switch;
|
||||
}
|
||||
driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
|
||||
if (!driver) {
|
||||
mem_failure = 2;
|
||||
goto mem_failure_switch;
|
||||
}
|
||||
ir = devm_kzalloc(&intf->dev, sizeof(*ir), GFP_KERNEL);
|
||||
if (!ir)
|
||||
return -ENOMEM;
|
||||
|
||||
driver = devm_kzalloc(&intf->dev, sizeof(*driver), GFP_KERNEL);
|
||||
if (!driver)
|
||||
return -ENOMEM;
|
||||
|
||||
ir->buf_in = usb_alloc_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN,
|
||||
GFP_ATOMIC, &ir->dma_in);
|
||||
if (!ir->buf_in) {
|
||||
mem_failure = 3;
|
||||
goto mem_failure_switch;
|
||||
}
|
||||
if (!ir->buf_in)
|
||||
return -ENOMEM;
|
||||
|
||||
strcpy(driver->name, DRIVER_NAME " ");
|
||||
driver->minor = -1;
|
||||
@ -449,27 +435,14 @@ static int igorplugusb_remote_probe(struct usb_interface *intf,
|
||||
driver->dev = &intf->dev;
|
||||
driver->owner = THIS_MODULE;
|
||||
|
||||
minor = lirc_register_driver(driver);
|
||||
if (minor < 0)
|
||||
mem_failure = 9;
|
||||
|
||||
mem_failure_switch:
|
||||
|
||||
switch (mem_failure) {
|
||||
case 9:
|
||||
ret = lirc_register_driver(driver);
|
||||
if (ret < 0) {
|
||||
usb_free_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN,
|
||||
ir->buf_in, ir->dma_in);
|
||||
case 3:
|
||||
kfree(driver);
|
||||
case 2:
|
||||
kfree(ir);
|
||||
case 1:
|
||||
printk(DRIVER_NAME "[%d]: out of memory (code=%d)\n",
|
||||
devnum, mem_failure);
|
||||
return -ENOMEM;
|
||||
return ret;
|
||||
}
|
||||
|
||||
driver->minor = minor;
|
||||
driver->minor = ret;
|
||||
ir->d = driver;
|
||||
ir->devnum = devnum;
|
||||
ir->usbdev = dev;
|
||||
@ -502,7 +475,6 @@ mem_failure_switch:
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void igorplugusb_remote_disconnect(struct usb_interface *intf)
|
||||
{
|
||||
struct usb_device *usbdev = interface_to_usbdev(intf);
|
||||
|
Loading…
Reference in New Issue
Block a user