mirror of https://gitee.com/openkylin/linux.git
Merge branch 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
Pull libnvdimm fixes from Dan Williams: - Fix for the nd_blk (NVDIMM Block Window Aperture) driver. A spec clarification requires the driver to mask off reserved bits in status register. This is tagged for -stable back to the v4.2 kernel. - Fix for a kernel crash in the nvdimm unit tests when module loading is interrupted with SIGTERM. Tagged for -stable since validation efforts external to Intel use the unit tests for qualifying backports. - Add a new 'size' sysfs attribute for the BTT (NVDIMM Block Translation Table) driver to make it symmetric with the other namespace personality drivers (PFN and DAX) that provide a size attribute for indicating how much namespace capacity is lost to metadata. The BTT change arrived at the start of the merge window and has appeared in a -next release. It can technically wait for 4.9, but it is small, fixes asymmetry in the libnvdimm-sysfs interface, and something I would have squeezed into the v4.8 pull request had it arrived a few days earlier. * 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm: tools/testing/nvdimm: fix SIGTERM vs hotplug crash nvdimm, btt: add a size attribute for BTTs libnvdimm, nd_blk: mask off reserved status bits
This commit is contained in:
commit
c239ae1044
|
@ -1527,11 +1527,12 @@ static u32 read_blk_stat(struct nfit_blk *nfit_blk, unsigned int bw)
|
|||
{
|
||||
struct nfit_blk_mmio *mmio = &nfit_blk->mmio[DCR];
|
||||
u64 offset = nfit_blk->stat_offset + mmio->size * bw;
|
||||
const u32 STATUS_MASK = 0x80000037;
|
||||
|
||||
if (mmio->num_lines)
|
||||
offset = to_interleave_offset(offset, mmio);
|
||||
|
||||
return readl(mmio->addr.base + offset);
|
||||
return readl(mmio->addr.base + offset) & STATUS_MASK;
|
||||
}
|
||||
|
||||
static void write_blk_ctl(struct nfit_blk *nfit_blk, unsigned int bw,
|
||||
|
|
|
@ -1269,6 +1269,7 @@ static int btt_blk_init(struct btt *btt)
|
|||
}
|
||||
}
|
||||
set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9);
|
||||
btt->nd_btt->size = btt->nlba * (u64)btt->sector_size;
|
||||
revalidate_disk(btt->btt_disk);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -140,10 +140,30 @@ static ssize_t namespace_store(struct device *dev,
|
|||
}
|
||||
static DEVICE_ATTR_RW(namespace);
|
||||
|
||||
static ssize_t size_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct nd_btt *nd_btt = to_nd_btt(dev);
|
||||
ssize_t rc;
|
||||
|
||||
device_lock(dev);
|
||||
if (dev->driver)
|
||||
rc = sprintf(buf, "%llu\n", nd_btt->size);
|
||||
else {
|
||||
/* no size to convey if the btt instance is disabled */
|
||||
rc = -ENXIO;
|
||||
}
|
||||
device_unlock(dev);
|
||||
|
||||
return rc;
|
||||
}
|
||||
static DEVICE_ATTR_RO(size);
|
||||
|
||||
static struct attribute *nd_btt_attributes[] = {
|
||||
&dev_attr_sector_size.attr,
|
||||
&dev_attr_namespace.attr,
|
||||
&dev_attr_uuid.attr,
|
||||
&dev_attr_size.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
|
|
@ -143,6 +143,7 @@ struct nd_btt {
|
|||
struct nd_namespace_common *ndns;
|
||||
struct btt *btt;
|
||||
unsigned long lbasize;
|
||||
u64 size;
|
||||
u8 *uuid;
|
||||
int id;
|
||||
};
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/libnvdimm.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/device.h>
|
||||
|
@ -1474,6 +1475,7 @@ static int nfit_test_probe(struct platform_device *pdev)
|
|||
if (nfit_test->setup != nfit_test0_setup)
|
||||
return 0;
|
||||
|
||||
flush_work(&acpi_desc->work);
|
||||
nfit_test->setup_hotplug = 1;
|
||||
nfit_test->setup(nfit_test);
|
||||
|
||||
|
|
Loading…
Reference in New Issue