aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBernhard Kaindl <bk@suse.de>2008-01-30 07:34:11 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:34:11 -0500
commitf212ec4b7b4d84290f12c9c0416cdea283bf5f40 (patch)
tree9beb7e5b87bac80410767fd3aacd93f92ecb0c04 /lib
parent6194ba6ff6ccf8d5c54c857600843c67aa82c407 (diff)
x86: early boot debugging via FireWire (ohci1394_dma=early)
This patch adds a new configuration option, which adds support for a new early_param which gets checked in arch/x86/kernel/setup_{32,64}.c:setup_arch() to decide wether OHCI-1394 FireWire controllers should be initialized and enabled for physical DMA access to allow remote debugging of early problems like issues ACPI or other subsystems which are executed very early. If the config option is not enabled, no code is changed, and if the boot paramenter is not given, no new code is executed, and independent of that, all new code is freed after boot, so the config option can be even enabled in standard, non-debug kernels. With specialized tools, it is then possible to get debugging information from machines which have no serial ports (notebooks) such as the printk buffer contents, or any data which can be referenced from global pointers, if it is stored below the 4GB limit and even memory dumps of of the physical RAM region below the 4GB limit can be taken without any cooperation from the CPU of the host, so the machine can be crashed early, it does not matter. In the extreme, even kernel debuggers can be accessed in this way. I wrote a small kgdb module and an accompanying gdb stub for FireWire which allows to gdb to talk to kgdb using remote remory reads and writes over FireWire. An version of the gdb stub fore FireWire is able to read all global data from a system which is running a a normal kernel without any kernel debugger, without any interruption or support of the system's CPU. That way, e.g. the task struct and so on can be read and even manipulated when the physical DMA access is granted. A HOWTO is included in this patch, in Documentation/debugging-via-ohci1394.txt and I've put a copy online at ftp://ftp.suse.de/private/bk/firewire/docs/debugging-via-ohci1394.txt It also has links to all the tools which are available to make use of it another copy of it is online at: ftp://ftp.suse.de/private/bk/firewire/kernel/ohci1394_dma_early-v2.diff Signed-Off-By: Bernhard Kaindl <bk@suse.de> Tested-By: Thomas Renninger <trenn@suse.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig.debug28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index aa56e631580..89f4035b526 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -586,5 +586,33 @@ config LATENCYTOP
586 Enable this option if you want to use the LatencyTOP tool 586 Enable this option if you want to use the LatencyTOP tool
587 to find out which userspace is blocking on what kernel operations. 587 to find out which userspace is blocking on what kernel operations.
588 588
589config PROVIDE_OHCI1394_DMA_INIT
590 bool "Provide code for enabling DMA over FireWire early on boot"
591 depends on PCI && X86
592 help
593 If you want to debug problems which hang or crash the kernel early
594 on boot and the crashing machine has a FireWire port, you can use
595 this feature to remotely access the memory of the crashed machine
596 over FireWire. This employs remote DMA as part of the OHCI1394
597 specification which is now the standard for FireWire controllers.
598
599 With remote DMA, you can monitor the printk buffer remotely using
600 firescope and access all memory below 4GB using fireproxy from gdb.
601 Even controlling a kernel debugger is possible using remote DMA.
602
603 Usage:
604
605 If ohci1394_dma=early is used as boot parameter, it will initialize
606 all OHCI1394 controllers which are found in the PCI config space.
607
608 As all changes to the FireWire bus such as enabling and disabling
609 devices cause a bus reset and thereby disable remote DMA for all
610 devices, be sure to have the cable plugged and FireWire enabled on
611 the debugging host before booting the debug target for debugging.
612
613 This code (~1k) is freed after boot. By then, the firewire stack
614 in charge of the OHCI-1394 controllers should be used instead.
615
616 See Documentation/debugging-via-ohci1394.txt for more information.
589 617
590source "samples/Kconfig" 618source "samples/Kconfig"