[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.7] Revert "hvmloader: avoid tests when they would clobber used memory"
commit 84cd8d3fbdfbc0655ad242da1d2fdadddf5be89e Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Jun 13 15:22:22 2017 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Jun 13 15:22:22 2017 +0200 Revert "hvmloader: avoid tests when they would clobber used memory" This reverts commit 164c34dd23bc3ea8d5285752d9270627a93c91f5 as not applicable to upstream 4.7 (I was misguided by local backports). --- tools/firmware/hvmloader/tests.c | 99 ++++++---------------------------------- 1 file changed, 14 insertions(+), 85 deletions(-) diff --git a/tools/firmware/hvmloader/tests.c b/tools/firmware/hvmloader/tests.c index 5f7bcc0..fea3ad3 100644 --- a/tools/firmware/hvmloader/tests.c +++ b/tools/firmware/hvmloader/tests.c @@ -19,9 +19,7 @@ * this program; If not, see <http://www.gnu.org/licenses/>. */ -#include "config.h" #include "util.h" -#include <xen/arch-x86/hvm/start_info.h> #define TEST_FAIL 0 #define TEST_PASS 1 @@ -30,13 +28,11 @@ /* * Memory layout during tests: * 4MB to 8MB is cleared. - * Page directory resides at 4MB. - * 2 page table pages reside at 4MB+4kB to 4MB+12kB. - * Pagetables identity-map 0-8MB, except 4kB at va 6MB maps to pa 5MB. + * Page directory resides at 8MB. + * 4 page table pages reside at 8MB+4kB to 8MB+20kB. + * Pagetables identity-map 0-16MB, except 4kB at va 6MB maps to pa 5MB. */ -#define TEST_MEM_BASE (4ul << 20) -#define TEST_MEM_SIZE (4ul << 20) -#define PD_START TEST_MEM_BASE +#define PD_START (8ul << 20) #define PT_START (PD_START + 4096) static void setup_paging(void) @@ -45,10 +41,10 @@ static void setup_paging(void) uint32_t *pt = (uint32_t *)PT_START; uint32_t i; - /* Identity map 0-8MB. */ - for ( i = 0; i < 2; i++ ) + /* Identity map 0-16MB. */ + for ( i = 0; i < 4; i++ ) pd[i] = (unsigned long)pt + (i<<12) + 3; - for ( i = 0; i < 2 * 1024; i++ ) + for ( i = 0; i < (4*1024); i++ ) pt[i] = (i << 12) + 3; /* Page at virtual 6MB maps to physical 5MB. */ @@ -116,7 +112,7 @@ static int rep_io_test(void) stop_paging(); i = 0; - for ( p = (uint32_t *)0x4ff000ul; p < (uint32_t *)0x602000ul; p++ ) + for ( p = (uint32_t *)0x400000ul; p < (uint32_t *)0x700000ul; p++ ) { uint32_t expected = 0; if ( check[i].addr == (unsigned long)p ) @@ -148,12 +144,12 @@ static int shadow_gs_test(void) if ( !(edx & (1u<<29)) ) return TEST_SKIP; - /* Long mode pagetable setup: Identity map 0-8MB with 2MB mappings. */ + /* Long mode pagetable setup: Identity map 0-16MB with 2MB mappings. */ *pd = (unsigned long)pd + 0x1007; /* Level 4 */ pd += 512; *pd = (unsigned long)pd + 0x1007; /* Level 3 */ pd += 512; - for ( i = 0; i < 4; i++ ) /* Level 2 */ + for ( i = 0; i < 8; i++ ) /* Level 2 */ *pd++ = (i << 21) + 0x1e3; asm volatile ( @@ -195,7 +191,8 @@ static int shadow_gs_test(void) void perform_tests(void) { - unsigned int i, passed, skipped; + int i, passed, skipped; + static struct { int (* const test)(void); const char *description; @@ -207,80 +204,12 @@ void perform_tests(void) printf("Testing HVM environment:\n"); - BUILD_BUG_ON(SCRATCH_PHYSICAL_ADDRESS > HVMLOADER_PHYSICAL_ADDRESS); - if ( hvm_info->low_mem_pgend < - ((TEST_MEM_BASE + TEST_MEM_SIZE) >> PAGE_SHIFT) ) - { - printf("Skipping tests due to insufficient memory (<%luMB)\n", - (TEST_MEM_BASE + TEST_MEM_SIZE) >> 20); - return; - } - - if ( (unsigned long)_end > TEST_MEM_BASE ) - { - printf("Skipping tests due to overlap with base image\n"); - return; - } - - if ( hvm_start_info->cmdline_paddr && - hvm_start_info->cmdline_paddr < TEST_MEM_BASE + TEST_MEM_SIZE && - ((hvm_start_info->cmdline_paddr + - strlen((char *)(uintptr_t)hvm_start_info->cmdline_paddr)) >= - TEST_MEM_BASE) ) - { - printf("Skipping tests due to overlap with command line\n"); - return; - } - - if ( hvm_start_info->rsdp_paddr ) + if ( hvm_info->low_mem_pgend < 0x1000 ) { - printf("Skipping tests due to non-zero RSDP address\n"); + printf("Skipping tests due to insufficient memory (<16MB)\n"); return; } - if ( hvm_start_info->nr_modules ) - { - const struct hvm_modlist_entry *modlist = - (void *)(uintptr_t)hvm_start_info->modlist_paddr; - - if ( hvm_start_info->modlist_paddr > UINTPTR_MAX || - ((UINTPTR_MAX - (uintptr_t)modlist) / sizeof(*modlist) < - hvm_start_info->nr_modules) ) - { - printf("Skipping tests due to inaccessible module list\n"); - return; - } - - if ( TEST_MEM_BASE < (uintptr_t)(modlist + - hvm_start_info->nr_modules) && - (uintptr_t)modlist < TEST_MEM_BASE + TEST_MEM_SIZE ) - { - printf("Skipping tests due to overlap with module list\n"); - return; - } - - for ( i = 0; i < hvm_start_info->nr_modules; ++i ) - { - if ( TEST_MEM_BASE < modlist[i].paddr + modlist[i].size && - modlist[i].paddr < TEST_MEM_BASE + TEST_MEM_SIZE ) - { - printf("Skipping tests due to overlap with module %u\n", i); - return; - } - - if ( modlist[i].cmdline_paddr && - modlist[i].cmdline_paddr < TEST_MEM_BASE + TEST_MEM_SIZE && - ((modlist[i].cmdline_paddr + - strlen((char *)(uintptr_t)modlist[i].cmdline_paddr)) >= - TEST_MEM_BASE) ) - { - printf("Skipping tests due to overlap with module %u cmdline\n", - i); - return; - } - } - } - passed = skipped = 0; for ( i = 0; tests[i].test; i++ ) { -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.7 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |