diff mbox

kernel panic on gpio-keys

Message ID 20131227015658.GA20756@core.coreip.homeip.net (mailing list archive)
State New, archived
Headers show

Commit Message

Dmitry Torokhov Dec. 27, 2013, 1:56 a.m. UTC
On Tue, Dec 17, 2013 at 04:17:34PM +0100, Paul Cercueil wrote:
> On 14/12/2013 10:39, Dmitry Torokhov wrote:
> >On Wed, Dec 11, 2013 at 08:17:29PM +0100, Paul Cercueil wrote:
> >>Hi there,
> >>
> >>I am trying to use the gpio-keys driver to inject joystick events.
> >>There seems to be some basic support of it, looking at <linux/gpio_keys.h>.
> >>
> >>However, registering the following will trigger a kernel panic in
> >>the kernel:
> >>
> >>static struct gpio_keys_button my_buttons[] {
> >>	{
> >>		.gpio = GPIO_FOO,
> >>		.type = EV_ABS,
> >>		.code = ABS_HAT0X,
> >>		.value = 1,
> >>	},
> >>};
> >>
> >>(tested on kernel 3.12).
> >>
> >>I don't know well the input subsystem, so I have no idea of what is
> >>going wrong. Could anybody try to at least reproduce the issue?
> >
> >It woudl be helpful if you poster the stack trace from panic so we'd
> >have an idea where the fault happens.
> >
> >Thanks.
> >
> 
> Here is the crash log I get: http://pastebin.com/FzTTGxsR
> (I did put it on pastebin because it's huge, 200+ lines).
> 
> The first OOPS happen as soon as the GPIO button is pressed; the
> other ones seem to happen recursively. I included only a part of the
> log I get, as the OOPSes continue to flow until the watchdog kicks
> in.

Hmm, I have an idea: this driver is one of few that does not use
input_set_abs_info() and this does not allocate memory for absinfo data
that input core uses to handle absolute events.

Does the patch below work for you?

Thanks.

Comments

Paul Cercueil Dec. 30, 2013, 3:13 p.m. UTC | #1
On 27/12/2013 02:56, Dmitry Torokhov wrote:
> On Tue, Dec 17, 2013 at 04:17:34PM +0100, Paul Cercueil wrote:
>> On 14/12/2013 10:39, Dmitry Torokhov wrote:
>>> On Wed, Dec 11, 2013 at 08:17:29PM +0100, Paul Cercueil wrote:
>>>> Hi there,
>>>>
>>>> I am trying to use the gpio-keys driver to inject joystick events.
>>>> There seems to be some basic support of it, looking at <linux/gpio_keys.h>.
>>>>
>>>> However, registering the following will trigger a kernel panic in
>>>> the kernel:
>>>>
>>>> static struct gpio_keys_button my_buttons[] {
>>>> 	{
>>>> 		.gpio = GPIO_FOO,
>>>> 		.type = EV_ABS,
>>>> 		.code = ABS_HAT0X,
>>>> 		.value = 1,
>>>> 	},
>>>> };
>>>>
>>>> (tested on kernel 3.12).
>>>>
>>>> I don't know well the input subsystem, so I have no idea of what is
>>>> going wrong. Could anybody try to at least reproduce the issue?
>>>
>>> It woudl be helpful if you poster the stack trace from panic so we'd
>>> have an idea where the fault happens.
>>>
>>> Thanks.
>>>
>>
>> Here is the crash log I get: http://pastebin.com/FzTTGxsR
>> (I did put it on pastebin because it's huge, 200+ lines).
>>
>> The first OOPS happen as soon as the GPIO button is pressed; the
>> other ones seem to happen recursively. I included only a part of the
>> log I get, as the OOPSes continue to flow until the watchdog kicks
>> in.
>
> Hmm, I have an idea: this driver is one of few that does not use
> input_set_abs_info() and this does not allocate memory for absinfo data
> that input core uses to handle absolute events.
>
> Does the patch below work for you?
>
> Thanks.
>

Hi,

The patch works just fine, thank you!
--
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
Dmitry Torokhov Dec. 30, 2013, 6:42 p.m. UTC | #2
On Mon, Dec 30, 2013 at 04:13:12PM +0100, Paul Cercueil wrote:
> On 27/12/2013 02:56, Dmitry Torokhov wrote:
> >On Tue, Dec 17, 2013 at 04:17:34PM +0100, Paul Cercueil wrote:
> >>On 14/12/2013 10:39, Dmitry Torokhov wrote:
> >>>On Wed, Dec 11, 2013 at 08:17:29PM +0100, Paul Cercueil wrote:
> >>>>Hi there,
> >>>>
> >>>>I am trying to use the gpio-keys driver to inject joystick events.
> >>>>There seems to be some basic support of it, looking at <linux/gpio_keys.h>.
> >>>>
> >>>>However, registering the following will trigger a kernel panic in
> >>>>the kernel:
> >>>>
> >>>>static struct gpio_keys_button my_buttons[] {
> >>>>	{
> >>>>		.gpio = GPIO_FOO,
> >>>>		.type = EV_ABS,
> >>>>		.code = ABS_HAT0X,
> >>>>		.value = 1,
> >>>>	},
> >>>>};
> >>>>
> >>>>(tested on kernel 3.12).
> >>>>
> >>>>I don't know well the input subsystem, so I have no idea of what is
> >>>>going wrong. Could anybody try to at least reproduce the issue?
> >>>
> >>>It woudl be helpful if you poster the stack trace from panic so we'd
> >>>have an idea where the fault happens.
> >>>
> >>>Thanks.
> >>>
> >>
> >>Here is the crash log I get: http://pastebin.com/FzTTGxsR
> >>(I did put it on pastebin because it's huge, 200+ lines).
> >>
> >>The first OOPS happen as soon as the GPIO button is pressed; the
> >>other ones seem to happen recursively. I included only a part of the
> >>log I get, as the OOPSes continue to flow until the watchdog kicks
> >>in.
> >
> >Hmm, I have an idea: this driver is one of few that does not use
> >input_set_abs_info() and this does not allocate memory for absinfo data
> >that input core uses to handle absolute events.
> >
> >Does the patch below work for you?
> >
> >Thanks.
> >
> 
> Hi,
> 
> The patch works just fine, thank you!

Thanks Paul.
diff mbox

Patch

diff --git a/drivers/input/input.c b/drivers/input/input.c
index 692435a..1c4c0db 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -1909,6 +1909,10 @@  void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int
 		break;
 
 	case EV_ABS:
+		input_alloc_absinfo(dev);
+		if (!dev->absinfo)
+			return;
+
 		__set_bit(code, dev->absbit);
 		break;