Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4db8fd49 authored by Bernard Metzler's avatar Bernard Metzler Committed by Jason Gunthorpe
Browse files

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: default avatarBernard Metzler <bmt@zurich.ibm.com>
Reviewed-by: default avatarJason Gunthorpe <jgg@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 75c66515
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -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;