From: Joao Martins Date: Fri, 12 May 2017 08:46:39 +0000 (+0100) Subject: xen-netback: shorten tx grant copy X-Git-Tag: v4.1.12-102.0.20170601_1400~213^2~11 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=aa504915879de395e60f2ca88547d95a27ed11b7;p=users%2Fjedix%2Flinux-maple.git xen-netback: shorten tx grant copy Refactors grant copy setup on Transmit side and fit into a helper. Further commits will allow this routine to memcpy from a premapped page. Signed-off-by: Joao Martins Reviewed-by: Shannon Nelson Acked-by: Konrad Rzeszutek Wilk Orabug: 26107942 --- diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index dadff01a75c9d..c5dedaa2fdefa 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c @@ -337,6 +337,29 @@ static inline void xenvif_tx_create_map_op(struct xenvif_queue *queue, queue->pending_tx_info[pending_idx].extra_count = extra_count; } +static inline void xenvif_tx_create_copy_op(struct xenvif_queue *queue, + unsigned *copy_ops, + struct xen_netif_tx_request *txreq, + struct sk_buff *skb, + unsigned int data_len) +{ + struct gnttab_copy *tx_copy_op; + + tx_copy_op = &queue->tx_copy_ops[*copy_ops]; + tx_copy_op->source.u.ref = txreq->gref; + tx_copy_op->source.domid = queue->vif->domid; + tx_copy_op->source.offset = txreq->offset; + + tx_copy_op->dest.u.gmfn = virt_to_gfn(skb->data); + tx_copy_op->dest.domid = DOMID_SELF; + tx_copy_op->dest.offset = + offset_in_page(skb->data) & ~XEN_PAGE_MASK; + + tx_copy_op->len = data_len; + tx_copy_op->flags = GNTCOPY_source_gref; + (*copy_ops)++; +} + static inline struct sk_buff *xenvif_alloc_skb(unsigned int size) { struct sk_buff *skb = @@ -945,20 +968,8 @@ static void xenvif_tx_build_gops(struct xenvif_queue *queue, XENVIF_TX_CB(skb)->pending_idx = pending_idx; __skb_put(skb, data_len); - queue->tx_copy_ops[*copy_ops].source.u.ref = txreq.gref; - queue->tx_copy_ops[*copy_ops].source.domid = queue->vif->domid; - queue->tx_copy_ops[*copy_ops].source.offset = txreq.offset; - - queue->tx_copy_ops[*copy_ops].dest.u.gmfn = - virt_to_gfn(skb->data); - queue->tx_copy_ops[*copy_ops].dest.domid = DOMID_SELF; - queue->tx_copy_ops[*copy_ops].dest.offset = - offset_in_page(skb->data) & ~XEN_PAGE_MASK; - - queue->tx_copy_ops[*copy_ops].len = data_len; - queue->tx_copy_ops[*copy_ops].flags = GNTCOPY_source_gref; - - (*copy_ops)++; + xenvif_tx_create_copy_op(queue, copy_ops, &txreq, + skb, data_len); if (data_len < txreq.size) { frag_set_pending_idx(&skb_shinfo(skb)->frags[0],