Subject: Re: [RFC PATCH 06/13] xen-netback: copy buffer on xenvif_start_xmit()

From: Wei Liu <[email-masked]>
Date: Tue, 2 Jun 2015 16:10:00 +0100

On Fri, May 22, 2015 at 10:26:48AM +0000, Joao Martins wrote:
[...]
> >> 	return IRQ_HANDLED;
> >> }
> >> @@ -168,8 +169,12 @@ static int xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev)
> >> 	cb = XENVIF_RX_CB(skb);
> >> 	cb->expires = jiffies + vif->drain_timeout;
> >> 
> >> -	xenvif_rx_queue_tail(queue, skb);
> >> -	xenvif_kick_thread(queue);
> >> +	if (!queue->vif->persistent_grants) {
> >> +		xenvif_rx_queue_tail(queue, skb);
> >> +		xenvif_kick_thread(queue);
> >> +	} else if (xenvif_rx_map(queue, skb)) {
> >> +		return NETDEV_TX_BUSY;
> >> +	}
> >> 
> > 
> > We now have two different functions for guest RX, one is xenvif_rx_map,
> > the other is xenvif_rx_action. They look very similar. Can we only have
> > one?
> I think I can merge this into xenvif_rx_action, and I notice that the stall
> detection its missing. I will also add that.
> Perhaps I could also disable the RX kthread, since this doesn't get used with
> persistent grants?
> 

Disabling that kthread is fine. But we do need to make sure we can do
the same things in start_xmit as we are in kthread. I.e. what context
does start_xmit run in and what are the restrictions.

Wei.