> Date: Sun, 20 May 2018 10:44:49 +0200 > From: Martin Pieuchot <[email protected]> > > On 19/05/18(Sat) 21:39, Mark Kettenis wrote: > > Without the wakeup, the event doesn't get scheduled until some other > > event wakes up the acpi thread. On one of my machines the gpio event > > reads a status byte over i2c in repsonse of a gpio event. Without the > > wakeup that status byte has often been cleared/overwritten by the time > > the event gets scheduled. > > > > ok? > > ok mpi@ > > Then why not make acpi_addtask() call acpi_wakeup() if it could enqueue > a task? This is how task_add(9) work. Most of the code paths already > use the pattern your suggesting.
I was thinking the same thing. It seems acpi_interrupt() schedules a couple of tasks and does a single wakeup. There are also some scheduling sleep-related tasks that don't have an acpi_wakeup() associated with them. I don't see a fundamental reason why we can't do this though. But maybe I'm missing something? > > Index: acpi.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/acpi/acpi.c,v > > retrieving revision 1.343 > > diff -u -p -r1.343 acpi.c > > --- acpi.c 17 May 2018 20:46:45 -0000 1.343 > > +++ acpi.c 19 May 2018 19:35:59 -0000 > > @@ -861,6 +861,7 @@ acpi_gpio_event(void *arg) > > struct acpi_gpio_event *ev = arg; > > > > acpi_addtask(acpi_softc, acpi_gpio_event_task, ev->node, ev->pin); > > + acpi_wakeup(acpi_softc); > > return 1; > > } > > > > >
