claim.c (e82a82c19f4272ea5437cc76e5711b98e2ee6223) | claim.c (f0c98ebc57c2d5e535bc4f9167f35650d2ba3c90) |
---|---|
1/* 2 * 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 --- 226 unchanged lines hidden (view full) --- 235 if (rw == READ) { 236 unsigned int sz_align = ALIGN(size + (offset & (512 - 1)), 512); 237 238 if (unlikely(is_bad_pmem(&nsio->bb, offset / 512, sz_align))) 239 return -EIO; 240 return memcpy_from_pmem(buf, nsio->addr + offset, size); 241 } else { 242 memcpy_to_pmem(nsio->addr + offset, buf, size); | 1/* 2 * 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 --- 226 unchanged lines hidden (view full) --- 235 if (rw == READ) { 236 unsigned int sz_align = ALIGN(size + (offset & (512 - 1)), 512); 237 238 if (unlikely(is_bad_pmem(&nsio->bb, offset / 512, sz_align))) 239 return -EIO; 240 return memcpy_from_pmem(buf, nsio->addr + offset, size); 241 } else { 242 memcpy_to_pmem(nsio->addr + offset, buf, size); |
243 wmb_pmem(); | 243 nvdimm_flush(to_nd_region(ndns->dev.parent)); |
244 } 245 246 return 0; 247} 248 249int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio) 250{ 251 struct resource *res = &nsio->res; --- 9 unchanged lines hidden (view full) --- 261 ndns->rw_bytes = nsio_rw_bytes; 262 if (devm_init_badblocks(dev, &nsio->bb)) 263 return -ENOMEM; 264 nvdimm_badblocks_populate(to_nd_region(ndns->dev.parent), &nsio->bb, 265 &nsio->res); 266 267 nsio->addr = devm_memremap(dev, res->start, resource_size(res), 268 ARCH_MEMREMAP_PMEM); | 244 } 245 246 return 0; 247} 248 249int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio) 250{ 251 struct resource *res = &nsio->res; --- 9 unchanged lines hidden (view full) --- 261 ndns->rw_bytes = nsio_rw_bytes; 262 if (devm_init_badblocks(dev, &nsio->bb)) 263 return -ENOMEM; 264 nvdimm_badblocks_populate(to_nd_region(ndns->dev.parent), &nsio->bb, 265 &nsio->res); 266 267 nsio->addr = devm_memremap(dev, res->start, resource_size(res), 268 ARCH_MEMREMAP_PMEM); |
269 if (IS_ERR(nsio->addr)) 270 return PTR_ERR(nsio->addr); 271 return 0; | 269 270 return PTR_ERR_OR_ZERO(nsio->addr); |
272} 273EXPORT_SYMBOL_GPL(devm_nsio_enable); 274 275void devm_nsio_disable(struct device *dev, struct nd_namespace_io *nsio) 276{ 277 struct resource *res = &nsio->res; 278 279 devm_memunmap(dev, nsio->addr); 280 devm_exit_badblocks(dev, &nsio->bb); 281 devm_release_mem_region(dev, res->start, resource_size(res)); 282} 283EXPORT_SYMBOL_GPL(devm_nsio_disable); | 271} 272EXPORT_SYMBOL_GPL(devm_nsio_enable); 273 274void devm_nsio_disable(struct device *dev, struct nd_namespace_io *nsio) 275{ 276 struct resource *res = &nsio->res; 277 278 devm_memunmap(dev, nsio->addr); 279 devm_exit_badblocks(dev, &nsio->bb); 280 devm_release_mem_region(dev, res->start, resource_size(res)); 281} 282EXPORT_SYMBOL_GPL(devm_nsio_disable); |