Re: [PATCH 1/1] i2c: acpi: Unbind mux adapters before delete

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2024-02-29 at 11:54 +0200, Mika Westerberg wrote:
> On Wed, Feb 28, 2024 at 03:39:25PM +1300, Hamish Martin wrote:
> > Unbind any i2c_adapters matching an ACPI device being removed. This
> > ensures that the linkage between the ACPI device and the
> > i2c_adapter is
> > correctly broken before the ACPI device is destroyed.

> I suggest to move some of the information from the cover letter here
> to
> make sure it is not lost. It includes good analysis of the problem so
> should be part of the changelog.
OK, thanks Mika. I will do that.

> 
> > Signed-off-by: Hamish Martin <hamish.martin@xxxxxxxxxxxxxxxxxxx>
> > ---
> >  drivers/i2c/i2c-core-acpi.c | 19 +++++++++++++++----
> >  1 file changed, 15 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-
> > acpi.c
> > index d6037a328669..67fa8deccef6 100644
> > --- a/drivers/i2c/i2c-core-acpi.c
> > +++ b/drivers/i2c/i2c-core-acpi.c
> > @@ -445,6 +445,11 @@ static struct i2c_client
> > *i2c_acpi_find_client_by_adev(struct acpi_device *adev)
> >         return i2c_find_device_by_fwnode(acpi_fwnode_handle(adev));
> >  }
> >  
> > +static struct i2c_adapter *i2c_acpi_find_adapter_by_adev(struct
> > acpi_device *adev)
> > +{
> > +       return
> > i2c_find_adapter_by_fwnode(acpi_fwnode_handle(adev));
> > +}
> > +
> >  static int i2c_acpi_notify(struct notifier_block *nb, unsigned
> > long value,
> >                            void *arg)
> >  {
> > @@ -471,11 +476,17 @@ static int i2c_acpi_notify(struct
> > notifier_block *nb, unsigned long value,
> >                         break;
> >  
> >                 client = i2c_acpi_find_client_by_adev(adev);
> > -               if (!client)
> > -                       break;
> > +               if (client) {
> > +                       i2c_unregister_device(client);
> > +                       put_device(&client->dev);
> > +               }
> > +
> > +               adapter = i2c_acpi_find_adapter_by_adev(adev);
> > +               if (adapter) {
> > +                       acpi_device_notify_remove(&adapter->dev);
> > +                       put_device(&adapter->dev);
> > +               }
> 
> This looks good to me. I'm just wondering whether we have the same
> issue
> on DT side too?
We don't see that. We have plenty of systems with the same basic
hardware layout using device tree and don't observe this kind of issue.

> 
> >  
> > -               i2c_unregister_device(client);
> > -               put_device(&client->dev);
> >                 break;
> >         }
> >  
> > -- 
> > 2.43.0





[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux