HomeFreeBSD

kernel timer API rework

Description

kernel timer API rework

In config/kernel-timer.m4 refactor slightly to check more generally
for the new timer_setup() APIs, but also check the callback signature
because some kernels (notably 4.14) have the new timer_setup() API but
use the old callback signature. Also add a check for a flags member in
struct timer_list, which was added in 4.1-rc8.

Add compatibility shims to include/spl/sys/timer.h to allow using the
new timer APIs with the only two caveats being that the callback
argument type must be declared as spl_timer_list_t and an explicit
assignment is required to get the timer variable for the timer_of()
macro. So the callback would look like this:

c
__cv_wakeup(spl_timer_list_t t)
{
        struct timer_list *tmr = (struct timer_list *)t;
	struct thing *parent = from_timer(parent, tmr,
		parent_timer_field);
	... /* do stuff with parent */

Make some minor changes to spl-condvar.c and spl-taskq.c to use the
new timer APIs instead of conditional code.

Reviewed-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Closes #8647

Details

Provenance
Rafael Kitover <rkitover@gmail.com>Authored on May 23 2019, 9:40 PM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on May 23 2019, 9:40 PM
Parents
rG78fac8d925fd: Fix kstat state update during pool transition
Branches
Unknown
Tags
Unknown

Event Timeline

Brian Behlendorf <behlendorf1@llnl.gov> committed rG8b8b44d06fc6: kernel timer API rework (authored by Rafael Kitover <rkitover@gmail.com>).May 23 2019, 9:40 PM