Hello.

Jason Wessel wrote:

>>> This patch fixes some corner cases where KGDB will silently hang or
>>> kill the system, if a user accidentally tries to source step into a
>>> spin_unlock() call or source step in on a macro containing
>>> smp_processor_id().  The use of raw_smp_processor_id is desired in
>>> kernel/kgdb.c to fix this particular problem.

>>    Hmm, looks like it might fix the issues we also had, and even 
>> render the patch which makes KGDB dependent on !DEBUG_PREEMPT (and 
>> some others) unneeded...

> Which other parts did you think were not needed?  It would be good to 
> dump some of that.   If this patch doesn't fix the !DEBUG_PREEMPT,

    Those were RT specific, IIUC, therefore not submitted...

> perhaps the next one I am sending out about single stepping will fix 
> it.   If not can you provide me with a test case to see the problem?

    Well, for example, with 2.6.18-rt7 kernel, stepping into 
smp_processor_id() was blowing away U-Boot (!) on my PPC board (even in 
PREEMPT_DESKTOP mode)... On x86, stepping past preempt_disable() caused reboots.

> I had no intention of applying the !DEBUG_PREEMPT patch until I have 
> enough information to reproduce the problem or characterization that 
> adequately explains why it has no possibility to work.  Ideally I would 
> like to see the root cause identified so as to craft a solution.

    I yet need to check if your patch helps with those issues...

>>    Hm, I wonder whether the override will be needed for other 
>> architectures...

> Sure the x86_64 arch needs to change too, and the change below should 
> address it.  I don't know that any other arch has a special rewind that 
> is needed.

    Perhaps I need to consult the manuals...

> Signed-off-by: Jason Wessel <[EMAIL PROTECTED]>

> Index: linux-2.6.21-standard/arch/x86_64/kernel/kgdb.c
> ===================================================================
> --- linux-2.6.21-standard.orig/arch/x86_64/kernel/kgdb.c
> +++ linux-2.6.21-standard/arch/x86_64/kernel/kgdb.c
> @@ -325,6 +325,14 @@ int kgdb_skipexception(int exception, st
>        return 0;
> }
> 
> +unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs)
> +{
> +       if (exception == 3) {
> +               return instruction_pointer(regs) - 1;
> +       }
> +       return instruction_pointer(regs);
> +}
> +
> struct kgdb_arch arch_kgdb_ops = {
>        .gdb_bpt_instr = {0xcc},
>        .flags = KGDB_HW_BREAKPOINT,

WBR, Sergei

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Kgdb-bugreport mailing list
Kgdb-bugreport@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport

Reply via email to