Input: make sure input interfaces pin parent input devices
Recent driver core change causes references to parent devices being dropped early, at device_del() time, as opposed to when all children are freed. This causes oops in evdev with grabbed devices. Take the reference to the parent input device ourselves to ensure that it stays around long enough. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
@@ -171,6 +171,7 @@ static void joydev_free(struct device *dev)
|
||||
{
|
||||
struct joydev *joydev = container_of(dev, struct joydev, dev);
|
||||
|
||||
input_put_device(joydev->handle.dev);
|
||||
kfree(joydev);
|
||||
}
|
||||
|
||||
@@ -750,7 +751,7 @@ static int joydev_connect(struct input_handler *handler, struct input_dev *dev,
|
||||
joydev->minor = minor;
|
||||
|
||||
joydev->exist = 1;
|
||||
joydev->handle.dev = dev;
|
||||
joydev->handle.dev = input_get_device(dev);
|
||||
joydev->handle.name = joydev->name;
|
||||
joydev->handle.handler = handler;
|
||||
joydev->handle.private = joydev;
|
||||
|
Reference in New Issue
Block a user