diff mbox

fix usbhid using GFP_KERNEL in interrupt

Message ID 200909212225.48513.oliver@neukum.org
State New, archived
Delegated to: Jiri Kosina
Headers show

Commit Message

Oliver Neukum Sept. 21, 2009, 8:25 p.m. UTC
hid:usbhid: fix wrong use of GFP_KERNEL
    
hid_input_report() must be told it is called in interrupt context

Signed-off-by: Oliver Neukum <oliver@neukum.org>

Hi Jiri, Greg,

this should go into the current tree and the stable tree.

	Regards
		Oliver

--
commit ca5c4a1397d1a1c0d1074f4d8922630fdd732780
Author: Oliver Neukum <oliver@neukum.org>
Date:   Mon Sep 21 22:02:01 2009 +0200

    hid:usbhid: fix wrong use of GFP_KERNEL
    
    hid_input_report() must be told it is called in interrupt context


--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Henk Martijn Sept. 21, 2009, 8:33 p.m. UTC | #1
Oliver Neukum wrote:
> hid:usbhid: fix wrong use of GFP_KERNEL
>     
> hid_input_report() must be told it is called in interrupt context
> 
> Signed-off-by: Oliver Neukum <oliver@neukum.org>
> 
> Hi Jiri, Greg,
> 
> this should go into the current tree and the stable tree.
Stable? Interestingly I did not have any problems with 2.6.31......

/Henk
> 
> 	Regards
> 		Oliver
> 
> --
> commit ca5c4a1397d1a1c0d1074f4d8922630fdd732780
> Author: Oliver Neukum <oliver@neukum.org>
> Date:   Mon Sep 21 22:02:01 2009 +0200
> 
>     hid:usbhid: fix wrong use of GFP_KERNEL
>     
>     hid_input_report() must be told it is called in interrupt context
> 
> diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
> index 1b0e07a..ab2869d 100644
> --- a/drivers/hid/usbhid/hid-core.c
> +++ b/drivers/hid/usbhid/hid-core.c
> @@ -455,7 +455,7 @@ static void hid_ctrl(struct urb *urb)
>  		if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN)
>  			hid_input_report(urb->context,
>  				usbhid->ctrl[usbhid->ctrltail].report->type,
> -				urb->transfer_buffer, urb->actual_length, 0);
> +				urb->transfer_buffer, urb->actual_length, 1);
>  		break;
>  	case -ESHUTDOWN:	/* unplug */
>  		unplug = 1;
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Oliver Neukum Sept. 21, 2009, 8:37 p.m. UTC | #2
Am Montag, 21. September 2009 22:33:53 schrieb Henk Martijn:
> Oliver Neukum wrote:
> > hid:usbhid: fix wrong use of GFP_KERNEL
> >
> > hid_input_report() must be told it is called in interrupt context
> >
> > Signed-off-by: Oliver Neukum <oliver@neukum.org>
> >
> > Hi Jiri, Greg,
> >
> > this should go into the current tree and the stable tree.
>
> Stable? Interestingly I did not have any problems with 2.6.31......

OK, Greg, hold your fire. Jiri is this necessary in stable?

	Regards
		Oliver

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jiri Kosina Sept. 21, 2009, 9:42 p.m. UTC | #3
On Mon, 21 Sep 2009, Oliver Neukum wrote:

> > > hid:usbhid: fix wrong use of GFP_KERNEL
> > >
> > > hid_input_report() must be told it is called in interrupt context
> > >
> > > Signed-off-by: Oliver Neukum <oliver@neukum.org>
> > >
> > > Hi Jiri, Greg,
> > >
> > > this should go into the current tree and the stable tree.
> >
> > Stable? Interestingly I did not have any problems with 2.6.31......
> 
> OK, Greg, hold your fire. Jiri is this necessary in stable?

Hi,

no, it's not. 2.6.31 doesn't do any allocation in hid_input_report(), this 
is new with HID debugging through debugfs that went to Linus in 2.6.32 
merge window.

The fix for this particular problem is already on its way upstream, 
waiting for Linus to pull.

Thanks,
diff mbox

Patch

diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 1b0e07a..ab2869d 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -455,7 +455,7 @@  static void hid_ctrl(struct urb *urb)
 		if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN)
 			hid_input_report(urb->context,
 				usbhid->ctrl[usbhid->ctrltail].report->type,
-				urb->transfer_buffer, urb->actual_length, 0);
+				urb->transfer_buffer, urb->actual_length, 1);
 		break;
 	case -ESHUTDOWN:	/* unplug */
 		unplug = 1;