diff options
Diffstat (limited to 'mm/hmm.c')
-rw-r--r-- | mm/hmm.c | 14 |
1 files changed, 3 insertions, 11 deletions
@@ -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 | ||
1357 | static void hmm_devmem_ref_exit(void *data) | 1357 | static 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)) |