mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
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>
This commit is contained in:
parent
521a547ced
commit
1d61261bfe
@ -545,9 +545,8 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
|
||||
}
|
||||
|
||||
if (PageHighMem(pfn_to_page(pfn))) {
|
||||
/* The buffer does not have a mapping. Map it in and copy */
|
||||
unsigned int offset = orig_addr & ~PAGE_MASK;
|
||||
char *buffer;
|
||||
struct page *page;
|
||||
unsigned int sz = 0;
|
||||
unsigned long flags;
|
||||
|
||||
@ -555,12 +554,11 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
|
||||
sz = min_t(size_t, PAGE_SIZE - offset, size);
|
||||
|
||||
local_irq_save(flags);
|
||||
buffer = kmap_atomic(pfn_to_page(pfn));
|
||||
page = pfn_to_page(pfn);
|
||||
if (dir == DMA_TO_DEVICE)
|
||||
memcpy(vaddr, buffer + offset, sz);
|
||||
memcpy_from_page(vaddr, page, offset, sz);
|
||||
else
|
||||
memcpy(buffer + offset, vaddr, sz);
|
||||
kunmap_atomic(buffer);
|
||||
memcpy_to_page(page, offset, vaddr, sz);
|
||||
local_irq_restore(flags);
|
||||
|
||||
size -= sz;
|
||||
|
Loading…
Reference in New Issue
Block a user