mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference
@ 2026-07-16 13:25 Johan Hovold
  2026-07-16 16:47 ` Manivannan Sadhasivam
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Johan Hovold @ 2026-07-16 13:25 UTC (permalink / raw)
  To: Bartosz Golaszewski, Manivannan Sadhasivam
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Johan Hovold

The i2c subsystem currently blocks during adapter deregistration
whenever there are consumers holding a reference.

Switch to using of_get_i2c_adapter_by_node() which also takes a
reference to the adapter module so that an attempt to unload the module
while in use fails gracefully instead of blocking uninterruptibly.

Signed-off-by: Johan Hovold <johan@kernel.org>
---
 drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
index 1555e8a9b3ca..e6a8abd9da8e 100644
--- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
+++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
@@ -548,7 +548,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
 		return dev_err_probe(dev, ret, "Failed to read i2c-parent property\n");
 
 	i2c_node = of_parse_phandle(dev->of_node, "i2c-parent", 0);
-	tc9563->adapter = of_find_i2c_adapter_by_node(i2c_node);
+	tc9563->adapter = of_get_i2c_adapter_by_node(i2c_node);
 	of_node_put(i2c_node);
 	if (!tc9563->adapter)
 		return dev_err_probe(dev, -EPROBE_DEFER, "Failed to find I2C adapter\n");
@@ -556,7 +556,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
 	tc9563->client = i2c_new_dummy_device(tc9563->adapter, addr);
 	if (IS_ERR(tc9563->client)) {
 		dev_err(dev, "Failed to create I2C client\n");
-		put_device(&tc9563->adapter->dev);
+		i2c_put_adapter(tc9563->adapter);
 		return PTR_ERR(tc9563->client);
 	}
 
@@ -624,7 +624,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
 	tc9563_pwrctrl_power_off(&tc9563->pwrctrl);
 remove_i2c:
 	i2c_unregister_device(tc9563->client);
-	put_device(&tc9563->adapter->dev);
+	i2c_put_adapter(tc9563->adapter);
 	return ret;
 }
 
@@ -636,7 +636,7 @@ static void tc9563_pwrctrl_remove(struct platform_device *pdev)
 
 	tc9563_pwrctrl_power_off(&tc9563->pwrctrl);
 	i2c_unregister_device(tc9563->client);
-	put_device(&tc9563->adapter->dev);
+	i2c_put_adapter(tc9563->adapter);
 }
 
 static const struct of_device_id tc9563_pwrctrl_of_match[] = {
-- 
2.54.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference
  2026-07-16 13:25 [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference Johan Hovold
@ 2026-07-16 16:47 ` Manivannan Sadhasivam
  2026-07-17  8:59 ` Bartosz Golaszewski
  2026-07-17 16:58 ` Bjorn Helgaas
  2 siblings, 0 replies; 7+ messages in thread
From: Manivannan Sadhasivam @ 2026-07-16 16:47 UTC (permalink / raw)
  To: Johan Hovold; +Cc: Bartosz Golaszewski, Bjorn Helgaas, linux-pci, linux-kernel

On Thu, Jul 16, 2026 at 03:25:32PM +0200, Johan Hovold wrote:
> The i2c subsystem currently blocks during adapter deregistration
> whenever there are consumers holding a reference.
> 
> Switch to using of_get_i2c_adapter_by_node() which also takes a
> reference to the adapter module so that an attempt to unload the module
> while in use fails gracefully instead of blocking uninterruptibly.
> 
> Signed-off-by: Johan Hovold <johan@kernel.org>

Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>

- Mani

> ---
>  drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> index 1555e8a9b3ca..e6a8abd9da8e 100644
> --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> @@ -548,7 +548,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
>  		return dev_err_probe(dev, ret, "Failed to read i2c-parent property\n");
>  
>  	i2c_node = of_parse_phandle(dev->of_node, "i2c-parent", 0);
> -	tc9563->adapter = of_find_i2c_adapter_by_node(i2c_node);
> +	tc9563->adapter = of_get_i2c_adapter_by_node(i2c_node);
>  	of_node_put(i2c_node);
>  	if (!tc9563->adapter)
>  		return dev_err_probe(dev, -EPROBE_DEFER, "Failed to find I2C adapter\n");
> @@ -556,7 +556,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
>  	tc9563->client = i2c_new_dummy_device(tc9563->adapter, addr);
>  	if (IS_ERR(tc9563->client)) {
>  		dev_err(dev, "Failed to create I2C client\n");
> -		put_device(&tc9563->adapter->dev);
> +		i2c_put_adapter(tc9563->adapter);
>  		return PTR_ERR(tc9563->client);
>  	}
>  
> @@ -624,7 +624,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
>  	tc9563_pwrctrl_power_off(&tc9563->pwrctrl);
>  remove_i2c:
>  	i2c_unregister_device(tc9563->client);
> -	put_device(&tc9563->adapter->dev);
> +	i2c_put_adapter(tc9563->adapter);
>  	return ret;
>  }
>  
> @@ -636,7 +636,7 @@ static void tc9563_pwrctrl_remove(struct platform_device *pdev)
>  
>  	tc9563_pwrctrl_power_off(&tc9563->pwrctrl);
>  	i2c_unregister_device(tc9563->client);
> -	put_device(&tc9563->adapter->dev);
> +	i2c_put_adapter(tc9563->adapter);
>  }
>  
>  static const struct of_device_id tc9563_pwrctrl_of_match[] = {
> -- 
> 2.54.0
> 

-- 
மணிவண்ணன் சதாசிவம்

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference
  2026-07-16 13:25 [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference Johan Hovold
  2026-07-16 16:47 ` Manivannan Sadhasivam
@ 2026-07-17  8:59 ` Bartosz Golaszewski
  2026-07-17 16:58 ` Bjorn Helgaas
  2 siblings, 0 replies; 7+ messages in thread
From: Bartosz Golaszewski @ 2026-07-17  8:59 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Bartosz Golaszewski,
	Manivannan Sadhasivam

On Thu, 16 Jul 2026 15:25:32 +0200, Johan Hovold <johan@kernel.org> said:
> The i2c subsystem currently blocks during adapter deregistration
> whenever there are consumers holding a reference.
>
> Switch to using of_get_i2c_adapter_by_node() which also takes a
> reference to the adapter module so that an attempt to unload the module
> while in use fails gracefully instead of blocking uninterruptibly.
>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---

Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference
  2026-07-16 13:25 [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference Johan Hovold
  2026-07-16 16:47 ` Manivannan Sadhasivam
  2026-07-17  8:59 ` Bartosz Golaszewski
@ 2026-07-17 16:58 ` Bjorn Helgaas
  2026-07-20 10:12   ` Johan Hovold
  2 siblings, 1 reply; 7+ messages in thread
From: Bjorn Helgaas @ 2026-07-17 16:58 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Bartosz Golaszewski, Manivannan Sadhasivam, Bjorn Helgaas,
	linux-pci, linux-kernel

On Thu, Jul 16, 2026 at 03:25:32PM +0200, Johan Hovold wrote:
> The i2c subsystem currently blocks during adapter deregistration
> whenever there are consumers holding a reference.
> 
> Switch to using of_get_i2c_adapter_by_node() which also takes a
> reference to the adapter module so that an attempt to unload the module
> while in use fails gracefully instead of blocking uninterruptibly.
> 
> Signed-off-by: Johan Hovold <johan@kernel.org>

Applied to pci/pwrctrl for v7.3, thanks!

Gemini suggested minor commit log rewording, let me know if it makes it
worse.  I do like the impact being mentioned in the subject:

  PCI/pwrctrl: tc9563: Avoid uninterruptible hang on in-use I2C module unload

  The I2C subsystem blocks during adapter deregistration if there are
  consumers actively holding a reference.

  Switch to of_get_i2c_adapter_by_node(), which also takes a reference to the
  adapter module, so an attempt to unload the module while in use will fail
  gracefully instead of blocking uninterruptibly.

> ---
>  drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> index 1555e8a9b3ca..e6a8abd9da8e 100644
> --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> @@ -548,7 +548,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
>  		return dev_err_probe(dev, ret, "Failed to read i2c-parent property\n");
>  
>  	i2c_node = of_parse_phandle(dev->of_node, "i2c-parent", 0);
> -	tc9563->adapter = of_find_i2c_adapter_by_node(i2c_node);
> +	tc9563->adapter = of_get_i2c_adapter_by_node(i2c_node);
>  	of_node_put(i2c_node);
>  	if (!tc9563->adapter)
>  		return dev_err_probe(dev, -EPROBE_DEFER, "Failed to find I2C adapter\n");
> @@ -556,7 +556,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
>  	tc9563->client = i2c_new_dummy_device(tc9563->adapter, addr);
>  	if (IS_ERR(tc9563->client)) {
>  		dev_err(dev, "Failed to create I2C client\n");
> -		put_device(&tc9563->adapter->dev);
> +		i2c_put_adapter(tc9563->adapter);
>  		return PTR_ERR(tc9563->client);
>  	}
>  
> @@ -624,7 +624,7 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
>  	tc9563_pwrctrl_power_off(&tc9563->pwrctrl);
>  remove_i2c:
>  	i2c_unregister_device(tc9563->client);
> -	put_device(&tc9563->adapter->dev);
> +	i2c_put_adapter(tc9563->adapter);
>  	return ret;
>  }
>  
> @@ -636,7 +636,7 @@ static void tc9563_pwrctrl_remove(struct platform_device *pdev)
>  
>  	tc9563_pwrctrl_power_off(&tc9563->pwrctrl);
>  	i2c_unregister_device(tc9563->client);
> -	put_device(&tc9563->adapter->dev);
> +	i2c_put_adapter(tc9563->adapter);
>  }
>  
>  static const struct of_device_id tc9563_pwrctrl_of_match[] = {
> -- 
> 2.54.0
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference
  2026-07-17 16:58 ` Bjorn Helgaas
@ 2026-07-20 10:12   ` Johan Hovold
  2026-07-20 11:04     ` Bjorn Helgaas
  0 siblings, 1 reply; 7+ messages in thread
From: Johan Hovold @ 2026-07-20 10:12 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Bartosz Golaszewski, Manivannan Sadhasivam, Bjorn Helgaas,
	linux-pci, linux-kernel

On Fri, Jul 17, 2026 at 11:58:41AM -0500, Bjorn Helgaas wrote:
> On Thu, Jul 16, 2026 at 03:25:32PM +0200, Johan Hovold wrote:
> > The i2c subsystem currently blocks during adapter deregistration
> > whenever there are consumers holding a reference.
> > 
> > Switch to using of_get_i2c_adapter_by_node() which also takes a
> > reference to the adapter module so that an attempt to unload the module
> > while in use fails gracefully instead of blocking uninterruptibly.
> > 
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> 
> Applied to pci/pwrctrl for v7.3, thanks!
> 
> Gemini suggested minor commit log rewording, let me know if it makes it
> worse.  I do like the impact being mentioned in the subject:
> 
>   PCI/pwrctrl: tc9563: Avoid uninterruptible hang on in-use I2C module unload
> 
>   The I2C subsystem blocks during adapter deregistration if there are
>   consumers actively holding a reference.
> 
>   Switch to of_get_i2c_adapter_by_node(), which also takes a reference to the
>   adapter module, so an attempt to unload the module while in use will fail
>   gracefully instead of blocking uninterruptibly.

No, please don't rewrite my commit messages (and especially not without
clearly documenting that you've done).

If you have any concerns about the wording, I can try to accommodate
those in a v2.

If I had considered this to be a fix (the line is admittedly blurry) I
would also have tried to be more explicit about the impact in the
summary. But here I think the existing summary is sufficient.

Note that I've sent similar changes for other subsystems and there is
some value in using the same patch summary (modulo subsystem preferences
for capitalisation, etc).

Johan

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference
  2026-07-20 10:12   ` Johan Hovold
@ 2026-07-20 11:04     ` Bjorn Helgaas
  2026-07-20 12:05       ` Johan Hovold
  0 siblings, 1 reply; 7+ messages in thread
From: Bjorn Helgaas @ 2026-07-20 11:04 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Bartosz Golaszewski, Manivannan Sadhasivam, Bjorn Helgaas,
	linux-pci, linux-kernel

On Mon, Jul 20, 2026 at 12:12:39PM +0200, Johan Hovold wrote:
> On Fri, Jul 17, 2026 at 11:58:41AM -0500, Bjorn Helgaas wrote:
> > On Thu, Jul 16, 2026 at 03:25:32PM +0200, Johan Hovold wrote:
> > > The i2c subsystem currently blocks during adapter deregistration
> > > whenever there are consumers holding a reference.
> > > 
> > > Switch to using of_get_i2c_adapter_by_node() which also takes a
> > > reference to the adapter module so that an attempt to unload the module
> > > while in use fails gracefully instead of blocking uninterruptibly.
> > > 
> > > Signed-off-by: Johan Hovold <johan@kernel.org>
> > 
> > Applied to pci/pwrctrl for v7.3, thanks!
> > 
> > Gemini suggested minor commit log rewording, let me know if it makes it
> > worse.  I do like the impact being mentioned in the subject:
> > 
> >   PCI/pwrctrl: tc9563: Avoid uninterruptible hang on in-use I2C module unload
> > 
> >   The I2C subsystem blocks during adapter deregistration if there are
> >   consumers actively holding a reference.
> > 
> >   Switch to of_get_i2c_adapter_by_node(), which also takes a reference to the
> >   adapter module, so an attempt to unload the module while in use will fail
> >   gracefully instead of blocking uninterruptibly.
> 
> No, please don't rewrite my commit messages (and especially not without
> clearly documenting that you've done).
> 
> If you have any concerns about the wording, I can try to accommodate
> those in a v2.
> 
> If I had considered this to be a fix (the line is admittedly blurry) I
> would also have tried to be more explicit about the impact in the
> summary. But here I think the existing summary is sufficient.
> 
> Note that I've sent similar changes for other subsystems and there is
> some value in using the same patch summary (modulo subsystem preferences
> for capitalisation, etc).

You're right, I'm sorry.  I used your original commit message.  I
assumed this was for v7.3, but let me know if it should be for v7.2.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference
  2026-07-20 11:04     ` Bjorn Helgaas
@ 2026-07-20 12:05       ` Johan Hovold
  0 siblings, 0 replies; 7+ messages in thread
From: Johan Hovold @ 2026-07-20 12:05 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Bartosz Golaszewski, Manivannan Sadhasivam, Bjorn Helgaas,
	linux-pci, linux-kernel

On Mon, Jul 20, 2026 at 06:04:17AM -0500, Bjorn Helgaas wrote:

> You're right, I'm sorry.  I used your original commit message.  I
> assumed this was for v7.3, but let me know if it should be for v7.2.

Thanks. And yes, this was intended for 7.3.

Johan

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-07-20 12:05 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-16 13:25 [PATCH] PCI/pwrctrl: tc9563: take i2c adapter module reference Johan Hovold
2026-07-16 16:47 ` Manivannan Sadhasivam
2026-07-17  8:59 ` Bartosz Golaszewski
2026-07-17 16:58 ` Bjorn Helgaas
2026-07-20 10:12   ` Johan Hovold
2026-07-20 11:04     ` Bjorn Helgaas
2026-07-20 12:05       ` Johan Hovold

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome