OSDN Git Service

RDMA/siw: Fix page address mapping in TX path
authorBernard Metzler <bmt@zurich.ibm.com>
Mon, 9 Sep 2019 13:24:27 +0000 (15:24 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 13 Sep 2019 19:55:55 +0000 (16:55 -0300)
Use the correct kmap()/kunmap() flow to determine page address used for
CRC computation. Using page_address() is wrong, since page might be in
highmem.

Fixes: b9be6f18cf9e ("rdma/siw: transmit path")
Link: https://lore.kernel.org/r/20190909132427.30264-1-bmt@zurich.ibm.com
Reported-by: Krishnamraju Eraparaju <krishna2@chelsio.com>
Signed-off-by: Bernard Metzler <bmt@zurich.ibm.com>
Reviewed-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/sw/siw/siw_qp_tx.c

index 43020d2..eb83fe1 100644 (file)
@@ -520,11 +520,12 @@ static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s)
                                                        c_tx->mpa_crc_hd,
                                                        iov[seg].iov_base,
                                                        plen);
-                               } else if (do_crc)
-                                       crypto_shash_update(
-                                               c_tx->mpa_crc_hd,
-                                               page_address(p) + fp_off,
-                                               plen);
+                               } else if (do_crc) {
+                                       crypto_shash_update(c_tx->mpa_crc_hd,
+                                                           kmap(p) + fp_off,
+                                                           plen);
+                                       kunmap(p);
+                               }
                        } else {
                                u64 pa = ((sge->laddr + sge_off) & PAGE_MASK);