From: Jerome Glisse <jglisse@redhat.com>
To: Dave Hansen <dave.hansen@linux.intel.com>
Cc: thomas.lendacky@amd.com, dave@sr71.net,
linux-nvdimm@lists.01.org, tiwai@suse.de, ying.huang@intel.com,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
mhocko@suse.com, bp@suse.de, baiyaowei@cmss.chinamobile.com,
zwisler@kernel.org, bhelgaas@google.com, fengguang.wu@intel.com,
akpm@linux-foundation.org
Subject: Re: [PATCH 2/4] mm/memory-hotplug: allow memory resources to be children
Date: Wed, 16 Jan 2019 14:16:36 -0500 [thread overview]
Message-ID: <20190116191635.GD3617@redhat.com> (raw)
In-Reply-To: <20190116181902.670EEBC3@viggo.jf.intel.com>
On Wed, Jan 16, 2019 at 10:19:02AM -0800, Dave Hansen wrote:
>
> From: Dave Hansen <dave.hansen@linux.intel.com>
>
> The mm/resource.c code is used to manage the physical address
> space. We can view the current resource configuration in
> /proc/iomem. An example of this is at the bottom of this
> description.
>
> The nvdimm subsystem "owns" the physical address resources which
> map to persistent memory and has resources inserted for them as
> "Persistent Memory". We want to use this persistent memory, but
> as volatile memory, just like RAM. The best way to do this is
> to leave the existing resource in place, but add a "System RAM"
> resource underneath it. This clearly communicates the ownership
> relationship of this memory.
>
> The request_resource_conflict() API only deals with the
> top-level resources. Replace it with __request_region() which
> will search for !IORESOURCE_BUSY areas lower in the resource
> tree than the top level.
>
> We also rework the old error message a bit since we do not get
> the conflicting entry back: only an indication that we *had* a
> conflict.
We should keep the device private check (moving it in __request_region)
as device private can try to register un-use physical address (un-use
at time of device private registration) that latter can block valid
physical address the error message you are removing report such event.
>
> We *could* also simply truncate the existing top-level
> "Persistent Memory" resource and take over the released address
> space. But, this means that if we ever decide to hot-unplug the
> "RAM" and give it back, we need to recreate the original setup,
> which may mean going back to the BIOS tables.
>
> This should have no real effect on the existing collision
> detection because the areas that truly conflict should be marked
> IORESOURCE_BUSY.
Still i am worrying that this might allow device private to register
itself as a child of some un-busy resource as this patch obviously
change the behavior of register_memory_resource()
What about instead explicitly providing parent resource to add_memory()
and then to register_memory_resource() so if it is provided as an
argument (!NULL) then you can __request_region(arg_res, ...) otherwise
you keep existing code intact ?
Cheers,
Jérôme
>
> 00000000-00000fff : Reserved
> 00001000-0009fbff : System RAM
> 0009fc00-0009ffff : Reserved
> 000a0000-000bffff : PCI Bus 0000:00
> 000c0000-000c97ff : Video ROM
> 000c9800-000ca5ff : Adapter ROM
> 000f0000-000fffff : Reserved
> 000f0000-000fffff : System ROM
> 00100000-9fffffff : System RAM
> 01000000-01e071d0 : Kernel code
> 01e071d1-027dfdff : Kernel data
> 02dc6000-0305dfff : Kernel bss
> a0000000-afffffff : Persistent Memory (legacy)
> a0000000-a7ffffff : System RAM
> b0000000-bffdffff : System RAM
> bffe0000-bfffffff : Reserved
> c0000000-febfffff : PCI Bus 0000:00
>
> Cc: Dan Williams <dan.j.williams@intel.com>
> Cc: Dave Jiang <dave.jiang@intel.com>
> Cc: Ross Zwisler <zwisler@kernel.org>
> Cc: Vishal Verma <vishal.l.verma@intel.com>
> Cc: Tom Lendacky <thomas.lendacky@amd.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: linux-nvdimm@lists.01.org
> Cc: linux-kernel@vger.kernel.org
> Cc: linux-mm@kvack.org
> Cc: Huang Ying <ying.huang@intel.com>
> Cc: Fengguang Wu <fengguang.wu@intel.com>
>
> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
> ---
>
> b/mm/memory_hotplug.c | 31 ++++++++++++++-----------------
> 1 file changed, 14 insertions(+), 17 deletions(-)
>
> diff -puN mm/memory_hotplug.c~mm-memory-hotplug-allow-memory-resource-to-be-child mm/memory_hotplug.c
> --- a/mm/memory_hotplug.c~mm-memory-hotplug-allow-memory-resource-to-be-child 2018-12-20 11:48:42.317771933 -0800
> +++ b/mm/memory_hotplug.c 2018-12-20 11:48:42.322771933 -0800
> @@ -98,24 +98,21 @@ void mem_hotplug_done(void)
> /* add this memory to iomem resource */
> static struct resource *register_memory_resource(u64 start, u64 size)
> {
> - struct resource *res, *conflict;
> - res = kzalloc(sizeof(struct resource), GFP_KERNEL);
> - if (!res)
> - return ERR_PTR(-ENOMEM);
> + struct resource *res;
> + unsigned long flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
> + char *resource_name = "System RAM";
>
> - res->name = "System RAM";
> - res->start = start;
> - res->end = start + size - 1;
> - res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
> - conflict = request_resource_conflict(&iomem_resource, res);
> - if (conflict) {
> - if (conflict->desc == IORES_DESC_DEVICE_PRIVATE_MEMORY) {
> - pr_debug("Device unaddressable memory block "
> - "memory hotplug at %#010llx !\n",
> - (unsigned long long)start);
> - }
> - pr_debug("System RAM resource %pR cannot be added\n", res);
> - kfree(res);
> + /*
> + * Request ownership of the new memory range. This might be
> + * a child of an existing resource that was present but
> + * not marked as busy.
> + */
> + res = __request_region(&iomem_resource, start, size,
> + resource_name, flags);
> +
> + if (!res) {
> + pr_debug("Unable to reserve System RAM region: %016llx->%016llx\n",
> + start, start + size);
> return ERR_PTR(-EEXIST);
> }
> return res;
> _
>
_______________________________________________
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: Jerome Glisse <jglisse@redhat.com>
To: Dave Hansen <dave.hansen@linux.intel.com>
Cc: dave@sr71.net, dan.j.williams@intel.com, dave.jiang@intel.com,
zwisler@kernel.org, vishal.l.verma@intel.com,
thomas.lendacky@amd.com, akpm@linux-foundation.org,
mhocko@suse.com, linux-nvdimm@lists.01.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
ying.huang@intel.com, fengguang.wu@intel.com, bp@suse.de,
bhelgaas@google.com, baiyaowei@cmss.chinamobile.com,
tiwai@suse.de
Subject: Re: [PATCH 2/4] mm/memory-hotplug: allow memory resources to be children
Date: Wed, 16 Jan 2019 14:16:36 -0500 [thread overview]
Message-ID: <20190116191635.GD3617@redhat.com> (raw)
In-Reply-To: <20190116181902.670EEBC3@viggo.jf.intel.com>
On Wed, Jan 16, 2019 at 10:19:02AM -0800, Dave Hansen wrote:
>
> From: Dave Hansen <dave.hansen@linux.intel.com>
>
> The mm/resource.c code is used to manage the physical address
> space. We can view the current resource configuration in
> /proc/iomem. An example of this is at the bottom of this
> description.
>
> The nvdimm subsystem "owns" the physical address resources which
> map to persistent memory and has resources inserted for them as
> "Persistent Memory". We want to use this persistent memory, but
> as volatile memory, just like RAM. The best way to do this is
> to leave the existing resource in place, but add a "System RAM"
> resource underneath it. This clearly communicates the ownership
> relationship of this memory.
>
> The request_resource_conflict() API only deals with the
> top-level resources. Replace it with __request_region() which
> will search for !IORESOURCE_BUSY areas lower in the resource
> tree than the top level.
>
> We also rework the old error message a bit since we do not get
> the conflicting entry back: only an indication that we *had* a
> conflict.
We should keep the device private check (moving it in __request_region)
as device private can try to register un-use physical address (un-use
at time of device private registration) that latter can block valid
physical address the error message you are removing report such event.
>
> We *could* also simply truncate the existing top-level
> "Persistent Memory" resource and take over the released address
> space. But, this means that if we ever decide to hot-unplug the
> "RAM" and give it back, we need to recreate the original setup,
> which may mean going back to the BIOS tables.
>
> This should have no real effect on the existing collision
> detection because the areas that truly conflict should be marked
> IORESOURCE_BUSY.
Still i am worrying that this might allow device private to register
itself as a child of some un-busy resource as this patch obviously
change the behavior of register_memory_resource()
What about instead explicitly providing parent resource to add_memory()
and then to register_memory_resource() so if it is provided as an
argument (!NULL) then you can __request_region(arg_res, ...) otherwise
you keep existing code intact ?
Cheers,
Jérôme
>
> 00000000-00000fff : Reserved
> 00001000-0009fbff : System RAM
> 0009fc00-0009ffff : Reserved
> 000a0000-000bffff : PCI Bus 0000:00
> 000c0000-000c97ff : Video ROM
> 000c9800-000ca5ff : Adapter ROM
> 000f0000-000fffff : Reserved
> 000f0000-000fffff : System ROM
> 00100000-9fffffff : System RAM
> 01000000-01e071d0 : Kernel code
> 01e071d1-027dfdff : Kernel data
> 02dc6000-0305dfff : Kernel bss
> a0000000-afffffff : Persistent Memory (legacy)
> a0000000-a7ffffff : System RAM
> b0000000-bffdffff : System RAM
> bffe0000-bfffffff : Reserved
> c0000000-febfffff : PCI Bus 0000:00
>
> Cc: Dan Williams <dan.j.williams@intel.com>
> Cc: Dave Jiang <dave.jiang@intel.com>
> Cc: Ross Zwisler <zwisler@kernel.org>
> Cc: Vishal Verma <vishal.l.verma@intel.com>
> Cc: Tom Lendacky <thomas.lendacky@amd.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: linux-nvdimm@lists.01.org
> Cc: linux-kernel@vger.kernel.org
> Cc: linux-mm@kvack.org
> Cc: Huang Ying <ying.huang@intel.com>
> Cc: Fengguang Wu <fengguang.wu@intel.com>
>
> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
> ---
>
> b/mm/memory_hotplug.c | 31 ++++++++++++++-----------------
> 1 file changed, 14 insertions(+), 17 deletions(-)
>
> diff -puN mm/memory_hotplug.c~mm-memory-hotplug-allow-memory-resource-to-be-child mm/memory_hotplug.c
> --- a/mm/memory_hotplug.c~mm-memory-hotplug-allow-memory-resource-to-be-child 2018-12-20 11:48:42.317771933 -0800
> +++ b/mm/memory_hotplug.c 2018-12-20 11:48:42.322771933 -0800
> @@ -98,24 +98,21 @@ void mem_hotplug_done(void)
> /* add this memory to iomem resource */
> static struct resource *register_memory_resource(u64 start, u64 size)
> {
> - struct resource *res, *conflict;
> - res = kzalloc(sizeof(struct resource), GFP_KERNEL);
> - if (!res)
> - return ERR_PTR(-ENOMEM);
> + struct resource *res;
> + unsigned long flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
> + char *resource_name = "System RAM";
>
> - res->name = "System RAM";
> - res->start = start;
> - res->end = start + size - 1;
> - res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
> - conflict = request_resource_conflict(&iomem_resource, res);
> - if (conflict) {
> - if (conflict->desc == IORES_DESC_DEVICE_PRIVATE_MEMORY) {
> - pr_debug("Device unaddressable memory block "
> - "memory hotplug at %#010llx !\n",
> - (unsigned long long)start);
> - }
> - pr_debug("System RAM resource %pR cannot be added\n", res);
> - kfree(res);
> + /*
> + * Request ownership of the new memory range. This might be
> + * a child of an existing resource that was present but
> + * not marked as busy.
> + */
> + res = __request_region(&iomem_resource, start, size,
> + resource_name, flags);
> +
> + if (!res) {
> + pr_debug("Unable to reserve System RAM region: %016llx->%016llx\n",
> + start, start + size);
> return ERR_PTR(-EEXIST);
> }
> return res;
> _
>
next prev parent reply other threads:[~2019-01-16 19:16 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-16 18:18 [PATCH 0/4] Allow persistent memory to be used like normal RAM Dave Hansen
2019-01-16 18:18 ` Dave Hansen
2019-01-16 18:18 ` Dave Hansen
2019-01-16 18:19 ` [PATCH 1/4] mm/resource: return real error codes from walk failures Dave Hansen
2019-01-16 18:19 ` Dave Hansen
2019-01-16 18:19 ` Dave Hansen
[not found] ` <20190116181901.CAF85066-LXbPSdftPKxrdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2019-01-16 20:38 ` Bjorn Helgaas
2019-01-16 20:38 ` Bjorn Helgaas
2019-01-16 18:19 ` [PATCH 2/4] mm/memory-hotplug: allow memory resources to be children Dave Hansen
2019-01-16 18:19 ` Dave Hansen
2019-01-16 18:19 ` Dave Hansen
2019-01-16 19:16 ` Jerome Glisse [this message]
2019-01-16 19:16 ` Jerome Glisse
2019-01-16 23:01 ` Dave Hansen
2019-01-16 23:01 ` Dave Hansen
2019-01-16 23:38 ` Jerome Glisse
2019-01-16 23:38 ` Jerome Glisse
2019-01-23 20:03 ` Dave Hansen
2019-01-23 20:03 ` Dave Hansen
2019-01-23 20:15 ` Jerome Glisse
2019-01-23 20:15 ` Jerome Glisse
2019-01-18 19:58 ` Dave Hansen
2019-01-18 19:58 ` Dave Hansen
2019-01-18 20:26 ` Jerome Glisse
2019-01-18 20:26 ` Jerome Glisse
2019-01-23 17:05 ` Michal Hocko
2019-01-16 18:19 ` [PATCH 3/4] dax/kmem: let walk_system_ram_range() search child resources Dave Hansen
2019-01-16 18:19 ` Dave Hansen
2019-01-16 18:19 ` Dave Hansen
[not found] ` <20190116181859.D1504459-LXbPSdftPKxrdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2019-01-16 18:19 ` [PATCH 4/4] dax: "Hotplug" persistent memory for use like normal RAM Dave Hansen
2019-01-16 18:19 ` Dave Hansen
2019-01-16 18:19 ` Dave Hansen
2019-01-16 21:16 ` Bjorn Helgaas
2019-01-16 21:40 ` Dave Hansen
2019-01-16 21:40 ` Dave Hansen
[not found] ` <98ab9bc8-8a17-297c-da7c-2e6b5a03ef24-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2019-01-16 21:44 ` Bjorn Helgaas
2019-01-16 21:44 ` Bjorn Helgaas
2019-01-16 22:06 ` Dan Williams
2019-01-16 22:06 ` Dan Williams
2019-01-16 21:53 ` Dave Hansen
2019-01-16 21:53 ` Dave Hansen
2019-01-16 21:59 ` Bjorn Helgaas
2019-01-16 21:31 ` Dan Williams
2019-01-16 21:31 ` Dan Williams
2019-01-17 5:21 ` Du, Fan
2019-01-17 5:21 ` Du, Fan
2019-01-17 16:56 ` Dan Williams
2019-01-17 16:56 ` Dan Williams
2019-01-17 8:19 ` Yanmin Zhang
2019-01-17 8:19 ` Yanmin Zhang
2019-01-17 15:17 ` Dave Hansen
2019-01-18 7:47 ` Yanmin Zhang
2019-01-18 7:47 ` Yanmin Zhang
2019-01-18 15:20 ` Dave Hansen
2019-01-17 16:29 ` [PATCH 0/4] Allow persistent memory to be used " Jeff Moyer
2019-01-17 16:29 ` Jeff Moyer
2019-01-17 16:47 ` Keith Busch
2019-01-17 16:47 ` Keith Busch
2019-01-17 17:20 ` Jeff Moyer
2019-01-17 19:34 ` Keith Busch
2019-01-17 19:34 ` Keith Busch
2019-01-17 21:57 ` Jeff Moyer
2019-01-17 21:57 ` Jeff Moyer
2019-01-18 11:48 ` Fengguang Wu
2019-01-18 11:48 ` Fengguang Wu
2019-01-17 16:50 ` Dan Williams
2019-01-17 16:50 ` Dan Williams
2019-01-17 22:43 ` Dave Hansen
2019-01-17 22:43 ` Dave Hansen
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=20190116191635.GD3617@redhat.com \
--to=jglisse@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=baiyaowei@cmss.chinamobile.com \
--cc=bhelgaas@google.com \
--cc=bp@suse.de \
--cc=dave.hansen@linux.intel.com \
--cc=dave@sr71.net \
--cc=fengguang.wu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-nvdimm@lists.01.org \
--cc=mhocko@suse.com \
--cc=thomas.lendacky@amd.com \
--cc=tiwai@suse.de \
--cc=ying.huang@intel.com \
--cc=zwisler@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.