• Jason Wessel's avatar
    x86, hw_breakpoints, kgdb: Fix kgdb to use hw_breakpoint API · cc096749
    Jason Wessel authored
    In the 2.6.33 kernel, the hw_breakpoint API is now used for the
    performance event counters.  The hw_breakpoint_handler() now
    consumes the hw breakpoints that were previously set by kgdb
    arch specific code.  In order for kgdb to work in conjunction
    with this core API change, kgdb must use some of the low level
    functions of the hw_breakpoint API to install, uninstall, and
    deal with hw breakpoint reservations.
    
    The kgdb core required a change to call kgdb_disable_hw_debug
    anytime a slave cpu enters kgdb_wait() in order to keep all the
    hw breakpoints in sync as well as to prevent hitting a hw
    breakpoint while kgdb is active.
    
    During the architecture specific initialization of kgdb, it will
    pre-allocate 4 disabled (struct perf event **) structures.  Kgdb
    will use these to manage the capabilities for the 4 hw
    breakpoint registers, per cpu.  Right now the hw_breakpoint API
    does not have a way to ask how many breakpoints are available,
    on each CPU so it is possible that the install of a breakpoint
    might fail when kgdb restores the system to the run state.  The
    intent of this patch is to first get the basic functionality of
    hw breakpoints working and leave it to the person debugging the
    kernel to understand what hw breakpoints are in use and what
    restrictions have been imposed as a result.  Breakpoint
    constraints will be dealt with in a future patch.
    
    While atomic, the x86 specific kgdb code will call
    arch_uninstall_hw_breakpoint() and arch_install_hw_breakpoint()
    to manage the cpu specific hw breakpoints.
    
    The net result of these changes allow kgdb to use the same pool
    of hw_breakpoints that are used by the perf event API, but
    neither knows about future reservations for the available hw
    breakpoint slots.
    Signed-off-by: default avatarJason Wessel <jason.wessel@windriver.com>
    Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: kgdb-bugreport@lists.sourceforge.net
    Cc: K.Prasad <prasad@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: torvalds@linux-foundation.org
    LKML-Reference: <1264719883-7285-2-git-send-email-jason.wessel@windriver.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    cc096749
kgdb.c 39.4 KB