]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
octeontx2-pf: Move skb fragment map/unmap to common code
authorBharat Bhushan <bbhushan2@marvell.com>
Wed, 4 Dec 2024 05:56:53 +0000 (11:26 +0530)
committerDavid S. Miller <davem@davemloft.net>
Mon, 9 Dec 2024 12:15:31 +0000 (12:15 +0000)
Move skb fragment map/unmap function to common file
so as to reuse same for outbound IPsec crypto offload

Signed-off-by: Bharat Bhushan <bbhushan2@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c

index 523ecb798a7a258f21fd91b09601fc32fa2c8032..971115a5d2cc005e452afa6c3bd42316085bc923 100644 (file)
@@ -10,6 +10,7 @@
 #include <net/page_pool/helpers.h>
 #include <net/tso.h>
 #include <linux/bitfield.h>
+#include <net/xfrm.h>
 
 #include "otx2_reg.h"
 #include "otx2_common.h"
@@ -1947,3 +1948,48 @@ EXPORT_SYMBOL(otx2_mbox_up_handler_ ## _fn_name);
 MBOX_UP_CGX_MESSAGES
 MBOX_UP_MCS_MESSAGES
 #undef M
+
+dma_addr_t otx2_dma_map_skb_frag(struct otx2_nic *pfvf,
+                                struct sk_buff *skb, int seg, int *len)
+{
+       enum dma_data_direction dir = DMA_TO_DEVICE;
+       const skb_frag_t *frag;
+       struct page *page;
+       int offset;
+
+       /* Crypto hardware need write permission for ipsec crypto offload */
+       if (unlikely(xfrm_offload(skb))) {
+               dir = DMA_BIDIRECTIONAL;
+               skb = skb_unshare(skb, GFP_ATOMIC);
+       }
+
+       /* First segment is always skb->data */
+       if (!seg) {
+               page = virt_to_page(skb->data);
+               offset = offset_in_page(skb->data);
+               *len = skb_headlen(skb);
+       } else {
+               frag = &skb_shinfo(skb)->frags[seg - 1];
+               page = skb_frag_page(frag);
+               offset = skb_frag_off(frag);
+               *len = skb_frag_size(frag);
+       }
+       return otx2_dma_map_page(pfvf, page, offset, *len, dir);
+}
+
+void otx2_dma_unmap_skb_frags(struct otx2_nic *pfvf, struct sg_list *sg)
+{
+       enum dma_data_direction dir = DMA_TO_DEVICE;
+       struct sk_buff *skb = NULL;
+       int seg;
+
+       skb = (struct sk_buff *)sg->skb;
+       if (unlikely(xfrm_offload(skb)))
+               dir = DMA_BIDIRECTIONAL;
+
+       for (seg = 0; seg < sg->num_segs; seg++) {
+               otx2_dma_unmap_page(pfvf, sg->dma_addr[seg],
+                                   sg->size[seg], dir);
+       }
+       sg->num_segs = 0;
+}
index 566848663fea7751351fec06cc215fa3135fd00c..bb78d825046de19cbca23b0ce5d34b6babeeb6ca 100644 (file)
@@ -1149,4 +1149,8 @@ static inline int mcam_entry_cmp(const void *a, const void *b)
 {
        return *(u16 *)a - *(u16 *)b;
 }
+
+dma_addr_t otx2_dma_map_skb_frag(struct otx2_nic *pfvf,
+                                struct sk_buff *skb, int seg, int *len);
+void otx2_dma_unmap_skb_frags(struct otx2_nic *pfvf, struct sg_list *sg);
 #endif /* OTX2_COMMON_H */
index 3b0457e52a6a4f7d98cb240e7e3837836f53142f..a49041e55c3307f255fe66abbba2914b3c11e379 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/bpf.h>
 #include <linux/bpf_trace.h>
 #include <net/ip6_checksum.h>
-#include <net/xfrm.h>
 
 #include "otx2_reg.h"
 #include "otx2_common.h"
@@ -81,51 +80,6 @@ static unsigned int frag_num(unsigned int i)
 #endif
 }
 
-static dma_addr_t otx2_dma_map_skb_frag(struct otx2_nic *pfvf,
-                                       struct sk_buff *skb, int seg, int *len)
-{
-       enum dma_data_direction dir = DMA_TO_DEVICE;
-       const skb_frag_t *frag;
-       struct page *page;
-       int offset;
-
-       /* Crypto hardware need write permission for ipsec crypto offload */
-       if (unlikely(xfrm_offload(skb))) {
-               dir = DMA_BIDIRECTIONAL;
-               skb = skb_unshare(skb, GFP_ATOMIC);
-       }
-
-       /* First segment is always skb->data */
-       if (!seg) {
-               page = virt_to_page(skb->data);
-               offset = offset_in_page(skb->data);
-               *len = skb_headlen(skb);
-       } else {
-               frag = &skb_shinfo(skb)->frags[seg - 1];
-               page = skb_frag_page(frag);
-               offset = skb_frag_off(frag);
-               *len = skb_frag_size(frag);
-       }
-       return otx2_dma_map_page(pfvf, page, offset, *len, dir);
-}
-
-static void otx2_dma_unmap_skb_frags(struct otx2_nic *pfvf, struct sg_list *sg)
-{
-       enum dma_data_direction dir = DMA_TO_DEVICE;
-       struct sk_buff *skb = NULL;
-       int seg;
-
-       skb = (struct sk_buff *)sg->skb;
-       if (unlikely(xfrm_offload(skb)))
-               dir = DMA_BIDIRECTIONAL;
-
-       for (seg = 0; seg < sg->num_segs; seg++) {
-               otx2_dma_unmap_page(pfvf, sg->dma_addr[seg],
-                                   sg->size[seg], dir);
-       }
-       sg->num_segs = 0;
-}
-
 static void otx2_xdp_snd_pkt_handler(struct otx2_nic *pfvf,
                                     struct otx2_snd_queue *sq,
                                 struct nix_cqe_tx_s *cqe)