Commit 1ec50dd1 authored by Ira Weiny's avatar Ira Weiny Committed by Jason Gunthorpe

RDMA/siw: Remove kmap()

kmap() is being deprecated and will break uses of device dax after PKS
protection is introduced.[1]

These uses of kmap() in the SIW driver are thread local.  Therefore
kmap_local_page() is sufficient to use and will work with pgmap protected
pages when those are implemnted.

There is one more use of kmap() in this driver which is split into its own
patch because kmap_local_page() has strict ordering rules and the use of
the kmap_mask over multiple segments must be handled carefully.
Therefore, that conversion is handled in a stand alone patch.

Use kmap_local_page() instead of kmap() in the 'easy' cases.

[1] https://lore.kernel.org/lkml/20201009195033.3208459-59-ira.weiny@intel.com/

Link: https://lore.kernel.org/r/20210622061422.2633501-4-ira.weiny@intel.comSigned-off-by: default avatarIra Weiny <ira.weiny@intel.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent cfcdbd9d
...@@ -76,7 +76,7 @@ static int siw_try_1seg(struct siw_iwarp_tx *c_tx, void *paddr) ...@@ -76,7 +76,7 @@ static int siw_try_1seg(struct siw_iwarp_tx *c_tx, void *paddr)
if (unlikely(!p)) if (unlikely(!p))
return -EFAULT; return -EFAULT;
buffer = kmap(p); buffer = kmap_local_page(p);
if (likely(PAGE_SIZE - off >= bytes)) { if (likely(PAGE_SIZE - off >= bytes)) {
memcpy(paddr, buffer + off, bytes); memcpy(paddr, buffer + off, bytes);
...@@ -84,7 +84,7 @@ static int siw_try_1seg(struct siw_iwarp_tx *c_tx, void *paddr) ...@@ -84,7 +84,7 @@ static int siw_try_1seg(struct siw_iwarp_tx *c_tx, void *paddr)
unsigned long part = bytes - (PAGE_SIZE - off); unsigned long part = bytes - (PAGE_SIZE - off);
memcpy(paddr, buffer + off, part); memcpy(paddr, buffer + off, part);
kunmap(p); kunmap_local(buffer);
if (!mem->is_pbl) if (!mem->is_pbl)
p = siw_get_upage(mem->umem, p = siw_get_upage(mem->umem,
...@@ -96,10 +96,10 @@ static int siw_try_1seg(struct siw_iwarp_tx *c_tx, void *paddr) ...@@ -96,10 +96,10 @@ static int siw_try_1seg(struct siw_iwarp_tx *c_tx, void *paddr)
if (unlikely(!p)) if (unlikely(!p))
return -EFAULT; return -EFAULT;
buffer = kmap(p); buffer = kmap_local_page(p);
memcpy(paddr + part, buffer, bytes - part); memcpy(paddr + part, buffer, bytes - part);
} }
kunmap(p); kunmap_local(buffer);
} }
} }
return (int)bytes; return (int)bytes;
...@@ -485,6 +485,7 @@ static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s) ...@@ -485,6 +485,7 @@ static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s)
while (sge_len) { while (sge_len) {
size_t plen = min((int)PAGE_SIZE - fp_off, sge_len); size_t plen = min((int)PAGE_SIZE - fp_off, sge_len);
void *kaddr;
if (!is_kva) { if (!is_kva) {
struct page *p; struct page *p;
...@@ -517,10 +518,11 @@ static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s) ...@@ -517,10 +518,11 @@ static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s)
iov[seg].iov_base, iov[seg].iov_base,
plen); plen);
} else if (do_crc) { } else if (do_crc) {
kaddr = kmap_local_page(p);
crypto_shash_update(c_tx->mpa_crc_hd, crypto_shash_update(c_tx->mpa_crc_hd,
kmap(p) + fp_off, kaddr + fp_off,
plen); plen);
kunmap(p); kunmap_local(kaddr);
} }
} else { } else {
u64 va = sge->laddr + sge_off; u64 va = sge->laddr + sge_off;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment