]> git.pld-linux.org Git - packages/kernel.git/blame - linux-2.4.18-input-35215.patch
- obsolete
[packages/kernel.git] / linux-2.4.18-input-35215.patch
CommitLineData
ea4fa5e5
JR
1diff -urNp linux-1255/drivers/input/input.c linux-1261/drivers/input/input.c
2--- linux-1255/drivers/input/input.c
3+++ linux-1261/drivers/input/input.c
4@@ -34,6 +34,7 @@
5 #include <linux/input.h>
6 #include <linux/module.h>
7 #include <linux/random.h>
8+#include <linux/kmod.h>
9
10 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
11 MODULE_DESCRIPTION("Input layer module");
12@@ -370,12 +371,20 @@ void input_unregister_handler(struct inp
13
14 static int input_open_file(struct inode *inode, struct file *file)
15 {
16- struct input_handler *handler = input_table[MINOR(inode->i_rdev) >> 5];
17- struct file_operations *old_fops, *new_fops = NULL;
18+ struct input_handler *handler;
19+ struct file_operations *old_fops, *new_fops;
20+ unsigned int minor = MINOR(inode->i_rdev);
21 int err;
22
23- /* No load-on-demand here? */
24- if (!handler || !(new_fops = fops_get(handler->fops)))
25+ /* XXX Are we sure there's no locking problem here? */
26+ if (!(handler = input_table[minor >> 5])) {
27+ char modnam[sizeof("char-major-00000-000000000")];
28+ sprintf(modnam, "char-major-%d-%d", INPUT_MAJOR, minor & ~0x1f);
29+ request_module(modnam);
30+ if (!(handler = input_table[minor >> 5]))
31+ return -ENODEV;
32+ }
33+ if (!(new_fops = fops_get(handler->fops)))
34 return -ENODEV;
35
36 /*
This page took 0.136099 seconds and 4 git commands to generate.