aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTatyana Nikolova <Tatyana.E.Nikolova@intel.com>2016-03-18 11:38:33 -0400
committerDoug Ledford <dledford@redhat.com>2016-03-21 16:02:24 -0400
commit34abf9ed73f2cf4fcc69eefd7e0af225cf9671a8 (patch)
treeb313fda6566e86c8308453c15af12ba85af64c46
parent6e4de8660a54aad084534332f4708fe4a743c058 (diff)
i40iw: Replace the obsolete crypto hash interface with shash
This patch replaces the obsolete crypto hash interface with shash and resolves a build failure after merge of the rdma tree which is caused by the removal of crypto hash interface Removing CRYPTO_ALG_ASYNC from crypto_alloc_shash(), because it is by definition sync only Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com> Signed-off-by: Tatyana Nikolova <tatyana.e.nikolova@intel.com> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw.h1
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_osdep.h7
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_puda.c6
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_puda.h8
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_utils.c36
5 files changed, 37 insertions, 21 deletions
diff --git a/drivers/infiniband/hw/i40iw/i40iw.h b/drivers/infiniband/hw/i40iw/i40iw.h
index 19f665137e45..819767681445 100644
--- a/drivers/infiniband/hw/i40iw/i40iw.h
+++ b/drivers/infiniband/hw/i40iw/i40iw.h
@@ -52,6 +52,7 @@
52#include <rdma/iw_cm.h> 52#include <rdma/iw_cm.h>
53#include <rdma/iw_portmap.h> 53#include <rdma/iw_portmap.h>
54#include <rdma/rdma_netlink.h> 54#include <rdma/rdma_netlink.h>
55#include <crypto/hash.h>
55 56
56#include "i40iw_status.h" 57#include "i40iw_status.h"
57#include "i40iw_osdep.h" 58#include "i40iw_osdep.h"
diff --git a/drivers/infiniband/hw/i40iw/i40iw_osdep.h b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
index 4d840a9616e1..7e20493510e8 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_osdep.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
@@ -39,6 +39,7 @@
39#include <linux/string.h> 39#include <linux/string.h>
40#include <linux/bitops.h> 40#include <linux/bitops.h>
41#include <net/tcp.h> 41#include <net/tcp.h>
42#include <crypto/hash.h>
42/* get readq/writeq support for 32 bit kernels, use the low-first version */ 43/* get readq/writeq support for 32 bit kernels, use the low-first version */
43#include <linux/io-64-nonatomic-lo-hi.h> 44#include <linux/io-64-nonatomic-lo-hi.h>
44 45
@@ -171,12 +172,12 @@ struct i40iw_hw;
171u8 __iomem *i40iw_get_hw_addr(void *dev); 172u8 __iomem *i40iw_get_hw_addr(void *dev);
172void i40iw_ieq_mpa_crc_ae(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp); 173void i40iw_ieq_mpa_crc_ae(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp);
173enum i40iw_status_code i40iw_vf_wait_vchnl_resp(struct i40iw_sc_dev *dev); 174enum i40iw_status_code i40iw_vf_wait_vchnl_resp(struct i40iw_sc_dev *dev);
174enum i40iw_status_code i40iw_ieq_check_mpacrc(struct hash_desc *desc, void *addr, 175enum i40iw_status_code i40iw_ieq_check_mpacrc(struct shash_desc *desc, void *addr,
175 u32 length, u32 value); 176 u32 length, u32 value);
176struct i40iw_sc_qp *i40iw_ieq_get_qp(struct i40iw_sc_dev *dev, struct i40iw_puda_buf *buf); 177struct i40iw_sc_qp *i40iw_ieq_get_qp(struct i40iw_sc_dev *dev, struct i40iw_puda_buf *buf);
177void i40iw_ieq_update_tcpip_info(struct i40iw_puda_buf *buf, u16 length, u32 seqnum); 178void i40iw_ieq_update_tcpip_info(struct i40iw_puda_buf *buf, u16 length, u32 seqnum);
178void i40iw_free_hash_desc(struct hash_desc *); 179void i40iw_free_hash_desc(struct shash_desc *);
179enum i40iw_status_code i40iw_init_hash_desc(struct hash_desc *); 180enum i40iw_status_code i40iw_init_hash_desc(struct shash_desc **);
180enum i40iw_status_code i40iw_puda_get_tcpip_info(struct i40iw_puda_completion_info *info, 181enum i40iw_status_code i40iw_puda_get_tcpip_info(struct i40iw_puda_completion_info *info,
181 struct i40iw_puda_buf *buf); 182 struct i40iw_puda_buf *buf);
182enum i40iw_status_code i40iw_cqp_sds_cmd(struct i40iw_sc_dev *dev, 183enum i40iw_status_code i40iw_cqp_sds_cmd(struct i40iw_sc_dev *dev,
diff --git a/drivers/infiniband/hw/i40iw/i40iw_puda.c b/drivers/infiniband/hw/i40iw/i40iw_puda.c
index ae9971f93ecd..8eb400d8a7a0 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_puda.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_puda.c
@@ -729,7 +729,7 @@ void i40iw_puda_dele_resources(struct i40iw_sc_dev *dev,
729 729
730 switch (rsrc->completion) { 730 switch (rsrc->completion) {
731 case PUDA_HASH_CRC_COMPLETE: 731 case PUDA_HASH_CRC_COMPLETE:
732 i40iw_free_hash_desc(&rsrc->hash_desc); 732 i40iw_free_hash_desc(rsrc->hash_desc);
733 case PUDA_QP_CREATED: 733 case PUDA_QP_CREATED:
734 do { 734 do {
735 if (reset) 735 if (reset)
@@ -1142,7 +1142,7 @@ static enum i40iw_status_code i40iw_ieq_handle_partial(struct i40iw_puda_rsrc *i
1142 crcptr = txbuf->data + fpdu_len - 4; 1142 crcptr = txbuf->data + fpdu_len - 4;
1143 mpacrc = *(u32 *)crcptr; 1143 mpacrc = *(u32 *)crcptr;
1144 if (ieq->check_crc) { 1144 if (ieq->check_crc) {
1145 status = i40iw_ieq_check_mpacrc(&ieq->hash_desc, txbuf->data, 1145 status = i40iw_ieq_check_mpacrc(ieq->hash_desc, txbuf->data,
1146 (fpdu_len - 4), mpacrc); 1146 (fpdu_len - 4), mpacrc);
1147 if (status) { 1147 if (status) {
1148 i40iw_debug(ieq->dev, I40IW_DEBUG_IEQ, 1148 i40iw_debug(ieq->dev, I40IW_DEBUG_IEQ,
@@ -1210,7 +1210,7 @@ static enum i40iw_status_code i40iw_ieq_process_buf(struct i40iw_puda_rsrc *ieq,
1210 crcptr = datap + fpdu_len - 4; 1210 crcptr = datap + fpdu_len - 4;
1211 mpacrc = *(u32 *)crcptr; 1211 mpacrc = *(u32 *)crcptr;
1212 if (ieq->check_crc) 1212 if (ieq->check_crc)
1213 ret = i40iw_ieq_check_mpacrc(&ieq->hash_desc, 1213 ret = i40iw_ieq_check_mpacrc(ieq->hash_desc,
1214 datap, fpdu_len - 4, mpacrc); 1214 datap, fpdu_len - 4, mpacrc);
1215 if (ret) { 1215 if (ret) {
1216 status = I40IW_ERR_MPA_CRC; 1216 status = I40IW_ERR_MPA_CRC;
diff --git a/drivers/infiniband/hw/i40iw/i40iw_puda.h b/drivers/infiniband/hw/i40iw/i40iw_puda.h
index b689aa41dfe2..52bf7826ce4e 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_puda.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_puda.h
@@ -135,7 +135,7 @@ struct i40iw_puda_rsrc {
135 u32 rxq_invalid_cnt; 135 u32 rxq_invalid_cnt;
136 u32 tx_wqe_avail_cnt; 136 u32 tx_wqe_avail_cnt;
137 bool check_crc; 137 bool check_crc;
138 struct hash_desc hash_desc; 138 struct shash_desc *hash_desc;
139 struct list_head txpend; 139 struct list_head txpend;
140 struct list_head bufpool; /* free buffers pool list for recv and xmit */ 140 struct list_head bufpool; /* free buffers pool list for recv and xmit */
141 u32 alloc_buf_count; 141 u32 alloc_buf_count;
@@ -173,11 +173,11 @@ struct i40iw_sc_qp *i40iw_ieq_get_qp(struct i40iw_sc_dev *dev,
173 struct i40iw_puda_buf *buf); 173 struct i40iw_puda_buf *buf);
174enum i40iw_status_code i40iw_puda_get_tcpip_info(struct i40iw_puda_completion_info *info, 174enum i40iw_status_code i40iw_puda_get_tcpip_info(struct i40iw_puda_completion_info *info,
175 struct i40iw_puda_buf *buf); 175 struct i40iw_puda_buf *buf);
176enum i40iw_status_code i40iw_ieq_check_mpacrc(struct hash_desc *desc, 176enum i40iw_status_code i40iw_ieq_check_mpacrc(struct shash_desc *desc,
177 void *addr, u32 length, u32 value); 177 void *addr, u32 length, u32 value);
178enum i40iw_status_code i40iw_init_hash_desc(struct hash_desc *desc); 178enum i40iw_status_code i40iw_init_hash_desc(struct shash_desc **desc);
179void i40iw_ieq_mpa_crc_ae(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp); 179void i40iw_ieq_mpa_crc_ae(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp);
180void i40iw_free_hash_desc(struct hash_desc *desc); 180void i40iw_free_hash_desc(struct shash_desc *desc);
181void i40iw_ieq_update_tcpip_info(struct i40iw_puda_buf *buf, u16 length, 181void i40iw_ieq_update_tcpip_info(struct i40iw_puda_buf *buf, u16 length,
182 u32 seqnum); 182 u32 seqnum);
183#endif 183#endif
diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
index 71ee01ff1935..1ceec81bd8eb 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
@@ -1024,11 +1024,24 @@ void i40iw_ieq_mpa_crc_ae(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp)
1024 * i40iw_init_hash_desc - initialize hash for crc calculation 1024 * i40iw_init_hash_desc - initialize hash for crc calculation
1025 * @desc: cryption type 1025 * @desc: cryption type
1026 */ 1026 */
1027enum i40iw_status_code i40iw_init_hash_desc(struct hash_desc *desc) 1027enum i40iw_status_code i40iw_init_hash_desc(struct shash_desc **desc)
1028{ 1028{
1029 desc->tfm = crypto_alloc_hash("crc32c", 0, CRYPTO_ALG_ASYNC); 1029 struct crypto_shash *tfm;
1030 if (IS_ERR(desc->tfm)) 1030 struct shash_desc *tdesc;
1031
1032 tfm = crypto_alloc_shash("crc32c", 0, 0);
1033 if (IS_ERR(tfm))
1034 return I40IW_ERR_MPA_CRC;
1035
1036 tdesc = kzalloc(sizeof(*tdesc) + crypto_shash_descsize(tfm),
1037 GFP_KERNEL);
1038 if (!tdesc) {
1039 crypto_free_shash(tfm);
1031 return I40IW_ERR_MPA_CRC; 1040 return I40IW_ERR_MPA_CRC;
1041 }
1042 tdesc->tfm = tfm;
1043 *desc = tdesc;
1044
1032 return 0; 1045 return 0;
1033} 1046}
1034 1047
@@ -1036,9 +1049,12 @@ enum i40iw_status_code i40iw_init_hash_desc(struct hash_desc *desc)
1036 * i40iw_free_hash_desc - free hash desc 1049 * i40iw_free_hash_desc - free hash desc
1037 * @desc: to be freed 1050 * @desc: to be freed
1038 */ 1051 */
1039void i40iw_free_hash_desc(struct hash_desc *desc) 1052void i40iw_free_hash_desc(struct shash_desc *desc)
1040{ 1053{
1041 crypto_free_hash(desc->tfm); 1054 if (desc) {
1055 crypto_free_shash(desc->tfm);
1056 kfree(desc);
1057 }
1042} 1058}
1043 1059
1044/** 1060/**
@@ -1065,21 +1081,19 @@ enum i40iw_status_code i40iw_alloc_query_fpm_buf(struct i40iw_sc_dev *dev,
1065 * @length: length of buffer 1081 * @length: length of buffer
1066 * @value: value to be compared 1082 * @value: value to be compared
1067 */ 1083 */
1068enum i40iw_status_code i40iw_ieq_check_mpacrc(struct hash_desc *desc, 1084enum i40iw_status_code i40iw_ieq_check_mpacrc(struct shash_desc *desc,
1069 void *addr, 1085 void *addr,
1070 u32 length, 1086 u32 length,
1071 u32 value) 1087 u32 value)
1072{ 1088{
1073 struct scatterlist sg;
1074 u32 crc = 0; 1089 u32 crc = 0;
1075 int ret; 1090 int ret;
1076 enum i40iw_status_code ret_code = 0; 1091 enum i40iw_status_code ret_code = 0;
1077 1092
1078 crypto_hash_init(desc); 1093 crypto_shash_init(desc);
1079 sg_init_one(&sg, addr, length); 1094 ret = crypto_shash_update(desc, addr, length);
1080 ret = crypto_hash_update(desc, &sg, length);
1081 if (!ret) 1095 if (!ret)
1082 crypto_hash_final(desc, (u8 *)&crc); 1096 crypto_shash_final(desc, (u8 *)&crc);
1083 if (crc != value) { 1097 if (crc != value) {
1084 i40iw_pr_err("mpa crc check fail\n"); 1098 i40iw_pr_err("mpa crc check fail\n");
1085 ret_code = I40IW_ERR_MPA_CRC; 1099 ret_code = I40IW_ERR_MPA_CRC;