+static void refill_work(struct work_struct *work)
+{
+ struct virtnet_info *vi;
+ bool still_empty;
+
+ vi = container_of(work, struct virtnet_info, refill);
+ napi_disable(&vi->napi);
+ try_fill_recv(vi, GFP_KERNEL);
+ still_empty = (vi->num == 0);
+ napi_enable(&vi->napi);
+
+ /* In theory, this can happen: if we don't get any buffers in
+ * we will*never* try to fill again. Sleeping in keventd if
+ * bad, but that is worse. */
+ if (still_empty) {
+ msleep(100);
+ schedule_work(&vi->refill);
+ }
+}
+