From: Zoltan Kiss <zoltan.k...@citrix.com> Date: Thu, 7 Aug 2014 16:51:17 +0100
> Ok, how about this: > * ndo_start_xmit tries to set up the grant copy operations, something > * which is done now in the thread > * no estimation madness, just go ahead and try to do it > * if the skb can fit, kick the thread > * if it fails (not enough slots to complete the TX), then: > * call netif_tx_stop_queue on that queue (just like now) > * set up timer rx_stalled (just like now) > * save the state of the current skb (where the grant copy op setup is > * halted) > * if new slots coming in, continue to create the grant copy ops for the > * stalled skb, and if it succeeds, kick the thread plus call > * netif_tx_start_queue. (just like now) > * if the timer fires, drop the stalled skb, and set the carrier off, so > * QDisc won't bother to queue packets for a stalled interface > * the thread will only do the actual grant copy hypercall and releasing > * the skb > * in any case, ndo_start_xmit should return NETDEV_TX_OK, just like now It sounds like this would work, and indeed it would abide by the intended rules of netif_{stop,wake}_queue() and ->ndo_start_xmit()'s return values. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/