force_sig() CONFIG_PREMPT_RT x86_64 issue in do_int3() and do_debug()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ingo and Andi,

I've run into an issue with x86_64 CONFIG_PREEMPT_RT kernels that I
would like to mention.  I'm afraid that I have no ideas for a solution.

I created a kernel with the following items:

    linux-2.6.22.tar.bz2
    patch-2.6.23-rc2.bz
    patch-2.6.23-rc2-rt2

And I enabled CONFIG_PREEMPT_RT along with the various DEBUG parameters,
such as CONFIG_DEBUG_SPINLOCK, CONFIG_DEBUG_SPINLOCK_SLEEP, etc.

When I run some ptrace-base tests that make use of int3 breakpoints,
singlesteps or hardware debug registers on x86_64 systems, I see BUG
messages that indicate an issue with calling force_sig()/force_sig_info()
from do_debug()/do_int3()->do_trap() since we're running on the IST
kernel stack with preemptions disabled.

[ It's interesting that the i386 version of do_trap() has
  some CONFIG_PREEMPT_RT code in it that does a
  local_irq_enable() and preempt_check_resched() before
  it gets to the force_sig() code,  but that won't work
  for x86_64 due to the per-cpu IST stack. ]

Below is an example of the output from a ptrace singlestep test where
we actually end up switching away from the current task:


   BUG: scheduling while atomic: ssdd/0x00000002/5333, CPU#1
   Call Trace:
   <#DB>  [<ffffffff8057f304>] __sched_text_start+0xcc/0x90a
   [<ffffffff80236634>] release_console_sem+0x17f/0x1ae
   [<ffffffff80236a06>] printk+0x8d/0x95
   [<ffffffff80252887>] __rt_mutex_adjust_prio+0x9/0x1b
   [<ffffffff80253134>] task_blocks_on_rt_mutex+0x17d/0x1d0
   [<ffffffff8057fe0f>] schedule+0xdf/0xff
   [<ffffffff80580fb9>] rt_spin_lock_slowlock+0xed/0x18a
   [<ffffffff80282459>] kmem_cache_alloc+0x56/0x118
   [<ffffffff8023f669>] __sigqueue_alloc+0x32/0x5d
   [<ffffffff8023fd79>] send_signal+0x65/0x149
   [<ffffffff8023febf>] specific_send_sig_info+0x62/0x96
   [<ffffffff8023ff72>] force_sig_info+0x7f/0x9b
   [<ffffffff8020e445>] do_debug+0xf2/0x141
   [<ffffffff8023fb7a>] signal_wake_up+0x1e/0x2d
   [<ffffffff8023fee8>] specific_send_sig_info+0x8b/0x96
   [<ffffffff8023ff87>] force_sig_info+0x94/0x9b
   [<ffffffff80581fb3>] debug+0x93/0x9f


and here's one more example of an int3 breakpoint:


   BUG: sleeping function called from invalid context de5(4222) at
        kernel/rtmutex.c:636
   in_atomic():1 [00000001], irqs_disabled():0
   Call Trace:
   <#DB>  [<ffffffff80225608>] __might_sleep+0xf8/0xfa
   [<ffffffff8068bfae>] __rt_spin_lock+0x2c/0x4e
   [<ffffffff8068bfd9>] rt_spin_lock+0x9/0xb
   [<ffffffff8023ad82>] force_sig_info+0x25/0xa9
   [<ffffffff8023b3a1>] force_sig+0x11/0x13
   [<ffffffff8020bdd4>] do_trap+0x1dd/0x27b
   [<ffffffff8023dfdf>] __raw_notifier_call_chain+0x9/0xb
   [<ffffffff8023dff0>] raw_notifier_call_chain+0xf/0x11
   [<ffffffff8020c911>] do_int3+0x6a/0x7e
   [<ffffffff8068cfe3>] int3+0x93/0xb0
   <<EOE>>
   ---------------------------
   | preempt count: 00000001 ]
   | 1-level deep critical section nesting:
   ----------------------------------------
   .. [<ffffffff8020c8e8>] .... do_int3+0x41/0x7e
   .....[<ffffffff8068cfe3>] ..   ( <= int3+0x93/0xb0)

   BUG: de5:4222 task might have lost a preemption check!

   Call Trace:
   <#DB>  [<ffffffff8022d343>] preempt_enable_no_resched+0x5c/0x5e
   [<ffffffff8020c920>] do_int3+0x79/0x7e
   [<ffffffff8068cfe3>] int3+0x93/0xb0
   <<EOE>>
   ---------------------------
   | preempt count: 00000000 ]
   | 0-level deep critical section nesting:
   ----------------------------------------


Thanks in advance for any input or comments.


John Blackwood		john.blackwood@xxxxxxxx

-
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux