MFcalloutng:
Convert sleepqueue(9) bits to the new callout KPI. Take advantage of the possibility to run callback directly from hw interrupt context. Sponsored by: Google Summer of Code 2012, iXsystems inc. Tested by: flo, marius, ian, markj, Fabian Keil
This commit is contained in:
parent
d2dc532df5
commit
965ac611ec
@ -361,7 +361,8 @@ sleepq_add(void *wchan, struct lock_object *lock, const char *wmesg, int flags,
|
||||
* sleep queue after timo ticks if the thread has not already been awakened.
|
||||
*/
|
||||
void
|
||||
sleepq_set_timeout(void *wchan, int timo)
|
||||
sleepq_set_timeout_sbt(void *wchan, sbintime_t sbt, sbintime_t pr,
|
||||
int flags)
|
||||
{
|
||||
struct sleepqueue_chain *sc;
|
||||
struct thread *td;
|
||||
@ -372,7 +373,8 @@ sleepq_set_timeout(void *wchan, int timo)
|
||||
MPASS(TD_ON_SLEEPQ(td));
|
||||
MPASS(td->td_sleepqueue == NULL);
|
||||
MPASS(wchan != NULL);
|
||||
callout_reset_curcpu(&td->td_slpcallout, timo, sleepq_timeout, td);
|
||||
callout_reset_sbt_on(&td->td_slpcallout, sbt, pr,
|
||||
sleepq_timeout, td, PCPU_GET(cpuid), flags | C_DIRECT_EXEC);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -108,7 +108,10 @@ struct sleepqueue *sleepq_lookup(void *wchan);
|
||||
void sleepq_release(void *wchan);
|
||||
void sleepq_remove(struct thread *td, void *wchan);
|
||||
int sleepq_signal(void *wchan, int flags, int pri, int queue);
|
||||
void sleepq_set_timeout(void *wchan, int timo);
|
||||
void sleepq_set_timeout_sbt(void *wchan, sbintime_t sbt,
|
||||
sbintime_t pr, int flags);
|
||||
#define sleepq_set_timeout(wchan, timo) \
|
||||
sleepq_set_timeout_sbt((wchan), (tick_sbt * (timo)), 0, C_HARDCLOCK)
|
||||
u_int sleepq_sleepcnt(void *wchan, int queue);
|
||||
int sleepq_timedwait(void *wchan, int pri);
|
||||
int sleepq_timedwait_sig(void *wchan, int pri);
|
||||
|
Loading…
Reference in New Issue
Block a user