On Thu, Oct 5, 2017 at 6:53 PM, Vishal Verma <vishal.l.ve...@intel.com> wrote:
> From: Dave Jiang <dave.ji...@intel.com>
>
> From: Dave Jiang <dave.ji...@intel.com>
>
> nfit_test needs to use the poison list manipulation code as well. Make
> it more generic and in the process rename poison to badrange, and move
> all the related helpers to a new file.
>
> Signed-off-by: Dave Jiang <dave.ji...@intel.com>
> [vishal: add a missed include in bus.c for the new badrange functions]
> Signed-off-by: Vishal Verma <vishal.l.ve...@intel.com>
> ---
>  drivers/acpi/nfit/core.c  |   2 +-
>  drivers/acpi/nfit/mce.c   |   2 +-
>  drivers/nvdimm/Makefile   |   1 +
>  drivers/nvdimm/badrange.c | 294 
> ++++++++++++++++++++++++++++++++++++++++++++++
>  drivers/nvdimm/bus.c      |  24 ++--
>  drivers/nvdimm/core.c     | 260 +---------------------------------------
>  drivers/nvdimm/nd-core.h  |   3 +-
>  drivers/nvdimm/nd.h       |   6 -
>  include/linux/libnvdimm.h |  21 +++-
>  9 files changed, 331 insertions(+), 282 deletions(-)
>  create mode 100644 drivers/nvdimm/badrange.c
>
> diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
> index a3ecd5e..4b157f8 100644
> --- a/drivers/acpi/nfit/core.c
> +++ b/drivers/acpi/nfit/core.c
> @@ -2240,7 +2240,7 @@ static int ars_status_process_records(struct 
> acpi_nfit_desc *acpi_desc,
>                 if (ars_status->out_length
>                                 < 44 + sizeof(struct nd_ars_record) * (i + 1))
>                         break;
> -               rc = nvdimm_bus_add_poison(nvdimm_bus,
> +               rc = nvdimm_bus_add_badrange(nvdimm_bus,
>                                 ars_status->records[i].err_address,
>                                 ars_status->records[i].length);
>                 if (rc)
> diff --git a/drivers/acpi/nfit/mce.c b/drivers/acpi/nfit/mce.c
> index feeb95d..b929214 100644
> --- a/drivers/acpi/nfit/mce.c
> +++ b/drivers/acpi/nfit/mce.c
> @@ -67,7 +67,7 @@ static int nfit_handle_mce(struct notifier_block *nb, 
> unsigned long val,
>                         continue;
>
>                 /* If this fails due to an -ENOMEM, there is little we can do 
> */
> -               nvdimm_bus_add_poison(acpi_desc->nvdimm_bus,
> +               nvdimm_bus_add_badrange(acpi_desc->nvdimm_bus,
>                                 ALIGN(mce->addr, L1_CACHE_BYTES),
>                                 L1_CACHE_BYTES);
>                 nvdimm_region_notify(nfit_spa->nd_region,
> diff --git a/drivers/nvdimm/Makefile b/drivers/nvdimm/Makefile
> index 909554c..ca6d325 100644
> --- a/drivers/nvdimm/Makefile
> +++ b/drivers/nvdimm/Makefile
> @@ -20,6 +20,7 @@ libnvdimm-y += region_devs.o
>  libnvdimm-y += region.o
>  libnvdimm-y += namespace_devs.o
>  libnvdimm-y += label.o
> +libnvdimm-y += badrange.o
>  libnvdimm-$(CONFIG_ND_CLAIM) += claim.o
>  libnvdimm-$(CONFIG_BTT) += btt_devs.o
>  libnvdimm-$(CONFIG_NVDIMM_PFN) += pfn_devs.o
> diff --git a/drivers/nvdimm/badrange.c b/drivers/nvdimm/badrange.c
> new file mode 100644
> index 0000000..6ad782f
> --- /dev/null
> +++ b/drivers/nvdimm/badrange.c
> @@ -0,0 +1,294 @@
> +/*
> + * Copyright(c) 2017 Intel Corporation. All rights reserved.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of version 2 of the GNU General Public License as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * General Public License for more details.
> + */
> +#include <linux/libnvdimm.h>
> +#include <linux/badblocks.h>
> +#include <linux/export.h>
> +#include <linux/module.h>
> +#include <linux/blkdev.h>
> +#include <linux/device.h>
> +#include <linux/ctype.h>
> +#include <linux/ndctl.h>
> +#include <linux/mutex.h>
> +#include <linux/slab.h>
> +#include <linux/io.h>
> +#include "nd-core.h"
> +#include "nd.h"
> +
> +void badrange_init(struct badrange *badrange)
> +{
> +       INIT_LIST_HEAD(&badrange->list);
> +       spin_lock_init(&badrange->lock);
> +}
> +EXPORT_SYMBOL_GPL(badrange_init);
> +
> +static void append_badrange_entry(struct badrange *badrange,
> +               struct badrange_entry *be, u64 addr, u64 length)
> +{
> +       lockdep_assert_held(&badrange->lock);
> +       be->start = addr;
> +       be->length = length;
> +       list_add_tail(&be->list, &badrange->list);
> +}

Small nit, can we rename the instance variable from 'be' to 'bre'?
'be' triggers all my 'big endian' neurons to fire. Other than that,
looks good.
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to