|
@@ -275,8 +275,15 @@ static unsigned long pfn_end(struct dev_pagemap *pgmap)
|
|
return (res->start + resource_size(res)) >> PAGE_SHIFT;
|
|
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) \
|
|
#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)
|
|
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;
|
|
resource_size_t align_start, align_size, align_end;
|
|
struct vmem_altmap *altmap = pgmap->altmap_valid ?
|
|
struct vmem_altmap *altmap = pgmap->altmap_valid ?
|
|
&pgmap->altmap : NULL;
|
|
&pgmap->altmap : NULL;
|
|
|
|
+ struct resource *res = &pgmap->res;
|
|
unsigned long pfn, pgoff, order;
|
|
unsigned long pfn, pgoff, order;
|
|
pgprot_t pgprot = PAGE_KERNEL;
|
|
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_start = res->start & ~(SECTION_SIZE - 1);
|
|
align_size = ALIGN(res->start + resource_size(res), SECTION_SIZE)
|
|
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);
|
|
list_del(&page->lru);
|
|
page->pgmap = pgmap;
|
|
page->pgmap = pgmap;
|
|
percpu_ref_get(pgmap->ref);
|
|
percpu_ref_get(pgmap->ref);
|
|
- if (!(++i % 1024))
|
|
|
|
- cond_resched();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
devm_add_action(dev, devm_memremap_pages_release, pgmap);
|
|
devm_add_action(dev, devm_memremap_pages_release, pgmap);
|