All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: Jonathan Cameron <jonathan.cameron@huawei.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>,
	kbuild test robot <lkp@intel.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Peter Zijlstra <peterz@infradead.org>, X86 ML <x86@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux ACPI <linux-acpi@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-nvdimm <linux-nvdimm@lists.01.org>
Subject: Re: [PATCH v4 08/10] device-dax: Add a driver for "hmem" devices
Date: Tue, 25 Jun 2019 13:07:41 -0700	[thread overview]
Message-ID: <CAPcyv4jXVroB3j6VQ2iCzjAhuL4wExHQvNqa4KMep2o2-2ihEQ@mail.gmail.com> (raw)
In-Reply-To: <20190625163756.00001a85@huawei.com>

On Tue, Jun 25, 2019 at 8:39 AM Jonathan Cameron
<jonathan.cameron@huawei.com> wrote:
>
> On Mon, 24 Jun 2019 11:20:16 -0700
> Dan Williams <dan.j.williams@intel.com> wrote:
>
> > Platform firmware like EFI/ACPI may publish "hmem" platform devices.
> > Such a device is a performance differentiated memory range likely
> > reserved for an application specific use case. The driver gives access
> > to 100% of the capacity via a device-dax mmap instance by default.
> >
> > However, if over-subscription and other kernel memory management is
> > desired the resulting dax device can be assigned to the core-mm via the
> > kmem driver.
> >
> > This consumes "hmem" devices the producer of "hmem" devices is saved for
> > a follow-on patch so that it can reference the new CONFIG_DEV_DAX_HMEM
> > symbol to gate performing the enumeration work.
> >
> > Cc: Vishal Verma <vishal.l.verma@intel.com>
> > Cc: Keith Busch <keith.busch@intel.com>
> > Cc: Dave Jiang <dave.jiang@intel.com>
> > Reported-by: kbuild test robot <lkp@intel.com>
> > Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
> > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> No need to have a remove function at all.  Otherwise this looks good to me.
>
> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> > ---
> >  drivers/dax/Kconfig    |   27 +++++++++++++++++++----
> >  drivers/dax/Makefile   |    2 ++
> >  drivers/dax/hmem.c     |   57 ++++++++++++++++++++++++++++++++++++++++++++++++
> >  include/linux/ioport.h |    4 +++
> >  4 files changed, 85 insertions(+), 5 deletions(-)
> >  create mode 100644 drivers/dax/hmem.c
> >
> > diff --git a/drivers/dax/Kconfig b/drivers/dax/Kconfig
> > index f33c73e4af41..1a59ef86f148 100644
> > --- a/drivers/dax/Kconfig
> > +++ b/drivers/dax/Kconfig
> > @@ -32,19 +32,36 @@ config DEV_DAX_PMEM
> >
> >         Say M if unsure
> >
> > +config DEV_DAX_HMEM
> > +     tristate "HMEM DAX: direct access to 'specific purpose' memory"
> > +     depends on EFI_APPLICATION_RESERVED
> > +     default DEV_DAX
> > +     help
> > +       EFI 2.8 platforms, and others, may advertise 'specific purpose'
> > +       memory.  For example, a high bandwidth memory pool. The
> > +       indication from platform firmware is meant to reserve the
> > +       memory from typical usage by default.  This driver creates
> > +       device-dax instances for these memory ranges, and that also
> > +       enables the possibility to assign them to the DEV_DAX_KMEM
> > +       driver to override the reservation and add them to kernel
> > +       "System RAM" pool.
> > +
> > +       Say M if unsure.
> > +
> >  config DEV_DAX_KMEM
> >       tristate "KMEM DAX: volatile-use of persistent memory"
> >       default DEV_DAX
> >       depends on DEV_DAX
> >       depends on MEMORY_HOTPLUG # for add_memory() and friends
> >       help
> > -       Support access to persistent memory as if it were RAM.  This
> > -       allows easier use of persistent memory by unmodified
> > -       applications.
> > +       Support access to persistent, or other performance
> > +       differentiated memory as if it were System RAM. This allows
> > +       easier use of persistent memory by unmodified applications, or
> > +       adds core kernel memory services to heterogeneous memory types
> > +       (HMEM) marked "reserved" by platform firmware.
> >
> >         To use this feature, a DAX device must be unbound from the
> > -       device_dax driver (PMEM DAX) and bound to this kmem driver
> > -       on each boot.
> > +       device_dax driver and bound to this kmem driver on each boot.
> >
> >         Say N if unsure.
> >
> > diff --git a/drivers/dax/Makefile b/drivers/dax/Makefile
> > index 81f7d54dadfb..80065b38b3c4 100644
> > --- a/drivers/dax/Makefile
> > +++ b/drivers/dax/Makefile
> > @@ -2,9 +2,11 @@
> >  obj-$(CONFIG_DAX) += dax.o
> >  obj-$(CONFIG_DEV_DAX) += device_dax.o
> >  obj-$(CONFIG_DEV_DAX_KMEM) += kmem.o
> > +obj-$(CONFIG_DEV_DAX_HMEM) += dax_hmem.o
> >
> >  dax-y := super.o
> >  dax-y += bus.o
> >  device_dax-y := device.o
> > +dax_hmem-y := hmem.o
> >
> >  obj-y += pmem/
> > diff --git a/drivers/dax/hmem.c b/drivers/dax/hmem.c
> > new file mode 100644
> > index 000000000000..62f9e3c80e21
> > --- /dev/null
> > +++ b/drivers/dax/hmem.c
> > @@ -0,0 +1,57 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +#include <linux/platform_device.h>
> > +#include <linux/ioport.h>
> > +#include <linux/module.h>
> > +#include <linux/pfn_t.h>
> > +#include "bus.h"
> > +
> > +static int dax_hmem_probe(struct platform_device *pdev)
> > +{
> > +     struct dev_pagemap pgmap = { NULL };
> > +     struct device *dev = &pdev->dev;
> > +     struct dax_region *dax_region;
> > +     struct memregion_info *mri;
> > +     struct dev_dax *dev_dax;
> > +     struct resource *res;
> > +
> > +     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > +     if (!res)
> > +             return -ENOMEM;
> > +
> > +     mri = dev->platform_data;
> > +     pgmap.dev = dev;
> > +     memcpy(&pgmap.res, res, sizeof(*res));
> > +
> > +     dax_region = alloc_dax_region(dev, pdev->id, res, mri->target_node,
> > +                     PMD_SIZE, PFN_DEV|PFN_MAP);
> > +     if (!dax_region)
> > +             return -ENOMEM;
> > +
> > +     dev_dax = devm_create_dev_dax(dax_region, 0, &pgmap);
> > +     if (IS_ERR(dev_dax))
> > +             return PTR_ERR(dev_dax);
> > +
> > +     /* child dev_dax instances now own the lifetime of the dax_region */
> > +     dax_region_put(dax_region);
> > +     return 0;
> > +}
> > +
> > +static int dax_hmem_remove(struct platform_device *pdev)
> > +{
> > +     /* devm handles teardown */
> > +     return 0;
>
> Why have a remove at all?  driver/base/platform.c has
> the appropriate protections to allow you to not provide one.
> If you want the comment, just put it after .probe =
> below.

True, that's a good cleanup.
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

WARNING: multiple messages have this Message-ID (diff)
From: Dan Williams <dan.j.williams@intel.com>
To: Jonathan Cameron <jonathan.cameron@huawei.com>
Cc: X86 ML <x86@kernel.org>, Vishal Verma <vishal.l.verma@intel.com>,
	Keith Busch <keith.busch@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	kbuild test robot <lkp@intel.com>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Linux ACPI <linux-acpi@vger.kernel.org>,
	linux-nvdimm <linux-nvdimm@lists.01.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v4 08/10] device-dax: Add a driver for "hmem" devices
Date: Tue, 25 Jun 2019 13:07:41 -0700	[thread overview]
Message-ID: <CAPcyv4jXVroB3j6VQ2iCzjAhuL4wExHQvNqa4KMep2o2-2ihEQ@mail.gmail.com> (raw)
In-Reply-To: <20190625163756.00001a85@huawei.com>

On Tue, Jun 25, 2019 at 8:39 AM Jonathan Cameron
<jonathan.cameron@huawei.com> wrote:
>
> On Mon, 24 Jun 2019 11:20:16 -0700
> Dan Williams <dan.j.williams@intel.com> wrote:
>
> > Platform firmware like EFI/ACPI may publish "hmem" platform devices.
> > Such a device is a performance differentiated memory range likely
> > reserved for an application specific use case. The driver gives access
> > to 100% of the capacity via a device-dax mmap instance by default.
> >
> > However, if over-subscription and other kernel memory management is
> > desired the resulting dax device can be assigned to the core-mm via the
> > kmem driver.
> >
> > This consumes "hmem" devices the producer of "hmem" devices is saved for
> > a follow-on patch so that it can reference the new CONFIG_DEV_DAX_HMEM
> > symbol to gate performing the enumeration work.
> >
> > Cc: Vishal Verma <vishal.l.verma@intel.com>
> > Cc: Keith Busch <keith.busch@intel.com>
> > Cc: Dave Jiang <dave.jiang@intel.com>
> > Reported-by: kbuild test robot <lkp@intel.com>
> > Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
> > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> No need to have a remove function at all.  Otherwise this looks good to me.
>
> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> > ---
> >  drivers/dax/Kconfig    |   27 +++++++++++++++++++----
> >  drivers/dax/Makefile   |    2 ++
> >  drivers/dax/hmem.c     |   57 ++++++++++++++++++++++++++++++++++++++++++++++++
> >  include/linux/ioport.h |    4 +++
> >  4 files changed, 85 insertions(+), 5 deletions(-)
> >  create mode 100644 drivers/dax/hmem.c
> >
> > diff --git a/drivers/dax/Kconfig b/drivers/dax/Kconfig
> > index f33c73e4af41..1a59ef86f148 100644
> > --- a/drivers/dax/Kconfig
> > +++ b/drivers/dax/Kconfig
> > @@ -32,19 +32,36 @@ config DEV_DAX_PMEM
> >
> >         Say M if unsure
> >
> > +config DEV_DAX_HMEM
> > +     tristate "HMEM DAX: direct access to 'specific purpose' memory"
> > +     depends on EFI_APPLICATION_RESERVED
> > +     default DEV_DAX
> > +     help
> > +       EFI 2.8 platforms, and others, may advertise 'specific purpose'
> > +       memory.  For example, a high bandwidth memory pool. The
> > +       indication from platform firmware is meant to reserve the
> > +       memory from typical usage by default.  This driver creates
> > +       device-dax instances for these memory ranges, and that also
> > +       enables the possibility to assign them to the DEV_DAX_KMEM
> > +       driver to override the reservation and add them to kernel
> > +       "System RAM" pool.
> > +
> > +       Say M if unsure.
> > +
> >  config DEV_DAX_KMEM
> >       tristate "KMEM DAX: volatile-use of persistent memory"
> >       default DEV_DAX
> >       depends on DEV_DAX
> >       depends on MEMORY_HOTPLUG # for add_memory() and friends
> >       help
> > -       Support access to persistent memory as if it were RAM.  This
> > -       allows easier use of persistent memory by unmodified
> > -       applications.
> > +       Support access to persistent, or other performance
> > +       differentiated memory as if it were System RAM. This allows
> > +       easier use of persistent memory by unmodified applications, or
> > +       adds core kernel memory services to heterogeneous memory types
> > +       (HMEM) marked "reserved" by platform firmware.
> >
> >         To use this feature, a DAX device must be unbound from the
> > -       device_dax driver (PMEM DAX) and bound to this kmem driver
> > -       on each boot.
> > +       device_dax driver and bound to this kmem driver on each boot.
> >
> >         Say N if unsure.
> >
> > diff --git a/drivers/dax/Makefile b/drivers/dax/Makefile
> > index 81f7d54dadfb..80065b38b3c4 100644
> > --- a/drivers/dax/Makefile
> > +++ b/drivers/dax/Makefile
> > @@ -2,9 +2,11 @@
> >  obj-$(CONFIG_DAX) += dax.o
> >  obj-$(CONFIG_DEV_DAX) += device_dax.o
> >  obj-$(CONFIG_DEV_DAX_KMEM) += kmem.o
> > +obj-$(CONFIG_DEV_DAX_HMEM) += dax_hmem.o
> >
> >  dax-y := super.o
> >  dax-y += bus.o
> >  device_dax-y := device.o
> > +dax_hmem-y := hmem.o
> >
> >  obj-y += pmem/
> > diff --git a/drivers/dax/hmem.c b/drivers/dax/hmem.c
> > new file mode 100644
> > index 000000000000..62f9e3c80e21
> > --- /dev/null
> > +++ b/drivers/dax/hmem.c
> > @@ -0,0 +1,57 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +#include <linux/platform_device.h>
> > +#include <linux/ioport.h>
> > +#include <linux/module.h>
> > +#include <linux/pfn_t.h>
> > +#include "bus.h"
> > +
> > +static int dax_hmem_probe(struct platform_device *pdev)
> > +{
> > +     struct dev_pagemap pgmap = { NULL };
> > +     struct device *dev = &pdev->dev;
> > +     struct dax_region *dax_region;
> > +     struct memregion_info *mri;
> > +     struct dev_dax *dev_dax;
> > +     struct resource *res;
> > +
> > +     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > +     if (!res)
> > +             return -ENOMEM;
> > +
> > +     mri = dev->platform_data;
> > +     pgmap.dev = dev;
> > +     memcpy(&pgmap.res, res, sizeof(*res));
> > +
> > +     dax_region = alloc_dax_region(dev, pdev->id, res, mri->target_node,
> > +                     PMD_SIZE, PFN_DEV|PFN_MAP);
> > +     if (!dax_region)
> > +             return -ENOMEM;
> > +
> > +     dev_dax = devm_create_dev_dax(dax_region, 0, &pgmap);
> > +     if (IS_ERR(dev_dax))
> > +             return PTR_ERR(dev_dax);
> > +
> > +     /* child dev_dax instances now own the lifetime of the dax_region */
> > +     dax_region_put(dax_region);
> > +     return 0;
> > +}
> > +
> > +static int dax_hmem_remove(struct platform_device *pdev)
> > +{
> > +     /* devm handles teardown */
> > +     return 0;
>
> Why have a remove at all?  driver/base/platform.c has
> the appropriate protections to allow you to not provide one.
> If you want the comment, just put it after .probe =
> below.

True, that's a good cleanup.

  reply	other threads:[~2019-06-25 20:07 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-24 18:19 [PATCH v4 00/10] EFI Specific Purpose Memory Support Dan Williams
2019-06-24 18:19 ` Dan Williams
2019-06-24 18:19 ` [PATCH v4 01/10] acpi/numa: Establish a new drivers/acpi/numa/ directory Dan Williams
2019-06-24 18:19   ` Dan Williams
2019-06-25 14:59   ` Jonathan Cameron
2019-06-25 14:59     ` Jonathan Cameron
2019-06-25 16:02     ` Dan Williams
2019-06-25 16:02       ` Dan Williams
2019-07-03 11:09   ` Rafael J. Wysocki
2019-07-03 11:09     ` Rafael J. Wysocki
2019-06-24 18:19 ` [PATCH v4 02/10] acpi/numa/hmat: Skip publishing target info for nodes with no online memory Dan Williams
2019-06-24 18:19   ` Dan Williams
2019-07-03 11:10   ` Rafael J. Wysocki
2019-07-03 11:10     ` Rafael J. Wysocki
2019-06-24 18:19 ` [PATCH v4 03/10] efi: Enumerate EFI_MEMORY_SP Dan Williams
2019-06-24 18:19   ` Dan Williams
2019-06-24 18:19 ` [PATCH v4 04/10] x86, efi: Push EFI_MEMMAP check into leaf routines Dan Williams
2019-06-24 18:19   ` Dan Williams
2019-06-24 18:19 ` [PATCH v4 05/10] x86, efi: Reserve UEFI 2.8 Specific Purpose Memory for dax Dan Williams
2019-06-24 18:19   ` Dan Williams
2019-06-25 15:26   ` Jonathan Cameron
2019-06-25 15:26     ` Jonathan Cameron
2019-06-24 18:20 ` [PATCH v4 06/10] x86, efi: Add efi_fake_mem support for EFI_MEMORY_SP Dan Williams
2019-06-24 18:20   ` Dan Williams
2019-06-24 18:20 ` [PATCH v4 07/10] resource: Uplevel the pmem "region" ida to a global allocator Dan Williams
2019-06-24 18:20   ` Dan Williams
2019-06-24 18:20 ` [PATCH v4 08/10] device-dax: Add a driver for "hmem" devices Dan Williams
2019-06-24 18:20   ` Dan Williams
2019-06-25 15:37   ` Jonathan Cameron
2019-06-25 15:37     ` Jonathan Cameron
2019-06-25 20:07     ` Dan Williams [this message]
2019-06-25 20:07       ` Dan Williams
2019-06-24 18:20 ` [PATCH v4 09/10] acpi/numa/hmat: Register HMAT at device_initcall level Dan Williams
2019-06-24 18:20   ` Dan Williams
2019-07-03 11:12   ` Rafael J. Wysocki
2019-07-03 11:12     ` Rafael J. Wysocki
2019-06-24 18:20 ` [PATCH v4 10/10] acpi/numa/hmat: Register "specific purpose" memory as an "hmem" device Dan Williams
2019-06-24 18:20   ` Dan Williams
2019-06-25 15:58   ` Jonathan Cameron
2019-06-25 15:58     ` Jonathan Cameron
2019-07-03 11:17   ` Rafael J. Wysocki
2019-07-03 11:17     ` Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPcyv4jXVroB3j6VQ2iCzjAhuL4wExHQvNqa4KMep2o2-2ihEQ@mail.gmail.com \
    --to=dan.j.williams@intel.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=jonathan.cameron@huawei.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=lkp@intel.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.