Hi, When open/close evdev, the code is as following to handle multi-client operation: static int evdev_release(...) { ... if (!--evdev->open) { <------------preempted if (evdev->exist) input_close_device(...); else evdev_free(evdev); } return 0; }
static int evdev_open(...) { ... if (!evdev->open++ && evdev->exist){ errror = input_open_device(...); if (error) { ... } } ... return 0; } So if the evdev_release() is preempted at the point marked by another process which will open the evdev, which will make operation sequence like: --evdev->open in evdev_release() -----> preempted evdev->open++ and input_open_devie() <----- reschedule input_close_device() Should we introduce a mutex here? Or do I miss something? Thanks. Regards Yin, Fengwei - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/