linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop()
@ 2021-07-27 10:23 Tony Lindgren
  2021-07-27 10:23 ` [PATCH 2/6] crypto: omap-sham - initialize req only after omap_sham_hw_init() Tony Lindgren
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Tony Lindgren @ 2021-07-27 10:23 UTC (permalink / raw)
  To: David S . Miller, Herbert Xu, linux-kernel, linux-omap
  Cc: linux-crypto, Lokesh Vutla, Tero Kristo

We should not clear FLAGS_DMA_ACTIVE before omap_sham_update_dma_stop() is
done calling dma_unmap_sg(). We already clear FLAGS_DMA_ACTIVE at the
end of omap_sham_update_dma_stop().

The early clearing of FLAGS_DMA_ACTIVE is not causing issues as we do not
need to defer anything based on FLAGS_DMA_ACTIVE currently. So this can be
applied as clean-up.

Cc: Lokesh Vutla <lokeshvutla@ti.com>
Cc: Tero Kristo <kristo@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 drivers/crypto/omap-sham.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -1736,7 +1736,7 @@ static void omap_sham_done_task(unsigned long data)
 		if (test_and_clear_bit(FLAGS_OUTPUT_READY, &dd->flags))
 			goto finish;
 	} else if (test_bit(FLAGS_DMA_READY, &dd->flags)) {
-		if (test_and_clear_bit(FLAGS_DMA_ACTIVE, &dd->flags)) {
+		if (test_bit(FLAGS_DMA_ACTIVE, &dd->flags)) {
 			omap_sham_update_dma_stop(dd);
 			if (dd->err) {
 				err = dd->err;
-- 
2.32.0

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

* [PATCH 2/6] crypto: omap-sham - initialize req only after omap_sham_hw_init()
  2021-07-27 10:23 [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Tony Lindgren
@ 2021-07-27 10:23 ` Tony Lindgren
  2021-07-27 10:23 ` [PATCH 3/6] crypto: omap-sham - add missing pm_runtime_dontuse_autosuspend() Tony Lindgren
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Lindgren @ 2021-07-27 10:23 UTC (permalink / raw)
  To: David S . Miller, Herbert Xu, linux-kernel, linux-omap
  Cc: linux-crypto, Lokesh Vutla, Tero Kristo

Let's only initialize dd->req after omap_sham_hw_init() in case of
errors.

Looks like leaving dd->req initialized on omap_sham_hw_init() errors is
is not causing issues though as we return on errors. So this patch can be
applied as clean-up.

Cc: Lokesh Vutla <lokeshvutla@ti.com>
Cc: Tero Kristo <kristo@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 drivers/crypto/omap-sham.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -1093,12 +1093,12 @@ static int omap_sham_hash_one_req(struct crypto_engine *engine, void *areq)
 	dev_dbg(dd->dev, "hash-one: op: %u, total: %u, digcnt: %zd, final: %d",
 		ctx->op, ctx->total, ctx->digcnt, final);
 
-	dd->req = req;
-
 	err = omap_sham_hw_init(dd);
 	if (err)
 		return err;
 
+	dd->req = req;
+
 	if (ctx->digcnt)
 		dd->pdata->copy_hash(req, 0);
 
-- 
2.32.0

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

* [PATCH 3/6] crypto: omap-sham - add missing pm_runtime_dontuse_autosuspend()
  2021-07-27 10:23 [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Tony Lindgren
  2021-07-27 10:23 ` [PATCH 2/6] crypto: omap-sham - initialize req only after omap_sham_hw_init() Tony Lindgren
@ 2021-07-27 10:23 ` Tony Lindgren
  2021-07-27 10:23 ` [PATCH 4/6] crypto: omap-sham - drop old hw_init and unused FLAGS_INIT Tony Lindgren
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Lindgren @ 2021-07-27 10:23 UTC (permalink / raw)
  To: David S . Miller, Herbert Xu, linux-kernel, linux-omap
  Cc: linux-crypto, Lokesh Vutla, Tero Kristo

We should pair the usage of pm_runtime_use_autosuspend() with
pm_runtime_dont_use_autosuspend().

Cc: Lokesh Vutla <lokeshvutla@ti.com>
Cc: Tero Kristo <kristo@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 drivers/crypto/omap-sham.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -2198,6 +2198,7 @@ static int omap_sham_probe(struct platform_device *pdev)
 	list_del(&dd->list);
 	spin_unlock(&sham.lock);
 err_pm:
+	pm_runtime_dont_use_autosuspend(dev);
 	pm_runtime_disable(dev);
 	if (!dd->polling_mode)
 		dma_release_channel(dd->dma_lch);
@@ -2225,6 +2226,7 @@ static int omap_sham_remove(struct platform_device *pdev)
 			dd->pdata->algs_info[i].registered--;
 		}
 	tasklet_kill(&dd->done_task);
+	pm_runtime_dont_use_autosuspend(&pdev->dev);
 	pm_runtime_disable(&pdev->dev);
 
 	if (!dd->polling_mode)
-- 
2.32.0

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

* [PATCH 4/6] crypto: omap-sham - drop old hw_init and unused FLAGS_INIT
  2021-07-27 10:23 [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Tony Lindgren
  2021-07-27 10:23 ` [PATCH 2/6] crypto: omap-sham - initialize req only after omap_sham_hw_init() Tony Lindgren
  2021-07-27 10:23 ` [PATCH 3/6] crypto: omap-sham - add missing pm_runtime_dontuse_autosuspend() Tony Lindgren
@ 2021-07-27 10:23 ` Tony Lindgren
  2021-07-27 10:23 ` [PATCH 5/6] crypto: omap-sham - drop suspend and resume functions Tony Lindgren
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Lindgren @ 2021-07-27 10:23 UTC (permalink / raw)
  To: David S . Miller, Herbert Xu, linux-kernel, linux-omap
  Cc: linux-crypto, Lokesh Vutla, Tero Kristo

FLAGS_INIT is now unused and we can just use standard runtime PM
functions instead.

Cc: Lokesh Vutla <lokeshvutla@ti.com>
Cc: Tero Kristo <kristo@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 drivers/crypto/omap-sham.c | 26 +++++---------------------
 1 file changed, 5 insertions(+), 21 deletions(-)

diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -105,7 +105,6 @@
 #define FLAGS_FINAL		1
 #define FLAGS_DMA_ACTIVE	2
 #define FLAGS_OUTPUT_READY	3
-#define FLAGS_INIT		4
 #define FLAGS_CPU		5
 #define FLAGS_DMA_READY		6
 #define FLAGS_AUTO_XOR		7
@@ -368,24 +367,6 @@ static void omap_sham_copy_ready_hash(struct ahash_request *req)
 			hash[i] = le32_to_cpup((__le32 *)in + i);
 }
 
-static int omap_sham_hw_init(struct omap_sham_dev *dd)
-{
-	int err;
-
-	err = pm_runtime_resume_and_get(dd->dev);
-	if (err < 0) {
-		dev_err(dd->dev, "failed to get sync: %d\n", err);
-		return err;
-	}
-
-	if (!test_bit(FLAGS_INIT, &dd->flags)) {
-		set_bit(FLAGS_INIT, &dd->flags);
-		dd->err = 0;
-	}
-
-	return 0;
-}
-
 static void omap_sham_write_ctrl_omap2(struct omap_sham_dev *dd, size_t length,
 				 int final, int dma)
 {
@@ -1093,10 +1074,13 @@ static int omap_sham_hash_one_req(struct crypto_engine *engine, void *areq)
 	dev_dbg(dd->dev, "hash-one: op: %u, total: %u, digcnt: %zd, final: %d",
 		ctx->op, ctx->total, ctx->digcnt, final);
 
-	err = omap_sham_hw_init(dd);
-	if (err)
+	err = pm_runtime_resume_and_get(dd->dev);
+	if (err < 0) {
+		dev_err(dd->dev, "failed to get sync: %d\n", err);
 		return err;
+	}
 
+	dd->err = 0;
 	dd->req = req;
 
 	if (ctx->digcnt)
-- 
2.32.0

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

* [PATCH 5/6] crypto: omap-sham - drop suspend and resume functions
  2021-07-27 10:23 [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Tony Lindgren
                   ` (2 preceding siblings ...)
  2021-07-27 10:23 ` [PATCH 4/6] crypto: omap-sham - drop old hw_init and unused FLAGS_INIT Tony Lindgren
@ 2021-07-27 10:23 ` Tony Lindgren
  2021-07-27 10:23 ` [PATCH 6/6] crypto: omap-sham - drop pm_runtime_irqsafe() usage Tony Lindgren
  2021-08-06 12:14 ` [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Herbert Xu
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Lindgren @ 2021-07-27 10:23 UTC (permalink / raw)
  To: David S . Miller, Herbert Xu, linux-kernel, linux-omap
  Cc: linux-crypto, Lokesh Vutla, Tero Kristo

Let's get rid of the suspend and resume calls to runtime PM as these calls
do not idle the hardware. The runtime suspend has been disabled for
system suspend since commit 88d26136a256 ("PM: Prevent runtime suspend
during system resume").

Instead of runtime PM, the system suspend and resume functions should call
driver internal shared functions to idle the hardware as needed.

Cc: Lokesh Vutla <lokeshvutla@ti.com>
Cc: Tero Kristo <kristo@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 drivers/crypto/omap-sham.c | 21 ---------------------
 1 file changed, 21 deletions(-)

diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -2221,32 +2221,11 @@ static int omap_sham_remove(struct platform_device *pdev)
 	return 0;
 }
 
-#ifdef CONFIG_PM_SLEEP
-static int omap_sham_suspend(struct device *dev)
-{
-	pm_runtime_put_sync(dev);
-	return 0;
-}
-
-static int omap_sham_resume(struct device *dev)
-{
-	int err = pm_runtime_resume_and_get(dev);
-	if (err < 0) {
-		dev_err(dev, "failed to get sync: %d\n", err);
-		return err;
-	}
-	return 0;
-}
-#endif
-
-static SIMPLE_DEV_PM_OPS(omap_sham_pm_ops, omap_sham_suspend, omap_sham_resume);
-
 static struct platform_driver omap_sham_driver = {
 	.probe	= omap_sham_probe,
 	.remove	= omap_sham_remove,
 	.driver	= {
 		.name	= "omap-sham",
-		.pm	= &omap_sham_pm_ops,
 		.of_match_table	= omap_sham_of_match,
 	},
 };
-- 
2.32.0

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

* [PATCH 6/6] crypto: omap-sham - drop pm_runtime_irqsafe() usage
  2021-07-27 10:23 [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Tony Lindgren
                   ` (3 preceding siblings ...)
  2021-07-27 10:23 ` [PATCH 5/6] crypto: omap-sham - drop suspend and resume functions Tony Lindgren
@ 2021-07-27 10:23 ` Tony Lindgren
  2021-08-06 12:14 ` [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Herbert Xu
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Lindgren @ 2021-07-27 10:23 UTC (permalink / raw)
  To: David S . Miller, Herbert Xu, linux-kernel, linux-omap
  Cc: linux-crypto, Lokesh Vutla, Tero Kristo

Commit b0a3d8986a76 ("crypto: omap-sham - Use pm_runtime_irq_safe()") added
the use of pm_runtime_irq_safe() as pm_runtime_get_sync() was called
from a tasklet.

We now use the crypto engine queue instead of a custom queue since
commit 33c3d434d91 ("crypto: omap-sham - convert to use crypto engine").

We want to drop the use of pm_runtime_irq_safe() in general as it takes a
permanent usage count on the parent device causing issues for power
management.

Based on testing with CONFIG_DEBUG_ATOMIC_SLEEP=y, modprobe omap-sham,
followed by modprobe tcrypt sec=1 mode=423, I have not been able to
reproduce the scheduling while atomic issue seen earlier with current
kernels and we can just drop the call to pm_runtime_irq_safe().

Cc: Lokesh Vutla <lokeshvutla@ti.com>
Cc: Tero Kristo <kristo@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 drivers/crypto/omap-sham.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -2113,7 +2113,6 @@ static int omap_sham_probe(struct platform_device *pdev)
 	dd->fallback_sz = OMAP_SHA_DMA_THRESHOLD;
 
 	pm_runtime_enable(dev);
-	pm_runtime_irq_safe(dev);
 
 	err = pm_runtime_get_sync(dev);
 	if (err < 0) {
-- 
2.32.0

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

* Re: [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop()
  2021-07-27 10:23 [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Tony Lindgren
                   ` (4 preceding siblings ...)
  2021-07-27 10:23 ` [PATCH 6/6] crypto: omap-sham - drop pm_runtime_irqsafe() usage Tony Lindgren
@ 2021-08-06 12:14 ` Herbert Xu
  5 siblings, 0 replies; 7+ messages in thread
From: Herbert Xu @ 2021-08-06 12:14 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: David S . Miller, linux-kernel, linux-omap, linux-crypto,
	Lokesh Vutla, Tero Kristo

On Tue, Jul 27, 2021 at 01:23:34PM +0300, Tony Lindgren wrote:
> We should not clear FLAGS_DMA_ACTIVE before omap_sham_update_dma_stop() is
> done calling dma_unmap_sg(). We already clear FLAGS_DMA_ACTIVE at the
> end of omap_sham_update_dma_stop().
> 
> The early clearing of FLAGS_DMA_ACTIVE is not causing issues as we do not
> need to defer anything based on FLAGS_DMA_ACTIVE currently. So this can be
> applied as clean-up.
> 
> Cc: Lokesh Vutla <lokeshvutla@ti.com>
> Cc: Tero Kristo <kristo@kernel.org>
> Signed-off-by: Tony Lindgren <tony@atomide.com>
> ---
>  drivers/crypto/omap-sham.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

All applied.  Thanks.
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

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

end of thread, other threads:[~2021-08-06 12:14 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-27 10:23 [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Tony Lindgren
2021-07-27 10:23 ` [PATCH 2/6] crypto: omap-sham - initialize req only after omap_sham_hw_init() Tony Lindgren
2021-07-27 10:23 ` [PATCH 3/6] crypto: omap-sham - add missing pm_runtime_dontuse_autosuspend() Tony Lindgren
2021-07-27 10:23 ` [PATCH 4/6] crypto: omap-sham - drop old hw_init and unused FLAGS_INIT Tony Lindgren
2021-07-27 10:23 ` [PATCH 5/6] crypto: omap-sham - drop suspend and resume functions Tony Lindgren
2021-07-27 10:23 ` [PATCH 6/6] crypto: omap-sham - drop pm_runtime_irqsafe() usage Tony Lindgren
2021-08-06 12:14 ` [PATCH 1/6] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Herbert Xu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).