RDMA/siw: Relax from kmap_atomic() use in TX path

Since the transmit path is never executed in an atomic context, we do not
need kmap_atomic() and can always use less demanding kmap().

Link: https://lore.kernel.org/r/20190909132945.30462-1-bmt@zurich.ibm.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>
This commit is contained in:
Bernard Metzler 2019-09-09 15:29:45 +02:00 committed by Jason Gunthorpe
parent 75c66515e4
commit 4db8fd4973
1 changed files with 5 additions and 7 deletions

View File

@ -76,16 +76,15 @@ static int siw_try_1seg(struct siw_iwarp_tx *c_tx, void *paddr)
if (unlikely(!p))
return -EFAULT;
buffer = kmap_atomic(p);
buffer = kmap(p);
if (likely(PAGE_SIZE - off >= bytes)) {
memcpy(paddr, buffer + off, bytes);
kunmap_atomic(buffer);
} else {
unsigned long part = bytes - (PAGE_SIZE - off);
memcpy(paddr, buffer + off, part);
kunmap_atomic(buffer);
kunmap(p);
if (!mem->is_pbl)
p = siw_get_upage(mem->umem,
@ -97,11 +96,10 @@ static int siw_try_1seg(struct siw_iwarp_tx *c_tx, void *paddr)
if (unlikely(!p))
return -EFAULT;
buffer = kmap_atomic(p);
memcpy(paddr + part, buffer,
bytes - part);
kunmap_atomic(buffer);
buffer = kmap(p);
memcpy(paddr + part, buffer, bytes - part);
}
kunmap(p);
}
}
return (int)bytes;