--- l/drivers/input/misc/uinput.c +++ u/drivers/input/misc/uinput.c @@ -311,6 +311,7 @@ static int uinput_create_device(struct u struct input_dev *dev = udev->dev; int error, nslot; + lockdep_assert_held(&udev->mutex); if (udev->state != UIST_SETUP_COMPLETE) { printk(KERN_DEBUG "%s: write device info first\n", UINPUT_NAME); return -EINVAL; @@ -362,7 +363,9 @@ static int uinput_create_device(struct u input_set_drvdata(udev->dev, udev); - error = input_register_device(udev->dev); + mutex_unlock(&udev->mutex); + error = input_register_device(dev); + mutex_lock(&udev->mutex); if (error) goto fail2;