On Tue, 10 Jun 2025 10:11:38 +0200 Kory Maincent wrote: > +static void __pse_pw_d_release(struct kref *kref) > +{ > + struct pse_power_domain *pw_d = container_of(kref, > + struct pse_power_domain, > + refcnt); > + > + regulator_put(pw_d->supply); > + xa_erase(&pse_pw_d_map, pw_d->id); > +} > + > +/** > + * pse_flush_pw_ds - flush all PSE power domains of a PSE > + * @pcdev: a pointer to the initialized PSE controller device > + */ > +static void pse_flush_pw_ds(struct pse_controller_dev *pcdev) > +{ > + struct pse_power_domain *pw_d; > + int i; > + > + for (i = 0; i < pcdev->nr_lines; i++) { > + if (!pcdev->pi[i].pw_d) > + continue; > + > + pw_d = xa_load(&pse_pw_d_map, pcdev->pi[i].pw_d->id); > + if (!pw_d) > + continue; > + > + kref_put_mutex(&pw_d->refcnt, __pse_pw_d_release, > + &pse_pw_d_mutex); > + } > +} AFAIU the release function (__pse_pw_d_release) is supposed to release the mutex.