|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] vunmap: let vunmap align virtual address by itself
From: Andrii Anisov <andrii_anisov@xxxxxxxx>
Let vunmap align passed virtual address by PAGE_SIZE.
This also makes it consistent with how {,un}map_domain_page()
currently works.
With the main change, also:
- strip all existing vunmap() calls from prior masking
- replace opencoded PAGE_MASK macro in vm_index()
Signed-off-by: Andrii Anisov <andrii_anisov@xxxxxxxx>
---
xen/arch/x86/mm/shadow/hvm.c | 2 +-
xen/common/vmap.c | 4 ++--
xen/drivers/acpi/osl.c | 2 +-
xen/include/xen/vmap.h | 4 +---
4 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/xen/arch/x86/mm/shadow/hvm.c b/xen/arch/x86/mm/shadow/hvm.c
index c6469c8..8561a11 100644
--- a/xen/arch/x86/mm/shadow/hvm.c
+++ b/xen/arch/x86/mm/shadow/hvm.c
@@ -597,7 +597,7 @@ static void sh_emulate_unmap_dest(struct vcpu *v, void
*addr,
{
paging_mark_dirty(v->domain, sh_ctxt->mfn[1]);
put_page(mfn_to_page(sh_ctxt->mfn[1]));
- vunmap((void *)((unsigned long)addr & PAGE_MASK));
+ vunmap(addr);
}
else
unmap_domain_page(addr);
diff --git a/xen/common/vmap.c b/xen/common/vmap.c
index faebc1d..e7bd6bf 100644
--- a/xen/common/vmap.c
+++ b/xen/common/vmap.c
@@ -141,7 +141,7 @@ static void *vm_alloc(unsigned int nr, unsigned int align,
static unsigned int vm_index(const void *va, enum vmap_region type)
{
- unsigned long addr = (unsigned long)va & ~(PAGE_SIZE - 1);
+ unsigned long addr = (unsigned long)va & PAGE_MASK;
unsigned int idx;
unsigned long start = (unsigned long)vm_base[type];
@@ -225,7 +225,7 @@ void *vmap(const mfn_t *mfn, unsigned int nr)
void vunmap(const void *va)
{
- unsigned long addr = (unsigned long)va;
+ unsigned long addr = (unsigned long)va & PAGE_MASK;
unsigned int pages = vm_size(va, VMAP_DEFAULT);
if ( !pages )
diff --git a/xen/drivers/acpi/osl.c b/xen/drivers/acpi/osl.c
index 4c8bb78..1a91453 100644
--- a/xen/drivers/acpi/osl.c
+++ b/xen/drivers/acpi/osl.c
@@ -115,7 +115,7 @@ void acpi_os_unmap_memory(void __iomem * virt, acpi_size
size)
}
if (system_state >= SYS_STATE_boot)
- vunmap((void *)((unsigned long)virt & PAGE_MASK));
+ vunmap(virt);
}
acpi_status acpi_os_read_port(acpi_io_address port, u32 * value, u32 width)
diff --git a/xen/include/xen/vmap.h b/xen/include/xen/vmap.h
index 369560e..a556d13 100644
--- a/xen/include/xen/vmap.h
+++ b/xen/include/xen/vmap.h
@@ -27,9 +27,7 @@ void __iomem *ioremap(paddr_t, size_t);
static inline void iounmap(void __iomem *va)
{
- unsigned long addr = (unsigned long)(void __force *)va;
-
- vunmap((void *)(addr & PAGE_MASK));
+ vunmap((void *)va);
}
void *arch_vmap_virt_end(void);
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |