[PATCH -next] KVM: SVM: Remove unnecessary GFP_KERNEL_ACCOUNT in svm_set_nested_state()

Yongqiang Liu posted 1 patch 1 year, 5 months ago
arch/x86/kvm/svm/nested.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH -next] KVM: SVM: Remove unnecessary GFP_KERNEL_ACCOUNT in svm_set_nested_state()
Posted by Yongqiang Liu 1 year, 5 months ago
The fixed size temporary variables vmcb_control_area and vmcb_save_area
allocated in svm_set_nested_state() are released when the function exits.
Meanwhile, svm_set_nested_state() also have vcpu mutex held to avoid
massive concurrency allocation, so we don't need to set GFP_KERNEL_ACCOUNT.

Signed-off-by: Yongqiang Liu <liuyongqiang13@huawei.com>
---
 arch/x86/kvm/svm/nested.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
index 6f704c1037e5..d5314cb7dff4 100644
--- a/arch/x86/kvm/svm/nested.c
+++ b/arch/x86/kvm/svm/nested.c
@@ -1693,8 +1693,8 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,
 		return -EINVAL;
 
 	ret  = -ENOMEM;
-	ctl  = kzalloc(sizeof(*ctl),  GFP_KERNEL_ACCOUNT);
-	save = kzalloc(sizeof(*save), GFP_KERNEL_ACCOUNT);
+	ctl  = kzalloc(sizeof(*ctl),  GFP_KERNEL);
+	save = kzalloc(sizeof(*save), GFP_KERNEL);
 	if (!ctl || !save)
 		goto out_free;
 
-- 
2.25.1
Re: [PATCH -next] KVM: SVM: Remove unnecessary GFP_KERNEL_ACCOUNT in svm_set_nested_state()
Posted by Sean Christopherson 1 year, 5 months ago
On Wed, 21 Aug 2024 19:27:37 +0800, Yongqiang Liu wrote:
> The fixed size temporary variables vmcb_control_area and vmcb_save_area
> allocated in svm_set_nested_state() are released when the function exits.
> Meanwhile, svm_set_nested_state() also have vcpu mutex held to avoid
> massive concurrency allocation, so we don't need to set GFP_KERNEL_ACCOUNT.
> 
> 

Applied to kvm-x86 svm, thanks!

[1/1] KVM: SVM: Remove unnecessary GFP_KERNEL_ACCOUNT in svm_set_nested_state()
      https://github.com/kvm-x86/linux/commit/c501062bb22b

--
https://github.com/kvm-x86/linux/tree/next
Re: [PATCH -next] KVM: SVM: Remove unnecessary GFP_KERNEL_ACCOUNT in svm_set_nested_state()
Posted by Huang, Kai 1 year, 5 months ago

On 21/08/2024 11:27 pm, Yongqiang Liu wrote:
> The fixed size temporary variables vmcb_control_area and vmcb_save_area
> allocated in svm_set_nested_state() are released when the function exits.
> Meanwhile, svm_set_nested_state() also have vcpu mutex held to avoid
> massive concurrency allocation, so we don't need to set GFP_KERNEL_ACCOUNT.

Hi Sean/Paolo,

Seems more patches are popping up regarding to whether to use _ACCOUNT 
for temporary memory allocation.  Could we have a definitive guide on this?

As you know, one similar patch was merged and now is in upstream:

   dd103407ca315 ("KVM: X86: Remove unnecessary GFP_KERNEL_ACCOUNT for 
temporary variables")

Also see:

https://lore.kernel.org/kvm/20240715101224.90958-1-kai.huang@intel.com/T/

> 
> Signed-off-by: Yongqiang Liu <liuyongqiang13@huawei.com>
> ---
>   arch/x86/kvm/svm/nested.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
> index 6f704c1037e5..d5314cb7dff4 100644
> --- a/arch/x86/kvm/svm/nested.c
> +++ b/arch/x86/kvm/svm/nested.c
> @@ -1693,8 +1693,8 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,
>   		return -EINVAL;
>   
>   	ret  = -ENOMEM;
> -	ctl  = kzalloc(sizeof(*ctl),  GFP_KERNEL_ACCOUNT);
> -	save = kzalloc(sizeof(*save), GFP_KERNEL_ACCOUNT);
> +	ctl  = kzalloc(sizeof(*ctl),  GFP_KERNEL);
> +	save = kzalloc(sizeof(*save), GFP_KERNEL);
>   	if (!ctl || !save)
>   		goto out_free;
>
Re: [PATCH -next] KVM: SVM: Remove unnecessary GFP_KERNEL_ACCOUNT in svm_set_nested_state()
Posted by Sean Christopherson 1 year, 5 months ago
On Fri, Aug 23, 2024, Kai Huang wrote:
> 
> 
> On 21/08/2024 11:27 pm, Yongqiang Liu wrote:
> > The fixed size temporary variables vmcb_control_area and vmcb_save_area
> > allocated in svm_set_nested_state() are released when the function exits.
> > Meanwhile, svm_set_nested_state() also have vcpu mutex held to avoid
> > massive concurrency allocation, so we don't need to set GFP_KERNEL_ACCOUNT.
> 
> Hi Sean/Paolo,
> 
> Seems more patches are popping up regarding to whether to use _ACCOUNT for
> temporary memory allocation.  Could we have a definitive guide on this?

If the allocations are temporary, e.g. scoped to exactly one function, not massive
(use best judgment), and can't be used in any kind of novel DDoS attack, e.g. are
limited to one per vCPU or so, then they don't need to be accounted.

At least, that's my take on things.
Re: [PATCH -next] KVM: SVM: Remove unnecessary GFP_KERNEL_ACCOUNT in svm_set_nested_state()
Posted by Huang, Kai 1 year, 5 months ago
On Fri, 2024-08-23 at 17:00 -0700, Sean Christopherson wrote:
> On Fri, Aug 23, 2024, Kai Huang wrote:
> > 
> > 
> > On 21/08/2024 11:27 pm, Yongqiang Liu wrote:
> > > The fixed size temporary variables vmcb_control_area and vmcb_save_area
> > > allocated in svm_set_nested_state() are released when the function exits.
> > > Meanwhile, svm_set_nested_state() also have vcpu mutex held to avoid
> > > massive concurrency allocation, so we don't need to set GFP_KERNEL_ACCOUNT.
> > 
> > Hi Sean/Paolo,
> > 
> > Seems more patches are popping up regarding to whether to use _ACCOUNT for
> > temporary memory allocation.  Could we have a definitive guide on this?
> 
> If the allocations are temporary, e.g. scoped to exactly one function, not massive
> (use best judgment), and can't be used in any kind of novel DDoS attack, e.g. are
> limited to one per vCPU or so, then they don't need to be accounted.
> 
> At least, that's my take on things.

That makes sense.  Thanks.