diff options
author | Juergen Gross <jgross@suse.com> | 2022-05-24 14:46:30 +0300 |
---|---|---|
committer | Juergen Gross <jgross@suse.com> | 2022-05-27 12:05:29 +0300 |
commit | 49f8b459fc1de5e3712b57c8ccefae9ec45270f8 (patch) | |
tree | a94aa459860a3d82cae0933e922e1cbfaa980766 /drivers/net/xen-netfront.c | |
parent | 5b3353949e89d48b4faf54a9cc241ee5d70df615 (diff) | |
download | linux-49f8b459fc1de5e3712b57c8ccefae9ec45270f8.tar.xz |
xen: switch gnttab_end_foreign_access() to take a struct page pointer
Instead of a virtual kernel address use a pointer of the associated
struct page as second parameter of gnttab_end_foreign_access().
Most users have that pointer available already and are creating the
virtual address from it, risking problems in case the memory is
located in highmem.
gnttab_end_foreign_access() itself won't need to get the struct page
from the address again.
Suggested-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Diffstat (limited to 'drivers/net/xen-netfront.c')
-rw-r--r-- | drivers/net/xen-netfront.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 65ab907aca5a..8c0b9546d5a2 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -1386,7 +1386,7 @@ static void xennet_release_tx_bufs(struct netfront_queue *queue) queue->tx_skbs[i] = NULL; get_page(queue->grant_tx_page[i]); gnttab_end_foreign_access(queue->grant_tx_ref[i], - (unsigned long)page_address(queue->grant_tx_page[i])); + queue->grant_tx_page[i]); queue->grant_tx_page[i] = NULL; queue->grant_tx_ref[i] = INVALID_GRANT_REF; add_id_to_list(&queue->tx_skb_freelist, queue->tx_link, i); @@ -1418,8 +1418,7 @@ static void xennet_release_rx_bufs(struct netfront_queue *queue) * foreign access is ended (which may be deferred). */ get_page(page); - gnttab_end_foreign_access(ref, - (unsigned long)page_address(page)); + gnttab_end_foreign_access(ref, page); queue->grant_rx_ref[id] = INVALID_GRANT_REF; kfree_skb(skb); @@ -1760,7 +1759,7 @@ static void xennet_end_access(int ref, void *page) { /* This frees the page as a side-effect */ if (ref != INVALID_GRANT_REF) - gnttab_end_foreign_access(ref, (unsigned long)page); + gnttab_end_foreign_access(ref, virt_to_page(page)); } static void xennet_disconnect_backend(struct netfront_info *info) |