It now checks that a whole contiguous page is conventional RAM.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
return 1;
}
-int memory_is_conventional_ram(paddr_t p)
+int page_is_conventional_ram(unsigned long mfn)
{
- return (efi_mem_type(p) == EFI_CONVENTIONAL_MEMORY);
+ return (efi_mem_type(pfn_to_paddr(mfn)) == EFI_CONVENTIONAL_MEMORY);
}
subarch_init_memory();
}
-int memory_is_conventional_ram(paddr_t p)
+int page_is_conventional_ram(unsigned long mfn)
{
+ uint64_t maddr = pfn_to_paddr(mfn);
int i;
for ( i = 0; i < e820.nr_map; i++ )
{
if ( (e820.map[i].type == E820_RAM) &&
- (e820.map[i].addr <= p) &&
- ((e820.map[i].addr + e820.map[i].size) > p) )
+ (e820.map[i].addr <= maddr) &&
+ ((e820.map[i].addr + e820.map[i].size) >= (maddr + PAGE_SIZE)) )
return 1;
}
/* Set up 1:1 page table for dom0 for all RAM except Xen bits. */
for ( i = 0; i < max_page; i++ )
{
- if ( xen_in_range(i << PAGE_SHIFT, (i + 1) << PAGE_SHIFT) ||
- !memory_is_conventional_ram(i << PAGE_SHIFT) )
+ if ( !page_is_conventional_ram(i) ||
+ xen_in_range(i << PAGE_SHIFT, (i + 1) << PAGE_SHIFT) )
continue;
tmp = 1 << (PAGE_SHIFT - PAGE_SHIFT_4K);
switch ( vga_console_info.video_type )
{
case XEN_VGATYPE_TEXT_MODE_3:
- if ( memory_is_conventional_ram(0xB8000) ||
+ if ( page_is_conventional_ram(paddr_to_pfn(0xB8000)) ||
((video = ioremap(0xB8000, 0x8000)) == NULL) )
return;
outw(0x200a, 0x3d4); /* disable cursor */
int guest_remove_page(struct domain *d, unsigned long gmfn);
-/* Returns TRUE if the memory at address @p is ordinary RAM. */
-int memory_is_conventional_ram(paddr_t p);
+/* Returns TRUE if the whole page at @mfn is ordinary RAM. */
+int page_is_conventional_ram(unsigned long mfn);
extern unsigned long *alloc_bitmap; /* for vmcoreinfo */