pmem.c (e82a82c19f4272ea5437cc76e5711b98e2ee6223) pmem.c (f0c98ebc57c2d5e535bc4f9167f35650d2ba3c90)
1/*
2 * Copyright(c) 2016 Intel Corporation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of version 2 of the GNU General Public License as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but

--- 88 unchanged lines hidden (view full) ---

97
98 dax_pmem->dev = dev;
99 init_completion(&dax_pmem->cmp);
100 rc = percpu_ref_init(&dax_pmem->ref, dax_pmem_percpu_release, 0,
101 GFP_KERNEL);
102 if (rc)
103 return rc;
104
1/*
2 * Copyright(c) 2016 Intel Corporation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of version 2 of the GNU General Public License as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but

--- 88 unchanged lines hidden (view full) ---

97
98 dax_pmem->dev = dev;
99 init_completion(&dax_pmem->cmp);
100 rc = percpu_ref_init(&dax_pmem->ref, dax_pmem_percpu_release, 0,
101 GFP_KERNEL);
102 if (rc)
103 return rc;
104
105 rc = devm_add_action(dev, dax_pmem_percpu_exit, &dax_pmem->ref);
106 if (rc) {
107 dax_pmem_percpu_exit(&dax_pmem->ref);
105 rc = devm_add_action_or_reset(dev, dax_pmem_percpu_exit,
106 &dax_pmem->ref);
107 if (rc)
108 return rc;
108 return rc;
109 }
110
111 addr = devm_memremap_pages(dev, &res, &dax_pmem->ref, altmap);
112 if (IS_ERR(addr))
113 return PTR_ERR(addr);
114
109
110 addr = devm_memremap_pages(dev, &res, &dax_pmem->ref, altmap);
111 if (IS_ERR(addr))
112 return PTR_ERR(addr);
113
115 rc = devm_add_action(dev, dax_pmem_percpu_kill, &dax_pmem->ref);
116 if (rc) {
117 dax_pmem_percpu_kill(&dax_pmem->ref);
114 rc = devm_add_action_or_reset(dev, dax_pmem_percpu_kill,
115 &dax_pmem->ref);
116 if (rc)
118 return rc;
117 return rc;
119 }
120
121 nd_region = to_nd_region(dev->parent);
122 dax_region = alloc_dax_region(dev, nd_region->id, &res,
123 le32_to_cpu(pfn_sb->align), addr, PFN_DEV|PFN_MAP);
124 if (!dax_region)
125 return -ENOMEM;
126
127 /* TODO: support for subdividing a dax region... */

--- 31 unchanged lines hidden ---
118
119 nd_region = to_nd_region(dev->parent);
120 dax_region = alloc_dax_region(dev, nd_region->id, &res,
121 le32_to_cpu(pfn_sb->align), addr, PFN_DEV|PFN_MAP);
122 if (!dax_region)
123 return -ENOMEM;
124
125 /* TODO: support for subdividing a dax region... */

--- 31 unchanged lines hidden ---