]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.17-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Jun 2018 14:46:34 +0000 (16:46 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Jun 2018 14:46:34 +0000 (16:46 +0200)
added patches:
crypto-chelsio-request-to-hw-should-wrap.patch

queue-4.17/crypto-chelsio-request-to-hw-should-wrap.patch [new file with mode: 0644]

diff --git a/queue-4.17/crypto-chelsio-request-to-hw-should-wrap.patch b/queue-4.17/crypto-chelsio-request-to-hw-should-wrap.patch
new file mode 100644 (file)
index 0000000..853a276
--- /dev/null
@@ -0,0 +1,100 @@
+From 4c826fed675dfffd8485c5477b616d61d1ec9e9a Mon Sep 17 00:00:00 2001
+From: Atul Gupta <atul.gupta@chelsio.com>
+Date: Thu, 10 May 2018 10:14:42 +0530
+Subject: crypto: chelsio - request to HW should wrap
+
+From: Atul Gupta <atul.gupta@chelsio.com>
+
+commit 4c826fed675dfffd8485c5477b616d61d1ec9e9a upstream.
+
+-Tx request and data is copied to HW Q in 64B desc, check for
+end of queue and adjust the current position to start from
+beginning before passing the additional request info.
+-key context copy should check key length only
+-Few reverse christmas tree correction
+
+Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/crypto/chelsio/chcr_ipsec.c |   35 +++++++++++++++++------------------
+ 1 file changed, 17 insertions(+), 18 deletions(-)
+
+--- a/drivers/crypto/chelsio/chcr_ipsec.c
++++ b/drivers/crypto/chelsio/chcr_ipsec.c
+@@ -346,18 +346,23 @@ inline void *copy_cpltx_pktxt(struct sk_
+                               struct net_device *dev,
+                               void *pos)
+ {
++      struct cpl_tx_pkt_core *cpl;
++      struct sge_eth_txq *q;
+       struct adapter *adap;
+       struct port_info *pi;
+-      struct sge_eth_txq *q;
+-      struct cpl_tx_pkt_core *cpl;
+-      u64 cntrl = 0;
+       u32 ctrl0, qidx;
++      u64 cntrl = 0;
++      int left;
+       pi = netdev_priv(dev);
+       adap = pi->adapter;
+       qidx = skb->queue_mapping;
+       q = &adap->sge.ethtxq[qidx + pi->first_qset];
++      left = (void *)q->q.stat - pos;
++      if (!left)
++              pos = q->q.desc;
++
+       cpl = (struct cpl_tx_pkt_core *)pos;
+       cntrl = TXPKT_L4CSUM_DIS_F | TXPKT_IPCSUM_DIS_F;
+@@ -382,18 +387,17 @@ inline void *copy_key_cpltx_pktxt(struct
+                               void *pos,
+                               struct ipsec_sa_entry *sa_entry)
+ {
+-      struct adapter *adap;
+-      struct port_info *pi;
+-      struct sge_eth_txq *q;
+-      unsigned int len, qidx;
+       struct _key_ctx *key_ctx;
+       int left, eoq, key_len;
++      struct sge_eth_txq *q;
++      struct adapter *adap;
++      struct port_info *pi;
++      unsigned int qidx;
+       pi = netdev_priv(dev);
+       adap = pi->adapter;
+       qidx = skb->queue_mapping;
+       q = &adap->sge.ethtxq[qidx + pi->first_qset];
+-      len = sa_entry->enckey_len + sizeof(struct cpl_tx_pkt_core);
+       key_len = sa_entry->kctx_len;
+       /* end of queue, reset pos to start of queue */
+@@ -411,19 +415,14 @@ inline void *copy_key_cpltx_pktxt(struct
+       pos += sizeof(struct _key_ctx);
+       left -= sizeof(struct _key_ctx);
+-      if (likely(len <= left)) {
++      if (likely(key_len <= left)) {
+               memcpy(key_ctx->key, sa_entry->key, key_len);
+               pos += key_len;
+       } else {
+-              if (key_len <= left) {
+-                      memcpy(pos, sa_entry->key, key_len);
+-                      pos += key_len;
+-              } else {
+-                      memcpy(pos, sa_entry->key, left);
+-                      memcpy(q->q.desc, sa_entry->key + left,
+-                             key_len - left);
+-                      pos = (u8 *)q->q.desc + (key_len - left);
+-              }
++              memcpy(pos, sa_entry->key, left);
++              memcpy(q->q.desc, sa_entry->key + left,
++                     key_len - left);
++              pos = (u8 *)q->q.desc + (key_len - left);
+       }
+       /* Copy CPL TX PKT XT */
+       pos = copy_cpltx_pktxt(skb, dev, pos);