crypto: omap - convert from tasklet to BH workqueue
tasklet has been marked deprecated and it's planned to be removed. Make omap crypto drivers to use BH workqueue which is the new interface for executing in BH context in place of tasklet. Signed-off-by: Ryo Takakura <ryotkkr98@gmail.com> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>pull/1354/merge
parent
1e26339703
commit
381e8ee368
|
|
@ -32,6 +32,7 @@
|
|||
#include <linux/pm_runtime.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#include "omap-crypto.h"
|
||||
#include "omap-aes.h"
|
||||
|
|
@ -221,7 +222,7 @@ static void omap_aes_dma_out_callback(void *data)
|
|||
struct omap_aes_dev *dd = data;
|
||||
|
||||
/* dma_lch_out - completed */
|
||||
tasklet_schedule(&dd->done_task);
|
||||
queue_work(system_bh_wq, &dd->done_task);
|
||||
}
|
||||
|
||||
static int omap_aes_dma_init(struct omap_aes_dev *dd)
|
||||
|
|
@ -494,9 +495,9 @@ static void omap_aes_copy_ivout(struct omap_aes_dev *dd, u8 *ivbuf)
|
|||
((u32 *)ivbuf)[i] = omap_aes_read(dd, AES_REG_IV(dd, i));
|
||||
}
|
||||
|
||||
static void omap_aes_done_task(unsigned long data)
|
||||
static void omap_aes_done_task(struct work_struct *t)
|
||||
{
|
||||
struct omap_aes_dev *dd = (struct omap_aes_dev *)data;
|
||||
struct omap_aes_dev *dd = from_work(dd, t, done_task);
|
||||
|
||||
pr_debug("enter done_task\n");
|
||||
|
||||
|
|
@ -925,7 +926,7 @@ static irqreturn_t omap_aes_irq(int irq, void *dev_id)
|
|||
|
||||
if (!dd->total)
|
||||
/* All bytes read! */
|
||||
tasklet_schedule(&dd->done_task);
|
||||
queue_work(system_bh_wq, &dd->done_task);
|
||||
else
|
||||
/* Enable DATA_IN interrupt for next block */
|
||||
omap_aes_write(dd, AES_REG_IRQ_ENABLE(dd), 0x2);
|
||||
|
|
@ -1140,7 +1141,7 @@ static int omap_aes_probe(struct platform_device *pdev)
|
|||
(reg & dd->pdata->major_mask) >> dd->pdata->major_shift,
|
||||
(reg & dd->pdata->minor_mask) >> dd->pdata->minor_shift);
|
||||
|
||||
tasklet_init(&dd->done_task, omap_aes_done_task, (unsigned long)dd);
|
||||
INIT_WORK(&dd->done_task, omap_aes_done_task);
|
||||
|
||||
err = omap_aes_dma_init(dd);
|
||||
if (err == -EPROBE_DEFER) {
|
||||
|
|
@ -1229,7 +1230,7 @@ err_engine:
|
|||
|
||||
omap_aes_dma_cleanup(dd);
|
||||
err_irq:
|
||||
tasklet_kill(&dd->done_task);
|
||||
cancel_work_sync(&dd->done_task);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(dev);
|
||||
err_res:
|
||||
|
|
@ -1264,7 +1265,7 @@ static void omap_aes_remove(struct platform_device *pdev)
|
|||
|
||||
crypto_engine_exit(dd->engine);
|
||||
|
||||
tasklet_kill(&dd->done_task);
|
||||
cancel_work_sync(&dd->done_task);
|
||||
omap_aes_dma_cleanup(dd);
|
||||
pm_runtime_disable(dd->dev);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@ struct omap_aes_dev {
|
|||
unsigned long flags;
|
||||
int err;
|
||||
|
||||
struct tasklet_struct done_task;
|
||||
struct work_struct done_task;
|
||||
struct aead_queue aead_queue;
|
||||
spinlock_t lock;
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#include <linux/pm_runtime.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#include "omap-crypto.h"
|
||||
|
||||
|
|
@ -130,7 +131,7 @@ struct omap_des_dev {
|
|||
unsigned long flags;
|
||||
int err;
|
||||
|
||||
struct tasklet_struct done_task;
|
||||
struct work_struct done_task;
|
||||
|
||||
struct skcipher_request *req;
|
||||
struct crypto_engine *engine;
|
||||
|
|
@ -325,7 +326,7 @@ static void omap_des_dma_out_callback(void *data)
|
|||
struct omap_des_dev *dd = data;
|
||||
|
||||
/* dma_lch_out - completed */
|
||||
tasklet_schedule(&dd->done_task);
|
||||
queue_work(system_bh_wq, &dd->done_task);
|
||||
}
|
||||
|
||||
static int omap_des_dma_init(struct omap_des_dev *dd)
|
||||
|
|
@ -580,9 +581,9 @@ static int omap_des_crypt_req(struct crypto_engine *engine,
|
|||
omap_des_crypt_dma_start(dd);
|
||||
}
|
||||
|
||||
static void omap_des_done_task(unsigned long data)
|
||||
static void omap_des_done_task(struct work_struct *t)
|
||||
{
|
||||
struct omap_des_dev *dd = (struct omap_des_dev *)data;
|
||||
struct omap_des_dev *dd = from_work(dd, t, done_task);
|
||||
int i;
|
||||
|
||||
pr_debug("enter done_task\n");
|
||||
|
|
@ -890,7 +891,7 @@ static irqreturn_t omap_des_irq(int irq, void *dev_id)
|
|||
|
||||
if (!dd->total)
|
||||
/* All bytes read! */
|
||||
tasklet_schedule(&dd->done_task);
|
||||
queue_work(system_bh_wq, &dd->done_task);
|
||||
else
|
||||
/* Enable DATA_IN interrupt for next block */
|
||||
omap_des_write(dd, DES_REG_IRQ_ENABLE(dd), 0x2);
|
||||
|
|
@ -986,7 +987,7 @@ static int omap_des_probe(struct platform_device *pdev)
|
|||
(reg & dd->pdata->major_mask) >> dd->pdata->major_shift,
|
||||
(reg & dd->pdata->minor_mask) >> dd->pdata->minor_shift);
|
||||
|
||||
tasklet_init(&dd->done_task, omap_des_done_task, (unsigned long)dd);
|
||||
INIT_WORK(&dd->done_task, omap_des_done_task);
|
||||
|
||||
err = omap_des_dma_init(dd);
|
||||
if (err == -EPROBE_DEFER) {
|
||||
|
|
@ -1053,7 +1054,7 @@ err_engine:
|
|||
|
||||
omap_des_dma_cleanup(dd);
|
||||
err_irq:
|
||||
tasklet_kill(&dd->done_task);
|
||||
cancel_work_sync(&dd->done_task);
|
||||
err_get:
|
||||
pm_runtime_disable(dev);
|
||||
err_res:
|
||||
|
|
@ -1077,7 +1078,7 @@ static void omap_des_remove(struct platform_device *pdev)
|
|||
crypto_engine_unregister_skcipher(
|
||||
&dd->pdata->algs_info[i].algs_list[j]);
|
||||
|
||||
tasklet_kill(&dd->done_task);
|
||||
cancel_work_sync(&dd->done_task);
|
||||
omap_des_dma_cleanup(dd);
|
||||
pm_runtime_disable(dd->dev);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include <linux/scatterlist.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#define MD5_DIGEST_SIZE 16
|
||||
|
||||
|
|
@ -217,7 +218,7 @@ struct omap_sham_dev {
|
|||
int irq;
|
||||
int err;
|
||||
struct dma_chan *dma_lch;
|
||||
struct tasklet_struct done_task;
|
||||
struct work_struct done_task;
|
||||
u8 polling_mode;
|
||||
u8 xmit_buf[BUFLEN] OMAP_ALIGNED;
|
||||
|
||||
|
|
@ -561,7 +562,7 @@ static void omap_sham_dma_callback(void *param)
|
|||
struct omap_sham_dev *dd = param;
|
||||
|
||||
set_bit(FLAGS_DMA_READY, &dd->flags);
|
||||
tasklet_schedule(&dd->done_task);
|
||||
queue_work(system_bh_wq, &dd->done_task);
|
||||
}
|
||||
|
||||
static int omap_sham_xmit_dma(struct omap_sham_dev *dd, size_t length,
|
||||
|
|
@ -1703,9 +1704,9 @@ static struct ahash_engine_alg algs_sha384_sha512[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static void omap_sham_done_task(unsigned long data)
|
||||
static void omap_sham_done_task(struct work_struct *t)
|
||||
{
|
||||
struct omap_sham_dev *dd = (struct omap_sham_dev *)data;
|
||||
struct omap_sham_dev *dd = from_work(dd, t, done_task);
|
||||
int err = 0;
|
||||
|
||||
dev_dbg(dd->dev, "%s: flags=%lx\n", __func__, dd->flags);
|
||||
|
|
@ -1739,7 +1740,7 @@ finish:
|
|||
static irqreturn_t omap_sham_irq_common(struct omap_sham_dev *dd)
|
||||
{
|
||||
set_bit(FLAGS_OUTPUT_READY, &dd->flags);
|
||||
tasklet_schedule(&dd->done_task);
|
||||
queue_work(system_bh_wq, &dd->done_task);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
@ -2059,7 +2060,7 @@ static int omap_sham_probe(struct platform_device *pdev)
|
|||
platform_set_drvdata(pdev, dd);
|
||||
|
||||
INIT_LIST_HEAD(&dd->list);
|
||||
tasklet_init(&dd->done_task, omap_sham_done_task, (unsigned long)dd);
|
||||
INIT_WORK(&dd->done_task, omap_sham_done_task);
|
||||
crypto_init_queue(&dd->queue, OMAP_SHAM_QUEUE_LENGTH);
|
||||
|
||||
err = (dev->of_node) ? omap_sham_get_res_of(dd, dev, &res) :
|
||||
|
|
@ -2194,7 +2195,7 @@ static void omap_sham_remove(struct platform_device *pdev)
|
|||
&dd->pdata->algs_info[i].algs_list[j]);
|
||||
dd->pdata->algs_info[i].registered--;
|
||||
}
|
||||
tasklet_kill(&dd->done_task);
|
||||
cancel_work_sync(&dd->done_task);
|
||||
pm_runtime_dont_use_autosuspend(&pdev->dev);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue