/* Suppress further interrupts. */
        virtqueue_disable_cb(vq);
  
 -      /* We were probably waiting for more output buffers. */
 -      netif_wake_subqueue(vi->dev, vq2txq(vq));
 +      if (napi->weight)
 +              virtqueue_napi_schedule(napi, vq);
 +      else
 +              /* We were probably waiting for more output buffers. */
 +              netif_wake_subqueue(vi->dev, vq2txq(vq));
  }
  
- static unsigned int mergeable_ctx_to_buf_truesize(unsigned long mrg_ctx)
- {
-       unsigned int truesize = mrg_ctx & (MERGEABLE_BUFFER_ALIGN - 1);
-       return (truesize + 1) * MERGEABLE_BUFFER_ALIGN;
- }
- 
- static void *mergeable_ctx_to_buf_address(unsigned long mrg_ctx)
- {
-       return (void *)(mrg_ctx & -MERGEABLE_BUFFER_ALIGN);
- 
- }
- 
- static unsigned long mergeable_buf_to_ctx(void *buf, unsigned int truesize)
- {
-       unsigned int size = truesize / MERGEABLE_BUFFER_ALIGN;
-       return (unsigned long)buf | (size - 1);
- }
- 
  /* Called from bottom half context */
  static struct sk_buff *page_to_skb(struct virtnet_info *vi,
                                   struct receive_queue *rq,