Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: talitos - dma_map_sg can handle chained SG

The talitos driver use two dma_map_sg path
according to SG are chained or not.
Since dma_map_sg can handle both case, clean the code with all
references to sg chained.

Thus removing talitos_map_sg, talitos_unmap_sg_chain
and sg_count functions.

Signed-off-by: LABBE Corentin <clabbe.montjoie@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

LABBE Corentin and committed by
Herbert Xu
b8a011d4 be2cfac0

+18 -86
+18 -86
drivers/crypto/talitos.c
··· 857 857 * talitos_edesc - s/w-extended descriptor 858 858 * @src_nents: number of segments in input scatterlist 859 859 * @dst_nents: number of segments in output scatterlist 860 - * @src_chained: whether src is chained or not 861 - * @dst_chained: whether dst is chained or not 862 860 * @icv_ool: whether ICV is out-of-line 863 861 * @iv_dma: dma address of iv for checking continuity and link table 864 862 * @dma_len: length of dma mapped link_tbl space ··· 872 874 struct talitos_edesc { 873 875 int src_nents; 874 876 int dst_nents; 875 - bool src_chained; 876 - bool dst_chained; 877 877 bool icv_ool; 878 878 dma_addr_t iv_dma; 879 879 int dma_len; ··· 883 887 }; 884 888 }; 885 889 886 - static int talitos_map_sg(struct device *dev, struct scatterlist *sg, 887 - unsigned int nents, enum dma_data_direction dir, 888 - bool chained) 889 - { 890 - if (unlikely(chained)) 891 - while (sg) { 892 - dma_map_sg(dev, sg, 1, dir); 893 - sg = sg_next(sg); 894 - } 895 - else 896 - dma_map_sg(dev, sg, nents, dir); 897 - return nents; 898 - } 899 - 900 - static void talitos_unmap_sg_chain(struct device *dev, struct scatterlist *sg, 901 - enum dma_data_direction dir) 902 - { 903 - while (sg) { 904 - dma_unmap_sg(dev, sg, 1, dir); 905 - sg = sg_next(sg); 906 - } 907 - } 908 - 909 890 static void talitos_sg_unmap(struct device *dev, 910 891 struct talitos_edesc *edesc, 911 892 struct scatterlist *src, ··· 892 919 unsigned int dst_nents = edesc->dst_nents ? : 1; 893 920 894 921 if (src != dst) { 895 - if (edesc->src_chained) 896 - talitos_unmap_sg_chain(dev, src, DMA_TO_DEVICE); 897 - else 898 - dma_unmap_sg(dev, src, src_nents, DMA_TO_DEVICE); 922 + dma_unmap_sg(dev, src, src_nents, DMA_TO_DEVICE); 899 923 900 924 if (dst) { 901 - if (edesc->dst_chained) 902 - talitos_unmap_sg_chain(dev, dst, 903 - DMA_FROM_DEVICE); 904 - else 905 - dma_unmap_sg(dev, dst, dst_nents, 906 - DMA_FROM_DEVICE); 925 + dma_unmap_sg(dev, dst, dst_nents, DMA_FROM_DEVICE); 907 926 } 908 927 } else 909 - if (edesc->src_chained) 910 - talitos_unmap_sg_chain(dev, src, DMA_BIDIRECTIONAL); 911 - else 912 - dma_unmap_sg(dev, src, src_nents, DMA_BIDIRECTIONAL); 928 + dma_unmap_sg(dev, src, src_nents, DMA_BIDIRECTIONAL); 913 929 } 914 930 915 931 static void ipsec_esp_unmap(struct device *dev, ··· 1080 1118 map_single_talitos_ptr(dev, &desc->ptr[0], ctx->authkeylen, &ctx->key, 1081 1119 DMA_TO_DEVICE); 1082 1120 1083 - sg_count = talitos_map_sg(dev, areq->src, edesc->src_nents ?: 1, 1084 - (areq->src == areq->dst) ? DMA_BIDIRECTIONAL 1085 - : DMA_TO_DEVICE, 1086 - edesc->src_chained); 1121 + sg_count = dma_map_sg(dev, areq->src, edesc->src_nents ?: 1, 1122 + (areq->src == areq->dst) ? DMA_BIDIRECTIONAL 1123 + : DMA_TO_DEVICE); 1087 1124 1088 1125 /* hmac data */ 1089 1126 desc->ptr[1].len = cpu_to_be16(areq->assoclen); ··· 1146 1185 desc->ptr[5].j_extent = authsize; 1147 1186 1148 1187 if (areq->src != areq->dst) 1149 - sg_count = talitos_map_sg(dev, areq->dst, 1150 - edesc->dst_nents ? : 1, 1151 - DMA_FROM_DEVICE, edesc->dst_chained); 1188 + sg_count = dma_map_sg(dev, areq->dst, edesc->dst_nents ? : 1, 1189 + DMA_FROM_DEVICE); 1152 1190 1153 1191 edesc->icv_ool = false; 1154 1192 ··· 1194 1234 } 1195 1235 1196 1236 /* 1197 - * derive number of elements in scatterlist 1198 - */ 1199 - static int sg_count(struct scatterlist *sg_list, int nbytes, bool *chained) 1200 - { 1201 - struct scatterlist *sg = sg_list; 1202 - int sg_nents = 0; 1203 - 1204 - *chained = false; 1205 - while (nbytes > 0 && sg) { 1206 - sg_nents++; 1207 - nbytes -= sg->length; 1208 - if (!sg_is_last(sg) && (sg + 1)->length == 0) 1209 - *chained = true; 1210 - sg = sg_next(sg); 1211 - } 1212 - 1213 - return sg_nents; 1214 - } 1215 - 1216 - /* 1217 1237 * allocate and map the extended descriptor 1218 1238 */ 1219 1239 static struct talitos_edesc *talitos_edesc_alloc(struct device *dev, ··· 1210 1270 { 1211 1271 struct talitos_edesc *edesc; 1212 1272 int src_nents, dst_nents, alloc_len, dma_len; 1213 - bool src_chained = false, dst_chained = false; 1214 1273 dma_addr_t iv_dma = 0; 1215 1274 gfp_t flags = cryptoflags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL : 1216 1275 GFP_ATOMIC; ··· 1226 1287 iv_dma = dma_map_single(dev, iv, ivsize, DMA_TO_DEVICE); 1227 1288 1228 1289 if (!dst || dst == src) { 1229 - src_nents = sg_count(src, assoclen + cryptlen + authsize, 1230 - &src_chained); 1290 + src_nents = sg_nents_for_len(src, 1291 + assoclen + cryptlen + authsize); 1231 1292 src_nents = (src_nents == 1) ? 0 : src_nents; 1232 1293 dst_nents = dst ? src_nents : 0; 1233 1294 } else { /* dst && dst != src*/ 1234 - src_nents = sg_count(src, assoclen + cryptlen + 1235 - (encrypt ? 0 : authsize), 1236 - &src_chained); 1295 + src_nents = sg_nents_for_len(src, assoclen + cryptlen + 1296 + (encrypt ? 0 : authsize)); 1237 1297 src_nents = (src_nents == 1) ? 0 : src_nents; 1238 - dst_nents = sg_count(dst, assoclen + cryptlen + 1239 - (encrypt ? authsize : 0), 1240 - &dst_chained); 1298 + dst_nents = sg_nents_for_len(dst, assoclen + cryptlen + 1299 + (encrypt ? authsize : 0)); 1241 1300 dst_nents = (dst_nents == 1) ? 0 : dst_nents; 1242 1301 } 1243 1302 ··· 1269 1332 1270 1333 edesc->src_nents = src_nents; 1271 1334 edesc->dst_nents = dst_nents; 1272 - edesc->src_chained = src_chained; 1273 - edesc->dst_chained = dst_chained; 1274 1335 edesc->iv_dma = iv_dma; 1275 1336 edesc->dma_len = dma_len; 1276 1337 if (dma_len) ··· 1453 1518 } else { 1454 1519 to_talitos_ptr_extent_clear(ptr, is_sec1); 1455 1520 1456 - sg_count = talitos_map_sg(dev, src, edesc->src_nents ? : 1, dir, 1457 - edesc->src_chained); 1521 + sg_count = dma_map_sg(dev, src, edesc->src_nents ? : 1, dir); 1458 1522 1459 1523 if (sg_count == 1) { 1460 1524 to_talitos_ptr(ptr, sg_dma_address(src), is_sec1); ··· 1486 1552 bool is_sec1 = has_ftr_sec1(priv); 1487 1553 1488 1554 if (dir != DMA_NONE) 1489 - sg_count = talitos_map_sg(dev, dst, edesc->dst_nents ? : 1, 1490 - dir, edesc->dst_chained); 1555 + sg_count = dma_map_sg(dev, dst, edesc->dst_nents ? : 1, dir); 1491 1556 1492 1557 to_talitos_ptr_len(ptr, len, is_sec1); 1493 1558 ··· 1830 1897 unsigned int nbytes_to_hash; 1831 1898 unsigned int to_hash_later; 1832 1899 unsigned int nsg; 1833 - bool chained; 1834 1900 1835 1901 if (!req_ctx->last && (nbytes + req_ctx->nbuf <= blocksize)) { 1836 1902 /* Buffer up to one whole block */ 1837 1903 sg_copy_to_buffer(areq->src, 1838 - sg_count(areq->src, nbytes, &chained), 1904 + sg_nents_for_len(areq->src, nbytes), 1839 1905 req_ctx->buf + req_ctx->nbuf, nbytes); 1840 1906 req_ctx->nbuf += nbytes; 1841 1907 return 0; ··· 1867 1935 req_ctx->psrc = areq->src; 1868 1936 1869 1937 if (to_hash_later) { 1870 - int nents = sg_count(areq->src, nbytes, &chained); 1938 + int nents = sg_nents_for_len(areq->src, nbytes); 1871 1939 sg_pcopy_to_buffer(areq->src, nents, 1872 1940 req_ctx->bufnext, 1873 1941 to_hash_later,