From 4a9e56baddebd6b0f2c145d6cdb4425680c8a185 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Wed, 6 Sep 2017 20:42:42 +0200 Subject: Use new thread_check_intr_context function consistently --- kern/clock.c | 3 +-- kern/console.c | 2 +- kern/intr.c | 3 +-- kern/llsync.c | 3 +-- kern/sref.c | 3 +-- kern/thread.c | 4 ++-- kern/thread.h | 17 ++++++++--------- kern/timer.c | 3 +-- kern/work.c | 3 +-- kern/xcall.c | 2 +- 10 files changed, 18 insertions(+), 25 deletions(-) (limited to 'kern') diff --git a/kern/clock.c b/kern/clock.c index b4a6f046..19f823c3 100644 --- a/kern/clock.c +++ b/kern/clock.c @@ -68,8 +68,7 @@ void clock_tick_intr(void) { struct clock_cpu_data *cpu_data; - assert(!cpu_intr_enabled()); - assert(!thread_preempt_enabled()); + assert(thread_check_intr_context()); if (cpu_id() == 0) { #ifdef ATOMIC_HAVE_64B_OPS diff --git a/kern/console.c b/kern/console.c index ebbdb807..0b5c4f86 100644 --- a/kern/console.c +++ b/kern/console.c @@ -173,7 +173,7 @@ console_register(struct console *console) void console_intr(struct console *console, const char *s) { - assert(!cpu_intr_enabled()); + assert(thread_check_intr_context()); if (*s == '\0') { return; diff --git a/kern/intr.c b/kern/intr.c index 8579b744..9a1ad71e 100644 --- a/kern/intr.c +++ b/kern/intr.c @@ -423,8 +423,7 @@ intr_handle(unsigned int intr) struct intr_entry *entry; int error; - assert(!cpu_intr_enabled()); - assert(thread_interrupted()); + assert(thread_check_intr_context()); entry = intr_get_entry(intr); diff --git a/kern/llsync.c b/kern/llsync.c index 34a3fa0c..36233fac 100644 --- a/kern/llsync.c +++ b/kern/llsync.c @@ -255,8 +255,7 @@ llsync_report_periodic_event(void) struct llsync_cpu_data *cpu_data; unsigned int gcid; - assert(!cpu_intr_enabled()); - assert(!thread_preempt_enabled()); + assert(thread_check_intr_context()); cpu_data = llsync_get_cpu_data(); diff --git a/kern/sref.c b/kern/sref.c index dd81ca62..7775a5c9 100644 --- a/kern/sref.c +++ b/kern/sref.c @@ -984,8 +984,7 @@ sref_report_periodic_event(void) { struct sref_cache *cache; - assert(!cpu_intr_enabled()); - assert(!thread_preempt_enabled()); + assert(thread_check_intr_context()); cache = sref_cache_get(); diff --git a/kern/thread.c b/kern/thread.c index c04635b5..b5a3ae45 100644 --- a/kern/thread.c +++ b/kern/thread.c @@ -2630,7 +2630,7 @@ thread_schedule_intr(void) { struct thread_runq *runq; - thread_assert_interrupted(); + assert(thread_check_intr_context()); runq = thread_runq_local(); syscnt_inc(&runq->sc_schedule_intrs); @@ -2643,7 +2643,7 @@ thread_report_periodic_event(void) struct thread_runq *runq; struct thread *thread; - thread_assert_interrupted(); + assert(thread_check_intr_context()); runq = thread_runq_local(); thread = thread_self(); diff --git a/kern/thread.h b/kern/thread.h index 2d28aa82..164eed79 100644 --- a/kern/thread.h +++ b/kern/thread.h @@ -642,6 +642,14 @@ thread_interrupted(void) return (thread_self()->intr != 0); } +static inline bool +thread_check_intr_context(void) +{ + return thread_interrupted() + && !cpu_intr_enabled() + && !thread_preempt_enabled(); +} + static inline void thread_intr_enter(void) { @@ -673,15 +681,6 @@ thread_intr_leave(void) } } -/* TODO Use in interrupt handlers instead of manual interrupt/preemption checks */ -static inline void -thread_assert_interrupted(void) -{ - assert(thread_interrupted()); - assert(!cpu_intr_enabled()); - assert(!thread_preempt_enabled()); -} - /* * Lockless synchronization read-side critical section nesting counter * control functions. diff --git a/kern/timer.c b/kern/timer.c index c73a34a9..5a94860e 100644 --- a/kern/timer.c +++ b/kern/timer.c @@ -527,8 +527,7 @@ timer_report_periodic_event(void) struct hlist timers; uint64_t ticks, now; - assert(!cpu_intr_enabled()); - assert(!thread_preempt_enabled()); + assert(thread_check_intr_context()); now = clock_get_time(); hlist_init(&timers); diff --git a/kern/work.c b/kern/work.c index c0eb0bb1..ea3eb1f4 100644 --- a/kern/work.c +++ b/kern/work.c @@ -537,8 +537,7 @@ work_report_periodic_event(void) { struct work_queue queue, highprio_queue; - assert(!cpu_intr_enabled()); - assert(!thread_preempt_enabled()); + assert(thread_check_intr_context()); work_pool_shift_queues(cpu_local_ptr(work_pool_cpu_main), &queue); work_pool_shift_queues(cpu_local_ptr(work_pool_cpu_highprio), diff --git a/kern/xcall.c b/kern/xcall.c index 9cef07a7..1251f28c 100644 --- a/kern/xcall.c +++ b/kern/xcall.c @@ -159,7 +159,7 @@ xcall_intr(void) struct xcall_cpu_data *cpu_data; struct xcall *call; - thread_assert_interrupted(); + assert(thread_check_intr_context()); cpu_data = xcall_cpu_data_get(); call = xcall_cpu_data_get_recv_call(cpu_data); -- cgit v1.2.3