aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/platforms/Kconfig1
-rw-r--r--arch/powerpc/sysdev/axonram.c45
-rw-r--r--arch/x86/include/asm/pmem.h5
-rw-r--r--arch/x86/include/asm/string_64.h1
-rw-r--r--block/Kconfig1
-rw-r--r--block/partition-generic.c17
-rw-r--r--drivers/Makefile2
-rw-r--r--drivers/acpi/nfit/Kconfig12
-rw-r--r--drivers/acpi/nfit/core.c233
-rw-r--r--drivers/acpi/nfit/nfit.h4
-rw-r--r--drivers/block/Kconfig1
-rw-r--r--drivers/block/brd.c48
-rw-r--r--drivers/dax/Kconfig10
-rw-r--r--drivers/dax/Makefile5
-rw-r--r--drivers/dax/dax-private.h57
-rw-r--r--drivers/dax/dax.h15
-rw-r--r--drivers/dax/device-dax.h25
-rw-r--r--drivers/dax/device.c (renamed from drivers/dax/dax.c)501
-rw-r--r--drivers/dax/pmem.c10
-rw-r--r--drivers/dax/super.c425
-rw-r--r--drivers/md/Kconfig1
-rw-r--r--drivers/md/dm-core.h1
-rw-r--r--drivers/md/dm-linear.c27
-rw-r--r--drivers/md/dm-snap.c6
-rw-r--r--drivers/md/dm-stripe.c29
-rw-r--r--drivers/md/dm-target.c6
-rw-r--r--drivers/md/dm.c67
-rw-r--r--drivers/nvdimm/Kconfig1
-rw-r--r--drivers/nvdimm/btt_devs.c2
-rw-r--r--drivers/nvdimm/bus.c122
-rw-r--r--drivers/nvdimm/claim.c37
-rw-r--r--drivers/nvdimm/core.c51
-rw-r--r--drivers/nvdimm/dax_devs.c2
-rw-r--r--drivers/nvdimm/dimm.c2
-rw-r--r--drivers/nvdimm/dimm_devs.c19
-rw-r--r--drivers/nvdimm/namespace_devs.c17
-rw-r--r--drivers/nvdimm/nd-core.h1
-rw-r--r--drivers/nvdimm/nd.h2
-rw-r--r--drivers/nvdimm/pfn_devs.c8
-rw-r--r--drivers/nvdimm/pmem.c90
-rw-r--r--drivers/nvdimm/pmem.h7
-rw-r--r--drivers/nvdimm/region.c24
-rw-r--r--drivers/nvdimm/region_devs.c83
-rw-r--r--drivers/s390/block/Kconfig1
-rw-r--r--drivers/s390/block/dcssblk.c45
-rw-r--r--fs/block_dev.c117
-rw-r--r--fs/dax.c297
-rw-r--r--fs/ext2/inode.c9
-rw-r--r--fs/ext4/inode.c9
-rw-r--r--fs/iomap.c3
-rw-r--r--fs/xfs/xfs_iomap.c10
-rw-r--r--include/linux/blkdev.h19
-rw-r--r--include/linux/dax.h34
-rw-r--r--include/linux/device-mapper.h8
-rw-r--r--include/linux/iomap.h1
-rw-r--r--include/linux/libnvdimm.h8
-rw-r--r--include/linux/pmem.h23
-rw-r--r--include/linux/string.h8
-rw-r--r--include/uapi/linux/ndctl.h1
-rw-r--r--tools/testing/nvdimm/Kbuild11
-rw-r--r--tools/testing/nvdimm/dax-dev.c49
-rw-r--r--tools/testing/nvdimm/pmem-dax.c21
-rw-r--r--tools/testing/nvdimm/test/nfit.c54
63 files changed, 1807 insertions, 944 deletions
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 7e3a2ebba29b..33244e3d9375 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -284,6 +284,7 @@ config CPM2
284config AXON_RAM 284config AXON_RAM
285 tristate "Axon DDR2 memory device driver" 285 tristate "Axon DDR2 memory device driver"
286 depends on PPC_IBM_CELL_BLADE && BLOCK 286 depends on PPC_IBM_CELL_BLADE && BLOCK
287 select DAX
287 default m 288 default m
288 help 289 help
289 It registers one block device per Axon's DDR2 memory bank found 290 It registers one block device per Axon's DDR2 memory bank found
diff --git a/arch/powerpc/sysdev/axonram.c b/arch/powerpc/sysdev/axonram.c
index f523ac883150..a7fe5fee744f 100644
--- a/arch/powerpc/sysdev/axonram.c
+++ b/arch/powerpc/sysdev/axonram.c
@@ -25,6 +25,7 @@
25 25
26#include <linux/bio.h> 26#include <linux/bio.h>
27#include <linux/blkdev.h> 27#include <linux/blkdev.h>
28#include <linux/dax.h>
28#include <linux/device.h> 29#include <linux/device.h>
29#include <linux/errno.h> 30#include <linux/errno.h>
30#include <linux/fs.h> 31#include <linux/fs.h>
@@ -62,6 +63,7 @@ static int azfs_major, azfs_minor;
62struct axon_ram_bank { 63struct axon_ram_bank {
63 struct platform_device *device; 64 struct platform_device *device;
64 struct gendisk *disk; 65 struct gendisk *disk;
66 struct dax_device *dax_dev;
65 unsigned int irq_id; 67 unsigned int irq_id;
66 unsigned long ph_addr; 68 unsigned long ph_addr;
67 unsigned long io_addr; 69 unsigned long io_addr;
@@ -137,25 +139,32 @@ axon_ram_make_request(struct request_queue *queue, struct bio *bio)
137 return BLK_QC_T_NONE; 139 return BLK_QC_T_NONE;
138} 140}
139 141
140/** 142static const struct block_device_operations axon_ram_devops = {
141 * axon_ram_direct_access - direct_access() method for block device 143 .owner = THIS_MODULE,
142 * @device, @sector, @data: see block_device_operations method 144};
143 */ 145
144static long 146static long
145axon_ram_direct_access(struct block_device *device, sector_t sector, 147__axon_ram_direct_access(struct axon_ram_bank *bank, pgoff_t pgoff, long nr_pages,
146 void **kaddr, pfn_t *pfn, long size) 148 void **kaddr, pfn_t *pfn)
147{ 149{
148 struct axon_ram_bank *bank = device->bd_disk->private_data; 150 resource_size_t offset = pgoff * PAGE_SIZE;
149 loff_t offset = (loff_t)sector << AXON_RAM_SECTOR_SHIFT;
150 151
151 *kaddr = (void *) bank->io_addr + offset; 152 *kaddr = (void *) bank->io_addr + offset;
152 *pfn = phys_to_pfn_t(bank->ph_addr + offset, PFN_DEV); 153 *pfn = phys_to_pfn_t(bank->ph_addr + offset, PFN_DEV);
153 return bank->size - offset; 154 return (bank->size - offset) / PAGE_SIZE;
154} 155}
155 156
156static const struct block_device_operations axon_ram_devops = { 157static long
157 .owner = THIS_MODULE, 158axon_ram_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff, long nr_pages,
158 .direct_access = axon_ram_direct_access 159 void **kaddr, pfn_t *pfn)
160{
161 struct axon_ram_bank *bank = dax_get_private(dax_dev);
162
163 return __axon_ram_direct_access(bank, pgoff, nr_pages, kaddr, pfn);
164}
165
166static const struct dax_operations axon_ram_dax_ops = {
167 .direct_access = axon_ram_dax_direct_access,
159}; 168};
160 169
161/** 170/**
@@ -219,6 +228,7 @@ static int axon_ram_probe(struct platform_device *device)
219 goto failed; 228 goto failed;
220 } 229 }
221 230
231
222 bank->disk->major = azfs_major; 232 bank->disk->major = azfs_major;
223 bank->disk->first_minor = azfs_minor; 233 bank->disk->first_minor = azfs_minor;
224 bank->disk->fops = &axon_ram_devops; 234 bank->disk->fops = &axon_ram_devops;
@@ -227,6 +237,13 @@ static int axon_ram_probe(struct platform_device *device)
227 sprintf(bank->disk->disk_name, "%s%d", 237 sprintf(bank->disk->disk_name, "%s%d",
228 AXON_RAM_DEVICE_NAME, axon_ram_bank_id); 238 AXON_RAM_DEVICE_NAME, axon_ram_bank_id);
229 239
240 bank->dax_dev = alloc_dax(bank, bank->disk->disk_name,
241 &axon_ram_dax_ops);
242 if (!bank->dax_dev) {
243 rc = -ENOMEM;
244 goto failed;
245 }
246
230 bank->disk->queue = blk_alloc_queue(GFP_KERNEL); 247 bank->disk->queue = blk_alloc_queue(GFP_KERNEL);
231 if (bank->disk->queue == NULL) { 248 if (bank->disk->queue == NULL) {
232 dev_err(&device->dev, "Cannot register disk queue\n"); 249 dev_err(&device->dev, "Cannot register disk queue\n");
@@ -278,6 +295,8 @@ failed:
278 del_gendisk(bank->disk); 295 del_gendisk(bank->disk);
279 put_disk(bank->disk); 296