Skip to content

Commit 1d61261

Browse files
xp4ns3Christoph Hellwig
authored andcommitted
swiotlb: replace kmap_atomic() with memcpy_{from,to}_page()
The use of kmap_atomic() is being deprecated in favor of kmap_local_page(), which can also be used in atomic context (including interrupts). Replace kmap_atomic() with kmap_local_page(). Instead of open coding mapping, memcpy(), and un-mapping, use the memcpy_{from,to}_page() helper. Suggested-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
1 parent 521a547 commit 1d61261

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

kernel/dma/swiotlb.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -545,22 +545,20 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
545545
}
546546

547547
if (PageHighMem(pfn_to_page(pfn))) {
548-
/* The buffer does not have a mapping. Map it in and copy */
549548
unsigned int offset = orig_addr & ~PAGE_MASK;
550-
char *buffer;
549+
struct page *page;
551550
unsigned int sz = 0;
552551
unsigned long flags;
553552

554553
while (size) {
555554
sz = min_t(size_t, PAGE_SIZE - offset, size);
556555

557556
local_irq_save(flags);
558-
buffer = kmap_atomic(pfn_to_page(pfn));
557+
page = pfn_to_page(pfn);
559558
if (dir == DMA_TO_DEVICE)
560-
memcpy(vaddr, buffer + offset, sz);
559+
memcpy_from_page(vaddr, page, offset, sz);
561560
else
562-
memcpy(buffer + offset, vaddr, sz);
563-
kunmap_atomic(buffer);
561+
memcpy_to_page(page, offset, vaddr, sz);
564562
local_irq_restore(flags);
565563

566564
size -= sz;

0 commit comments

Comments
 (0)