Hi Arnd, Thanks for the review feedback. On Thu, 20 Jun 2024 at 12:40, Arnd Bergmann <arnd@xxxxxxxx> wrote: > > > On Thu, Jun 20, 2024, at 13:24, Peter Griffin wrote: > > Signed-off-by: Peter Griffin <peter.griffin@xxxxxxxxxx> > > Reviewed-by: Arnd Bergmann <arnd@xxxxxxxx> > > Reviewed-by: Sam Protsenko <semen.protsenko@xxxxxxxxxx> > > --- > > Changes in v2: > > - Keep syscon lock held between checking and adding entry (Krzysztof) > > Unfortunately you now have a different bug: > > > + /* check if syscon entry already exists */ > > + spin_lock(&syscon_list_slock); > > + > > + list_for_each_entry(entry, &syscon_list, list) > > + if (entry->np == np) { > > + syscon = entry; > > + break; > > + } > > + > > + if (syscon) { > > + ret = -EEXIST; > > + goto err_unlock; > > + } > > + > > + syscon = kzalloc(sizeof(*syscon), GFP_KERNEL); > > + if (!syscon) { > > + ret = -ENOMEM; > > + goto err_unlock; > > + } > > You can't use GFP_KERNEL while holding a spinlock. > > I think the correct way to do this is to move the allocation > before the locked section, and then free it in the failure case. Thanks for spotting this! I'll update as you suggest in v3. Peter.