summaryrefslogtreecommitdiffstats
path: root/mm/hmm.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/hmm.c')
-rw-r--r--mm/hmm.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/mm/hmm.c b/mm/hmm.c
index c5d840e34b28..f702a3895d05 100644
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -1354,9 +1354,8 @@ static void hmm_devmem_ref_release(struct percpu_ref *ref)
1354 complete(&devmem->completion); 1354 complete(&devmem->completion);
1355} 1355}
1356 1356
1357static void hmm_devmem_ref_exit(void *data) 1357static void hmm_devmem_ref_exit(struct percpu_ref *ref)
1358{ 1358{
1359 struct percpu_ref *ref = data;
1360 struct hmm_devmem *devmem; 1359 struct hmm_devmem *devmem;
1361 1360
1362 devmem = container_of(ref, struct hmm_devmem, ref); 1361 devmem = container_of(ref, struct hmm_devmem, ref);
@@ -1433,10 +1432,6 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
1433 if (ret) 1432 if (ret)
1434 return ERR_PTR(ret); 1433 return ERR_PTR(ret);
1435 1434
1436 ret = devm_add_action_or_reset(device, hmm_devmem_ref_exit, &devmem->ref);
1437 if (ret)
1438 return ERR_PTR(ret);
1439
1440 size = ALIGN(size, PA_SECTION_SIZE); 1435 size = ALIGN(size, PA_SECTION_SIZE);
1441 addr = min((unsigned long)iomem_resource.end, 1436 addr = min((unsigned long)iomem_resource.end,
1442 (1UL << MAX_PHYSMEM_BITS) - 1); 1437 (1UL << MAX_PHYSMEM_BITS) - 1);
@@ -1475,6 +1470,7 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
1475 devmem->pagemap.ref = &devmem->ref; 1470 devmem->pagemap.ref = &devmem->ref;
1476 devmem->pagemap.data = devmem; 1471 devmem->pagemap.data = devmem;
1477 devmem->pagemap.kill = hmm_devmem_ref_kill; 1472 devmem->pagemap.kill = hmm_devmem_ref_kill;
1473 devmem->pagemap.cleanup = hmm_devmem_ref_exit;
1478 1474
1479 result = devm_memremap_pages(devmem->device, &devmem->pagemap); 1475 result = devm_memremap_pages(devmem->device, &devmem->pagemap);
1480 if (IS_ERR(result)) 1476 if (IS_ERR(result))
@@ -1512,11 +1508,6 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
1512 if (ret) 1508 if (ret)
1513 return ERR_PTR(ret); 1509 return ERR_PTR(ret);
1514 1510
1515 ret = devm_add_action_or_reset(device, hmm_devmem_ref_exit,
1516 &devmem->ref);
1517 if (ret)
1518 return ERR_PTR(ret);
1519
1520 devmem->pfn_first = devmem->resource->start >> PAGE_SHIFT; 1511 devmem->pfn_first = devmem->resource->start >> PAGE_SHIFT;
1521 devmem->pfn_last = devmem->pfn_first + 1512 devmem->pfn_last = devmem->pfn_first +
1522 (resource_size(devmem->resource) >> PAGE_SHIFT); 1513 (resource_size(devmem->resource) >> PAGE_SHIFT);
@@ -1529,6 +1520,7 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
1529 devmem->pagemap.ref = &devmem->ref; 1520 devmem->pagemap.ref = &devmem->ref;
1530 devmem->pagemap.data = devmem; 1521 devmem->pagemap.data = devmem;
1531 devmem->pagemap.kill = hmm_devmem_ref_kill; 1522 devmem->pagemap.kill = hmm_devmem_ref_kill;
1523 devmem->pagemap.cleanup = hmm_devmem_ref_exit;
1532 1524
1533 result = devm_memremap_pages(devmem->device, &devmem->pagemap); 1525 result = devm_memremap_pages(devmem->device, &devmem->pagemap);
1534 if (IS_ERR(result)) 1526 if (IS_ERR(result))