aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/interface.c
diff options
context:
space:
mode:
authorWei Liu <wei.liu2@citrix.com>2017-06-21 05:21:22 -0400
committerDavid S. Miller <davem@davemloft.net>2017-06-22 11:15:42 -0400
commitdfa523ae9f2542bee4cddaea37b3be3e157f6e6b (patch)
tree3c31b603c04bad0bb51c19305488cc12140ff7cb /drivers/net/xen-netback/interface.c
parent191cdb3822e5df6b3c8b9f8cb8c4bf93f6cc90c7 (diff)
xen-netback: correctly schedule rate-limited queues
Add a flag to indicate if a queue is rate-limited. Test the flag in NAPI poll handler and avoid rescheduling the queue if true, otherwise we risk locking up the host. The rescheduling will be done in the timer callback function. Reported-by: Jean-Louis Dupond <jean-louis@dupond.be> Signed-off-by: Wei Liu <wei.liu2@citrix.com> Tested-by: Jean-Louis Dupond <jean-louis@dupond.be> Reviewed-by: Paul Durrant <paul.durrant@citrix.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/xen-netback/interface.c')
-rw-r--r--drivers/net/xen-netback/interface.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index 8397f6c92451..e322a862ddfe 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -106,7 +106,11 @@ static int xenvif_poll(struct napi_struct *napi, int budget)
106 106
107 if (work_done < budget) { 107 if (work_done < budget) {
108 napi_complete_done(napi, work_done); 108 napi_complete_done(napi, work_done);
109 xenvif_napi_schedule_or_enable_events(queue); 109 /* If the queue is rate-limited, it shall be
110 * rescheduled in the timer callback.
111 */
112 if (likely(!queue->rate_limited))
113 xenvif_napi_schedule_or_enable_events(queue);
110 } 114 }
111 115
112 return work_done; 116 return work_done;