On Mon, Mar 25, 2024 at 1:34 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > The infinite loops is harder to understand (as one has to go > over the body in order to find main exit conditional) and it's > more verbose than usual approach with a while-loop. > > Note, we may not use list_for_each_entry_safe() as there is locking > involved and the saved pointer may become invalid behind our back. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > drivers/acpi/scan.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c > index 7c157bf92695..5e4118970285 100644 > --- a/drivers/acpi/scan.c > +++ b/drivers/acpi/scan.c > @@ -530,15 +530,10 @@ static DEFINE_MUTEX(acpi_device_del_lock); > > static void acpi_device_del_work_fn(struct work_struct *work_not_used) > { > - for (;;) { > - struct acpi_device *adev; > + struct acpi_device *adev; > > - mutex_lock(&acpi_device_del_lock); > - > - if (list_empty(&acpi_device_del_list)) { > - mutex_unlock(&acpi_device_del_lock); > - break; > - } > + mutex_lock(&acpi_device_del_lock); > + while (!list_empty(&acpi_device_del_list)) { > adev = list_first_entry(&acpi_device_del_list, > struct acpi_device, del_list); > list_del(&adev->del_list); > @@ -555,7 +550,10 @@ static void acpi_device_del_work_fn(struct work_struct *work_not_used) > */ > acpi_power_transition(adev, ACPI_STATE_D3_COLD); > acpi_dev_put(adev); > + > + mutex_lock(&acpi_device_del_lock); > } > + mutex_unlock(&acpi_device_del_lock); > } > > /** > -- I don't quite agree with this one, sorry. The rest of the series has been applied as 6.10 material. Thanks!