mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
return pfn from direct_access, for XIP
Alter the block device ->direct_access() API to work with the new get_xip_mem() API (that requires both kaddr and pfn are returned). Some architectures will not do the right thing in their virt_to_page() for use by XIP (to translate from the kernel virtual address returned by direct_access(), to a user mappable pfn in XIP's page fault handler. However, we can't switch it to just return the pfn and not the kaddr, because we have no good way to get a kva from a pfn, and XIP requires the kva for its read(2) and write(2) handlers. So we have to return both. Signed-off-by: Jared Hulbert <[email protected]> Signed-off-by: Nick Piggin <[email protected]> Cc: Carsten Otte <[email protected]> Cc: Heiko Carstens <[email protected]> Cc: [email protected] Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
423bad6004
commit
30afcb4bd2
5 changed files with 27 additions and 18 deletions
|
|
@ -319,7 +319,7 @@ out:
|
|||
|
||||
#ifdef CONFIG_BLK_DEV_XIP
|
||||
static int brd_direct_access (struct block_device *bdev, sector_t sector,
|
||||
unsigned long *data)
|
||||
void **kaddr, unsigned long *pfn)
|
||||
{
|
||||
struct brd_device *brd = bdev->bd_disk->private_data;
|
||||
struct page *page;
|
||||
|
|
@ -333,7 +333,8 @@ static int brd_direct_access (struct block_device *bdev, sector_t sector,
|
|||
page = brd_insert_page(brd, sector);
|
||||
if (!page)
|
||||
return -ENOMEM;
|
||||
*data = (unsigned long)page_address(page);
|
||||
*kaddr = page_address(page);
|
||||
*pfn = page_to_pfn(page);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue