Jason Gunthorpe <jgg@xxxxxxxxxx> writes: > On Tue, Jan 24, 2023 at 04:42:30PM +1100, Alistair Popple wrote: >> +/** >> + * enum vm_account_flags - Determine how pinned/locked memory is accounted. >> + * @VM_ACCOUNT_TASK: Account pinned memory to mm->pinned_vm. >> + * @VM_ACCOUNT_BYPASS: Don't enforce rlimit on any charges. >> + * @VM_ACCOUNT_USER: Accounnt locked memory to user->locked_vm. >> + * >> + * Determines which statistic pinned/locked memory is accounted >> + * against. All limits will be enforced against RLIMIT_MEMLOCK and the >> + * pins cgroup if CONFIG_CGROUP_PINS is enabled. >> + * >> + * New drivers should use VM_ACCOUNT_TASK. VM_ACCOUNT_USER is used by >> + * pre-existing drivers to maintain existing accounting against >> + * user->locked_mm rather than mm->pinned_mm. > > I thought the guidance was the opposite of this, it is the newer > places in the kernel that are using VM_ACCOUNT_USER? I'd just assumed mm->pinned_vm was preferred because that's what most drivers use. user->locked_mm does seem more sensible though as at least it's possible to meaningfully enforce some overall limit. Will switch the flags/comment around to suggest new users use VM_ACCOUNT_USER. > I haven't got to the rest of the patches yet, but isn't there also a > mm->pinned_vm vs mm->locked_vm variation in the current drivers as > well? > >> +void vm_account_init_current(struct vm_account *vm_account) >> +{ >> + vm_account_init(vm_account, current, NULL, VM_ACCOUNT_TASK); >> +} >> +EXPORT_SYMBOL_GPL(vm_account_init_current); > > This can probably just be a static inline > > You might consider putting all this in some new vm_account.h - given > how rarely it is used? Compile times and all Works for me. > Jason