]> xenbits.xensource.com Git - people/liuw/xen.git/commitdiff
xxx debug
authorWei Liu <wei.liu2@citrix.com>
Wed, 12 Dec 2018 16:19:52 +0000 (16:19 +0000)
committerWei Liu <wei.liu2@citrix.com>
Tue, 18 Dec 2018 17:07:28 +0000 (17:07 +0000)
xen/arch/x86/mm.c
xen/arch/x86/x86_64/mm.c
xen/common/page_alloc.c
xen/common/vmap.c
xen/include/asm-x86/mm.h

index 1431f347f3df5d49fcad4d9d3372439b1a6d2e59..9d801025ee14934b14af097d10d10b4a6bdf8f2d 100644 (file)
@@ -365,8 +365,10 @@ void __init arch_init_memory(void)
             ASSERT(root_pgt_pv_xen_slots < ROOT_PAGETABLE_PV_XEN_SLOTS);
             if ( l4_table_offset(split_va) == l4_table_offset(split_va - 1) )
             {
-                l3_pgentry_t *l3tab = alloc_xen_pagetable();
-
+                l3_pgentry_t *l3tab;
+                printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
+                l3tab = alloc_xen_pagetable();
+                printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
                 if ( l3tab )
                 {
                     const l3_pgentry_t *l3idle =
@@ -4764,8 +4766,10 @@ void *alloc_xen_pagetable(void)
 {
     if ( system_state != SYS_STATE_early_boot )
     {
-        void *ptr = alloc_xenheap_page();
-
+        void *ptr;
+        printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+        ptr = alloc_xenheap_page();
+        printk(" XXXX %s:%d %p\n", __FILE__, __LINE__, ptr);
         BUG_ON(!hardware_domain && !ptr);
         return ptr;
     }
@@ -4789,8 +4793,10 @@ static l3_pgentry_t *virt_to_xen_l3e(unsigned long v)
     if ( !(l4e_get_flags(*pl4e) & _PAGE_PRESENT) )
     {
         bool locking = system_state > SYS_STATE_boot;
-        l3_pgentry_t *pl3e = alloc_xen_pagetable();
-
+        l3_pgentry_t *pl3e;
+        printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
+        pl3e = alloc_xen_pagetable();
+        printk(" XXXX %s:%s:%d %p\n", __FILE__, __func__,  __LINE__, pl3e);
         if ( !pl3e )
             return NULL;
         clear_page(pl3e);
@@ -4824,8 +4830,10 @@ static l2_pgentry_t *virt_to_xen_l2e(unsigned long v)
     if ( !(l3e_get_flags(*pl3e) & _PAGE_PRESENT) )
     {
         bool locking = system_state > SYS_STATE_boot;
-        l2_pgentry_t *pl2e = alloc_xen_pagetable();
-
+        l2_pgentry_t *pl2e;
+        printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
+        pl2e= alloc_xen_pagetable();
+        printk(" XXXX %s:%s:%d %p\n", __FILE__, __func__,  __LINE__, pl2e);
         if ( !pl2e )
             return NULL;
         clear_page(pl2e);
@@ -4857,8 +4865,10 @@ l1_pgentry_t *virt_to_xen_l1e(unsigned long v)
     if ( !(l2e_get_flags(*pl2e) & _PAGE_PRESENT) )
     {
         bool locking = system_state > SYS_STATE_boot;
-        l1_pgentry_t *pl1e = alloc_xen_pagetable();
-
+        l1_pgentry_t *pl1e;
+        printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
+        pl1e = alloc_xen_pagetable();
+        printk(" XXXX %s:%s:%d %p\n", __FILE__, __func__,  __LINE__, pl1e);
         if ( !pl1e )
             return NULL;
         clear_page(pl1e);
@@ -5007,8 +5017,9 @@ int map_pages_to_xen(
                 nr_mfns -= i;
                 continue;
             }
-
+            printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
             pl2e = alloc_xen_pagetable();
+            printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
             if ( pl2e == NULL )
                 return -ENOMEM;
 
@@ -5106,8 +5117,9 @@ int map_pages_to_xen(
                     nr_mfns -= i;
                     goto check_l3;
                 }
-
+                printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
                 pl1e = alloc_xen_pagetable();
+                printk(" XXXX %s:%s:%d\n", __FILE__, __func__,  __LINE__);
                 if ( pl1e == NULL )
                     return -ENOMEM;
 
index 126a486d2ee40697346b785ed0f0d26b662994a1..3758c8cbc1f7e9df50d02bca23d156d9aa19b9ed 100644 (file)
@@ -511,8 +511,10 @@ void __init paging_init(void)
         if ( !(l4e_get_flags(idle_pg_table[l4_table_offset(va)]) &
               _PAGE_PRESENT) )
         {
-            l3_pgentry_t *pl3t = alloc_xen_pagetable();
-
+            l3_pgentry_t *pl3t;
+            printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+            pl3t = alloc_xen_pagetable();
+            printk(" XXXX %s:%d\n", __FILE__, __LINE__);
             if ( !pl3t )
                 goto nomem;
             clear_page(pl3t);
@@ -520,14 +522,16 @@ void __init paging_init(void)
                       l4e_from_paddr(__pa(pl3t), __PAGE_HYPERVISOR_RW));
         }
     }
-
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     /* Create user-accessible L2 directory to map the MPT for guests. */
     if ( (l3_ro_mpt = alloc_xen_pagetable()) == NULL )
         goto nomem;
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     clear_page(l3_ro_mpt);
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     l4e_write(&idle_pg_table[l4_table_offset(RO_MPT_VIRT_START)],
               l4e_from_paddr(__pa(l3_ro_mpt), __PAGE_HYPERVISOR_RO | _PAGE_USER));
-
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     /*
      * Allocate and map the machine-to-phys table.
      * This also ensures L3 is present for fixmaps.
@@ -565,6 +569,7 @@ void __init paging_init(void)
                 i += (1UL << PAGETABLE_ORDER) - 1;
                 continue;
             }
+            printk(" XXXX %s:%d\n", __FILE__, __LINE__);
             if ( holes == 0 &&
                  (l1_pg = alloc_domheap_pages(NULL, 2 * PAGETABLE_ORDER,
                                               memflags)) != NULL )
index efd2b79a54cc9927e4bba515e8c5c07a3a8a4413..b5154047ff5c604bfe3455ccf6463ba2f4707891 100644 (file)
@@ -2189,17 +2189,18 @@ void *alloc_xenheap_pages(unsigned int order, unsigned int memflags)
         memflags &= ~MEMF_bits(~0U);
     if ( !(memflags >> _MEMF_bits) )
         memflags |= MEMF_bits(xenheap_bits);
-
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     pg = alloc_domheap_pages(NULL, order, memflags | MEMF_no_scrub);
     if ( unlikely(pg == NULL) )
         return NULL;
-
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     for ( i = 0; i < (1u << order); i++ )
         pg[i].count_info |= PGC_xen_heap;
-
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     mfn = page_to_mfn(pg);
-
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     v = vmap(&mfn, 1u << order);
+    printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     /* The assumption is xenheap is always mapped */
     ASSERT(v);
     return v;
index 37922f735b853dea6130fca3fcf32e511afa6a18..165db5ed89963c5495f6e2f06d047bcdfc3cbc92 100644 (file)
@@ -112,7 +112,7 @@ static void *vm_alloc(unsigned int nr, unsigned int align,
         if ( start >= vm_top[t] )
         {
             unsigned long va = (unsigned long)vm_bitmap(t) + vm_top[t] / 8;
-
+            printk(" XXXX %s:%d\n", __FILE__, __LINE__);
             if ( !map_pages_to_xen(va, page_to_mfn(pg), 1, PAGE_HYPERVISOR) )
             {
                 clear_page((void *)va);
@@ -122,7 +122,7 @@ static void *vm_alloc(unsigned int nr, unsigned int align,
                 continue;
             }
         }
-
+        printk(" XXXX %s:%d\n", __FILE__, __LINE__);
         free_domheap_page(pg);
 
         if ( start >= vm_top[t] )
@@ -214,11 +214,18 @@ void *__vmap(const mfn_t *mfn, unsigned int granularity,
 
     for ( ; va && nr--; ++mfn, cur += PAGE_SIZE * granularity )
     {
-        if ( map_pages_to_xen(cur, *mfn, granularity, flags) )
+        int rc;
+        printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+        printk("    XXX map %lx, %"PRI_mfn", %u, %x\n", cur, mfn_x(*mfn),
+               granularity, flags);
+        rc = map_pages_to_xen(cur, *mfn, granularity, flags);
+        if ( rc )
         {
+            printk(" XXX rc = %d\n", rc);
             vunmap(va);
             va = NULL;
         }
+        printk(" XXXX %s:%d\n", __FILE__, __LINE__);
     }
 
     return va;
index 6faa563167dbbf9c513e59ecd58e55fa439d420c..c2785c4586195e8fd379b89d8a62354c5a68b713 100644 (file)
@@ -315,6 +315,13 @@ static inline struct page_info *__virt_to_page(const void *v)
 
     ASSERT(va >= XEN_VIRT_START);
     ASSERT(va < DIRECTMAP_VIRT_END);
+
+#if 0
+    /* XXX interaction with the rest? See config.h for whole map. */
+    if ( va >= VMAP_VIRT_START && va < VMAP_VIRT_END )
+        return vmap_to_page(va);
+#endif
+
     if ( va < XEN_VIRT_END )
         va += DIRECTMAP_VIRT_START - XEN_VIRT_START + xen_phys_start;
     else