hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/nvdimm/claim.c
....@@ -1,14 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright(c) 2013-2015 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
9
- * WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
- * General Public License for more details.
124 */
135 #include <linux/device.h>
146 #include <linux/sizes.h>
....@@ -276,7 +268,7 @@
276268 if (rw == READ) {
277269 if (unlikely(is_bad_pmem(&nsio->bb, sector, sz_align)))
278270 return -EIO;
279
- if (memcpy_mcsafe(buf, nsio->addr + offset, size) != 0)
271
+ if (copy_mc_to_kernel(buf, nsio->addr + offset, size) != 0)
280272 return -EIO;
281273 return 0;
282274 }
....@@ -308,15 +300,19 @@
308300 return rc;
309301 }
310302
311
-int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio)
303
+int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio,
304
+ resource_size_t size)
312305 {
313
- struct resource *res = &nsio->res;
314306 struct nd_namespace_common *ndns = &nsio->common;
307
+ struct range range = {
308
+ .start = nsio->res.start,
309
+ .end = nsio->res.end,
310
+ };
315311
316
- nsio->size = resource_size(res);
317
- if (!devm_request_mem_region(dev, res->start, resource_size(res),
312
+ nsio->size = size;
313
+ if (!devm_request_mem_region(dev, range.start, size,
318314 dev_name(&ndns->dev))) {
319
- dev_warn(dev, "could not reserve region %pR\n", res);
315
+ dev_warn(dev, "could not reserve region %pR\n", &nsio->res);
320316 return -EBUSY;
321317 }
322318
....@@ -324,14 +320,12 @@
324320 if (devm_init_badblocks(dev, &nsio->bb))
325321 return -ENOMEM;
326322 nvdimm_badblocks_populate(to_nd_region(ndns->dev.parent), &nsio->bb,
327
- &nsio->res);
323
+ &range);
328324
329
- nsio->addr = devm_memremap(dev, res->start, resource_size(res),
330
- ARCH_MEMREMAP_PMEM);
325
+ nsio->addr = devm_memremap(dev, range.start, size, ARCH_MEMREMAP_PMEM);
331326
332327 return PTR_ERR_OR_ZERO(nsio->addr);
333328 }
334
-EXPORT_SYMBOL_GPL(devm_nsio_enable);
335329
336330 void devm_nsio_disable(struct device *dev, struct nd_namespace_io *nsio)
337331 {
....@@ -339,6 +333,5 @@
339333
340334 devm_memunmap(dev, nsio->addr);
341335 devm_exit_badblocks(dev, &nsio->bb);
342
- devm_release_mem_region(dev, res->start, resource_size(res));
336
+ devm_release_mem_region(dev, res->start, nsio->size);
343337 }
344
-EXPORT_SYMBOL_GPL(devm_nsio_disable);