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 <[email protected]>
Reviewed-by: Janosch Frank <[email protected]>
Acked-by: Christian Borntraeger <[email protected]>
Acked-by: Nicholas Piggin <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Nicholas Piggin <[email protected]>
Cc: Uladzislau Rezki (Sony) <[email protected]>
Cc: Catalin Marinas <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: Christoph Hellwig <[email protected]>
---
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
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 <[email protected]>
> Reviewed-by: Janosch Frank <[email protected]>
> Acked-by: Christian Borntraeger <[email protected]>
> Acked-by: Nicholas Piggin <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Nicholas Piggin <[email protected]>
> Cc: Uladzislau Rezki (Sony) <[email protected]>
> Cc: Catalin Marinas <[email protected]>
> Cc: Thomas Gleixner <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: David Rientjes <[email protected]>
> Cc: Christoph Hellwig <[email protected]>
> ---
> 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 <[email protected]>
--
Thanks,
David / dhildenb