看板 DFBSD_submit 關於我們 聯絡資訊
:> 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. : :This basic pattern is used by many network drivers -- the argument to :the isr routine is effectively ignored. Sure, m gets initialized but the :value is never actually used. Ah, yes I see. And what a great example of why creating IF_*() macros that takes left-hand-side assignment variables as an argument is a bad idea! (usbintr()'s IF_DEQUEUE call). Ok, I'll commit your patch but I am going to also change the NETISR to pass NULL instead of 'm', since 'm' is not used and couldn't be used even if the usbintr wanted to use it. -Matt