Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 233245
b: refs/heads/master
c: 19e9554
h: refs/heads/master
i:
  233243: 84194ed
v: v3
  • Loading branch information
Duncan Laurie authored and Dmitry Torokhov committed Feb 3, 2011
1 parent 804108e commit d2c29cc
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e0d5f4c31d4769b8574dfd8c61a1f753f7cfbc2f
refs/heads/master: 19e955415398687b79fbf1c072a84c9874b8d576
11 changes: 7 additions & 4 deletions trunk/drivers/input/serio/serio.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,21 +188,22 @@ static void serio_free_event(struct serio_event *event)
kfree(event);
}

static void serio_remove_duplicate_events(struct serio_event *event)
static void serio_remove_duplicate_events(void *object,
enum serio_event_type type)
{
struct serio_event *e, *next;
unsigned long flags;

spin_lock_irqsave(&serio_event_lock, flags);

list_for_each_entry_safe(e, next, &serio_event_list, node) {
if (event->object == e->object) {
if (object == e->object) {
/*
* If this event is of different type we should not
* look further - we only suppress duplicate events
* that were sent back-to-back.
*/
if (event->type != e->type)
if (type != e->type)
break;

list_del_init(&e->node);
Expand Down Expand Up @@ -245,7 +246,7 @@ static void serio_handle_event(struct work_struct *work)
break;
}

serio_remove_duplicate_events(event);
serio_remove_duplicate_events(event->object, event->type);
serio_free_event(event);
}

Expand Down Expand Up @@ -436,10 +437,12 @@ static ssize_t serio_rebind_driver(struct device *dev, struct device_attribute *
} else if (!strncmp(buf, "rescan", count)) {
serio_disconnect_port(serio);
serio_find_driver(serio);
serio_remove_duplicate_events(serio, SERIO_RESCAN_PORT);
} else if ((drv = driver_find(buf, &serio_bus)) != NULL) {
serio_disconnect_port(serio);
error = serio_bind_driver(serio, to_serio_driver(drv));
put_driver(drv);
serio_remove_duplicate_events(serio, SERIO_RESCAN_PORT);
} else {
error = -EINVAL;
}
Expand Down

0 comments on commit d2c29cc

Please sign in to comment.