On Thu, Mar 5, 2015 at 8:54 PM, Ping Cheng <pinglinux@xxxxxxxxx> wrote: > On Thu, Mar 5, 2015 at 2:36 PM, Benjamin Tissoires > <benjamin.tissoires@xxxxxxxxxx> wrote: >> 486b908 (HID: wacom: do not send pen events before touch is up/forced out) >> introduces a kernel oops when plugging a tablet without touch. > > Thank you for the catch. You must have tried an Intuos 4 or earlier > model. WACOM_QUIRK_MULTI_INPUT is only set for I5 and later. > >> wacom->shared is null for these devices so this leads to a null pointer >> exception. > > The root cause is "if (wacom->shared->touch_down)" was added outside > of "if (features->quirks & WACOM_QUIRK_MULTI_INPUT)". A consistent fix > would be: > ---- > @@ -555,8 +555,11 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) > (features->type == CINTIQ && !(data[1] & 0x40))) > return 1; > > - if (features->quirks & WACOM_QUIRK_MULTI_INPUT) > + if (features->quirks & WACOM_QUIRK_MULTI_INPUT) { > wacom->shared->stylus_in_proximity = true; > + if (wacom->shared->touch_down) > + return 1; > + } Yes, no, maybe :) that was my first approach. But then I switched to "if (wacom->shared)" to actually remember the hackers that wacom->shared is not always valid and that we should not assume it is. I don't have any preference except that this needs to be fixed in 4.0 final. Jiri, do you prefer that I resend the patch? or do you amend it? or do you keep my first version? Cheers, Benjamin > > /* in Range while exiting */ > if (((data[1] & 0xfe) == 0x20) && wacom->reporting_data) { > ---- > > Cheers, > > Ping > >> Change the condition to make it clear that what we need is wacom->shared >> not NULL. >> >> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx> >> --- >> >> Hi Jiri, >> >> this one should be pulled in 4.0. Or we will have surprised users :) >> >> Cheers, >> Benjamin >> >> drivers/hid/wacom_wac.c | 7 ++++--- >> 1 file changed, 4 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c >> index ff9a7ab..9739a4c 100644 >> --- a/drivers/hid/wacom_wac.c >> +++ b/drivers/hid/wacom_wac.c >> @@ -564,11 +564,12 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) >> (features->type == CINTIQ && !(data[1] & 0x40))) >> return 1; >> >> - if (features->quirks & WACOM_QUIRK_MULTI_INPUT) >> + if (wacom->shared) { >> wacom->shared->stylus_in_proximity = true; >> >> - if (wacom->shared->touch_down) >> - return 1; >> + if (wacom->shared->touch_down) >> + return 1; >> + } >> >> /* in Range while exiting */ >> if (((data[1] & 0xfe) == 0x20) && wacom->reporting_data) { >> -- >> 2.1.0 >> > -- > To unsubscribe from this list: send the line "unsubscribe linux-input" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html