IR/imon: remove incorrect calls to input_free_device

Message ID 20100726141352.GA28182@redhat.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Jarod Wilson July 26, 2010, 2:13 p.m. UTC
  Per Dmitry Torokhov (in a completely unrelated thread on linux-input),
following input_unregister_device with an input_free_device is
forbidden, the former is sufficient alone.

CC: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Jarod Wilson <jarod@redhat.com>
---
 drivers/media/IR/imon.c |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)
  

Comments

Dmitry Torokhov July 26, 2010, 5:34 p.m. UTC | #1
On Mon, Jul 26, 2010 at 10:13:52AM -0400, Jarod Wilson wrote:
> Per Dmitry Torokhov (in a completely unrelated thread on linux-input),
> following input_unregister_device with an input_free_device is
> forbidden, the former is sufficient alone.
> 
> CC: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Signed-off-by: Jarod Wilson <jarod@redhat.com>

Acked-by: Dmitry Torokhov <dtor@mail.ru>

Random notes about irmon:

imon_init_idev():
	memcpy(&ir->dev, ictx->dev, sizeof(struct device));

This is... scary.  Devices are refcounted and if you copy them around
all hell may break loose. On an unrelated note you do not need memcpy to
copy a structire, *it->dev = *ictx->dev will do.

imon_init_idev(), imon_init_touch(): - consizer returning proper error
codes via ERR_PTR() and check wit IS_ERR().

> ---
>  drivers/media/IR/imon.c |    5 +----
>  1 files changed, 1 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/IR/imon.c b/drivers/media/IR/imon.c
> index 0195dd5..08dff8c 100644
> --- a/drivers/media/IR/imon.c
> +++ b/drivers/media/IR/imon.c
> @@ -1944,7 +1944,6 @@ static struct imon_context *imon_init_intf0(struct usb_interface *intf)
>  
>  urb_submit_failed:
>  	ir_input_unregister(ictx->idev);
> -	input_free_device(ictx->idev);
>  idev_setup_failed:
>  find_endpoint_failed:
>  	mutex_unlock(&ictx->lock);
> @@ -2014,10 +2013,8 @@ static struct imon_context *imon_init_intf1(struct usb_interface *intf,
>  	return ictx;
>  
>  urb_submit_failed:
> -	if (ictx->touch) {
> +	if (ictx->touch)
>  		input_unregister_device(ictx->touch);
> -		input_free_device(ictx->touch);
> -	}
>  touch_setup_failed:
>  find_endpoint_failed:
>  	mutex_unlock(&ictx->lock);

Thanks.
  
Jarod Wilson July 26, 2010, 7:05 p.m. UTC | #2
On Mon, Jul 26, 2010 at 1:34 PM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> On Mon, Jul 26, 2010 at 10:13:52AM -0400, Jarod Wilson wrote:
>> Per Dmitry Torokhov (in a completely unrelated thread on linux-input),
>> following input_unregister_device with an input_free_device is
>> forbidden, the former is sufficient alone.
>>
>> CC: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>> Signed-off-by: Jarod Wilson <jarod@redhat.com>
>
> Acked-by: Dmitry Torokhov <dtor@mail.ru>
>
> Random notes about irmon:
>
> imon_init_idev():
>        memcpy(&ir->dev, ictx->dev, sizeof(struct device));
>
> This is... scary.  Devices are refcounted and if you copy them around
> all hell may break loose. On an unrelated note you do not need memcpy to
> copy a structire, *it->dev = *ictx->dev will do.
>
> imon_init_idev(), imon_init_touch(): - consizer returning proper error
> codes via ERR_PTR() and check wit IS_ERR().

Hm, I'm overdue to give that driver another look (bz.k.o #16351), will
add looking at these to the TODO list... (have immortalized them in
the bz).
  

Patch

diff --git a/drivers/media/IR/imon.c b/drivers/media/IR/imon.c
index 0195dd5..08dff8c 100644
--- a/drivers/media/IR/imon.c
+++ b/drivers/media/IR/imon.c
@@ -1944,7 +1944,6 @@  static struct imon_context *imon_init_intf0(struct usb_interface *intf)
 
 urb_submit_failed:
 	ir_input_unregister(ictx->idev);
-	input_free_device(ictx->idev);
 idev_setup_failed:
 find_endpoint_failed:
 	mutex_unlock(&ictx->lock);
@@ -2014,10 +2013,8 @@  static struct imon_context *imon_init_intf1(struct usb_interface *intf,
 	return ictx;
 
 urb_submit_failed:
-	if (ictx->touch) {
+	if (ictx->touch)
 		input_unregister_device(ictx->touch);
-		input_free_device(ictx->touch);
-	}
 touch_setup_failed:
 find_endpoint_failed:
 	mutex_unlock(&ictx->lock);