The intent of this patch is to remove as much as possible from ia64-lite.patch
and move it to ia64.patch. The objective is to reduce possible conflicts
in -mm. The patch removes hardware break pointing and the ability to take
a breakpoint before the slab is initialized and local cpu data is initialized.
Should you want to debug early like in setup_arch or before slab initialization
then ia64.patch is required.
Signed-off-by: Bob Picco <[EMAIL PROTECTED]>
arch/ia64/kernel/entry.S | 4 +-
arch/ia64/kernel/ivt.S | 16 --------
arch/ia64/kernel/process.c | 6 ---
arch/ia64/kernel/unwind.c | 87 ---------------------------------------------
4 files changed, 2 insertions(+), 111 deletions(-)
Index: linux-2.6.17-rc3-kgdb/arch/ia64/kernel/entry.S
===================================================================
--- linux-2.6.17-rc3-kgdb.orig/arch/ia64/kernel/entry.S 2006-04-30
17:56:09.000000000 -0400
+++ linux-2.6.17-rc3-kgdb/arch/ia64/kernel/entry.S 2006-05-01
13:55:27.000000000 -0400
@@ -954,9 +954,9 @@ GLOBAL_ENTRY(ia64_leave_kernel)
shr.u r18=r19,16 // get byte size of existing "dirty" partition
;;
mov r16=ar.bsp // get existing backing store pointer
-(pUStk) addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
+ addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
;;
-(pUStk) ld4 r17=[r17] // r17 = cpu_data->phys_stacked_size_p8
+ ld4 r17=[r17] // r17 = cpu_data->phys_stacked_size_p8
(pKStk) br.cond.dpnt skip_rbs_switch
/*
Index: linux-2.6.17-rc3-kgdb/arch/ia64/kernel/ivt.S
===================================================================
--- linux-2.6.17-rc3-kgdb.orig/arch/ia64/kernel/ivt.S 2006-04-30
17:56:09.000000000 -0400
+++ linux-2.6.17-rc3-kgdb/arch/ia64/kernel/ivt.S 2006-05-01
13:55:27.000000000 -0400
@@ -53,14 +53,6 @@
#include <asm/unistd.h>
#include <asm/errno.h>
-#ifdef CONFIG_KGDB
-#define KGDB_ENABLE_PSR_DB mov r31=psr;; movl r30=IA64_PSR_DB;; \
- or r31=r31,r30;; \
- mov psr.l=r31;; srlz.i;;
-#else
-#define KGDB_ENABLE_PSR_DB
-#endif
-
#if 1
# define PSR_DEFAULT_BITS psr.ac
#else
@@ -528,7 +520,6 @@ ENTRY(page_fault)
movl r14=ia64_leave_kernel
;;
SAVE_REST
- KGDB_ENABLE_PSR_DB
mov rp=r14
;;
adds out2=16,r12 // out2 = pointer to pt_regs
@@ -873,7 +864,6 @@ ENTRY(interrupt)
srlz.i // ensure everybody knows psr.ic is back on
;;
SAVE_REST
- KGDB_ENABLE_PSR_DB
;;
MCA_RECOVER_RANGE(interrupt)
alloc r14=ar.pfs,0,0,2,0 // must be first in an insn group
@@ -1121,7 +1111,6 @@ ENTRY(non_syscall)
movl r15=ia64_leave_kernel
;;
SAVE_REST
- KGDB_ENABLE_PSR_DB
mov rp=r15
;;
br.call.sptk.many b6=ia64_bad_break // avoid WAW on CFM and ignore
return addr
@@ -1155,7 +1144,6 @@ ENTRY(dispatch_unaligned_handler)
adds r3=8,r2 // set up second base pointer
;;
SAVE_REST
- KGDB_ENABLE_PSR_DB
movl r14=ia64_leave_kernel
;;
mov rp=r14
@@ -1198,10 +1186,6 @@ ENTRY(dispatch_to_fault_handler)
adds r3=8,r2 // set up second base pointer
for SAVE_REST
;;
SAVE_REST
- cmp.eq p6,p0=29,out0
-(p6) br.cond.spnt 1f;; // debug_vector
- KGDB_ENABLE_PSR_DB
-1:
movl r14=ia64_leave_kernel
;;
mov rp=r14
Index: linux-2.6.17-rc3-kgdb/arch/ia64/kernel/process.c
===================================================================
--- linux-2.6.17-rc3-kgdb.orig/arch/ia64/kernel/process.c 2006-04-30
17:56:09.000000000 -0400
+++ linux-2.6.17-rc3-kgdb/arch/ia64/kernel/process.c 2006-05-01
13:55:27.000000000 -0400
@@ -459,9 +459,6 @@ copy_thread (int nr, unsigned long clone
*/
child_ptregs->cr_ipsr = ((child_ptregs->cr_ipsr | IA64_PSR_BITS_TO_SET)
& ~(IA64_PSR_BITS_TO_CLEAR | IA64_PSR_PP |
IA64_PSR_UP));
-#ifdef CONFIG_KGDB
- child_ptregs->cr_ipsr |= IA64_PSR_DB;
-#endif
/*
* NOTE: The calling convention considers all floating point
@@ -690,9 +687,6 @@ kernel_thread (int (*fn)(void *), void *
regs.pt.r11 = (unsigned long) arg; /* 2nd argument */
/* Preserve PSR bits, except for bits 32-34 and 37-45, which we can't
read. */
regs.pt.cr_ipsr = ia64_getreg(_IA64_REG_PSR) | IA64_PSR_BN;
-#ifdef CONFIG_KGDB
- regs.pt.cr_ipsr |= IA64_PSR_DB;
-#endif
regs.pt.cr_ifs = 1UL << 63; /* mark as valid, empty frame */
regs.sw.ar_fpsr = regs.pt.ar_fpsr = ia64_getreg(_IA64_REG_AR_FPSR);
regs.sw.ar_bspstore = (unsigned long) current + IA64_RBS_OFFSET;
Index: linux-2.6.17-rc3-kgdb/arch/ia64/kernel/unwind.c
===================================================================
--- linux-2.6.17-rc3-kgdb.orig/arch/ia64/kernel/unwind.c 2006-04-30
17:56:09.000000000 -0400
+++ linux-2.6.17-rc3-kgdb/arch/ia64/kernel/unwind.c 2006-05-01
13:55:27.000000000 -0400
@@ -72,68 +72,10 @@
# define STAT(x...)
#endif
-#ifdef CONFIG_KGDB
-#define KGDB_EARLY_SIZE 100
-static struct unw_reg_state __initdata kgdb_reg_state[KGDB_EARLY_SIZE];
-static struct unw_labeled_state __initdata kgdb_labeled_state[KGDB_EARLY_SIZE];
-void __initdata *kgdb_reg_state_free, __initdata *kgdb_labeled_state_free;
-
-static void __init
-kgdb_malloc_init(void)
-{
- int i;
-
- kgdb_reg_state_free = kgdb_reg_state;
- for (i = 1; i < KGDB_EARLY_SIZE; i++) {
- *((unsigned long *) &kgdb_reg_state[i]) = (unsigned long)
kgdb_reg_state_free;
- kgdb_reg_state_free = &kgdb_reg_state[i];
- }
-
- kgdb_labeled_state_free = kgdb_labeled_state;
- for (i = 1; i < KGDB_EARLY_SIZE; i++) {
- *((unsigned long *) &kgdb_labeled_state[i]) =
- (unsigned long) kgdb_labeled_state_free;
- kgdb_labeled_state_free = &kgdb_labeled_state[i];
- }
-
-}
-
-static void * __init
-kgdb_malloc(void **mem)
-{
- void *p;
-
- p = *mem;
- *mem = *((void **) p);
- return p;
-}
-
-static void __init
-kgdb_free(void **mem, void *p)
-{
- *((void **)p) = *mem;
- *mem = p;
-}
-
-#define alloc_reg_state() (!malloc_sizes[0].cs_cachep ? \
- kgdb_malloc(&kgdb_reg_state_free) : \
- kmalloc(sizeof(struct unw_reg_state), GFP_ATOMIC))
-#define free_reg_state(usr) (!malloc_sizes[0].cs_cachep ? \
- kgdb_free(&kgdb_reg_state_free, usr) : \
- kfree(usr))
-#define alloc_labeled_state() (!malloc_sizes[0].cs_cachep ? \
- kgdb_malloc(&kgdb_labeled_state_free) : \
- kmalloc(sizeof(struct unw_labeled_state), GFP_ATOMIC))
-#define free_labeled_state(usr) (!malloc_sizes[0].cs_cachep ?
\
- kgdb_free(&kgdb_labeled_state_free, usr) : \
- kfree(usr))
-
-#else
#define alloc_reg_state() kmalloc(sizeof(struct unw_reg_state),
GFP_ATOMIC)
#define free_reg_state(usr) kfree(usr)
#define alloc_labeled_state() kmalloc(sizeof(struct unw_labeled_state),
GFP_ATOMIC)
#define free_labeled_state(usr) kfree(usr)
-#endif
typedef unsigned long unw_word;
typedef unsigned char unw_hash_index_t;
@@ -296,24 +238,6 @@ static struct {
#endif
};
-#ifdef CONFIG_KGDB
-/*
- * This makes it safe to call breakpoint() very early
- * in setup_arch providing:
- * 1) breakpoint isn't called between lines in cpu_init
- * where init_mm.mm_count is incremented and ia64_mmu_init
- * is called. Otherwise the test below is invalid.
- * 2) the memory examined doesn't result in tlbmiss.
- */
-static unsigned long inline kgdb_unimpl_va_mask(void)
-{
- if (atomic_read(&init_mm.mm_count) > 1)
- return local_cpu_data->unimpl_va_mask;
- else
- return 0UL;
-}
-#endif
-
static inline int
read_only (void *addr)
{
@@ -1862,11 +1786,7 @@ run_script (struct unw_script *script, s
case UNW_INSN_LOAD:
#ifdef UNW_DEBUG
-#ifdef CONFIG_KGDB
- if ((s[val] & (kgdb_unimpl_va_mask() | 0x7)) != 0
-#else
if ((s[val] & (local_cpu_data->unimpl_va_mask | 0x7))
!= 0
-#endif
|| s[val] < TASK_SIZE)
{
UNW_DPRINT(0, "unwind.%s: rejecting bad
psp=0x%lx\n",
@@ -1901,11 +1821,7 @@ find_save_locs (struct unw_frame_info *i
struct unw_script *scr;
unsigned long flags = 0;
-#ifdef CONFIG_KGDB
- if ((info->ip & (kgdb_unimpl_va_mask() | 0xf)) || info->ip < TASK_SIZE)
{
-#else
if ((info->ip & (local_cpu_data->unimpl_va_mask | 0xf)) || info->ip <
TASK_SIZE) {
-#endif
/* don't let obviously bad addresses pollute the cache */
/* FIXME: should really be level 0 but it occurs too often. KAO
*/
UNW_DPRINT(1, "unwind.%s: rejecting bad ip=0x%lx\n",
__FUNCTION__, info->ip);
@@ -2333,9 +2249,6 @@ unw_init (void)
init_unwind_table(&unw.kernel_table, "kernel", KERNEL_START, (unsigned
long) __gp,
__start_unwind, __end_unwind);
-#ifdef CONFIG_KGDB
- kgdb_malloc_init();
-#endif
}
/*
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Kgdb-bugreport mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport