summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2017-09-06 20:42:42 +0200
committerRichard Braun <rbraun@sceen.net>2017-09-06 20:42:42 +0200
commitd79717fb8f56f5dbf4d1978cd737e8836f6d87b6 (patch)
tree63e7156634da1944d8eb10ddefb08d8968644319
parent3c4c6868f9c6980afc538f64e163b98987d47141 (diff)
Use new thread_check_intr_context function consistently
-rw-r--r--kern/clock.c3
-rw-r--r--kern/console.c2
-rw-r--r--kern/intr.c3
-rw-r--r--kern/llsync.c3
-rw-r--r--kern/sref.c3
-rw-r--r--kern/thread.c4
-rw-r--r--kern/thread.h17
-rw-r--r--kern/timer.c3
-rw-r--r--kern/work.c3
-rw-r--r--kern/xcall.c2
10 files changed, 18 insertions, 25 deletions
diff --git a/kern/clock.c b/kern/clock.c
index b4a6f04..19f823c 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 ebbdb80..0b5c4f8 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 8579b74..9a1ad71 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 34a3fa0..36233fa 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 dd81ca6..7775a5c 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 c04635b..b5a3ae4 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 2d28aa8..164eed7 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 c73a34a..5a94860 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 c0eb0bb..ea3eb1f 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 9cef07a..1251f28 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);