linux/arch/arm
Doug Anderson 7ae85dc768 ARM: 8425/1: kgdb: Don't try to stop the machine when setting breakpoints
In (23a4e40 arm: kgdb: Handle read-only text / modules) we moved to
using patch_text() to set breakpoints so that we could handle the case
when we had CONFIG_DEBUG_RODATA.  That patch used patch_text().
Unfortunately, patch_text() assumes that we're not in atomic context
when it runs since it needs to grab a mutex and also wait for other
CPUs to stop (which it does with a completion).

This would result in a stack crawl if you had
CONFIG_DEBUG_ATOMIC_SLEEP and tried to set a breakpoint in kgdb.  The
crawl looked something like:

 BUG: scheduling while atomic: swapper/0/0/0x00010007
 CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.2.0-rc7-00133-geb63b34 #1073
 Hardware name: Rockchip (Device Tree)
  (unwind_backtrace) from [<c00133d4>] (show_stack+0x20/0x24)
  (show_stack) from [<c05400e8>] (dump_stack+0x84/0xb8)
  (dump_stack) from [<c004913c>] (__schedule_bug+0x54/0x6c)
  (__schedule_bug) from [<c054065c>] (__schedule+0x80/0x668)
  (__schedule) from [<c0540cfc>] (schedule+0xb8/0xd4)
  (schedule) from [<c0543a3c>] (schedule_timeout+0x2c/0x234)
  (schedule_timeout) from [<c05417c0>] (wait_for_common+0xf4/0x188)
  (wait_for_common) from [<c0541874>] (wait_for_completion+0x20/0x24)
  (wait_for_completion) from [<c00a0104>] (__stop_cpus+0x58/0x70)
  (__stop_cpus) from [<c00a0580>] (stop_cpus+0x3c/0x54)
  (stop_cpus) from [<c00a06c4>] (__stop_machine+0xcc/0xe8)
  (__stop_machine) from [<c00a0714>] (stop_machine+0x34/0x44)
  (stop_machine) from [<c00173e8>] (patch_text+0x28/0x34)
  (patch_text) from [<c001733c>] (kgdb_arch_set_breakpoint+0x40/0x4c)
  (kgdb_arch_set_breakpoint) from [<c00a0d68>] (kgdb_validate_break_address+0x2c/0x60)
  (kgdb_validate_break_address) from [<c00a0e90>] (dbg_set_sw_break+0x1c/0xdc)
  (dbg_set_sw_break) from [<c00a2e88>] (gdb_serial_stub+0x9c4/0xba4)
  (gdb_serial_stub) from [<c00a11cc>] (kgdb_cpu_enter+0x1f8/0x60c)
  (kgdb_cpu_enter) from [<c00a18cc>] (kgdb_handle_exception+0x19c/0x1d0)
  (kgdb_handle_exception) from [<c0016f7c>] (kgdb_compiled_brk_fn+0x30/0x3c)
  (kgdb_compiled_brk_fn) from [<c00091a4>] (do_undefinstr+0x1a4/0x20c)
  (do_undefinstr) from [<c001400c>] (__und_svc_finish+0x0/0x34)

It turns out that when we're in kgdb all the CPUs are stopped anyway
so there's no reason we should be calling patch_text().  We can
instead directly call __patch_text() which assumes that CPUs have
already been stopped.

Fixes: 23a4e4050b ("arm: kgdb: Handle read-only text / modules")
Reported-by: Aapo Vienamo <avienamo@nvidia.com>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-09-16 23:58:46 +01:00
..
boot Minor fixes for omaps against v4.2-rc1. Mostly just minor dts changes 2015-07-09 15:38:16 -07:00
common TTY/Serial driver patches for 4.2-rc1 2015-06-26 15:53:22 -07:00
configs Allwinner late changes for 4.2 2015-07-09 15:08:44 -07:00
crypto
firmware
include Merge branch 'uaccess' into fixes 2015-09-11 19:18:28 +01:00
kernel ARM: 8425/1: kgdb: Don't try to stop the machine when setting breakpoints 2015-09-16 23:58:46 +01:00
kvm Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm 2015-06-26 12:20:00 -07:00
lib Merge branch 'uaccess' into fixes 2015-09-11 19:18:28 +01:00
mach-alpine
mach-asm9260
mach-at91 genalloc: rename dev_get_gen_pool() to gen_pool_get() 2015-06-30 19:45:01 -07:00
mach-axxia
mach-bcm ARM: BCM: Do not select CONFIG_MTD_NAND_BRCMNAND 2015-07-01 13:04:13 -07:00
mach-berlin ARM: SoC: driver updates for v4.2 2015-06-26 11:54:29 -07:00
mach-clps711x
mach-cns3xxx
mach-davinci ARM: SoC cleanups for v4.2 2015-06-26 11:08:27 -07:00
mach-digicolor
mach-dove ARM: dove: fix legacy dove IRQ numbers 2015-06-24 11:05:57 +02:00
mach-ebsa110
mach-efm32
mach-ep93xx ARM: ep93xx: simone: support for SPI-based MMC/SD cards 2015-06-11 14:21:29 -07:00
mach-exynos The changes to the common clock framework for 4.2 are dominated by new 2015-07-01 19:22:00 -07:00
mach-footbridge
mach-gemini ARM: gemini: Fix race in installing GPIO chained IRQ handler 2015-06-18 14:03:08 +02:00
mach-highbank
mach-hisi arm/mach-hisi: remove legacy __CPUINIT section that crept in 2015-06-16 14:12:21 -04:00
mach-imx genalloc: rename dev_get_gen_pool() to gen_pool_get() 2015-06-30 19:45:01 -07:00
mach-integrator
mach-iop13xx
mach-iop32x
mach-iop33x
mach-ixp4xx
mach-keystone Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm 2015-06-26 12:20:00 -07:00
mach-ks8695
mach-lpc18xx
mach-lpc32xx Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-07-01 15:19:35 -07:00
mach-mediatek
mach-meson
mach-mmp
mach-moxart
mach-mv78xx0
mach-mvebu ARM: SoC: late fixes and dependencies 2015-07-02 14:40:49 -07:00
mach-mxs
mach-netx
mach-nomadik
mach-nspire
mach-omap1 ARM: SoC: platform support for v4.2 2015-06-26 11:34:35 -07:00
mach-omap2 Merge branch 'fixes-rc1' into omap-for-v4.2/fixes 2015-07-06 05:33:17 -07:00
mach-orion5x
mach-picoxcell
mach-prima2 move CSR rtc iobrg read/write API to be regmap 2015-07-08 14:20:12 -07:00
mach-pxa ARM: SoC: platform support for v4.2 2015-06-26 11:34:35 -07:00
mach-qcom
mach-realview
mach-rockchip Remove __cpuinit macros and users. 2015-07-02 09:54:14 -07:00
mach-rpc
mach-s3c24xx
mach-s3c64xx
mach-s5pv210
mach-sa1100 Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm 2015-06-26 12:20:00 -07:00
mach-shmobile ARM: SoC: platform support for v4.2 2015-06-26 11:34:35 -07:00
mach-socfpga genalloc: rename dev_get_gen_pool() to gen_pool_get() 2015-06-30 19:45:01 -07:00
mach-spear
mach-sti
mach-stm32
mach-sunxi Allwinner late changes for 4.2 2015-07-09 15:08:44 -07:00
mach-tegra ARM: SoC: platform support for v4.2 2015-06-26 11:34:35 -07:00
mach-u300
mach-uniphier
mach-ux500
mach-versatile
mach-vexpress arm: don't use module_init in non-modular mach-vexpress/spc.c code 2015-06-16 14:12:29 -04:00
mach-vt8500
mach-w90x900
mach-zx
mach-zynq ARM: SoC: platform support for v4.2 2015-06-26 11:34:35 -07:00
mm ARM: 8437/1: dma-mapping: fix build warning with new DMA_ERROR_CODE definition 2015-09-16 23:58:46 +01:00
net
nwfpe ARM: swpan: fix nwfpe for uaccess changes 2015-09-09 23:26:11 +01:00
oprofile
plat-iop
plat-omap
plat-orion
plat-pxa
plat-samsung ARM: SAMSUNG: Constify platform_device_id 2015-06-06 02:18:02 +09:00
plat-versatile
probes
tools
vdso ARM: 8405/1: VDSO: fix regression with toolchains lacking ld.bfd executable 2015-07-31 18:54:45 +01:00
vfp
xen arm/xen: Enable user access to the kernel before issuing a privcmd call 2015-09-11 18:50:03 +01:00
Kconfig Merge branch 'uaccess' into fixes 2015-09-11 19:18:28 +01:00
Kconfig-nommu
Kconfig.debug Merge branches 'fixes' and 'ioremap' into for-linus 2015-07-07 12:35:33 +01:00
Makefile ARM: 8429/1: disable GCC SRA optimization 2015-09-07 13:24:05 +01:00