]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/rxe: switch to using the crc32 library
authorEric Biggers <ebiggers@google.com>
Fri, 7 Feb 2025 03:23:16 +0000 (19:23 -0800)
committerLeon Romanovsky <leon@kernel.org>
Sun, 9 Feb 2025 09:20:10 +0000 (04:20 -0500)
Now that the crc32_le() library function takes advantage of
architecture-specific optimizations, it is unnecessary to go through the
crypto API.  Just use crc32_le().  This is much simpler, and it improves
performance due to eliminating the crypto API overhead.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Link: https://patch.msgid.link/20250207032316.53941-1-ebiggers@kernel.org
Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/sw/rxe/Kconfig
drivers/infiniband/sw/rxe/rxe.c
drivers/infiniband/sw/rxe/rxe.h
drivers/infiniband/sw/rxe/rxe_icrc.c
drivers/infiniband/sw/rxe/rxe_loc.h
drivers/infiniband/sw/rxe/rxe_req.c
drivers/infiniband/sw/rxe/rxe_verbs.c
drivers/infiniband/sw/rxe/rxe_verbs.h

index 06b8dc5093f77778f510964d61874dc79bbfe07e..c180e7ebcfc5b9045d9f22c4a9a4ac2bfd1188b5 100644 (file)
@@ -4,8 +4,7 @@ config RDMA_RXE
        depends on INET && PCI && INFINIBAND
        depends on INFINIBAND_VIRT_DMA
        select NET_UDP_TUNNEL
-       select CRYPTO
-       select CRYPTO_CRC32
+       select CRC32
        help
        This driver implements the InfiniBand RDMA transport over
        the Linux network stack. It enables a system with a
index 432e54a29b990ae6afda151ccbae8b3f52ea6134..83a16dba1eff63fb855b67060e47273346177132 100644 (file)
@@ -31,9 +31,6 @@ void rxe_dealloc(struct ib_device *ib_dev)
 
        WARN_ON(!RB_EMPTY_ROOT(&rxe->mcg_tree));
 
-       if (rxe->tfm)
-               crypto_free_shash(rxe->tfm);
-
        mutex_destroy(&rxe->usdev_lock);
 }
 
index fe7f97066732556e70145f151cbfa6cb2172692d..8db65731499d0699cbc8af37be2d416d3cda255a 100644 (file)
@@ -21,7 +21,6 @@
 #include <rdma/ib_umem.h>
 #include <rdma/ib_cache.h>
 #include <rdma/ib_addr.h>
-#include <crypto/hash.h>
 
 #include "rxe_net.h"
 #include "rxe_opcode.h"
index fdf5f08cd8f173626b36f7107db11fd15c2e2c0f..76d760fbe7ea5d6293ad73adfc40d6c38c08e835 100644 (file)
@@ -9,28 +9,6 @@
 #include "rxe.h"
 #include "rxe_loc.h"
 
-/**
- * rxe_icrc_init() - Initialize crypto function for computing crc32
- * @rxe: rdma_rxe device object
- *
- * Return: 0 on success else an error
- */
-int rxe_icrc_init(struct rxe_dev *rxe)
-{
-       struct crypto_shash *tfm;
-
-       tfm = crypto_alloc_shash("crc32", 0, 0);
-       if (IS_ERR(tfm)) {
-               rxe_dbg_dev(rxe, "failed to init crc32 algorithm err: %ld\n",
-                              PTR_ERR(tfm));
-               return PTR_ERR(tfm);
-       }
-
-       rxe->tfm = tfm;
-
-       return 0;
-}
-
 /**
  * rxe_crc32() - Compute cumulative crc32 for a contiguous segment
  * @rxe: rdma_rxe device object
@@ -42,23 +20,7 @@ int rxe_icrc_init(struct rxe_dev *rxe)
  */
 static __be32 rxe_crc32(struct rxe_dev *rxe, __be32 crc, void *next, size_t len)
 {
-       __be32 icrc;
-       int err;
-
-       SHASH_DESC_ON_STACK(shash, rxe->tfm);
-
-       shash->tfm = rxe->tfm;
-       *(__be32 *)shash_desc_ctx(shash) = crc;
-       err = crypto_shash_update(shash, next, len);
-       if (unlikely(err)) {
-               rxe_dbg_dev(rxe, "failed crc calculation, err: %d\n", err);
-               return (__force __be32)crc32_le((__force u32)crc, next, len);
-       }
-
-       icrc = *(__be32 *)shash_desc_ctx(shash);
-       barrier_data(shash_desc_ctx(shash));
-
-       return icrc;
+       return (__force __be32)crc32_le((__force u32)crc, next, len);
 }
 
 /**
index ded46119151bbfda959c46784650396604fd4e30..c57ab8975c5d153bb1daeaad60cee02c8e6adb5f 100644 (file)
@@ -168,7 +168,6 @@ int rxe_sender(struct rxe_qp *qp);
 int rxe_receiver(struct rxe_qp *qp);
 
 /* rxe_icrc.c */
-int rxe_icrc_init(struct rxe_dev *rxe);
 int rxe_icrc_check(struct sk_buff *skb, struct rxe_pkt_info *pkt);
 void rxe_icrc_generate(struct sk_buff *skb, struct rxe_pkt_info *pkt);
 
index 87a02f0deb00019441d1de690cd4237c287e7dfc..9d0392df8a92f8c2abca5acc43e31c5081a9b916 100644 (file)
@@ -5,7 +5,6 @@
  */
 
 #include <linux/skbuff.h>
-#include <crypto/hash.h>
 
 #include "rxe.h"
 #include "rxe_loc.h"
index 08a5836c2600ecd63036bede8009cb75605f3eaf..a9494c6030af0990aee95ffb5486474f7ae4b395 100644 (file)
@@ -1546,10 +1546,6 @@ int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name,
        if (err)
                return err;
 
-       err = rxe_icrc_init(rxe);
-       if (err)
-               return err;
-
        err = ib_register_device(dev, ibdev_name, NULL);
        if (err)
                rxe_dbg_dev(rxe, "failed with error %d\n", err);
index 729a6ada46af27bf74de12d479c8b89d3b1d1ea5..3d0faab9a8f7f198571dddba842c33fe69c7646c 100644 (file)
@@ -404,7 +404,6 @@ struct rxe_dev {
        atomic64_t              stats_counters[RXE_NUM_OF_COUNTERS];
 
        struct rxe_port         port;
-       struct crypto_shash     *tfm;
 };
 
 static inline struct net_device *rxe_ib_device_get_netdev(struct ib_device *dev)