Hello.

Amit S. Kale wrote:

>>>     As the discussion was going on about the effects of trapping the
>>>netpoll queue during KGDBoE debugging, I tried avoiding it. So in
>>>eth_pre_exception_handler() I did not set net_poll_trap to 1 and did not
>>>reset it back to 0 in eth_post_exception_handler()

>>>file drivers/net/kgdboe.c

>>>static void eth_pre_exception_handler(void)
>>>{
>>>        /* Increment the module count when the debugger is active */
>>>        if (!kgdb_connected)
>>>                try_module_get(THIS_MODULE);
>>>//      netpoll_set_trap(1);
>>>}

>>>static void eth_post_exception_handler(void)
>>>{
>>>        /* decrement the module count when the debugger detaches */
>>>        if (!kgdb_connected)
>>>                module_put(THIS_MODULE);
>>>//      netpoll_set_trap(0);
>>>}

>>    BTW, I've looked into kgdb_handle_exception() and I think I've spotted
>>couple of issues with calling these methods:

>>- the pre_exception() method may be called several times in a row because
>>of acquirelock label preceding its call -- the code will go back to this
>>label under some circumstances and therefore netpoll's 'trapping' variable
>>will be incremented more than once but will only be decremented once upon
>>exit;

> This can occur on SMP systems.

>>- if KGDB hits a disabled breakpoint (can only happen on x86), the code
>>will jump to the kgdb_restore label bypassing a call to the
>>post_exception() method.

> True. Again on i386 SMP systems this can happen.

>>    Obviously, this may render device queue frozen even after KGDB leaves
>>the exception (because of CONFOG_NETPOLL_TRAP).  What about moving the
>>post_exception() call under kgdb_restore label (that is, after all the CPUs
>>have quit from KGDB -- which would seem symmetrical to post_exception()
>>call that is made before all CPUs are stopped) and moving the
>>post_exception() call before acauirelock label?

> We can't move pre_exception before acquirelock label since multiple CPUs may 
> execute that before attempting to acquire kgdb lock.  pre_exception should be 
> moved past the call to kgdb_skipexception as that is the point where we 
> decide that current CPU is the master. There is no backtracking after that 
> point.

    Yeah, I figured this out myself later (but it was 1:30 am already :-)...

> With this change keeping post_exception at current place is fine.

> Thanks for this analysis!

    Well, the good analysys should be followed by the patch -- which I'm
preparing... :-)

> -Amit

WBR, Sergei


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Kgdb-bugreport mailing list
Kgdb-bugreport@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport

Reply via email to