summaryrefslogtreecommitdiff
path: root/ipc/sem.c
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/sem.c')
-rw-r--r--ipc/sem.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/ipc/sem.c b/ipc/sem.c
index 87c2b641fd7b..3ee355461489 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -415,6 +415,11 @@ static void update_queue (struct sem_array * sma)
struct sem_queue *n;
/*
+ * make sure that the wakeup doesnt preempt
+ * _this_ cpu prematurely. (on preempt_rt)
+ */
+ preempt_disable_rt();
+ /*
* Continue scanning. The next operation
* that must be checked depends on the type of the
* completed operation:
@@ -450,6 +455,7 @@ static void update_queue (struct sem_array * sma)
*/
smp_wmb();
q->status = error;
+ preempt_enable_rt();
q = n;
} else {
q = list_entry(q->list.next, struct sem_queue, list);