[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.