mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 07:46:44 +07:00
Input: move name/timer init to input_alloc_dev()
We want to allow drivers to call input_event() at any time after the device got allocated. This means input_event() and input_register_device() must be allowed to run in parallel. The only conflicting calls in input_register_device() are init_timer() and dev_set_name(). Both can safely be moved to device allocation and we're good to go. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
2f0d260413
commit
a60a71b035
@ -1734,6 +1734,7 @@ EXPORT_SYMBOL_GPL(input_class);
|
|||||||
*/
|
*/
|
||||||
struct input_dev *input_allocate_device(void)
|
struct input_dev *input_allocate_device(void)
|
||||||
{
|
{
|
||||||
|
static atomic_t input_no = ATOMIC_INIT(0);
|
||||||
struct input_dev *dev;
|
struct input_dev *dev;
|
||||||
|
|
||||||
dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);
|
dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);
|
||||||
@ -1743,9 +1744,13 @@ struct input_dev *input_allocate_device(void)
|
|||||||
device_initialize(&dev->dev);
|
device_initialize(&dev->dev);
|
||||||
mutex_init(&dev->mutex);
|
mutex_init(&dev->mutex);
|
||||||
spin_lock_init(&dev->event_lock);
|
spin_lock_init(&dev->event_lock);
|
||||||
|
init_timer(&dev->timer);
|
||||||
INIT_LIST_HEAD(&dev->h_list);
|
INIT_LIST_HEAD(&dev->h_list);
|
||||||
INIT_LIST_HEAD(&dev->node);
|
INIT_LIST_HEAD(&dev->node);
|
||||||
|
|
||||||
|
dev_set_name(&dev->dev, "input%ld",
|
||||||
|
(unsigned long) atomic_inc_return(&input_no) - 1);
|
||||||
|
|
||||||
__module_get(THIS_MODULE);
|
__module_get(THIS_MODULE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2019,7 +2024,6 @@ static void devm_input_device_unregister(struct device *dev, void *res)
|
|||||||
*/
|
*/
|
||||||
int input_register_device(struct input_dev *dev)
|
int input_register_device(struct input_dev *dev)
|
||||||
{
|
{
|
||||||
static atomic_t input_no = ATOMIC_INIT(0);
|
|
||||||
struct input_devres *devres = NULL;
|
struct input_devres *devres = NULL;
|
||||||
struct input_handler *handler;
|
struct input_handler *handler;
|
||||||
unsigned int packet_size;
|
unsigned int packet_size;
|
||||||
@ -2059,7 +2063,6 @@ int input_register_device(struct input_dev *dev)
|
|||||||
* If delay and period are pre-set by the driver, then autorepeating
|
* If delay and period are pre-set by the driver, then autorepeating
|
||||||
* is handled by the driver itself and we don't do it in input.c.
|
* is handled by the driver itself and we don't do it in input.c.
|
||||||
*/
|
*/
|
||||||
init_timer(&dev->timer);
|
|
||||||
if (!dev->rep[REP_DELAY] && !dev->rep[REP_PERIOD]) {
|
if (!dev->rep[REP_DELAY] && !dev->rep[REP_PERIOD]) {
|
||||||
dev->timer.data = (long) dev;
|
dev->timer.data = (long) dev;
|
||||||
dev->timer.function = input_repeat_key;
|
dev->timer.function = input_repeat_key;
|
||||||
@ -2073,9 +2076,6 @@ int input_register_device(struct input_dev *dev)
|
|||||||
if (!dev->setkeycode)
|
if (!dev->setkeycode)
|
||||||
dev->setkeycode = input_default_setkeycode;
|
dev->setkeycode = input_default_setkeycode;
|
||||||
|
|
||||||
dev_set_name(&dev->dev, "input%ld",
|
|
||||||
(unsigned long) atomic_inc_return(&input_no) - 1);
|
|
||||||
|
|
||||||
error = device_add(&dev->dev);
|
error = device_add(&dev->dev);
|
||||||
if (error)
|
if (error)
|
||||||
goto err_free_vals;
|
goto err_free_vals;
|
||||||
|
Loading…
Reference in New Issue
Block a user