1c7d15b030
The vast majority of the busy/unbusy users in the tree don't acquire Giant before calling device_busy/unbusy. However, if multiple threads are opening a file, say, that causes the device to busy/unbusy, then we can race to the root marking things busy. Move to using a reference count to keep track of how many times a device_t has been made busy. Use that count to make the same decisions that we'd make with the old device state. Note: gpiopps.c uses D_TRACKCLOSE. Others do as well. However, there's a known race with closes that will be corrected for all the drivers that do this in a future commit. Sponsored by: Netflix Reviewed by: hselasky, jhb Differential Revision: https://reviews.freebsd.org/D26284 |
||
---|---|---|
.. | ||
dwgpio | ||
bytgpio.c | ||
chvgpio_reg.h | ||
chvgpio.c | ||
gpio_if.m | ||
gpiobacklight.c | ||
gpiobus_if.m | ||
gpiobus.c | ||
gpiobusvar.h | ||
gpioc.c | ||
gpioiic.c | ||
gpiokeys_codes.c | ||
gpiokeys.c | ||
gpiokeys.h | ||
gpioled_fdt.c | ||
gpioled.c | ||
gpiomdio.c | ||
gpiopower.c | ||
gpiopps.c | ||
gpioregulator.c | ||
gpiospi.c | ||
gpioths.c | ||
ofw_gpiobus.c | ||
pl061_acpi.c | ||
pl061_fdt.c | ||
pl061.c | ||
pl061.h | ||
qoriq_gpio.c | ||
qoriq_gpio.h |