linux-kernel-test/arch/arm
Russell King ac78884e6d ARM: lockdep: fix unannotated irqs-on
CPU: Testing write buffer coherency: ok
------------[ cut here ]------------
WARNING: at kernel/lockdep.c:3145 check_flags+0xcc/0x1dc()
Modules linked in:
[<c0035120>] (unwind_backtrace+0x0/0xf8) from [<c0355374>] (dump_stack+0x20/0x24)
[<c0355374>] (dump_stack+0x20/0x24) from [<c0060c04>] (warn_slowpath_common+0x58/0x70)
[<c0060c04>] (warn_slowpath_common+0x58/0x70) from [<c0060c3c>] (warn_slowpath_null+0x20/0x24)
[<c0060c3c>] (warn_slowpath_null+0x20/0x24) from [<c008f224>] (check_flags+0xcc/0x1dc)
[<c008f224>] (check_flags+0xcc/0x1dc) from [<c00945dc>] (lock_acquire+0x50/0x140)
[<c00945dc>] (lock_acquire+0x50/0x140) from [<c0358434>] (_raw_spin_lock+0x50/0x88)
[<c0358434>] (_raw_spin_lock+0x50/0x88) from [<c00fd114>] (set_task_comm+0x2c/0x60)
[<c00fd114>] (set_task_comm+0x2c/0x60) from [<c007e184>] (kthreadd+0x30/0x108)
[<c007e184>] (kthreadd+0x30/0x108) from [<c0030104>] (kernel_thread_exit+0x0/0x8)
---[ end trace 1b75b31a2719ed1c ]---
possible reason: unannotated irqs-on.
irq event stamp: 3
hardirqs last  enabled at (2): [<c0059bb0>] finish_task_switch+0x48/0xb0
hardirqs last disabled at (3): [<c002f0b0>] ret_slow_syscall+0xc/0x1c
softirqs last  enabled at (0): [<c005f3e0>] copy_process+0x394/0xe5c
softirqs last disabled at (0): [<(null)>] (null)

Fix this by ensuring that the lockdep interrupt state is manipulated in
the appropriate places.  We essentially treat userspace as an entirely
separate environment which isn't relevant to lockdep (lockdep doesn't
monitor userspace.)  We don't tell lockdep that IRQs will be enabled
in that environment.

Instead, when creating kernel threads (which is a rare event compared
to entering/leaving userspace) we have to update the lockdep state.  Do
this by starting threads with IRQs disabled, and in the kthread helper,
tell lockdep that IRQs are enabled, and enable them.

This provides lockdep with a consistent view of the current IRQ state
in kernel space.

This also revert portions of 0d928b0b61
which didn't fix the problem.

Tested-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2010-07-10 10:53:13 +01:00
..
boot ARM: arch/arm/boot/bootp/bootp.lds: Checkpatch cleanup 2010-05-24 20:40:09 +01:00
common ARM: 6146/1: sa1111: Prevent deadlock in resume path 2010-05-27 10:36:08 +01:00
configs ARM: s3c2410_defconfig: Add new machines 2010-05-28 19:33:05 +09:00
include/asm ARM: 6212/1: atomic ops: add memory constraints to inline asm 2010-07-09 11:29:35 +01:00
kernel ARM: lockdep: fix unannotated irqs-on 2010-07-10 10:53:13 +01:00
lib
mach-aaec2000
mach-at91 ARM: mach-at91: duplicated include 2010-05-24 20:40:13 +01:00
mach-bcmring Merge branch 'devel-stable' into devel 2010-05-17 17:24:04 +01:00
mach-clps711x ARM: arch/arm/mach-clps711x/Makefile.boot: Checkpatch cleanup 2010-05-24 20:40:09 +01:00
mach-cns3xxx
mach-davinci davinci: da850 TPS6507x touch screen driver board data 2010-05-28 01:37:39 +02:00
mach-dove
mach-ebsa110
mach-ep93xx Merge remote branch 'origin' into secretlab/next-spi 2010-05-25 00:38:26 -06:00
mach-footbridge ARM: arch/arm/mach-footbridge/ebsa285-pci.c: Checkpatch cleanup 2010-05-24 20:40:10 +01:00
mach-gemini
mach-h720x ARM: arch/arm/mach-h720x/common.h: Checkpatch cleanup 2010-05-24 20:40:10 +01:00
mach-integrator Merge branch 'devel-stable' into devel 2010-05-17 17:24:04 +01:00
mach-iop13xx
mach-iop32x Merge branch 'devel-stable' into devel 2010-05-17 17:24:04 +01:00
mach-iop33x
mach-ixp4xx Merge branch 'devel-stable' into devel 2010-05-17 17:24:04 +01:00
mach-ixp23xx
mach-ixp2000
mach-kirkwood Merge git://git.infradead.org/mtd-2.6 2010-05-21 07:25:43 -07:00
mach-ks8695
mach-l7200
mach-lh7a40x
mach-loki
mach-mmp
mach-msm msm: dma: add completion.h header 2010-06-07 16:16:33 -07:00
mach-mv78xx0
mach-mx1
mach-mx2 Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2010-05-25 12:06:33 -07:00
mach-mx3 ARM: mx3: mx31lilly: fix build error for !CONFIG_USB_ULPI 2010-07-01 09:52:39 +02:00
mach-mx5 Merge branch 'for-rmk' of git://git.pengutronix.de/git/imx/linux-2.6 into devel-stable 2010-05-20 23:43:18 +01:00
mach-mx25 arm/mx25: add watchdog device 2010-05-18 08:32:33 +02:00
mach-mxc91231
mach-netx
mach-nomadik ARM: 6145/1: ux500 MTU clockrate correction 2010-05-27 10:36:08 +01:00
mach-ns9xxx
mach-nuc93x
mach-omap1 Merge branch 'omap4-i2c-init' into omap-for-linus 2010-05-20 11:37:23 -07:00
mach-omap2 Merge branch 'for_2.6.35rc' of git://git.pwsan.com/linux-2.6 into omap-fixes-for-linus 2010-06-28 15:47:04 +03:00
mach-orion5x leds: leds-gpio: Change blink_set callback to be able to turn off blinking 2010-05-26 13:07:55 +01:00
mach-pnx4008
mach-pxa [ARM] pxa/mioa701: fix camera regression 2010-06-13 23:55:15 +08:00
mach-realview ARM: 6201/1: RealView: Do not use outer_sync() on ARM11MPCore boards with L220 2010-07-02 10:10:09 +01:00
mach-rpc
mach-s3c24a0/include/mach
mach-s3c64xx ARM: S3C64XX: Add USB OTG HCLK to the list of clocks 2010-05-28 19:31:34 +09:00
mach-s3c2400
mach-s3c2410 ARM: SAMSUNG: Move WDT device definitions in plat-samsung 2010-05-20 19:44:18 +09:00
mach-s3c2412 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6 2010-05-20 09:41:44 -07:00
mach-s3c2416 ARM: SMDK2416: Add support for framebuffer device and ensure correct setup 2010-05-18 18:46:30 +09:00
mach-s3c2440 gta02: Use pcf50633 backlight driver instead of platform backlight driver. 2010-05-26 17:34:40 +01:00
mach-s3c2443 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-05-20 09:20:59 -07:00
mach-s5p6440 ARM: S5P: Fix the platform external interrupt issues. 2010-05-26 19:09:50 +09:00
mach-s5p6442 ARM: S5P6442: Fix PLL setting announce message. 2010-07-05 16:01:04 +09:00
mach-s5pc100 ARM: S5PC100: Fixup cross tree merge problems 2010-05-26 19:09:50 +09:00
mach-s5pv210 ARM: S5PV210: Correct clock register properties 2010-07-05 16:01:04 +09:00
mach-sa1100 ARM: arch/arm/mach-sa1100/leds.c: Checkpatch cleanup 2010-05-24 20:40:11 +01:00
mach-shark ARM: arch/arm/mach-shark/pci.c: Checkpatch cleanup 2010-05-24 20:40:11 +01:00
mach-shmobile ARM: remove 'select GENERIC_TIME' 2010-05-18 08:17:56 +01:00
mach-spear3xx
mach-spear6xx ARM: SPEAR6xx: remove duplicated #include 2010-05-24 20:39:52 +01:00
mach-stmp37xx
mach-stmp378x
mach-u300 ARM: AB3550 board configuration and irq for U300 2010-05-28 01:37:47 +02:00
mach-ux500 ARM: 6184/2: ux500: use neutral PRCMU base 2010-07-09 14:46:47 +01:00
mach-versatile Merge branch 'devel-stable' into devel 2010-05-17 17:24:04 +01:00
mach-vexpress ARM: 6192/1: VExpress: Align the machine_desc.phys_io to 1MB section 2010-07-01 10:13:41 +01:00
mach-w90x900 ARM: 6141/1: Add audio support part in arch/arm/mach-w90x900 2010-05-24 22:25:34 +01:00
mm ARM: 6210/1: Do not rely on reset defaults of L2X0_AUX_CTRL 2010-07-09 11:28:53 +01:00
nwfpe ARM: arch/arm/nwfpe/fpsr.h: Checkpatch cleanup 2010-05-24 20:40:12 +01:00
oprofile ARM: 6074/1: oprofile: convert from sysdev to platform device 2010-05-17 11:53:59 +01:00
plat-iop
plat-mxc Merge branch 'for-rmk' of git://git.pengutronix.de/git/imx/linux-2.6 into devel-stable 2010-05-20 23:43:18 +01:00
plat-nomadik ARM: 6145/1: ux500 MTU clockrate correction 2010-05-27 10:36:08 +01:00
plat-omap omap: GPIO: fix auto-disable of debounce clock 2010-06-10 15:37:41 +03:00
plat-orion
plat-pxa [ARM] mmp: fix build failure due to IRQ_PMU depends on ARCH_PXA 2010-06-14 00:45:26 +08:00
plat-s3c24xx ARM: SAMSUNG: Move WDT device definitions in plat-samsung 2010-05-20 19:44:18 +09:00
plat-s5p ARM: S5P: Bug fix on external interrupt for S5P SoCs 2010-07-05 16:01:04 +09:00
plat-samsung ARM: SAMSUNG: Fix on wrong function name for S5PV210 sdhci0 2010-07-05 16:01:04 +09:00
plat-spear
plat-stmp3xxx
plat-versatile
tools
vfp ARM: VFP: Fix vfp_put_double() for d16-d31 2010-05-27 10:32:06 +01:00
Kconfig ARM: 6195/1: OMAP3: pmu: make CPU_HAS_PMU dependent on OMAP3_EMU 2010-07-01 10:13:58 +01:00
Kconfig-nommu
Kconfig.debug
Makefile Merge branch 'for-rmk/samsung3' of git://git.fluff.org/bjdooks/linux into devel-stable 2010-05-24 23:08:36 +01:00