Messages in this thread Patch in this message | | | Date | Thu, 15 Oct 2009 21:09:32 +0200 (CEST) | From | John Kacur <> | Subject | Re: 2.6.31.4-rt14 posix message queues problem |
| |
> From: Joerg Abraham <Joerg.Abraham@alcatel-lucent.de> > Date: Thu, Oct 15, 2009 at 7:51 PM > Subject: 2.6.31.4-rt14 posix message queues problem > To: LKML <linux-kernel@vger.kernel.org> > > > Hi, > > During some performance measurement I stumbled over unexpected bad > results for a posix message queue test case. Which is not surprising > since the kernel log shows a "BUG: scheduling while atomic:" on every > measurement trigger. > > Attached is the kernel log for an embedded 8572ds powerpc system and a > condensed user space test appli. The test appli uses 2 processes > (mq_server and mq_client) and pingpongs some messages via posix > message queues. Please see the c-file header for details (the appli > itself makes not much sense but shows the problem). > > ./mq_server > ./mq_client # just crashes during run > > The problem does _not_ occur on kernels 2.6.29.6-rt24, 2.6.29.6 > vanilla and 2.6.31.4 vanilla. The problem does _also_ show up on an > embedded x86_64 system and a full featured fc11 x86_64 system running > a 2.6.31.4-rt14 based kernel, so I dont think it's arch dependent. > > Can anybody reproduce the crash ??? > > If you need more info's please let me know. > > [And if I'm doing stupid things just forgive me] > > Thanx > > Joerg
Hello Joerg
Does the following patch solve your problem?
From 69fde4357db4a054733cbca4158606160e821a3a Mon Sep 17 00:00:00 2001 From: John Kacur <jkacur@redhat.com> Date: Thu, 15 Oct 2009 20:52:37 +0200 Subject: [PATCH] preempt_disable_rt(); should be paired with preempt_enable_rt()
Signed-off-by: John Kacur <jkacur@redhat.com> --- ipc/mqueue.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index 63a47f7..ab4df36 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -830,7 +830,7 @@ static inline void pipelined_send(struct mqueue_inode_info *info, wake_up_process(receiver->task); smp_wmb(); receiver->state = STATE_READY; - preempt_enable_nort(); + preempt_enable_rt(); } /* pipelined_receive() - if there is task waiting in sys_mq_timedsend() -- 1.6.0.6
| |