mirror of
https://github.com/opnsense/src.git
synced 2026-02-19 02:30:08 -05:00
At the beginning of evdev there was a LOR between hardware driver's and evdev client list locks as they were taken in different order at driver's interrupt and evdev open()/close() handlers. The LOR was fixed with introduction of evdev_register_mtx() function which allowed to use a hardware driver's lock as evdev client list lock. While this works good with PS/2 and USB, this does not work with I2C. Unlike PS/2 and USB, I2C open()/close() handlers do unbound sleeps while waiting for I2C bus to release and while performing IO. This change uses epoch(9) for traversing evdev client list in interrupt handler to avoid the LOR thus making possible to convert evdev client list lock to sleepable sx. While here add brief locking protocol description. Reviewed by: markj Differential revision: https://reviews.freebsd.org/D27865 |
||
|---|---|---|
| .. | ||
| cdev.c | ||
| evdev.c | ||
| evdev.h | ||
| evdev_mt.c | ||
| evdev_private.h | ||
| evdev_utils.c | ||
| input-event-codes.h | ||
| input.h | ||
| uinput.c | ||
| uinput.h | ||