diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/memremap.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/kernel/memremap.c b/kernel/memremap.c index 4849be5f9b3c..4dd4274cabe2 100644 --- a/kernel/memremap.c +++ b/kernel/memremap.c @@ -275,8 +275,15 @@ static unsigned long pfn_end(struct dev_pagemap *pgmap)  	return (res->start + resource_size(res)) >> PAGE_SHIFT;  } +static unsigned long pfn_next(unsigned long pfn) +{ +	if (pfn % 1024 == 0) +		cond_resched(); +	return pfn + 1; +} +  #define for_each_device_pfn(pfn, map) \ -	for (pfn = pfn_first(map); pfn < pfn_end(map); pfn++) +	for (pfn = pfn_first(map); pfn < pfn_end(map); pfn = pfn_next(pfn))  static void devm_memremap_pages_release(void *data)  { @@ -337,10 +344,10 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)  	resource_size_t align_start, align_size, align_end;  	struct vmem_altmap *altmap = pgmap->altmap_valid ?  			&pgmap->altmap : NULL; +	struct resource *res = &pgmap->res;  	unsigned long pfn, pgoff, order;  	pgprot_t pgprot = PAGE_KERNEL; -	int error, nid, is_ram, i = 0; -	struct resource *res = &pgmap->res; +	int error, nid, is_ram;  	align_start = res->start & ~(SECTION_SIZE - 1);  	align_size = ALIGN(res->start + resource_size(res), SECTION_SIZE) @@ -409,8 +416,6 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)  		list_del(&page->lru);  		page->pgmap = pgmap;  		percpu_ref_get(pgmap->ref); -		if (!(++i % 1024)) -			cond_resched();  	}  	devm_add_action(dev, devm_memremap_pages_release, pgmap);  |