diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-07-03 08:30:12 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-07-24 12:46:53 +0200 |
commit | 3c96a21d186d7cadff3e356ecbea8ee9ad2692aa (patch) | |
tree | 387a607c5cff5b23c16d599ac78fadbbba6ba163 /ipc/mqueue.c | |
parent | 769610edf15e38b8fa5f6beac8e6bfaeaff690d1 (diff) | |
download | lwn-3c96a21d186d7cadff3e356ecbea8ee9ad2692aa.tar.gz lwn-3c96a21d186d7cadff3e356ecbea8ee9ad2692aa.zip |
ipc: Make the ipc code -rt aware
RT serializes the code with the (rt)spinlock but keeps preemption
enabled. Some parts of the code need to be atomic
nevertheless.
Protect it with preempt_disable/enable_rt pairts.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'ipc/mqueue.c')
-rw-r--r-- | ipc/mqueue.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index c5e68adc6732..63a47f7c0c40 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -820,12 +820,17 @@ static inline void pipelined_send(struct mqueue_inode_info *info, struct msg_msg *message, struct ext_wait_queue *receiver) { + /* + * Keep them in one critical section for PREEMPT_RT: + */ + preempt_disable_rt(); receiver->msg = message; list_del(&receiver->list); receiver->state = STATE_PENDING; wake_up_process(receiver->task); smp_wmb(); receiver->state = STATE_READY; + preempt_enable_nort(); } /* pipelined_receive() - if there is task waiting in sys_mq_timedsend() |