On Mon, Jun 10, 2024, Alexey Dobriyan wrote: > Some allocations done by KVM are temporary, they are created as result > of program actions, but can't exists for arbitrary long times. > > They should have been GFP_TEMPORARY (rip!). Wouldn't GFP_USER be more appropriate for all of these? E.g. KVM_SET_REGS uses memdup_user() and thus GFP_USER. > OTOH, kvm-nx-lpage-recovery and kvm-pit kernel threads exist for as long > as VM exists but their task_struct memory is not accounted. > This is story for another day. > > Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx> > --- > > virt/kvm/kvm_main.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -4427,7 +4427,7 @@ static long kvm_vcpu_ioctl(struct file *filp, > struct kvm_regs *kvm_regs; > > r = -ENOMEM; > - kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL_ACCOUNT); > + kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL); > if (!kvm_regs) > goto out; > r = kvm_arch_vcpu_ioctl_get_regs(vcpu, kvm_regs); > @@ -4454,8 +4454,7 @@ static long kvm_vcpu_ioctl(struct file *filp, > break; > } > case KVM_GET_SREGS: { > - kvm_sregs = kzalloc(sizeof(struct kvm_sregs), > - GFP_KERNEL_ACCOUNT); > + kvm_sregs = kzalloc(sizeof(struct kvm_sregs), GFP_KERNEL); > r = -ENOMEM; > if (!kvm_sregs) > goto out; > @@ -4547,7 +4546,7 @@ static long kvm_vcpu_ioctl(struct file *filp, > break; > } > case KVM_GET_FPU: { > - fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL_ACCOUNT); > + fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL); > r = -ENOMEM; > if (!fpu) > goto out; > @@ -6210,7 +6209,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm) > active = kvm_active_vms; > mutex_unlock(&kvm_lock); > > - env = kzalloc(sizeof(*env), GFP_KERNEL_ACCOUNT); > + env = kzalloc(sizeof(*env), GFP_KERNEL); > if (!env) > return; > > @@ -6226,7 +6225,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm) > add_uevent_var(env, "PID=%d", kvm->userspace_pid); > > if (!IS_ERR(kvm->debugfs_dentry)) { > - char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL_ACCOUNT); > + char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL); > > if (p) { > tmp = dentry_path_raw(kvm->debugfs_dentry, p, PATH_MAX);