kue0 not receiving patch

Scott Michel scottm at aero.org
Tue Feb 15 10:22:06 PST 2005

Matthew Dillon wrote:
    Hmm.  That doesn't look quite right.... the mbuf is being put on the
    ifq but then it is also being passed to NETISR_USB.   NETISR_USB
    (usbintr() in usb/usb_ethersubr.c) takes the passed mbuf and 
    IF_DEQUEUE's it... so far so good.  But then it *LOOPS* on the ifq
    to get the next mbuf... but that means the same mbuf may be IF_DEQUEUE'd
    more then once since the other mbufs on the ifq also had an ISR queued
    for them.
If usbintr gets called multiple times, it will find an empty queue. The 
loops empties out the queue, leaving no work the next time usbintr gets 

    It sounds like if more then one packet is queued to the NETISR, the 
    system ought to crash :-(.
It doesn't. It will panic on shutdown, but after disks are sync-ed for 
completely different reasons.

    It seems to me that instead of IF_ENQUEUE'ing the mbuf in 
    usb_ether_input() and usb_tx_done() we should have the usbintr() code
    not try to dequeue it.
There should be two functions, usbintr_rx and usbintr_tx. The messaging 
functions already create an implicit queue for us, so why not take 
advantage of it? But at least this patch gets me operational enough, so 
I can actually set up a proper CVS repo and generate proper diffs and a 
proper solution.


More information about the Submit mailing list