deadlock hrtimers

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

 



Hello,
I'm a student of Computer Science. For my Master thesis I want to test
a patch that allow to use a generic scheduler, and this scheduler can
be
inserted as module. The patch and the module that I want to test is
for a bit old kernel, version 2.6.21.4. I applyed before realtime
patch and after generic scheduler
patch.
When I try to use the module in qemu everything seems to work (the
computation continue and the results are as I aspected) but I had a
sort of warning on the emulator.
In attachement I add this messages.
Otherwise when I try the module on real pc the machine hang on in a
deadlock, but sadly I don't know how the save the output of the kernel
debugger because I have no serial port
on my second pc..
If I recompile the kernel with no High Resolution Timer Support the
patch works also in the real machine.
I see that the module set an hrtimer inside a section locked by a
spinlock. Could be this a problem?

Thanks in advance
Nicoka
Could not open '/dev/kqemu' - QEMU acceleration layer not activated: No such file or directory
qemu: loading initrd (0x12fe4e bytes) at 0x7ec0000
Linux version 2.6.21.4-rt12-cfs-v17 (nico@nicodeb) (gcc version 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)) #10 SMP PREEMPT RT Tue Jan 27 11:54:23 CET 2009
BIOS-provided physical RAM map:
sanitize start
sanitize end
copy_e820_map() start: 0000000000000000 size: 000000000009fc00 end: 000000000009fc00 type: 1
copy_e820_map() type is E820_RAM
copy_e820_map() start: 000000000009fc00 size: 0000000000000400 end: 00000000000a0000 type: 2
copy_e820_map() start: 00000000000e8000 size: 0000000000018000 end: 0000000000100000 type: 2
copy_e820_map() start: 0000000000100000 size: 0000000007ef0000 end: 0000000007ff0000 type: 1
copy_e820_map() type is E820_RAM
copy_e820_map() start: 0000000007ff0000 size: 0000000000010000 end: 0000000008000000 type: 3
copy_e820_map() start: 00000000fffc0000 size: 0000000000040000 end: 0000000100000000 type: 2
 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
 BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000e8000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 0000000007ff0000 (usable)
 BIOS-e820: 0000000007ff0000 - 0000000008000000 (ACPI data)
 BIOS-e820: 00000000fffc0000 - 0000000100000000 (reserved)
0MB HIGHMEM available.
127MB LOWMEM available.
Zone PFN ranges:
  DMA             0 ->     4096
  Normal       4096 ->    32752
  HighMem     32752 ->    32752
early_node_map[1] active PFN ranges
    0:        0 ->    32752
DMI 2.4 present.
ACPI: RSDP 000FB8A0, 0014 (r0 QEMU  )
ACPI: RSDT 07FF0000, 0030 (r1 QEMU   QEMURSDT        1 QEMU        1)
ACPI: FACP 07FF0030, 0074 (r1 QEMU   QEMUFACP        1 QEMU        1)
ACPI: DSDT 07FF0100, 0861 (r1   BXPC   BXDSDT        1 INTL 20061109)
ACPI: FACS 07FF00C0, 0040
ACPI: APIC 07FF0998, 0040 (r1 QEMU   QEMUAPIC        1 QEMU        1)
ACPI: SSDT 07FF0961, 0037 (r1 QEMU   QEMUSSDT        1 QEMU        1)
ACPI: PM-Timer IO Port: 0xb008
ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
Processor #0 6:3 APIC version 17
ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
IOAPIC[0]: apic_id 1, version 17, address 0xfec00000, GSI 0-23
Enabling APIC mode:  Flat.  Using 1 I/O APICs
Using ACPI (MADT) for SMP configuration information
Allocating PCI resources starting at 10000000 (gap: 08000000:f7fc0000)
Real-Time Preemption Support (C) 2004-2007 Ingo Molnar
Built 1 zonelists.  Total pages: 31825
Kernel command line: console=tty0 console=ttyS0,9600
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
WARNING: experimental RCU implementation.
PID hash table entries: 512 (order: 9, 2048 bytes)
Detected 1666.816 MHz processor.
Console: colour VGA+ 80x25
Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
... MAX_LOCKDEP_SUBCLASSES:      8
... MAX_LOCK_DEPTH:             30
... MAX_LOCKDEP_KEYS:         2048
... CLASSHASH_SIZE:           1024
... MAX_LOCKDEP_ENTRIES:     16384
... MAX_LOCKDEP_CHAINS:      32768
... CHAINHASH_SIZE:          16384
 memory used by lock dependency info: 1704 kB
 per task-struct memory footprint: 1200 bytes
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 118920k/131008k available (1759k kernel code, 11696k reserved, 957k data, 224k init, 0k highmem)
virtual kernel memory layout:
    fixmap  : 0xfff4f000 - 0xfffff000   ( 704 kB)
    pkmap   : 0xff800000 - 0xffc00000   (4096 kB)
    vmalloc : 0xc8800000 - 0xff7fe000   ( 879 MB)
    lowmem  : 0xc0000000 - 0xc7ff0000   ( 127 MB)
      .init : 0xc03ad000 - 0xc03e5000   ( 224 kB)
      .data : 0xc02b7f70 - 0xc03a75b4   ( 957 kB)
      .text : 0xc0100000 - 0xc02b7f70   (1759 kB)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Calibrating delay using timer specific routine.. 3370.09 BogoMIPS (lpj=6740188)
Security Framework v1.0.0 initialized
SELinux:  Disabled at boot.
Capability LSM initialized
Mount-cache hash table entries: 512
CPU: L1 I cache: 32K, L1 D cache: 32K
CPU: L2 cache: 2048K
Checking 'hlt' instruction... OK.
SMP alternatives: switching to UP code
Freeing SMP alternatives: 9k freed
ACPI: Core revision 20070126
CPU0: Intel Pentium II (Klamath) stepping 03
Total of 1 processors activated (3370.09 BogoMIPS).
ENABLING IO-APIC IRQs
..TIMER: vector=0x31 apic1=0 pin1=0 apic2=-1 pin2=-1
Brought up 1 CPUs
Booting paravirtualized kernel on bare hardware
NET: Registered protocol family 16
ACPI: bus type pci registered
PCI: PCI BIOS revision 2.10 entry at 0xfb200, last bus=0
PCI: Using configuration type 1
Setting up standard PCI resources
ACPI: Interpreter enabled
ACPI: (supports S5)
ACPI: Using IOAPIC for interrupt routing
ACPI: PCI Root Bridge [PCI0] (0000:00)
* Found PM-Timer Bug on the chipset. Due to workarounds for a bug,
* this clock source is slow. Consider trying other clock sources
PCI quirk: region b000-b03f claimed by PIIX4 ACPI
PCI quirk: region b100-b10f claimed by PIIX4 SMB
ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 9 10 *11 12)
ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 *9 10 11 12)
ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 9 10 *11 12)
ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 *9 10 11 12)
Linux Plug and Play Support v0.97 (c) Adam Belay
pnp: PnP ACPI init
pnp: PnP ACPI: found 7 devices
PnPBIOS: Disabled by ACPI PNP
PCI: Using ACPI for IRQ routing
PCI: If a device doesn't work, try "pci=routeirq".  If it helps, post a report
PCI: Ignore bogus resource 6 [0:0] of 0000:00:02.0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 6, 425984 bytes)
TCP bind hash table entries: 4096 (order: 6, 393216 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
checking if image is initramfs... it is
Freeing initrd memory: 1215k freed
Initializing RT-Tester: OK
audit: initializing netlink socket (disabled)
audit(1233054206.408:1): initialized
Total HugeTLB memory allocated, 0
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
Limiting direct PCI/PCI transfers.
PCI: PIIX3: Enabling Passive Release on 0000:00:01.0
Activating ISA DMA hang workarounds.
isapnp: Scanning for PnP cards...
isapnp: No Plug & Play device found
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16450
00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16450
RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize
PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12
serio: i8042 KBD port at 0x60,0x64 irq 1
serio: i8042 AUX port at 0x60,0x64 irq 12
mice: PS/2 mouse device common for all mice
input: AT Translated Set 2 keyboard as /class/input/input0
rtc_cmos 00:01: rtc core: registered rtc_cmos as rtc0
rtc0: alarms up to one day
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
Using IPI No-Shortcut mode
rtc_cmos 00:01: setting the system clock to 2009-01-27 11:03:28 (1233054208)
*****************************************************************************
*                                                                           *
*  REMINDER, the following debugging options are turned on in your .config: *
*                                                                           *
*        CONFIG_DEBUG_RT_MUTEXES                                            *
*        CONFIG_LOCKDEP                                                     *
*                                                                           *
*  they may increase runtime overhead and latencies.                        *
*                                                                           *
*****************************************************************************
Freeing unused kernel memory: 224k freed
warning: can't open /etc/fstab: No such file or directory
mount: unknown filesystem type 'ext2'
exit
mkalltests.sh	  test1.sh	  test3.sh	  test5.sh
mktests-multi.sh  test2.sh	  test4.sh	  test6.sh
mktests.sh	  test3-multi.sh  test5-multi.sh
Doing only the Non-MultiTask tests
Modules directory: /lib/modules/cbs
Scheduler: cbs_sched_plain.ko
Modules directory: /lib/modules/cbs
Set tests to 1 2 3 4 5 6
Executing tests 1 2 3 4 5 6 on module cbs_sched_plain.ko
Inserting CBS Module (parameters: [])
CBS init: initing enforce timer
Init done!
Going with test1.sh
Setting scheduler (5000 200000)
Setting scheduler (1000 10000)
SetSched done!
Threshold: 169468
SetSched done!
Sleeping...
Threshold: 169468
Sleeping...
stopped custom tracer.

=======================================================
[ INFO: possible circular locking dependency detected ]
[ 2.6.21.4-rt12-cfs-v17 #10
-------------------------------------------------------
swapper/0 is trying to acquire lock:
 (&rq->rq_lock_key){+...}, at: [<c0120d12>] task_rq_lock+0x45/0x6c

but task is already holding lock:
 (&cpu_base->lock_key){+...}, at: [<c013cf18>] hrtimer_interrupt+0x80/0x1b8

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #1 (&cpu_base->lock_key){+...}:
       [<c0143f5a>] __lock_acquire+0xa69/0xbfb
       [<c013ca36>] lock_hrtimer_base+0x15/0x2f
       [<c02b580a>] rt_spin_lock_slowlock+0x21/0x18d
       [<c0144164>] lock_acquire+0x78/0x9c
       [<c013ca36>] lock_hrtimer_base+0x15/0x2f
       [<c02b68df>] __spin_lock_irqsave+0x4d/0x5c
       [<c013ca36>] lock_hrtimer_base+0x15/0x2f
       [<c013ca36>] lock_hrtimer_base+0x15/0x2f
       [<c013cb20>] hrtimer_start+0x1a/0x106
       [<c880a7be>] sched_set_timer+0x2a/0x2e [cbs_sched]
       [<c011ff54>] enqueue_task+0x100/0x112
       [<c011ff74>] activate_task+0xe/0x1b
       [<c0121d61>] generic_sched_setscheduler+0xef/0x153
       [<c012207f>] do_sched_setscheduler+0x8c/0xc0
       [<c01040a0>] syscall_call+0x7/0xb
       [<ffffffff>] 0xffffffff

-> #0 (&rq->rq_lock_key){+...}:
       [<c0141bf0>] print_circular_bug_entry+0x40/0x46
       [<c0143e46>] __lock_acquire+0x955/0xbfb
       [<c0120d12>] task_rq_lock+0x45/0x6c
       [<c0144164>] lock_acquire+0x78/0x9c
       [<c0120d12>] task_rq_lock+0x45/0x6c
       [<c02b65fa>] __spin_lock+0x33/0x3e
       [<c0120d12>] task_rq_lock+0x45/0x6c
       [<c0120d12>] task_rq_lock+0x45/0x6c
       [<c0122730>] try_to_wake_up+0x27/0x364
       [<c013cf18>] hrtimer_interrupt+0x80/0x1b8
       [<c0122b0c>] wake_up_process+0x19/0x1b
       [<c013c589>] hrtimer_wakeup+0x15/0x18
       [<c013cfbc>] hrtimer_interrupt+0x124/0x1b8
       [<c0115eba>] smp_apic_timer_interrupt+0x6c/0x7d
       [<c0102a93>] default_idle+0x0/0x73
       [<c0104b91>] apic_timer_interrupt+0x29/0x38
       [<c0102a93>] default_idle+0x0/0x73
       [<c0104b9b>] apic_timer_interrupt+0x33/0x38
       [<c0102ae0>] default_idle+0x4d/0x73
       [<c0102a93>] default_idle+0x0/0x73
       [<c011bb2f>] native_safe_halt+0x2/0x3
       [<c0102ae6>] default_idle+0x53/0x73
       [<c01023d9>] cpu_idle+0xc5/0x121
       [<c03adc71>] start_kernel+0x4ee/0x4f6
       [<c03ad1b8>] unknown_bootoption+0x0/0x202
       [<ffffffff>] 0xffffffff

other info that might help us debug this:

1 lock held by swapper/0:
 #0:  (&cpu_base->lock_key){+...}, at: [<c013cf18>] hrtimer_interrupt+0x80/0x1b8

stack backtrace:
 [<c01425cb>] print_circular_bug_tail+0x5f/0x67
 [<c0141bf0>] print_circular_bug_entry+0x40/0x46
 [<c0143e46>] __lock_acquire+0x955/0xbfb
 [<c0120d12>] task_rq_lock+0x45/0x6c
 [<c0144164>] lock_acquire+0x78/0x9c
 [<c0120d12>] task_rq_lock+0x45/0x6c
 [<c02b65fa>] __spin_lock+0x33/0x3e
 [<c0120d12>] task_rq_lock+0x45/0x6c
 [<c0120d12>] task_rq_lock+0x45/0x6c
 [<c0122730>] try_to_wake_up+0x27/0x364
 [<c013cf18>] hrtimer_interrupt+0x80/0x1b8
 [<c0122b0c>] wake_up_process+0x19/0x1b
 [<c013c589>] hrtimer_wakeup+0x15/0x18
 [<c013cfbc>] hrtimer_interrupt+0x124/0x1b8
 [<c0115eba>] smp_apic_timer_interrupt+0x6c/0x7d
 [<c0102a93>] default_idle+0x0/0x73
 [<c0104b91>] apic_timer_interrupt+0x29/0x38
 [<c0102a93>] default_idle+0x0/0x73
 [<c0104b9b>] apic_timer_interrupt+0x33/0x38
 [<c0102ae0>] default_idle+0x4d/0x73
 [<c0102a93>] default_idle+0x0/0x73
 [<c011bb2f>] native_safe_halt+0x2/0x3
 [<c0102ae6>] default_idle+0x53/0x73
 [<c01023d9>] cpu_idle+0xc5/0x121
 [<c03adc71>] start_kernel+0x4ee/0x4f6
 [<c03ad1b8>] unknown_bootoption+0x0/0x202
 =======================
---------------------------
| preempt count: 00010003 ]
| 3-level deep critical section nesting:
----------------------------------------
.. [<c0102421>] .... cpu_idle+0x10d/0x121
.....[<00000000>] ..   ( <= 0x0)
.. [<c02b65d7>] .... __spin_lock+0x10/0x3e
.....[<00000000>] ..   ( <= 0x0)
.. [<c02b65d7>] .... __spin_lock+0x10/0x3e
.....[<00000000>] ..   ( <= 0x0)

Going...
Going...
Results:
Results:
Draw Ax: 3376 10803
Draw Ax: 3376 10803
Going with test2.sh
Setting scheduler (200000 600000)
Setting scheduler (100000 600000)
SetSched done!
Threshold: 169468
SetSched done!
Sleeping...
Threshold: 169468
Sleeping...
Going...
Going...
Results:
Results:
Draw Ax: 6669 13788
Draw Ax: 6669 13788
Going with test3.sh
Setting scheduler (466000 700000)
Setting scheduler (200000 600000)
SetSched done!
SetSched done!
Threshold: 169468
Threshold: 169468
Sleeping...
Sleeping...
Going...
Going...
Results:
Results:
Draw Ax: 7779 16008
Draw Ax: 7779 16008
Going with test4.sh
Setting scheduler (390000 700000)
Setting scheduler (200000 600000)
SetSched done!
Threshold: 169468
SetSched done!
Sleeping...
Threshold: 169468
Sleeping...
Going...
Going...
Results:
Results:

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux