Hello, I wrote:

>>>>>>>Even with this patch, the packets probably get stuck somewhere in the
>>>>>>>driver, as cross-gdb sees tail of the $g packet reply only in reply to
>>>>>>>next packet...

>>>  This wasn;t happeing on x86 probably because the register packet should
>>>be much shorted there than on PPC...

>>>>>>  Argh! That's all because of the CONFIG_NETPOLL_TRAP that
>>>>>>CONFIG_KGDBOE* options select -- since the initial breakpoint enables
>>>>>>trapping via KGDBoE's pre_exception() handler, netif_{stop/wake}_queue()
>>>>>>stop to work and that causes KGDBoE to literally flood 8139too with
>>>>>>packets (although it can't queue up more than 4). Looks like a general
>>>>>>design issue to me... :-/

>>>>> Well, maybe not. But many drivers are surely unprepared to their
>>>>>hard_start_xmit() method being called with queue alraedy stopped and
>>>>>those with small TX queue (like natsemi with which we're also having
>>>>>trouble) would get flooded as well. I'm going to submit a patch to
>>>>>netdev adding extra check for TX ring being full -- after/if it gets
>>>>>accepted, this patch won't be needed anymore.

>>>>Here is what comes to my mind right away. It might need some more
>>>>polishing or cleaning up:

>>>>A potential solution will be to check the if hard_start_xmit() returns
>>>>NETDEV_TX_BUSY. In case transmit queue is busy (due to lot of threads or
>>>>queue getting full), we should wait in netpoll_send_skb(), call a cleanup
>>>>through poll() and then retry sending packet.

>>>   This is already being done by netpoll iself. The thing is that
>>>hard_start_xmit() doesdn't return NETDEV_TX_BUSY in those drivers. :-/

>>In addition to that we set trapped. I wonder whether it is possible that a 
>>queue is stopped and we enter kgdb. It would be a deadlock.
>>-Amit

>     Why? Netpoll does call the driver's interrupt and NAPI handlers in that 
> case (until the retry count is 0).

    Ah, got it -- since the traffic trapping (when enabled) effectively 
bypasses netif_wake_queue(), a queue would never be actually woken up.
Maybe it's worth to always return 0 from netif_queue_stopped() in this case?
Or maybe the correct thing to do when trapping is to just thiddle the 
__LINK_STATE_XOFF bit, bypassing call to netif_schedule()?

>>>>Regards,
>>>>Mithlesh Thukral

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