All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: Oscar Salvador <osalvador@suse.de>, akpm@linux-foundation.org
Cc: dan.j.williams@intel.com, pasha.tatashin@soleen.com,
	mhocko@suse.com, anshuman.khandual@arm.com,
	Jonathan.Cameron@huawei.com, vbabka@suse.cz, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 5/5] mm,memory_hotplug: Allow userspace to enable/disable vmemmap
Date: Thu, 1 Aug 2019 17:07:27 +0200	[thread overview]
Message-ID: <3bb12bac-77a5-c53a-247b-6241c8381d30@redhat.com> (raw)
In-Reply-To: <20190725160207.19579-6-osalvador@suse.de>

On 25.07.19 18:02, Oscar Salvador wrote:
> It seems that we have some users out there that want to expose all
> hotpluggable memory to userspace, so this implements a toggling mechanism
> for those users who want to disable it.
> 
> By default, vmemmap pages mechanism is enabled.
> 
> Signed-off-by: Oscar Salvador <osalvador@suse.de>
> ---
>  drivers/base/memory.c          | 33 +++++++++++++++++++++++++++++++++
>  include/linux/memory_hotplug.h |  3 +++
>  mm/memory_hotplug.c            |  7 +++++++
>  3 files changed, 43 insertions(+)
> 
> diff --git a/drivers/base/memory.c b/drivers/base/memory.c
> index d30d0f6c8ad0..5ec6b80de9dd 100644
> --- a/drivers/base/memory.c
> +++ b/drivers/base/memory.c
> @@ -578,6 +578,35 @@ static DEVICE_ATTR_WO(soft_offline_page);
>  static DEVICE_ATTR_WO(hard_offline_page);
>  #endif
>  

-ENODOCUMENTATION :)

> +#ifdef CONFIG_SPARSEMEM_VMEMMAP
> +static ssize_t vmemmap_hotplug_show(struct device *dev,
> +				    struct device_attribute *attr, char *buf)
> +{
> +	if (vmemmap_enabled)
> +		return sprintf(buf, "enabled\n");
> +	else
> +		return sprintf(buf, "disabled\n");
> +}
> +
> +static ssize_t vmemmap_hotplug_store(struct device *dev,
> +			   struct device_attribute *attr,
> +			   const char *buf, size_t count)
> +{
> +	if (!capable(CAP_SYS_ADMIN))
> +		return -EPERM;
> +
> +	if (sysfs_streq(buf, "enable"))
> +		vmemmap_enabled = true;
> +	else if (sysfs_streq(buf, "disable"))
> +		vmemmap_enabled = false;
> +	else
> +		return -EINVAL;
> +
> +	return count;
> +}
> +static DEVICE_ATTR_RW(vmemmap_hotplug);
> +#endif
> +
>  /*
>   * Note that phys_device is optional.  It is here to allow for
>   * differentiation between which *physical* devices each
> @@ -794,6 +823,10 @@ static struct attribute *memory_root_attrs[] = {
>  	&dev_attr_hard_offline_page.attr,
>  #endif
>  
> +#ifdef CONFIG_SPARSEMEM_VMEMMAP
> +	&dev_attr_vmemmap_hotplug.attr,

Don't like the name of that property, sorry.

> +#endif
> +
>  	&dev_attr_block_size_bytes.attr,
>  	&dev_attr_auto_online_blocks.attr,
>  	NULL
> diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
> index e1e8abf22a80..03d227d13301 100644
> --- a/include/linux/memory_hotplug.h
> +++ b/include/linux/memory_hotplug.h
> @@ -134,6 +134,9 @@ extern int arch_add_memory(int nid, u64 start, u64 size,
>  			struct mhp_restrictions *restrictions);
>  extern u64 max_mem_size;
>  
> +#ifdef CONFIG_SPARSEMEM_VMEMMAP
> +extern bool vmemmap_enabled;
> +#endif
>  extern bool memhp_auto_online;
>  /* If movable_node boot option specified */
>  extern bool movable_node_enabled;
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 09d41339cd11..5ffe5375b87c 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -68,6 +68,10 @@ void put_online_mems(void)
>  
>  bool movable_node_enabled = false;
>  
> +#ifdef CONFIG_SPARSEMEM_VMEMMAP
> +bool vmemmap_enabled __read_mostly = true;
> +#endif
> +
>  #ifndef CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE
>  bool memhp_auto_online;
>  #else
> @@ -1108,6 +1112,9 @@ static unsigned long mhp_check_flags(unsigned long flags)
>  	if (!flags)
>  		return 0;
>  
> +	if (!vmemmap_enabled)
> +		return 0;
> +
>  	if (flags != MHP_MEMMAP_ON_MEMORY) {
>  		WARN(1, "Wrong flags value (%lx). Ignoring flags.\n", flags);
>  		return 0;
> 

Hmmm, I wonder if that should that rather be a per-memory device driver
thingy? E.g., a toggle for ACPI which will then not pass in
MHP_MEMMAP_ON_MEMORY.

-- 

Thanks,

David / dhildenb

  reply	other threads:[~2019-08-01 15:07 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-25 16:02 [PATCH v3 0/5] Allocate memmap from hotadded memory Oscar Salvador
2019-07-25 16:02 ` [PATCH v3 1/5] mm,memory_hotplug: Introduce MHP_MEMMAP_ON_MEMORY Oscar Salvador
2019-07-26  8:34   ` David Hildenbrand
2019-07-26  9:29     ` Oscar Salvador
2019-07-26  9:37       ` David Hildenbrand
2019-07-25 16:02 ` [PATCH v3 2/5] mm: Introduce a new Vmemmap page-type Oscar Salvador
2019-07-26  8:48   ` David Hildenbrand
2019-07-26  9:25     ` Oscar Salvador
2019-07-26  9:41       ` David Hildenbrand
2019-07-26 10:11         ` Oscar Salvador
2019-07-25 16:02 ` [PATCH v3 3/5] mm,sparse: Add SECTION_USE_VMEMMAP flag Oscar Salvador
2019-08-01 14:45   ` David Hildenbrand
2019-07-25 16:02 ` [PATCH v3 4/5] mm,memory_hotplug: Allocate memmap from the added memory range for sparse-vmemmap Oscar Salvador
2019-08-01 15:04   ` David Hildenbrand
2019-07-25 16:02 ` [PATCH v3 5/5] mm,memory_hotplug: Allow userspace to enable/disable vmemmap Oscar Salvador
2019-08-01 15:07   ` David Hildenbrand [this message]
2019-07-25 16:56 ` [PATCH v3 0/5] Allocate memmap from hotadded memory David Hildenbrand
2019-08-01  7:39 ` Oscar Salvador
2019-08-01  8:17   ` David Hildenbrand
2019-08-01  8:39     ` Oscar Salvador
2019-08-01  8:44       ` David Hildenbrand
2019-08-01 18:46 ` David Hildenbrand

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=3bb12bac-77a5-c53a-247b-6241c8381d30@redhat.com \
    --to=david@redhat.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=akpm@linux-foundation.org \
    --cc=anshuman.khandual@arm.com \
    --cc=dan.j.williams@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.com \
    --cc=osalvador@suse.de \
    --cc=pasha.tatashin@soleen.com \
    --cc=vbabka@suse.cz \
    /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.