diff mbox

[kvm-unit-tests,3/4] lib/alloc: return a zeroed page from alloc_page

Message ID 1477939906-28802-4-git-send-email-drjones@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Andrew Jones Oct. 31, 2016, 6:51 p.m. UTC
This allows us to remove a bunch of memsets.

Signed-off-by: Andrew Jones <drjones@redhat.com>
---
 lib/alloc.c     | 1 +
 lib/x86/vm.c    | 2 --
 x86/vmx.c       | 6 ------
 x86/vmx_tests.c | 9 ---------
 4 files changed, 1 insertion(+), 17 deletions(-)

Comments

Paolo Bonzini Nov. 1, 2016, 2:47 p.m. UTC | #1
On 31/10/2016 19:51, Andrew Jones wrote:
> This allows us to remove a bunch of memsets.

Please add a new function alloc_zeroed_page instead.

Paolo

> Signed-off-by: Andrew Jones <drjones@redhat.com>
> ---
>  lib/alloc.c     | 1 +
>  lib/x86/vm.c    | 2 --
>  x86/vmx.c       | 6 ------
>  x86/vmx_tests.c | 9 ---------
>  4 files changed, 1 insertion(+), 17 deletions(-)
> 
> diff --git a/lib/alloc.c b/lib/alloc.c
> index 7687c703f40b..15c96e4ee8a3 100644
> --- a/lib/alloc.c
> +++ b/lib/alloc.c
> @@ -160,6 +160,7 @@ void *alloc_page(void)
>  
>  	p = free_head;
>  	free_head = *(void **)free_head;
> +	memset(p, 0, PAGE_SIZE);
>  	return p;
>  }
>  
> diff --git a/lib/x86/vm.c b/lib/x86/vm.c
> index bba8ccee7dd0..0882e0a478ca 100644
> --- a/lib/x86/vm.c
> +++ b/lib/x86/vm.c
> @@ -91,8 +91,6 @@ static void setup_mmu(unsigned long len)
>  {
>      unsigned long *cr3 = alloc_page();
>  
> -    memset(cr3, 0, PAGE_SIZE);
> -
>  #ifdef __x86_64__
>      if (len < (1ul << 32))
>          len = (1ul << 32);  /* map mmio 1:1 */
> diff --git a/x86/vmx.c b/x86/vmx.c
> index 411ed3211d4d..65c8583a18db 100644
> --- a/x86/vmx.c
> +++ b/x86/vmx.c
> @@ -278,7 +278,6 @@ static void split_large_ept_entry(unsigned long *ptep, int level)
>  
>  	new_pt = alloc_page();
>  	assert(new_pt);
> -	memset(new_pt, 0, PAGE_SIZE);
>  
>  	prototype = pte & ~EPT_ADDR_MASK;
>  	if (level == 2)
> @@ -618,7 +617,6 @@ static void init_vmcs_guest(void)
>  static int init_vmcs(struct vmcs **vmcs)
>  {
>  	*vmcs = alloc_page();
> -	memset(*vmcs, 0, PAGE_SIZE);
>  	(*vmcs)->revision_id = basic.revision;
>  	/* vmclear first to init vmcs */
>  	if (vmcs_clear(*vmcs)) {
> @@ -657,7 +655,6 @@ static void init_vmx(void)
>  	ulong fix_cr4_set, fix_cr4_clr;
>  
>  	vmxon_region = alloc_page();
> -	memset(vmxon_region, 0, PAGE_SIZE);
>  
>  	fix_cr0_set =  rdmsr(MSR_IA32_VMX_CR0_FIXED0);
>  	fix_cr0_clr =  rdmsr(MSR_IA32_VMX_CR0_FIXED1);
> @@ -687,9 +684,7 @@ static void init_vmx(void)
>  	*vmxon_region = basic.revision;
>  
>  	guest_stack = alloc_page();
> -	memset(guest_stack, 0, PAGE_SIZE);
>  	guest_syscall_stack = alloc_page();
> -	memset(guest_syscall_stack, 0, PAGE_SIZE);
>  }
>  
>  static void do_vmxon_off(void *data)
> @@ -812,7 +807,6 @@ static void test_vmptrst(void)
>  	struct vmcs *vmcs1, *vmcs2;
>  
>  	vmcs1 = alloc_page();
> -	memset(vmcs1, 0, PAGE_SIZE);
>  	init_vmcs(&vmcs1);
>  	ret = vmcs_save(&vmcs2);
>  	report("test vmptrst", (!ret) && (vmcs1 == vmcs2));
> diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
> index 58736d789bd5..681204238ed9 100644
> --- a/x86/vmx_tests.c
> +++ b/x86/vmx_tests.c
> @@ -224,7 +224,6 @@ void msr_bmp_init()
>  	u32 ctrl_cpu0;
>  
>  	msr_bitmap = alloc_page();
> -	memset(msr_bitmap, 0x0, PAGE_SIZE);
>  	ctrl_cpu0 = vmcs_read(CPU_EXEC_CTRL0);
>  	ctrl_cpu0 |= CPU_MSR_BITMAP;
>  	vmcs_write(CPU_EXEC_CTRL0, ctrl_cpu0);
> @@ -567,8 +566,6 @@ static int iobmp_init()
>  
>  	io_bitmap_a = alloc_page();
>  	io_bitmap_b = alloc_page();
> -	memset(io_bitmap_a, 0x0, PAGE_SIZE);
> -	memset(io_bitmap_b, 0x0, PAGE_SIZE);
>  	ctrl_cpu0 = vmcs_read(CPU_EXEC_CTRL0);
>  	ctrl_cpu0 |= CPU_IO_BITMAP;
>  	ctrl_cpu0 &= (~CPU_IO);
> @@ -938,7 +935,6 @@ static int setup_ept()
>  	}
>  	eptp |= (3 << EPTP_PG_WALK_LEN_SHIFT);
>  	pml4 = alloc_page();
> -	memset(pml4, 0, PAGE_SIZE);
>  	eptp |= virt_to_phys(pml4);
>  	vmcs_write(EPTP, eptp);
>  	support_2m = !!(ept_vpid.val & EPT_CAP_2M_PAGE);
> @@ -974,8 +970,6 @@ static int ept_init()
>  		return VMX_TEST_EXIT;
>  	data_page1 = alloc_page();
>  	data_page2 = alloc_page();
> -	memset(data_page1, 0x0, PAGE_SIZE);
> -	memset(data_page2, 0x0, PAGE_SIZE);
>  	*((u32 *)data_page1) = MAGIC_VAL_1;
>  	*((u32 *)data_page2) = MAGIC_VAL_2;
>  	install_ept(pml4, (unsigned long)data_page1, (unsigned long)data_page2,
> @@ -1541,9 +1535,6 @@ static int msr_switch_init(struct vmcs *vmcs)
>  	exit_msr_store = alloc_page();
>  	exit_msr_load = alloc_page();
>  	entry_msr_load = alloc_page();
> -	memset(exit_msr_store, 0, PAGE_SIZE);
> -	memset(exit_msr_load, 0, PAGE_SIZE);
> -	memset(entry_msr_load, 0, PAGE_SIZE);
>  	entry_msr_load[0].index = MSR_KERNEL_GS_BASE;
>  	entry_msr_load[0].value = MSR_MAGIC;
>  
> 
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/lib/alloc.c b/lib/alloc.c
index 7687c703f40b..15c96e4ee8a3 100644
--- a/lib/alloc.c
+++ b/lib/alloc.c
@@ -160,6 +160,7 @@  void *alloc_page(void)
 
 	p = free_head;
 	free_head = *(void **)free_head;
+	memset(p, 0, PAGE_SIZE);
 	return p;
 }
 
diff --git a/lib/x86/vm.c b/lib/x86/vm.c
index bba8ccee7dd0..0882e0a478ca 100644
--- a/lib/x86/vm.c
+++ b/lib/x86/vm.c
@@ -91,8 +91,6 @@  static void setup_mmu(unsigned long len)
 {
     unsigned long *cr3 = alloc_page();
 
-    memset(cr3, 0, PAGE_SIZE);
-
 #ifdef __x86_64__
     if (len < (1ul << 32))
         len = (1ul << 32);  /* map mmio 1:1 */
diff --git a/x86/vmx.c b/x86/vmx.c
index 411ed3211d4d..65c8583a18db 100644
--- a/x86/vmx.c
+++ b/x86/vmx.c
@@ -278,7 +278,6 @@  static void split_large_ept_entry(unsigned long *ptep, int level)
 
 	new_pt = alloc_page();
 	assert(new_pt);
-	memset(new_pt, 0, PAGE_SIZE);
 
 	prototype = pte & ~EPT_ADDR_MASK;
 	if (level == 2)
@@ -618,7 +617,6 @@  static void init_vmcs_guest(void)
 static int init_vmcs(struct vmcs **vmcs)
 {
 	*vmcs = alloc_page();
-	memset(*vmcs, 0, PAGE_SIZE);
 	(*vmcs)->revision_id = basic.revision;
 	/* vmclear first to init vmcs */
 	if (vmcs_clear(*vmcs)) {
@@ -657,7 +655,6 @@  static void init_vmx(void)
 	ulong fix_cr4_set, fix_cr4_clr;
 
 	vmxon_region = alloc_page();
-	memset(vmxon_region, 0, PAGE_SIZE);
 
 	fix_cr0_set =  rdmsr(MSR_IA32_VMX_CR0_FIXED0);
 	fix_cr0_clr =  rdmsr(MSR_IA32_VMX_CR0_FIXED1);
@@ -687,9 +684,7 @@  static void init_vmx(void)
 	*vmxon_region = basic.revision;
 
 	guest_stack = alloc_page();
-	memset(guest_stack, 0, PAGE_SIZE);
 	guest_syscall_stack = alloc_page();
-	memset(guest_syscall_stack, 0, PAGE_SIZE);
 }
 
 static void do_vmxon_off(void *data)
@@ -812,7 +807,6 @@  static void test_vmptrst(void)
 	struct vmcs *vmcs1, *vmcs2;
 
 	vmcs1 = alloc_page();
-	memset(vmcs1, 0, PAGE_SIZE);
 	init_vmcs(&vmcs1);
 	ret = vmcs_save(&vmcs2);
 	report("test vmptrst", (!ret) && (vmcs1 == vmcs2));
diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
index 58736d789bd5..681204238ed9 100644
--- a/x86/vmx_tests.c
+++ b/x86/vmx_tests.c
@@ -224,7 +224,6 @@  void msr_bmp_init()
 	u32 ctrl_cpu0;
 
 	msr_bitmap = alloc_page();
-	memset(msr_bitmap, 0x0, PAGE_SIZE);
 	ctrl_cpu0 = vmcs_read(CPU_EXEC_CTRL0);
 	ctrl_cpu0 |= CPU_MSR_BITMAP;
 	vmcs_write(CPU_EXEC_CTRL0, ctrl_cpu0);
@@ -567,8 +566,6 @@  static int iobmp_init()
 
 	io_bitmap_a = alloc_page();
 	io_bitmap_b = alloc_page();
-	memset(io_bitmap_a, 0x0, PAGE_SIZE);
-	memset(io_bitmap_b, 0x0, PAGE_SIZE);
 	ctrl_cpu0 = vmcs_read(CPU_EXEC_CTRL0);
 	ctrl_cpu0 |= CPU_IO_BITMAP;
 	ctrl_cpu0 &= (~CPU_IO);
@@ -938,7 +935,6 @@  static int setup_ept()
 	}
 	eptp |= (3 << EPTP_PG_WALK_LEN_SHIFT);
 	pml4 = alloc_page();
-	memset(pml4, 0, PAGE_SIZE);
 	eptp |= virt_to_phys(pml4);
 	vmcs_write(EPTP, eptp);
 	support_2m = !!(ept_vpid.val & EPT_CAP_2M_PAGE);
@@ -974,8 +970,6 @@  static int ept_init()
 		return VMX_TEST_EXIT;
 	data_page1 = alloc_page();
 	data_page2 = alloc_page();
-	memset(data_page1, 0x0, PAGE_SIZE);
-	memset(data_page2, 0x0, PAGE_SIZE);
 	*((u32 *)data_page1) = MAGIC_VAL_1;
 	*((u32 *)data_page2) = MAGIC_VAL_2;
 	install_ept(pml4, (unsigned long)data_page1, (unsigned long)data_page2,
@@ -1541,9 +1535,6 @@  static int msr_switch_init(struct vmcs *vmcs)
 	exit_msr_store = alloc_page();
 	exit_msr_load = alloc_page();
 	entry_msr_load = alloc_page();
-	memset(exit_msr_store, 0, PAGE_SIZE);
-	memset(exit_msr_load, 0, PAGE_SIZE);
-	memset(entry_msr_load, 0, PAGE_SIZE);
 	entry_msr_load[0].index = MSR_KERNEL_GS_BASE;
 	entry_msr_load[0].value = MSR_MAGIC;