summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ. Avila <elavila@google.com>2021-01-07 22:18:40 +0000
committerJ. Avila <elavila@google.com>2021-01-07 22:18:40 +0000
commit81a0949d37fd3f3bb4cd3d2e61b76b3ff45612e1 (patch)
tree68021337135c78b1b9ecf4f1f890b9dd75514564
parent6f47fab2a7f1a1620dd6f97e0d63f7056e790003 (diff)
parent411a6d8e49545ea18b1c2734de51d103d25b4d52 (diff)
downloadabrolhos-81a0949d37fd3f3bb4cd3d2e61b76b3ff45612e1.tar.gz
Merge partner/android-gs-pixel-mainline into partner/android-gs-pixel-5.10-stabilization
* partner/android-gs-pixel-mainline: edgetpu: use pin_userpages_fast Signed-off-by: J. Avila <elavila@google.com> Bug: 176462375 Change-Id: I49bc9e8e4da83012efcb5fe7a57e93611c7c7265
-rw-r--r--drivers/edgetpu/edgetpu-device-group.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/edgetpu/edgetpu-device-group.c b/drivers/edgetpu/edgetpu-device-group.c
index 08a97a2..f9d681e 100644
--- a/drivers/edgetpu/edgetpu-device-group.c
+++ b/drivers/edgetpu/edgetpu-device-group.c
@@ -919,7 +919,7 @@ static void edgetpu_unmap_node(struct edgetpu_mapping *map)
map->dir == DMA_BIDIRECTIONAL)
set_page_dirty(page);
- put_page(page);
+ unpin_user_page(page);
}
sg_free_table(&map->sgt);
@@ -991,7 +991,8 @@ static struct page **edgetpu_pin_user_pages(struct edgetpu_device_group *group,
/*
* DMA Buffers appear to be always dirty, so mark pages as always writeable
*/
- ret = get_user_pages_fast(host_addr & PAGE_MASK, num_pages, 1, pages);
+ ret = pin_user_pages_fast(host_addr & PAGE_MASK, num_pages,
+ FOLL_WRITE | FOLL_LONGTERM, pages);
if (ret < 0) {
etdev_dbg(etdev, "get user pages failed %u:%pK-%u: %d",
group->workload_id, (void *)host_addr, num_pages,
@@ -1015,7 +1016,7 @@ static struct page **edgetpu_pin_user_pages(struct edgetpu_device_group *group,
error:
for (i = 0; i < num_pages; i++)
- put_page(pages[i]);
+ unpin_user_page(pages[i]);
kfree(pages);
return ERR_PTR(ret);
@@ -1093,7 +1094,7 @@ error_free_sgt:
}
error:
for (i = 0; i < num_pages; i++)
- put_page(pages[i]);
+ unpin_user_page(pages[i]);
if (hmap) {
edgetpu_device_group_put(hmap->map.priv);
kfree(hmap->sg_tables);