[IA64] Add convmem_end
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Thu, 4 Jan 2007 22:25:47 +0000 (15:25 -0700)
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Thu, 4 Jan 2007 22:25:47 +0000 (15:25 -0700)
Split the meaning of struct domain::maxmem into struct arch_domain::convmem_end
so that maxmem means the number of pages which domain has and convmem_end means
the highest address of conventional memory (i.e. RAM).

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
xen/arch/ia64/xen/dom_fw.c
xen/arch/ia64/xen/domain.c
xen/arch/ia64/xen/mm.c
xen/include/asm-ia64/domain.h

index 2ad12048ce122718d2c657ad839ca7f7455b6ffa..97a687e08c8b250946f57db1c3538ca9026a38df 100644 (file)
@@ -582,6 +582,7 @@ complete_dom0_memmap(struct domain *d,
                        num_mds++;
 
                        dom_mem -= dom_md->num_pages << EFI_PAGE_SHIFT;
+                       d->arch.convmem_end = end;
                        break;
 
                case EFI_UNUSABLE_MEMORY:
@@ -804,6 +805,7 @@ dom_fw_init(struct domain *d,
                /* Memory.  */
                MAKE_MD(EFI_CONVENTIONAL_MEMORY, EFI_MEMORY_WB,
                        FW_END_PADDR, maxmem);
+               d->arch.convmem_end = maxmem;
                
                /* Create an entry for IO ports.  */
                MAKE_MD(EFI_MEMORY_MAPPED_IO_PORT_SPACE, EFI_MEMORY_UC,
index 58b8200b9cf9b5ad0d07f2f7d7542d861d105729..aafb0c25151cec0ef401279fa8da420404f8b45d 100644 (file)
@@ -760,8 +760,9 @@ int shadow_mode_control(struct domain *d, xen_domctl_shadow_op_t *sc)
                atomic64_set(&d->arch.shadow_fault_count, 0);
                atomic64_set(&d->arch.shadow_dirty_count, 0);
 
-               d->arch.shadow_bitmap_size = (d->max_pages + BITS_PER_LONG-1) &
-                                            ~(BITS_PER_LONG-1);
+               d->arch.shadow_bitmap_size =
+                       ((d->arch.convmem_end >> PAGE_SHIFT) +
+                        BITS_PER_LONG - 1) & ~(BITS_PER_LONG - 1);
                d->arch.shadow_bitmap = xmalloc_array(unsigned long,
                                   d->arch.shadow_bitmap_size / BITS_PER_LONG);
                if (d->arch.shadow_bitmap == NULL) {
index 0a5acc0636d89dea8ee572895c7754af34e4861d..1effbf91605e4c1925330eeeb5b7d86ac69ada8c 100644 (file)
@@ -700,12 +700,12 @@ unsigned long lookup_domain_mpa(struct domain *d, unsigned long mpaddr,
 
     printk("%s: d 0x%p id %d current 0x%p id %d\n",
            __func__, d, d->domain_id, current, current->vcpu_id);
-    if ((mpaddr >> PAGE_SHIFT) < d->max_pages)
+    if (mpaddr < d->arch.convmem_end)
         printk("%s: non-allocated mpa 0x%lx (< 0x%lx)\n", __func__,
-               mpaddr, (unsigned long)d->max_pages << PAGE_SHIFT);
+               mpaddr, d->arch.convmem_end);
     else
         printk("%s: bad mpa 0x%lx (=> 0x%lx)\n", __func__,
-               mpaddr, (unsigned long)d->max_pages << PAGE_SHIFT);
+               mpaddr, d->arch.convmem_end);
 
     if (entry != NULL)
         p2m_entry_set(entry, NULL, __pte(0));
index b327bcb27b900fe2f804b913123e342b7c53fea9..a09446d6b14cb03c3b4dec78eed0c5adf99dfc8f 100644 (file)
@@ -78,6 +78,9 @@ struct arch_domain {
         };
     };
 
+    /* maximum metaphysical address of conventional memory */
+    u64 convmem_end;
+
     /* Allowed accesses to io ports.  */
     struct rangeset *ioport_caps;