Drivers: hv: vmbus: Remove use of slow_virt_to_phys()
slow_virt_to_phys() is only implemented for arch/x86. Remove its use in arch independent Hyper-V drivers, and replace with test for vmalloc() address followed by appropriate v-to-p function. This follows the typical pattern of other drivers and avoids the need to implement slow_virt_to_phys() for Hyper-V on ARM64. Signed-off-by: Michael Kelley <mikelley@microsoft.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d3b26dd7cb
commit
6ba34171bc
@ -29,12 +29,26 @@
|
|||||||
#include <linux/hyperv.h>
|
#include <linux/hyperv.h>
|
||||||
#include <linux/uio.h>
|
#include <linux/uio.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <asm/page.h>
|
||||||
|
|
||||||
#include "hyperv_vmbus.h"
|
#include "hyperv_vmbus.h"
|
||||||
|
|
||||||
#define NUM_PAGES_SPANNED(addr, len) \
|
#define NUM_PAGES_SPANNED(addr, len) \
|
||||||
((PAGE_ALIGN(addr + len) >> PAGE_SHIFT) - (addr >> PAGE_SHIFT))
|
((PAGE_ALIGN(addr + len) >> PAGE_SHIFT) - (addr >> PAGE_SHIFT))
|
||||||
|
|
||||||
|
static unsigned long virt_to_hvpfn(void *addr)
|
||||||
|
{
|
||||||
|
unsigned long paddr;
|
||||||
|
|
||||||
|
if (is_vmalloc_addr(addr))
|
||||||
|
paddr = page_to_phys(vmalloc_to_page(addr)) +
|
||||||
|
offset_in_page(addr);
|
||||||
|
else
|
||||||
|
paddr = __pa(addr);
|
||||||
|
|
||||||
|
return paddr >> PAGE_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* vmbus_setevent- Trigger an event notification on the specified
|
* vmbus_setevent- Trigger an event notification on the specified
|
||||||
* channel.
|
* channel.
|
||||||
@ -298,8 +312,8 @@ static int create_gpadl_header(void *kbuffer, u32 size,
|
|||||||
gpadl_header->range[0].byte_offset = 0;
|
gpadl_header->range[0].byte_offset = 0;
|
||||||
gpadl_header->range[0].byte_count = size;
|
gpadl_header->range[0].byte_count = size;
|
||||||
for (i = 0; i < pfncount; i++)
|
for (i = 0; i < pfncount; i++)
|
||||||
gpadl_header->range[0].pfn_array[i] = slow_virt_to_phys(
|
gpadl_header->range[0].pfn_array[i] = virt_to_hvpfn(
|
||||||
kbuffer + PAGE_SIZE * i) >> PAGE_SHIFT;
|
kbuffer + PAGE_SIZE * i);
|
||||||
*msginfo = msgheader;
|
*msginfo = msgheader;
|
||||||
|
|
||||||
pfnsum = pfncount;
|
pfnsum = pfncount;
|
||||||
@ -350,9 +364,8 @@ static int create_gpadl_header(void *kbuffer, u32 size,
|
|||||||
* so the hypervisor guarantees that this is ok.
|
* so the hypervisor guarantees that this is ok.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < pfncurr; i++)
|
for (i = 0; i < pfncurr; i++)
|
||||||
gpadl_body->pfn[i] = slow_virt_to_phys(
|
gpadl_body->pfn[i] = virt_to_hvpfn(
|
||||||
kbuffer + PAGE_SIZE * (pfnsum + i)) >>
|
kbuffer + PAGE_SIZE * (pfnsum + i));
|
||||||
PAGE_SHIFT;
|
|
||||||
|
|
||||||
/* add to msg header */
|
/* add to msg header */
|
||||||
list_add_tail(&msgbody->msglistentry,
|
list_add_tail(&msgbody->msglistentry,
|
||||||
@ -380,8 +393,8 @@ static int create_gpadl_header(void *kbuffer, u32 size,
|
|||||||
gpadl_header->range[0].byte_offset = 0;
|
gpadl_header->range[0].byte_offset = 0;
|
||||||
gpadl_header->range[0].byte_count = size;
|
gpadl_header->range[0].byte_count = size;
|
||||||
for (i = 0; i < pagecount; i++)
|
for (i = 0; i < pagecount; i++)
|
||||||
gpadl_header->range[0].pfn_array[i] = slow_virt_to_phys(
|
gpadl_header->range[0].pfn_array[i] = virt_to_hvpfn(
|
||||||
kbuffer + PAGE_SIZE * i) >> PAGE_SHIFT;
|
kbuffer + PAGE_SIZE * i);
|
||||||
|
|
||||||
*msginfo = msgheader;
|
*msginfo = msgheader;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user