]> git.pld-linux.org Git - packages/kernel.git/blob - linux-2.4.18-input-35215.patch
- obsolete
[packages/kernel.git] / linux-2.4.18-input-35215.patch
1 diff -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.070502 seconds and 3 git commands to generate.