summaryrefslogtreecommitdiff
path: root/drivers/input/mouse
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2026-03-11 22:50:57 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2026-03-12 11:16:30 -0700
commitbeb2b0a26c3a1021421e8db40154c3b6687b6621 (patch)
tree48bbb0ef1ae73235eee375dcb561963e3da399a2 /drivers/input/mouse
parentd4904a3d7159b342d45de8495046d33d1c18998e (diff)
downloadlwn-beb2b0a26c3a1021421e8db40154c3b6687b6621.tar.gz
lwn-beb2b0a26c3a1021421e8db40154c3b6687b6621.zip
Input: psmouse - remove dedicated kpsmoused workqueue
The only user of psmouse_queue_work() and therefore kpsmoused workqueue is psmouse-base itself, when it tries to schedule the resync work. Since resyncing is not going to race with itself we no longer need the dedicated ordered workqueue. Remove it and switch to using regular (non-delayed) work structure scheduled on the default workqueue. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/mouse')
-rw-r--r--drivers/input/mouse/psmouse-base.c30
-rw-r--r--drivers/input/mouse/psmouse.h4
2 files changed, 7 insertions, 27 deletions
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
index 3f34825c8691..6ab5f1d96eae 100644
--- a/drivers/input/mouse/psmouse-base.c
+++ b/drivers/input/mouse/psmouse-base.c
@@ -113,8 +113,6 @@ ATTRIBUTE_GROUPS(psmouse_dev);
*/
static DEFINE_MUTEX(psmouse_mutex);
-static struct workqueue_struct *kpsmoused_wq;
-
struct psmouse *psmouse_from_serio(struct serio *serio)
{
struct ps2dev *ps2dev = serio_get_drvdata(serio);
@@ -240,12 +238,6 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
return PSMOUSE_FULL_PACKET;
}
-void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
- unsigned long delay)
-{
- queue_delayed_work(kpsmoused_wq, work, delay);
-}
-
/*
* __psmouse_set_state() sets new psmouse state and resets all flags.
*/
@@ -379,7 +371,7 @@ static void psmouse_receive_byte(struct ps2dev *ps2dev, u8 data)
psmouse->name, psmouse->phys, psmouse->pktcnt);
psmouse->badbyte = psmouse->packet[0];
__psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
- psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
+ schedule_work(&psmouse->resync_work);
return;
}
@@ -415,7 +407,7 @@ static void psmouse_receive_byte(struct ps2dev *ps2dev, u8 data)
time_after(jiffies, psmouse->last + psmouse->resync_time * HZ)) {
psmouse->badbyte = psmouse->packet[0];
__psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
- psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
+ schedule_work(&psmouse->resync_work);
return;
}
@@ -1313,7 +1305,7 @@ int psmouse_deactivate(struct psmouse *psmouse)
static void psmouse_resync(struct work_struct *work)
{
struct psmouse *parent = NULL, *psmouse =
- container_of(work, struct psmouse, resync_work.work);
+ container_of(work, struct psmouse, resync_work);
struct serio *serio = psmouse->ps2dev.serio;
psmouse_ret_t rc = PSMOUSE_GOOD_DATA;
bool failed = false, enabled = false;
@@ -1466,7 +1458,7 @@ static void psmouse_disconnect(struct serio *serio)
/* make sure we don't have a resync in progress */
mutex_unlock(&psmouse_mutex);
- disable_delayed_work_sync(&psmouse->resync_work);
+ disable_work_sync(&psmouse->resync_work);
mutex_lock(&psmouse_mutex);
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
@@ -1580,7 +1572,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
ps2_init(&psmouse->ps2dev, serio,
psmouse_pre_receive_byte, psmouse_receive_byte);
- INIT_DELAYED_WORK(&psmouse->resync_work, psmouse_resync);
+ INIT_WORK(&psmouse->resync_work, psmouse_resync);
psmouse->dev = input_dev;
scnprintf(psmouse->phys, sizeof(psmouse->phys), "%s/input0", serio->phys);
@@ -2022,21 +2014,12 @@ static int __init psmouse_init(void)
if (err)
return err;
- kpsmoused_wq = alloc_ordered_workqueue("kpsmoused", 0);
- if (!kpsmoused_wq) {
- pr_err("failed to create kpsmoused workqueue\n");
- err = -ENOMEM;
- goto err_smbus_exit;
- }
-
err = serio_register_driver(&psmouse_drv);
if (err)
- goto err_destroy_wq;
+ goto err_smbus_exit;
return 0;
-err_destroy_wq:
- destroy_workqueue(kpsmoused_wq);
err_smbus_exit:
psmouse_smbus_module_exit();
return err;
@@ -2045,7 +2028,6 @@ err_smbus_exit:
static void __exit psmouse_exit(void)
{
serio_unregister_driver(&psmouse_drv);
- destroy_workqueue(kpsmoused_wq);
psmouse_smbus_module_exit();
}
diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
index 783201301e5c..90ed8cd15d85 100644
--- a/drivers/input/mouse/psmouse.h
+++ b/drivers/input/mouse/psmouse.h
@@ -90,7 +90,7 @@ struct psmouse {
void *private;
struct input_dev *dev;
struct ps2dev ps2dev;
- struct delayed_work resync_work;
+ struct work_struct resync_work;
const char *vendor;
const char *name;
const struct psmouse_protocol *protocol;
@@ -132,8 +132,6 @@ struct psmouse {
struct psmouse *psmouse_from_serio(struct serio *serio);
-void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
- unsigned long delay);
int psmouse_reset(struct psmouse *psmouse);
void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state);
void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution);