Message ID | 54C91C15.7030709@linaro.org |
---|---|
State | New |
Headers | show |
Hi David, On 30/01/15 16:04, David Vrabel wrote: > How about this? This is working for me. Thanks! > 8<------------------------------------------ > xen-netback: stop the guest rx thread after a fatal error > > After commit e9d8b2c2968499c1f96563e6522c56958d5a1d0d (xen-netback: > disable rogue vif in kthread context), a fatal (protocol) error would > leave the guest Rx thread spinning, wasting CPU time. Commit > ecf08d2dbb96d5a4b4bcc53a39e8d29cc8fef02e (xen-netback: reintroduce > guest Rx stall detection) made this even worse by removing a > cond_resched() from this path. > > A fatal error is non-recoverable so just allow the guest Rx thread to > exit. This requires taking additional refs to the task so the thread > exiting early is handled safely. > > Signed-off-by: David Vrabel <david.vrabel@citrix.com> Reported-by: Julien Grall <julien.grall@linaro.org> Tested-by: Julien Grall <julien.grall@linaro.org> Regards,
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index 908e65e..9448c6c 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c @@ -2110,7 +2110,7 @@ int xenvif_kthread_guest_rx(void *data) if (unlikely(vif->disabled && queue->id == 0)) { xenvif_carrier_off(vif); xenvif_rx_queue_purge(queue); - continue; + break; } if (!skb_queue_empty(&queue->rx_queue))