Re: 2.6.14-rc4-mm1

From: Greg KH
Date: Tue Oct 18 2005 - 02:00:12 EST


On Mon, Oct 17, 2005 at 01:22:42PM -0700, Andrew Morton wrote:
> Brice Goglin <Brice.Goglin@xxxxxxxxxxxx> wrote:
> > Modules linked in: pcspkr parport_pc parport irtty_sir sir_dev irda
> > crc_ccitt hw_random uhci_hcd usbcore snd_maestro3 snd_ac97_codec
> > snd_ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_page_alloc
> > snd soundcore yenta_socket rsrc_nonstatic pcmcia_core nls_iso8859_15
> > nls_cp850 vfat fat nls_base psmouse
> > CPU: 0
> > EIP: 0060:[<c01dda09>] Not tainted VLI
> > EFLAGS: 00010246 (2.6.14-rc4-mm1=LoulousMobile)
> > EIP is at get_kobj_path_length+0x19/0x30
> > eax: 00000000 ebx: 00000000 ecx: ffffffff edx: e6efee50
> > esi: 00000001 edi: 00000000 ebp: e737eec8 esp: e737eebc
> > ds: 007b es: 007b ss: 0068
> > Process sed (pid: 3258, threadinfo=e737e000 task=e7970a90)
> > Stack: e6efe800 00000001 e6de4000 e737eee8 c01dda9a e6efee50 e6de42e4
> > 00000286
> > e6efe800 00000001 e6de4000 e737ef24 c02a357f e6efee50 800000d0
> > 0000000f
> > 00000002 0000000a 00000000 e6efe800 00000000 000002e5 000002e5
> > e7e9ce60
> > Call Trace:
> > [<c010414b>] show_stack+0xab/0xf0
> > [<c010433f>] show_registers+0x18f/0x230
> > [<c0104592>] die+0x102/0x1c0
> > [<c035f27a>] do_page_fault+0x33a/0x66f
> > [<c0103dbb>] error_code+0x4f/0x54
> > [<c01dda9a>] kobject_get_path+0x1a/0x70
> > [<c02a357f>] input_devices_read+0x53f/0x590
> > [<c01a2e75>] proc_file_read+0x1b5/0x260
> > [<c01689f8>] vfs_read+0xa8/0x190
> > [<c0168dc7>] sys_read+0x47/0x70
> > [<c0103325>] syscall_call+0x7/0xb
> > Code: f8 89 ec 5d c3 8d b6 00 00 00 00 8d bc 27 00 00 00 00 55 89 e5 8b
> > 55 08 57 56 be 01 00 00 00 53 31 db 8b 3a b9 ff ff ff ff 89 d8 <f2> ae
> > f7 d1 49 8b 52 24 8d 74 31 01 85 d2 75 e7 5b 89 f0 5e 5f
> > <6>input: isa0061/input0//class/input_dev as input3
>
> Something went wrong under input_devices_read(). Probably culprits cc'ed.

I know this patch doesn't have the proc path, but it does fix an easy
oops that I can generate from sysfs input devices. Can you try it out
to see if it fixes your issue too?

thanks,

greg k-h

---
drivers/input/input.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)

--- gregkh-2.6.orig/drivers/input/input.c
+++ gregkh-2.6/drivers/input/input.c
@@ -522,17 +522,22 @@ static ssize_t input_dev_show_##name(str
up(&input_dev->sem); \
\
return retval; \
-}
+} \
+static CLASS_DEVICE_ATTR(name, S_IRUGO, input_dev_show_##name, NULL);

INPUT_DEV_STRING_ATTR_SHOW(name);
INPUT_DEV_STRING_ATTR_SHOW(phys);
INPUT_DEV_STRING_ATTR_SHOW(uniq);

-static struct class_device_attribute input_dev_attrs[] = {
- __ATTR(name, S_IRUGO, input_dev_show_name, NULL),
- __ATTR(phys, S_IRUGO, input_dev_show_phys, NULL),
- __ATTR(uniq, S_IRUGO, input_dev_show_uniq, NULL),
- __ATTR_NULL
+static struct attribute *input_dev_attrs[] = {
+ &class_device_attr_name.attr,
+ &class_device_attr_phys.attr,
+ &class_device_attr_uniq.attr,
+ NULL
+};
+
+static struct attribute_group input_dev_group = {
+ .attrs = input_dev_attrs,
};

#define INPUT_DEV_ID_ATTR(name) \
@@ -694,7 +699,6 @@ struct class input_class = {
.name = "input",
.release = input_dev_release,
.hotplug = input_dev_hotplug,
- .class_dev_attrs = input_dev_attrs,
};

struct input_dev *input_allocate_device(void)
@@ -732,6 +736,7 @@ static void input_register_classdevice(s
kfree(path);

class_device_add(&dev->cdev);
+ sysfs_create_group(&dev->cdev.kobj, &input_dev_group);
sysfs_create_group(&dev->cdev.kobj, &input_dev_id_attr_group);
sysfs_create_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/