mirror of https://gitee.com/openkylin/linux.git
xen: check memory area against e820 map
Provide a service routine to check a physical memory area against the E820 map. The routine will return false if the complete area is RAM according to the E820 map and true otherwise. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: David Vrabel <david.vrabel@citrix.com> Acked-by: Konrad Rzeszutek Wilk <Konrad.wilk@oracle.com> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
This commit is contained in:
parent
5097cdf6ce
commit
e612b4a7db
|
@ -573,6 +573,29 @@ static unsigned long __init xen_count_remap_pages(unsigned long max_pfn)
|
|||
return extra;
|
||||
}
|
||||
|
||||
bool __init xen_is_e820_reserved(phys_addr_t start, phys_addr_t size)
|
||||
{
|
||||
struct e820entry *entry;
|
||||
unsigned mapcnt;
|
||||
phys_addr_t end;
|
||||
|
||||
if (!size)
|
||||
return false;
|
||||
|
||||
end = start + size;
|
||||
entry = xen_e820_map;
|
||||
|
||||
for (mapcnt = 0; mapcnt < xen_e820_map_entries; mapcnt++) {
|
||||
if (entry->type == E820_RAM && entry->addr <= start &&
|
||||
(entry->addr + entry->size) >= end)
|
||||
return false;
|
||||
|
||||
entry++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reserve Xen mfn_list.
|
||||
* See comment above "struct start_info" in <xen/interface/xen.h>
|
||||
|
|
|
@ -39,6 +39,7 @@ void xen_reserve_top(void);
|
|||
void xen_mm_pin_all(void);
|
||||
void xen_mm_unpin_all(void);
|
||||
|
||||
bool __init xen_is_e820_reserved(phys_addr_t start, phys_addr_t size);
|
||||
unsigned long __ref xen_chk_extra_mem(unsigned long pfn);
|
||||
void __init xen_inv_extra_mem(void);
|
||||
void __init xen_remap_memory(void);
|
||||
|
|
Loading…
Reference in New Issue