2005-11-14 05:11:38

by NeilBrown

[permalink] [raw]
Subject: uinput broken in 2.6.15-rc1



The 'uinput' driver doesn't work well in 2.6.15-rc1. It
triggers this complaint:
printk(KERN_WARNING "input: device %s is statically allocated, will not register\n"
"Please convert to input_allocate_device() or contact [email protected]\n",
dev->name ? dev->name : "<Unknown>");

The following patch fixes it for me, but I'm not convinced it is
correct. I would expect it to need a special 'free' routine to match
the special 'alloc' routine, but I couldn't easily find one.

NeilBrown

Signed-off-by: Neil Brown <[email protected]>

### Diffstat output
./drivers/input/misc/uinput.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff ./drivers/input/misc/uinput.c~current~ ./drivers/input/misc/uinput.c
--- ./drivers/input/misc/uinput.c~current~ 2005-11-14 14:34:56.000000000 +1100
+++ ./drivers/input/misc/uinput.c 2005-11-14 15:17:01.000000000 +1100
@@ -199,10 +199,9 @@ static int uinput_open(struct inode *ino
spin_lock_init(&newdev->requests_lock);
init_waitqueue_head(&newdev->requests_waitq);

- newinput = kmalloc(sizeof(struct input_dev), GFP_KERNEL);
+ newinput = input_allocate_device();
if (!newinput)
goto cleanup;
- memset(newinput, 0, sizeof(struct input_dev));

newdev->dev = newinput;


2005-11-14 06:10:12

by Dmitry Torokhov

[permalink] [raw]
Subject: Re: uinput broken in 2.6.15-rc1

On Monday 14 November 2005 00:11, Neil Brown wrote:
>
> The 'uinput' driver doesn't work well in 2.6.15-rc1. It
> triggers this complaint:
> printk(KERN_WARNING "input: device %s is statically allocated, will not register\n"
> "Please convert to input_allocate_device() or contact [email protected]\n",
> dev->name ? dev->name : "<Unknown>");
>
> The following patch fixes it for me, but I'm not convinced it is
> correct. I would expect it to need a special 'free' routine to match
> the special 'alloc' routine, but I couldn't easily find one.
>

Hi,

This should work OK as long as you don't try to reuse the uinput device
because input_unregister_device frees the data structure for you and
uinput does not expect to lose part of its data structure.

I am trying to comer up with a proper fix...

--
Dmitry