[RFC PATCH-for-7.0 v4] target/i386/kvm: Free xsave_buf when destroying vCPU

Philippe Mathieu-Daudé posted 1 patch 2 years, 1 month ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20220322120522.26200-1-philippe.mathieu.daude@gmail.com
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Marcelo Tosatti <mtosatti@redhat.com>
target/i386/kvm/kvm.c | 2 ++
1 file changed, 2 insertions(+)
[RFC PATCH-for-7.0 v4] target/i386/kvm: Free xsave_buf when destroying vCPU
Posted by Philippe Mathieu-Daudé 2 years, 1 month ago
From: Philippe Mathieu-Daudé <f4bug@amsat.org>

Fix vCPU hot-unplug related leak reported by Valgrind:

  ==132362== 4,096 bytes in 1 blocks are definitely lost in loss record 8,440 of 8,549
  ==132362==    at 0x4C3B15F: memalign (vg_replace_malloc.c:1265)
  ==132362==    by 0x4C3B288: posix_memalign (vg_replace_malloc.c:1429)
  ==132362==    by 0xB41195: qemu_try_memalign (memalign.c:53)
  ==132362==    by 0xB41204: qemu_memalign (memalign.c:73)
  ==132362==    by 0x7131CB: kvm_init_xsave (kvm.c:1601)
  ==132362==    by 0x7148ED: kvm_arch_init_vcpu (kvm.c:2031)
  ==132362==    by 0x91D224: kvm_init_vcpu (kvm-all.c:516)
  ==132362==    by 0x9242C9: kvm_vcpu_thread_fn (kvm-accel-ops.c:40)
  ==132362==    by 0xB2EB26: qemu_thread_start (qemu-thread-posix.c:556)
  ==132362==    by 0x7EB2159: start_thread (in /usr/lib64/libpthread-2.28.so)
  ==132362==    by 0x9D45DD2: clone (in /usr/lib64/libc-2.28.so)

Reported-by: Mark Kanda <mark.kanda@oracle.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
Based on a series from Mark:
https://lore.kernel.org/qemu-devel/20220321141409.3112932-1-mark.kanda@oracle.com/

RFC because currently no time to test
---
 target/i386/kvm/kvm.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index ef2c68a6f4..e93440e774 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -2072,6 +2072,8 @@ int kvm_arch_destroy_vcpu(CPUState *cs)
     X86CPU *cpu = X86_CPU(cs);
     CPUX86State *env = &cpu->env;
 
+    g_free(env->xsave_buf);
+
     if (cpu->kvm_msr_buf) {
         g_free(cpu->kvm_msr_buf);
         cpu->kvm_msr_buf = NULL;
-- 
2.35.1


Re: [RFC PATCH-for-7.0 v4] target/i386/kvm: Free xsave_buf when destroying vCPU
Posted by Philippe Mathieu-Daudé 2 years, 1 month ago
On 22/3/22 13:05, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé <f4bug@amsat.org>
> 
> Fix vCPU hot-unplug related leak reported by Valgrind:
> 
>    ==132362== 4,096 bytes in 1 blocks are definitely lost in loss record 8,440 of 8,549
>    ==132362==    at 0x4C3B15F: memalign (vg_replace_malloc.c:1265)
>    ==132362==    by 0x4C3B288: posix_memalign (vg_replace_malloc.c:1429)
>    ==132362==    by 0xB41195: qemu_try_memalign (memalign.c:53)
>    ==132362==    by 0xB41204: qemu_memalign (memalign.c:73)
>    ==132362==    by 0x7131CB: kvm_init_xsave (kvm.c:1601)
>    ==132362==    by 0x7148ED: kvm_arch_init_vcpu (kvm.c:2031)
>    ==132362==    by 0x91D224: kvm_init_vcpu (kvm-all.c:516)
>    ==132362==    by 0x9242C9: kvm_vcpu_thread_fn (kvm-accel-ops.c:40)
>    ==132362==    by 0xB2EB26: qemu_thread_start (qemu-thread-posix.c:556)
>    ==132362==    by 0x7EB2159: start_thread (in /usr/lib64/libpthread-2.28.so)
>    ==132362==    by 0x9D45DD2: clone (in /usr/lib64/libc-2.28.so)
> 
> Reported-by: Mark Kanda <mark.kanda@oracle.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> Based on a series from Mark:
> https://lore.kernel.org/qemu-devel/20220321141409.3112932-1-mark.kanda@oracle.com/
> 
> RFC because currently no time to test

Mark, do you mind testing this patch?

Re: [RFC PATCH-for-7.0 v4] target/i386/kvm: Free xsave_buf when destroying vCPU
Posted by Mark Kanda 2 years, 1 month ago
On 3/22/2022 8:29 AM, Philippe Mathieu-Daudé wrote:
> On 22/3/22 13:05, Philippe Mathieu-Daudé wrote:
>> From: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>
>> Fix vCPU hot-unplug related leak reported by Valgrind:
>>
>>    ==132362== 4,096 bytes in 1 blocks are definitely lost in loss record 
>> 8,440 of 8,549
>>    ==132362==    at 0x4C3B15F: memalign (vg_replace_malloc.c:1265)
>>    ==132362==    by 0x4C3B288: posix_memalign (vg_replace_malloc.c:1429)
>>    ==132362==    by 0xB41195: qemu_try_memalign (memalign.c:53)
>>    ==132362==    by 0xB41204: qemu_memalign (memalign.c:73)
>>    ==132362==    by 0x7131CB: kvm_init_xsave (kvm.c:1601)
>>    ==132362==    by 0x7148ED: kvm_arch_init_vcpu (kvm.c:2031)
>>    ==132362==    by 0x91D224: kvm_init_vcpu (kvm-all.c:516)
>>    ==132362==    by 0x9242C9: kvm_vcpu_thread_fn (kvm-accel-ops.c:40)
>>    ==132362==    by 0xB2EB26: qemu_thread_start (qemu-thread-posix.c:556)
>>    ==132362==    by 0x7EB2159: start_thread (in /usr/lib64/libpthread-2.28.so)
>>    ==132362==    by 0x9D45DD2: clone (in /usr/lib64/libc-2.28.so)
>>
>> Reported-by: Mark Kanda <mark.kanda@oracle.com>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> Based on a series from Mark:
>> https://lore.kernel.org/qemu-devel/20220321141409.3112932-1-mark.kanda@oracle.com/ 
>>
>>
>> RFC because currently no time to test
>
> Mark, do you mind testing this patch?
Sanity tested with x86_64 KVM. Valgrind confirms the leak is fixed upon the vCPU 
hotplug.

Tested-by: Mark Kanda <mark.kanda@oracle.com>

Thanks/regards,
-Mark

Re: [RFC PATCH-for-7.0 v4] target/i386/kvm: Free xsave_buf when destroying vCPU
Posted by Igor Mammedov 2 years, 1 month ago
On Tue, 22 Mar 2022 13:05:22 +0100
Philippe Mathieu-Daudé         <philippe.mathieu.daude@gmail.com> wrote:

> From: Philippe Mathieu-Daudé <f4bug@amsat.org>
> 
> Fix vCPU hot-unplug related leak reported by Valgrind:
> 
>   ==132362== 4,096 bytes in 1 blocks are definitely lost in loss record 8,440 of 8,549
>   ==132362==    at 0x4C3B15F: memalign (vg_replace_malloc.c:1265)
>   ==132362==    by 0x4C3B288: posix_memalign (vg_replace_malloc.c:1429)
>   ==132362==    by 0xB41195: qemu_try_memalign (memalign.c:53)
>   ==132362==    by 0xB41204: qemu_memalign (memalign.c:73)
>   ==132362==    by 0x7131CB: kvm_init_xsave (kvm.c:1601)
>   ==132362==    by 0x7148ED: kvm_arch_init_vcpu (kvm.c:2031)
>   ==132362==    by 0x91D224: kvm_init_vcpu (kvm-all.c:516)
>   ==132362==    by 0x9242C9: kvm_vcpu_thread_fn (kvm-accel-ops.c:40)
>   ==132362==    by 0xB2EB26: qemu_thread_start (qemu-thread-posix.c:556)
>   ==132362==    by 0x7EB2159: start_thread (in /usr/lib64/libpthread-2.28.so)
>   ==132362==    by 0x9D45DD2: clone (in /usr/lib64/libc-2.28.so)
> 
> Reported-by: Mark Kanda <mark.kanda@oracle.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> Based on a series from Mark:
> https://lore.kernel.org/qemu-devel/20220321141409.3112932-1-mark.kanda@oracle.com/
> 
> RFC because currently no time to test
> ---
>  target/i386/kvm/kvm.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
> index ef2c68a6f4..e93440e774 100644
> --- a/target/i386/kvm/kvm.c
> +++ b/target/i386/kvm/kvm.c
> @@ -2072,6 +2072,8 @@ int kvm_arch_destroy_vcpu(CPUState *cs)
>      X86CPU *cpu = X86_CPU(cs);
>      CPUX86State *env = &cpu->env;
>  
> +    g_free(env->xsave_buf);
> +
>      if (cpu->kvm_msr_buf) {
>          g_free(cpu->kvm_msr_buf);
>          cpu->kvm_msr_buf = NULL;


shouldn't we do the same in hvf_arch_vcpu_destroy() ?
Re: [RFC PATCH-for-7.0 v4] target/i386/kvm: Free xsave_buf when destroying vCPU
Posted by Philippe Mathieu-Daudé 2 years, 1 month ago
On 22/3/22 14:56, Igor Mammedov wrote:
> On Tue, 22 Mar 2022 13:05:22 +0100
> Philippe Mathieu-Daudé         <philippe.mathieu.daude@gmail.com> wrote:
> 
>> From: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>
>> Fix vCPU hot-unplug related leak reported by Valgrind:
>>
>>    ==132362== 4,096 bytes in 1 blocks are definitely lost in loss record 8,440 of 8,549
>>    ==132362==    at 0x4C3B15F: memalign (vg_replace_malloc.c:1265)
>>    ==132362==    by 0x4C3B288: posix_memalign (vg_replace_malloc.c:1429)
>>    ==132362==    by 0xB41195: qemu_try_memalign (memalign.c:53)
>>    ==132362==    by 0xB41204: qemu_memalign (memalign.c:73)
>>    ==132362==    by 0x7131CB: kvm_init_xsave (kvm.c:1601)
>>    ==132362==    by 0x7148ED: kvm_arch_init_vcpu (kvm.c:2031)
>>    ==132362==    by 0x91D224: kvm_init_vcpu (kvm-all.c:516)
>>    ==132362==    by 0x9242C9: kvm_vcpu_thread_fn (kvm-accel-ops.c:40)
>>    ==132362==    by 0xB2EB26: qemu_thread_start (qemu-thread-posix.c:556)
>>    ==132362==    by 0x7EB2159: start_thread (in /usr/lib64/libpthread-2.28.so)
>>    ==132362==    by 0x9D45DD2: clone (in /usr/lib64/libc-2.28.so)
>>
>> Reported-by: Mark Kanda <mark.kanda@oracle.com>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> Based on a series from Mark:
>> https://lore.kernel.org/qemu-devel/20220321141409.3112932-1-mark.kanda@oracle.com/
>>
>> RFC because currently no time to test
>> ---
>>   target/i386/kvm/kvm.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
>> index ef2c68a6f4..e93440e774 100644
>> --- a/target/i386/kvm/kvm.c
>> +++ b/target/i386/kvm/kvm.c
>> @@ -2072,6 +2072,8 @@ int kvm_arch_destroy_vcpu(CPUState *cs)
>>       X86CPU *cpu = X86_CPU(cs);
>>       CPUX86State *env = &cpu->env;
>>   
>> +    g_free(env->xsave_buf);
>> +
>>       if (cpu->kvm_msr_buf) {
>>           g_free(cpu->kvm_msr_buf);
>>           cpu->kvm_msr_buf = NULL;
> 
> 
> shouldn't we do the same in hvf_arch_vcpu_destroy() ?

Yeah HVF needs a similar patch (at least hvf_caps needs to be released
too, but I had no time to review it carefully yet).


Re: [RFC PATCH-for-7.0 v4] target/i386/kvm: Free xsave_buf when destroying vCPU
Posted by Paolo Bonzini 2 years, 1 month ago
Queued, thanks.

Paolo