/* Finds an active region in the address range from start_pfn to last_pfn and returns its range in ei_startpfn and ei_endpfn for the e820 entry.  */
int __init e820_find_active_region(const struct e820entry *ei, unsigned long start_pfn, unsigned long last_pfn, unsigned long *ei_startpfn, unsigned long *ei_endpfn)
/* Finds an active region in the address range from start_pfn to last_pfn and returns its range in ei_startpfn and ei_endpfn for the e820 entry.  */
int __init e820_find_active_region(const struct e820entry *ei, unsigned long start_pfn, unsigned long last_pfn, unsigned long *ei_startpfn, unsigned long *ei_endpfn)
{
	u64 align = PAGE_SIZE;
	*ei_startpfn = round_up(ei->addr, align) >> PAGE_SHIFT;
	*ei_endpfn = round_down(ei->addr + ei->size, align) >> PAGE_SHIFT;
	if (*ei_startpfn >= *ei_endpfn)
		return 0;
	if (ei->type != E820_RAM || *ei_endpfn <= start_pfn ||
				    *ei_startpfn >= last_pfn)
		return 0;
	if (*ei_startpfn < start_pfn)
		*ei_startpfn = start_pfn;
	if (*ei_endpfn > last_pfn)
		*ei_endpfn = last_pfn;
	return 1;
}