On 13/05/2026 17:58, Boris Brezillon wrote:
> Right now panthor is mixed bag of manual locks and guards. Let's
> make that more consitent and thus encourage new submissions to go
> for guards.
I'm fine with encouraging guards for future code - but I'm a little wary
of a big change like this - it's hard to review it and check that
everything works the same. And it's a little dubious that the mechanical
refactoring produces more readable code in some cases.
That said I asked my friendly AI bot...
[...]
> @@ -3142,48 +3126,44 @@ panthor_mmu_reclaim_priv_bos(struct panthor_device
> *ptdev,
> LIST_HEAD(remaining_vms);
> LIST_HEAD(vms);
>
> - mutex_lock(&ptdev->reclaim.lock);
> - list_splice_init(&ptdev->reclaim.vms, &vms);
> + scoped_guard(mutex, &ptdev->reclaim.lock)
> + list_splice_init(&ptdev->reclaim.vms, &vms);
>
> while (freed < nr_to_scan) {
> struct panthor_vm *vm;
>
> - vm = list_first_entry_or_null(&vms, typeof(*vm),
> - reclaim.lru_node);
> - if (!vm)
> - break;
> -
> - if (!kref_get_unless_zero(&vm->base.kref)) {
> - list_del_init(&vm->reclaim.lru_node);
> - continue;
> + scoped_guard(mutex, &ptdev->reclaim.lock) {
> + vm = list_first_entry_or_null(&vms, typeof(*vm),
> + reclaim.lru_node);
> + if (vm && !kref_get_unless_zero(&vm->base.kref)) {
> + list_del_init(&vm->reclaim.lru_node);
> + vm = NULL;
> + }
> }
>
> - mutex_unlock(&ptdev->reclaim.lock);
> + if (!vm)
> + break;
... and it said the above has changed behaviour.
In the !kref_get_unless_zero() case you now assign vm = NULL which then
leads to the 'break' case above. Previously we 'continue'd.
Thanks,
Steve