All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/2] mm: add vmalloc_no_huge and use it
@ 2021-06-14 13:23 Claudio Imbrenda
  2021-06-14 13:23 ` [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge Claudio Imbrenda
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Claudio Imbrenda @ 2021-06-14 13:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: kvm, linux-s390, frankja, borntraeger, cohuck, david, linux-mm,
	Andrew Morton, Nicholas Piggin, Uladzislau Rezki,
	Catalin Marinas, Thomas Gleixner, Ingo Molnar, David Rientjes,
	Christoph Hellwig

Add vmalloc_no_huge and export it, so modules can allocate memory with
small pages.

Use the newly added vmalloc_no_huge in KVM on s390 to get around a
hardware limitation.

v3->v4:
* reword commit messages to be more clear
* add comment in the second patch

v2->v3:
* do not export __vmalloc_node_range
* add vmalloc_no_huge as a wrapper around __vmalloc_node_range
* use vmalloc_no_huge instead of __vmalloc_node_range in kvm on s390x

Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Christoph Hellwig <hch@infradead.org>

Claudio Imbrenda (2):
  mm/vmalloc: add vmalloc_no_huge
  KVM: s390: prepare for hugepage vmalloc

 arch/s390/kvm/pv.c      |  7 ++++++-
 include/linux/vmalloc.h |  1 +
 mm/vmalloc.c            | 16 ++++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)

-- 
2.31.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge
  2021-06-14 13:23 [PATCH v4 0/2] mm: add vmalloc_no_huge and use it Claudio Imbrenda
@ 2021-06-14 13:23 ` Claudio Imbrenda
  2021-06-14 13:44   ` David Hildenbrand
                     ` (2 more replies)
  2021-06-14 13:23 ` [PATCH v4 2/2] KVM: s390: prepare for hugepage vmalloc Claudio Imbrenda
  2021-06-14 23:59 ` [PATCH v4 0/2] mm: add vmalloc_no_huge and use it Andrew Morton
  2 siblings, 3 replies; 10+ messages in thread
From: Claudio Imbrenda @ 2021-06-14 13:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: kvm, linux-s390, frankja, borntraeger, cohuck, david, linux-mm,
	Uladzislau Rezki, Nicholas Piggin, Andrew Morton,
	Catalin Marinas, Thomas Gleixner, Ingo Molnar, David Rientjes,
	Christoph Hellwig

Commit 121e6f3258fe3 ("mm/vmalloc: hugepage vmalloc mappings") added
support for hugepage vmalloc mappings, it also added the flag
VM_NO_HUGE_VMAP for __vmalloc_node_range to request the allocation to
be performed with 0-order non-huge pages.  This flag is not accessible
when calling vmalloc, the only option is to call directly
__vmalloc_node_range, which is not exported.

This means that a module can't vmalloc memory with small pages.

Case in point: KVM on s390x needs to vmalloc a large area, and it needs
to be mapped with non-huge pages, because of a hardware limitation.

This patch adds the function vmalloc_no_huge, which works like vmalloc,
but it is guaranteed to always back the mapping using small pages. This
new function is exported, therefore it is usable by modules.

Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Acked-by: Nicholas Piggin <npiggin@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
 include/linux/vmalloc.h |  1 +
 mm/vmalloc.c            | 16 ++++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index 4d668abb6391..bfaaf0b6fa76 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -135,6 +135,7 @@ extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
 			const void *caller);
 void *__vmalloc_node(unsigned long size, unsigned long align, gfp_t gfp_mask,
 		int node, const void *caller);
+void *vmalloc_no_huge(unsigned long size);
 
 extern void vfree(const void *addr);
 extern void vfree_atomic(const void *addr);
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index a13ac524f6ff..296a2fcc3fbe 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -2998,6 +2998,22 @@ void *vmalloc(unsigned long size)
 }
 EXPORT_SYMBOL(vmalloc);
 
+/**
+ * vmalloc_no_huge - allocate virtually contiguous memory using small pages
+ * @size:    allocation size
+ *
+ * Allocate enough non-huge pages to cover @size from the page level
+ * allocator and map them into contiguous kernel virtual space.
+ *
+ * Return: pointer to the allocated memory or %NULL on error
+ */
+void *vmalloc_no_huge(unsigned long size)
+{
+	return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END, GFP_KERNEL, PAGE_KERNEL,
+				    VM_NO_HUGE_VMAP, NUMA_NO_NODE, __builtin_return_address(0));
+}
+EXPORT_SYMBOL(vmalloc_no_huge);
+
 /**
  * vzalloc - allocate virtually contiguous memory with zero fill
  * @size:    allocation size
-- 
2.31.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v4 2/2] KVM: s390: prepare for hugepage vmalloc
  2021-06-14 13:23 [PATCH v4 0/2] mm: add vmalloc_no_huge and use it Claudio Imbrenda
  2021-06-14 13:23 ` [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge Claudio Imbrenda
@ 2021-06-14 13:23 ` Claudio Imbrenda
  2021-06-14 13:44   ` David Hildenbrand
  2021-06-14 23:59 ` [PATCH v4 0/2] mm: add vmalloc_no_huge and use it Andrew Morton
  2 siblings, 1 reply; 10+ messages in thread
From: Claudio Imbrenda @ 2021-06-14 13:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: kvm, linux-s390, frankja, borntraeger, cohuck, david, linux-mm,
	Nicholas Piggin, Andrew Morton, Uladzislau Rezki,
	Catalin Marinas, Thomas Gleixner, Ingo Molnar, David Rientjes,
	Christoph Hellwig

The Create Secure Configuration Ultravisor Call does not support using
large pages for the virtual memory area. This is a hardware limitation.

This patch replaces the vzalloc call with an almost equivalent call to
the newly introduced vmalloc_no_huge function, which guarantees that
only small pages will be used for the backing.

The new call will not clear the allocated memory, but that has never
been an actual requirement.

Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Nicholas Piggin <npiggin@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
 arch/s390/kvm/pv.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c
index 813b6e93dc83..c8841f476e91 100644
--- a/arch/s390/kvm/pv.c
+++ b/arch/s390/kvm/pv.c
@@ -140,7 +140,12 @@ static int kvm_s390_pv_alloc_vm(struct kvm *kvm)
 	/* Allocate variable storage */
 	vlen = ALIGN(virt * ((npages * PAGE_SIZE) / HPAGE_SIZE), PAGE_SIZE);
 	vlen += uv_info.guest_virt_base_stor_len;
-	kvm->arch.pv.stor_var = vzalloc(vlen);
+	/*
+	 * The Create Secure Configuration Ultravisor Call does not support
+	 * using large pages for the virtual memory area.
+	 * This is a hardware limitation.
+	 */
+	kvm->arch.pv.stor_var = vmalloc_no_huge(vlen);
 	if (!kvm->arch.pv.stor_var)
 		goto out_err;
 	return 0;
-- 
2.31.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 2/2] KVM: s390: prepare for hugepage vmalloc
  2021-06-14 13:23 ` [PATCH v4 2/2] KVM: s390: prepare for hugepage vmalloc Claudio Imbrenda
@ 2021-06-14 13:44   ` David Hildenbrand
  0 siblings, 0 replies; 10+ messages in thread
From: David Hildenbrand @ 2021-06-14 13:44 UTC (permalink / raw)
  To: Claudio Imbrenda, linux-kernel
  Cc: kvm, linux-s390, frankja, borntraeger, cohuck, linux-mm,
	Nicholas Piggin, Andrew Morton, Uladzislau Rezki,
	Catalin Marinas, Thomas Gleixner, Ingo Molnar, David Rientjes,
	Christoph Hellwig

On 14.06.21 15:23, Claudio Imbrenda wrote:
> The Create Secure Configuration Ultravisor Call does not support using
> large pages for the virtual memory area. This is a hardware limitation.
> 
> This patch replaces the vzalloc call with an almost equivalent call to
> the newly introduced vmalloc_no_huge function, which guarantees that
> only small pages will be used for the backing.
> 
> The new call will not clear the allocated memory, but that has never
> been an actual requirement.
> 
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Acked-by: Nicholas Piggin <npiggin@gmail.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Nicholas Piggin <npiggin@gmail.com>
> Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: David Rientjes <rientjes@google.com>
> Cc: Christoph Hellwig <hch@infradead.org>
> ---
>   arch/s390/kvm/pv.c | 7 ++++++-
>   1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c
> index 813b6e93dc83..c8841f476e91 100644
> --- a/arch/s390/kvm/pv.c
> +++ b/arch/s390/kvm/pv.c
> @@ -140,7 +140,12 @@ static int kvm_s390_pv_alloc_vm(struct kvm *kvm)
>   	/* Allocate variable storage */
>   	vlen = ALIGN(virt * ((npages * PAGE_SIZE) / HPAGE_SIZE), PAGE_SIZE);
>   	vlen += uv_info.guest_virt_base_stor_len;
> -	kvm->arch.pv.stor_var = vzalloc(vlen);
> +	/*
> +	 * The Create Secure Configuration Ultravisor Call does not support
> +	 * using large pages for the virtual memory area.
> +	 * This is a hardware limitation.
> +	 */
> +	kvm->arch.pv.stor_var = vmalloc_no_huge(vlen);
>   	if (!kvm->arch.pv.stor_var)
>   		goto out_err;
>   	return 0;
> 

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge
  2021-06-14 13:23 ` [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge Claudio Imbrenda
@ 2021-06-14 13:44   ` David Hildenbrand
  2021-06-14 13:55     ` Uladzislau Rezki
  2021-06-14 15:21   ` Christoph Hellwig
  2021-06-18 19:47     ` David Rientjes
  2 siblings, 1 reply; 10+ messages in thread
From: David Hildenbrand @ 2021-06-14 13:44 UTC (permalink / raw)
  To: Claudio Imbrenda, linux-kernel
  Cc: kvm, linux-s390, frankja, borntraeger, cohuck, linux-mm,
	Uladzislau Rezki, Nicholas Piggin, Andrew Morton,
	Catalin Marinas, Thomas Gleixner, Ingo Molnar, David Rientjes,
	Christoph Hellwig

On 14.06.21 15:23, Claudio Imbrenda wrote:
> Commit 121e6f3258fe3 ("mm/vmalloc: hugepage vmalloc mappings") added
> support for hugepage vmalloc mappings, it also added the flag
> VM_NO_HUGE_VMAP for __vmalloc_node_range to request the allocation to
> be performed with 0-order non-huge pages.  This flag is not accessible
> when calling vmalloc, the only option is to call directly
> __vmalloc_node_range, which is not exported.
> 
> This means that a module can't vmalloc memory with small pages.
> 
> Case in point: KVM on s390x needs to vmalloc a large area, and it needs
> to be mapped with non-huge pages, because of a hardware limitation.
> 
> This patch adds the function vmalloc_no_huge, which works like vmalloc,
> but it is guaranteed to always back the mapping using small pages. This
> new function is exported, therefore it is usable by modules.
> 
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> Acked-by: Nicholas Piggin <npiggin@gmail.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Nicholas Piggin <npiggin@gmail.com>
> Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: David Rientjes <rientjes@google.com>
> Cc: Christoph Hellwig <hch@infradead.org>
> ---
>   include/linux/vmalloc.h |  1 +
>   mm/vmalloc.c            | 16 ++++++++++++++++
>   2 files changed, 17 insertions(+)
> 
> diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
> index 4d668abb6391..bfaaf0b6fa76 100644
> --- a/include/linux/vmalloc.h
> +++ b/include/linux/vmalloc.h
> @@ -135,6 +135,7 @@ extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
>   			const void *caller);
>   void *__vmalloc_node(unsigned long size, unsigned long align, gfp_t gfp_mask,
>   		int node, const void *caller);
> +void *vmalloc_no_huge(unsigned long size);
>   
>   extern void vfree(const void *addr);
>   extern void vfree_atomic(const void *addr);
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index a13ac524f6ff..296a2fcc3fbe 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -2998,6 +2998,22 @@ void *vmalloc(unsigned long size)
>   }
>   EXPORT_SYMBOL(vmalloc);
>   
> +/**
> + * vmalloc_no_huge - allocate virtually contiguous memory using small pages
> + * @size:    allocation size
> + *
> + * Allocate enough non-huge pages to cover @size from the page level
> + * allocator and map them into contiguous kernel virtual space.
> + *
> + * Return: pointer to the allocated memory or %NULL on error
> + */
> +void *vmalloc_no_huge(unsigned long size)
> +{
> +	return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END, GFP_KERNEL, PAGE_KERNEL,
> +				    VM_NO_HUGE_VMAP, NUMA_NO_NODE, __builtin_return_address(0));
> +}
> +EXPORT_SYMBOL(vmalloc_no_huge);
> +
>   /**
>    * vzalloc - allocate virtually contiguous memory with zero fill
>    * @size:    allocation size
> 

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge
  2021-06-14 13:44   ` David Hildenbrand
@ 2021-06-14 13:55     ` Uladzislau Rezki
  0 siblings, 0 replies; 10+ messages in thread
From: Uladzislau Rezki @ 2021-06-14 13:55 UTC (permalink / raw)
  To: Claudio Imbrenda
  Cc: Claudio Imbrenda, linux-kernel, kvm, linux-s390, frankja,
	borntraeger, cohuck, linux-mm, Uladzislau Rezki, Nicholas Piggin,
	Andrew Morton, Catalin Marinas, Thomas Gleixner, Ingo Molnar,
	David Rientjes, Christoph Hellwig

> On 14.06.21 15:23, Claudio Imbrenda wrote:
> > Commit 121e6f3258fe3 ("mm/vmalloc: hugepage vmalloc mappings") added
> > support for hugepage vmalloc mappings, it also added the flag
> > VM_NO_HUGE_VMAP for __vmalloc_node_range to request the allocation to
> > be performed with 0-order non-huge pages.  This flag is not accessible
> > when calling vmalloc, the only option is to call directly
> > __vmalloc_node_range, which is not exported.
> > 
> > This means that a module can't vmalloc memory with small pages.
> > 
> > Case in point: KVM on s390x needs to vmalloc a large area, and it needs
> > to be mapped with non-huge pages, because of a hardware limitation.
> > 
> > This patch adds the function vmalloc_no_huge, which works like vmalloc,
> > but it is guaranteed to always back the mapping using small pages. This
> > new function is exported, therefore it is usable by modules.
> > 
> > Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> > Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> > Acked-by: Nicholas Piggin <npiggin@gmail.com>
> > Cc: Andrew Morton <akpm@linux-foundation.org>
> > Cc: Nicholas Piggin <npiggin@gmail.com>
> > Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
> > Cc: Catalin Marinas <catalin.marinas@arm.com>
> > Cc: Thomas Gleixner <tglx@linutronix.de>
> > Cc: Ingo Molnar <mingo@redhat.com>
> > Cc: David Rientjes <rientjes@google.com>
> > Cc: Christoph Hellwig <hch@infradead.org>
> > ---
> >   include/linux/vmalloc.h |  1 +
> >   mm/vmalloc.c            | 16 ++++++++++++++++
> >   2 files changed, 17 insertions(+)
> > 
> > diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
> > index 4d668abb6391..bfaaf0b6fa76 100644
> > --- a/include/linux/vmalloc.h
> > +++ b/include/linux/vmalloc.h
> > @@ -135,6 +135,7 @@ extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
> >   			const void *caller);
> >   void *__vmalloc_node(unsigned long size, unsigned long align, gfp_t gfp_mask,
> >   		int node, const void *caller);
> > +void *vmalloc_no_huge(unsigned long size);
> >   extern void vfree(const void *addr);
> >   extern void vfree_atomic(const void *addr);
> > diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> > index a13ac524f6ff..296a2fcc3fbe 100644
> > --- a/mm/vmalloc.c
> > +++ b/mm/vmalloc.c
> > @@ -2998,6 +2998,22 @@ void *vmalloc(unsigned long size)
> >   }
> >   EXPORT_SYMBOL(vmalloc);
> > +/**
> > + * vmalloc_no_huge - allocate virtually contiguous memory using small pages
> > + * @size:    allocation size
> > + *
> > + * Allocate enough non-huge pages to cover @size from the page level
> > + * allocator and map them into contiguous kernel virtual space.
> > + *
> > + * Return: pointer to the allocated memory or %NULL on error
> > + */
> > +void *vmalloc_no_huge(unsigned long size)
> > +{
> > +	return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END, GFP_KERNEL, PAGE_KERNEL,
> > +				    VM_NO_HUGE_VMAP, NUMA_NO_NODE, __builtin_return_address(0));
> > +}
> > +EXPORT_SYMBOL(vmalloc_no_huge);
> > +
> >   /**
> >    * vzalloc - allocate virtually contiguous memory with zero fill
> >    * @size:    allocation size
> > 
> 
> Reviewed-by: David Hildenbrand <david@redhat.com>
> 
> 
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>

--
Vlad Rezki

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge
  2021-06-14 13:23 ` [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge Claudio Imbrenda
  2021-06-14 13:44   ` David Hildenbrand
@ 2021-06-14 15:21   ` Christoph Hellwig
  2021-06-18 19:47     ` David Rientjes
  2 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2021-06-14 15:21 UTC (permalink / raw)
  To: Claudio Imbrenda
  Cc: linux-kernel, kvm, linux-s390, frankja, borntraeger, cohuck,
	david, linux-mm, Uladzislau Rezki, Nicholas Piggin,
	Andrew Morton, Catalin Marinas, Thomas Gleixner, Ingo Molnar,
	David Rientjes, Christoph Hellwig

On Mon, Jun 14, 2021 at 03:23:56PM +0200, Claudio Imbrenda wrote:
> +void *vmalloc_no_huge(unsigned long size)
> +{
> +	return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END, GFP_KERNEL, PAGE_KERNEL,
> +				    VM_NO_HUGE_VMAP, NUMA_NO_NODE, __builtin_return_address(0));

Please avoid the overly long lines in favor of something actually
human-readable like:

	return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END,
			GFP_KERNEL, PAGE_KERNEL, VM_NO_HUGE_VMAP,
			NUMA_NO_NODE, __builtin_return_address(0));

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 0/2] mm: add vmalloc_no_huge and use it
  2021-06-14 13:23 [PATCH v4 0/2] mm: add vmalloc_no_huge and use it Claudio Imbrenda
  2021-06-14 13:23 ` [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge Claudio Imbrenda
  2021-06-14 13:23 ` [PATCH v4 2/2] KVM: s390: prepare for hugepage vmalloc Claudio Imbrenda
@ 2021-06-14 23:59 ` Andrew Morton
  2 siblings, 0 replies; 10+ messages in thread
From: Andrew Morton @ 2021-06-14 23:59 UTC (permalink / raw)
  To: Claudio Imbrenda
  Cc: linux-kernel, kvm, linux-s390, frankja, borntraeger, cohuck,
	david, linux-mm, Nicholas Piggin, Uladzislau Rezki,
	Catalin Marinas, Thomas Gleixner, Ingo Molnar, David Rientjes,
	Christoph Hellwig

On Mon, 14 Jun 2021 15:23:55 +0200 Claudio Imbrenda <imbrenda@linux.ibm.com> wrote:

> Add vmalloc_no_huge and export it, so modules can allocate memory with
> small pages.
> 
> Use the newly added vmalloc_no_huge in KVM on s390 to get around a
> hardware limitation.

Thanks.  I added

Fixes: 121e6f3258fe3 ("mm/vmalloc: hugepage vmalloc mappings") 

and also addressed the whitespace thing which Christoph noted.

No cc:stable since 121e6f3258fe3 wasn't in 5.12.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge
  2021-06-14 13:23 ` [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge Claudio Imbrenda
@ 2021-06-18 19:47     ` David Rientjes
  2021-06-14 15:21   ` Christoph Hellwig
  2021-06-18 19:47     ` David Rientjes
  2 siblings, 0 replies; 10+ messages in thread
From: David Rientjes @ 2021-06-18 19:47 UTC (permalink / raw)
  To: Claudio Imbrenda
  Cc: linux-kernel, kvm, linux-s390, frankja, borntraeger, cohuck,
	david, linux-mm, Uladzislau Rezki, Nicholas Piggin,
	Andrew Morton, Catalin Marinas, Thomas Gleixner, Ingo Molnar,
	Christoph Hellwig

On Mon, 14 Jun 2021, Claudio Imbrenda wrote:

> Commit 121e6f3258fe3 ("mm/vmalloc: hugepage vmalloc mappings") added
> support for hugepage vmalloc mappings, it also added the flag
> VM_NO_HUGE_VMAP for __vmalloc_node_range to request the allocation to
> be performed with 0-order non-huge pages.  This flag is not accessible
> when calling vmalloc, the only option is to call directly
> __vmalloc_node_range, which is not exported.
> 
> This means that a module can't vmalloc memory with small pages.
> 
> Case in point: KVM on s390x needs to vmalloc a large area, and it needs
> to be mapped with non-huge pages, because of a hardware limitation.
> 
> This patch adds the function vmalloc_no_huge, which works like vmalloc,
> but it is guaranteed to always back the mapping using small pages. This
> new function is exported, therefore it is usable by modules.
> 
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> Acked-by: Nicholas Piggin <npiggin@gmail.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Nicholas Piggin <npiggin@gmail.com>
> Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: David Rientjes <rientjes@google.com>
> Cc: Christoph Hellwig <hch@infradead.org>

Acked-by: David Rientjes <rientjes@google.com>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge
@ 2021-06-18 19:47     ` David Rientjes
  0 siblings, 0 replies; 10+ messages in thread
From: David Rientjes @ 2021-06-18 19:47 UTC (permalink / raw)
  To: Claudio Imbrenda
  Cc: linux-kernel, kvm, linux-s390, frankja, borntraeger, cohuck,
	david, linux-mm, Uladzislau Rezki, Nicholas Piggin,
	Andrew Morton, Catalin Marinas, Thomas Gleixner, Ingo Molnar,
	Christoph Hellwig

On Mon, 14 Jun 2021, Claudio Imbrenda wrote:

> Commit 121e6f3258fe3 ("mm/vmalloc: hugepage vmalloc mappings") added
> support for hugepage vmalloc mappings, it also added the flag
> VM_NO_HUGE_VMAP for __vmalloc_node_range to request the allocation to
> be performed with 0-order non-huge pages.  This flag is not accessible
> when calling vmalloc, the only option is to call directly
> __vmalloc_node_range, which is not exported.
> 
> This means that a module can't vmalloc memory with small pages.
> 
> Case in point: KVM on s390x needs to vmalloc a large area, and it needs
> to be mapped with non-huge pages, because of a hardware limitation.
> 
> This patch adds the function vmalloc_no_huge, which works like vmalloc,
> but it is guaranteed to always back the mapping using small pages. This
> new function is exported, therefore it is usable by modules.
> 
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> Acked-by: Nicholas Piggin <npiggin@gmail.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Nicholas Piggin <npiggin@gmail.com>
> Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: David Rientjes <rientjes@google.com>
> Cc: Christoph Hellwig <hch@infradead.org>

Acked-by: David Rientjes <rientjes@google.com>


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-06-18 19:47 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-14 13:23 [PATCH v4 0/2] mm: add vmalloc_no_huge and use it Claudio Imbrenda
2021-06-14 13:23 ` [PATCH v4 1/2] mm/vmalloc: add vmalloc_no_huge Claudio Imbrenda
2021-06-14 13:44   ` David Hildenbrand
2021-06-14 13:55     ` Uladzislau Rezki
2021-06-14 15:21   ` Christoph Hellwig
2021-06-18 19:47   ` David Rientjes
2021-06-18 19:47     ` David Rientjes
2021-06-14 13:23 ` [PATCH v4 2/2] KVM: s390: prepare for hugepage vmalloc Claudio Imbrenda
2021-06-14 13:44   ` David Hildenbrand
2021-06-14 23:59 ` [PATCH v4 0/2] mm: add vmalloc_no_huge and use it Andrew Morton

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.