Skip to content

Commit 381e8ee

Browse files
Ryo Takakuraherbertx
authored andcommitted
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>
1 parent 1e26339 commit 381e8ee

4 files changed

Lines changed: 26 additions & 23 deletions

File tree

drivers/crypto/omap-aes.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <linux/pm_runtime.h>
3333
#include <linux/scatterlist.h>
3434
#include <linux/string.h>
35+
#include <linux/workqueue.h>
3536

3637
#include "omap-crypto.h"
3738
#include "omap-aes.h"
@@ -221,7 +222,7 @@ static void omap_aes_dma_out_callback(void *data)
221222
struct omap_aes_dev *dd = data;
222223

223224
/* dma_lch_out - completed */
224-
tasklet_schedule(&dd->done_task);
225+
queue_work(system_bh_wq, &dd->done_task);
225226
}
226227

227228
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)
494495
((u32 *)ivbuf)[i] = omap_aes_read(dd, AES_REG_IV(dd, i));
495496
}
496497

497-
static void omap_aes_done_task(unsigned long data)
498+
static void omap_aes_done_task(struct work_struct *t)
498499
{
499-
struct omap_aes_dev *dd = (struct omap_aes_dev *)data;
500+
struct omap_aes_dev *dd = from_work(dd, t, done_task);
500501

501502
pr_debug("enter done_task\n");
502503

@@ -925,7 +926,7 @@ static irqreturn_t omap_aes_irq(int irq, void *dev_id)
925926

926927
if (!dd->total)
927928
/* All bytes read! */
928-
tasklet_schedule(&dd->done_task);
929+
queue_work(system_bh_wq, &dd->done_task);
929930
else
930931
/* Enable DATA_IN interrupt for next block */
931932
omap_aes_write(dd, AES_REG_IRQ_ENABLE(dd), 0x2);
@@ -1140,7 +1141,7 @@ static int omap_aes_probe(struct platform_device *pdev)
11401141
(reg & dd->pdata->major_mask) >> dd->pdata->major_shift,
11411142
(reg & dd->pdata->minor_mask) >> dd->pdata->minor_shift);
11421143

1143-
tasklet_init(&dd->done_task, omap_aes_done_task, (unsigned long)dd);
1144+
INIT_WORK(&dd->done_task, omap_aes_done_task);
11441145

11451146
err = omap_aes_dma_init(dd);
11461147
if (err == -EPROBE_DEFER) {
@@ -1229,7 +1230,7 @@ static int omap_aes_probe(struct platform_device *pdev)
12291230

12301231
omap_aes_dma_cleanup(dd);
12311232
err_irq:
1232-
tasklet_kill(&dd->done_task);
1233+
cancel_work_sync(&dd->done_task);
12331234
err_pm_disable:
12341235
pm_runtime_disable(dev);
12351236
err_res:
@@ -1264,7 +1265,7 @@ static void omap_aes_remove(struct platform_device *pdev)
12641265

12651266
crypto_engine_exit(dd->engine);
12661267

1267-
tasklet_kill(&dd->done_task);
1268+
cancel_work_sync(&dd->done_task);
12681269
omap_aes_dma_cleanup(dd);
12691270
pm_runtime_disable(dd->dev);
12701271
}

drivers/crypto/omap-aes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ struct omap_aes_dev {
159159
unsigned long flags;
160160
int err;
161161

162-
struct tasklet_struct done_task;
162+
struct work_struct done_task;
163163
struct aead_queue aead_queue;
164164
spinlock_t lock;
165165

drivers/crypto/omap-des.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <linux/pm_runtime.h>
3333
#include <linux/scatterlist.h>
3434
#include <linux/string.h>
35+
#include <linux/workqueue.h>
3536

3637
#include "omap-crypto.h"
3738

@@ -130,7 +131,7 @@ struct omap_des_dev {
130131
unsigned long flags;
131132
int err;
132133

133-
struct tasklet_struct done_task;
134+
struct work_struct done_task;
134135

135136
struct skcipher_request *req;
136137
struct crypto_engine *engine;
@@ -325,7 +326,7 @@ static void omap_des_dma_out_callback(void *data)
325326
struct omap_des_dev *dd = data;
326327

327328
/* dma_lch_out - completed */
328-
tasklet_schedule(&dd->done_task);
329+
queue_work(system_bh_wq, &dd->done_task);
329330
}
330331

331332
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,
580581
omap_des_crypt_dma_start(dd);
581582
}
582583

583-
static void omap_des_done_task(unsigned long data)
584+
static void omap_des_done_task(struct work_struct *t)
584585
{
585-
struct omap_des_dev *dd = (struct omap_des_dev *)data;
586+
struct omap_des_dev *dd = from_work(dd, t, done_task);
586587
int i;
587588

588589
pr_debug("enter done_task\n");
@@ -890,7 +891,7 @@ static irqreturn_t omap_des_irq(int irq, void *dev_id)
890891

891892
if (!dd->total)
892893
/* All bytes read! */
893-
tasklet_schedule(&dd->done_task);
894+
queue_work(system_bh_wq, &dd->done_task);
894895
else
895896
/* Enable DATA_IN interrupt for next block */
896897
omap_des_write(dd, DES_REG_IRQ_ENABLE(dd), 0x2);
@@ -986,7 +987,7 @@ static int omap_des_probe(struct platform_device *pdev)
986987
(reg & dd->pdata->major_mask) >> dd->pdata->major_shift,
987988
(reg & dd->pdata->minor_mask) >> dd->pdata->minor_shift);
988989

989-
tasklet_init(&dd->done_task, omap_des_done_task, (unsigned long)dd);
990+
INIT_WORK(&dd->done_task, omap_des_done_task);
990991

991992
err = omap_des_dma_init(dd);
992993
if (err == -EPROBE_DEFER) {
@@ -1053,7 +1054,7 @@ static int omap_des_probe(struct platform_device *pdev)
10531054

10541055
omap_des_dma_cleanup(dd);
10551056
err_irq:
1056-
tasklet_kill(&dd->done_task);
1057+
cancel_work_sync(&dd->done_task);
10571058
err_get:
10581059
pm_runtime_disable(dev);
10591060
err_res:
@@ -1077,7 +1078,7 @@ static void omap_des_remove(struct platform_device *pdev)
10771078
crypto_engine_unregister_skcipher(
10781079
&dd->pdata->algs_info[i].algs_list[j]);
10791080

1080-
tasklet_kill(&dd->done_task);
1081+
cancel_work_sync(&dd->done_task);
10811082
omap_des_dma_cleanup(dd);
10821083
pm_runtime_disable(dd->dev);
10831084
}

drivers/crypto/omap-sham.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <linux/scatterlist.h>
3838
#include <linux/slab.h>
3939
#include <linux/string.h>
40+
#include <linux/workqueue.h>
4041

4142
#define MD5_DIGEST_SIZE 16
4243

@@ -217,7 +218,7 @@ struct omap_sham_dev {
217218
int irq;
218219
int err;
219220
struct dma_chan *dma_lch;
220-
struct tasklet_struct done_task;
221+
struct work_struct done_task;
221222
u8 polling_mode;
222223
u8 xmit_buf[BUFLEN] OMAP_ALIGNED;
223224

@@ -561,7 +562,7 @@ static void omap_sham_dma_callback(void *param)
561562
struct omap_sham_dev *dd = param;
562563

563564
set_bit(FLAGS_DMA_READY, &dd->flags);
564-
tasklet_schedule(&dd->done_task);
565+
queue_work(system_bh_wq, &dd->done_task);
565566
}
566567

567568
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[] = {
17031704
},
17041705
};
17051706

1706-
static void omap_sham_done_task(unsigned long data)
1707+
static void omap_sham_done_task(struct work_struct *t)
17071708
{
1708-
struct omap_sham_dev *dd = (struct omap_sham_dev *)data;
1709+
struct omap_sham_dev *dd = from_work(dd, t, done_task);
17091710
int err = 0;
17101711

17111712
dev_dbg(dd->dev, "%s: flags=%lx\n", __func__, dd->flags);
@@ -1739,7 +1740,7 @@ static void omap_sham_done_task(unsigned long data)
17391740
static irqreturn_t omap_sham_irq_common(struct omap_sham_dev *dd)
17401741
{
17411742
set_bit(FLAGS_OUTPUT_READY, &dd->flags);
1742-
tasklet_schedule(&dd->done_task);
1743+
queue_work(system_bh_wq, &dd->done_task);
17431744

17441745
return IRQ_HANDLED;
17451746
}
@@ -2059,7 +2060,7 @@ static int omap_sham_probe(struct platform_device *pdev)
20592060
platform_set_drvdata(pdev, dd);
20602061

20612062
INIT_LIST_HEAD(&dd->list);
2062-
tasklet_init(&dd->done_task, omap_sham_done_task, (unsigned long)dd);
2063+
INIT_WORK(&dd->done_task, omap_sham_done_task);
20632064
crypto_init_queue(&dd->queue, OMAP_SHAM_QUEUE_LENGTH);
20642065

20652066
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)
21942195
&dd->pdata->algs_info[i].algs_list[j]);
21952196
dd->pdata->algs_info[i].registered--;
21962197
}
2197-
tasklet_kill(&dd->done_task);
2198+
cancel_work_sync(&dd->done_task);
21982199
pm_runtime_dont_use_autosuspend(&pdev->dev);
21992200
pm_runtime_disable(&pdev->dev);
22002201

0 commit comments

Comments
 (0)