Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Ryo Takakura and committed by
Herbert Xu
381e8ee3 1e263397

+26 -23
+8 -7
drivers/crypto/omap-aes.c
··· 32 32 #include <linux/pm_runtime.h> 33 33 #include <linux/scatterlist.h> 34 34 #include <linux/string.h> 35 + #include <linux/workqueue.h> 35 36 36 37 #include "omap-crypto.h" 37 38 #include "omap-aes.h" ··· 222 221 struct omap_aes_dev *dd = data; 223 222 224 223 /* dma_lch_out - completed */ 225 - tasklet_schedule(&dd->done_task); 224 + queue_work(system_bh_wq, &dd->done_task); 226 225 } 227 226 228 227 static int omap_aes_dma_init(struct omap_aes_dev *dd) ··· 495 494 ((u32 *)ivbuf)[i] = omap_aes_read(dd, AES_REG_IV(dd, i)); 496 495 } 497 496 498 - static void omap_aes_done_task(unsigned long data) 497 + static void omap_aes_done_task(struct work_struct *t) 499 498 { 500 - struct omap_aes_dev *dd = (struct omap_aes_dev *)data; 499 + struct omap_aes_dev *dd = from_work(dd, t, done_task); 501 500 502 501 pr_debug("enter done_task\n"); 503 502 ··· 926 925 927 926 if (!dd->total) 928 927 /* All bytes read! */ 929 - tasklet_schedule(&dd->done_task); 928 + queue_work(system_bh_wq, &dd->done_task); 930 929 else 931 930 /* Enable DATA_IN interrupt for next block */ 932 931 omap_aes_write(dd, AES_REG_IRQ_ENABLE(dd), 0x2); ··· 1141 1140 (reg & dd->pdata->major_mask) >> dd->pdata->major_shift, 1142 1141 (reg & dd->pdata->minor_mask) >> dd->pdata->minor_shift); 1143 1142 1144 - tasklet_init(&dd->done_task, omap_aes_done_task, (unsigned long)dd); 1143 + INIT_WORK(&dd->done_task, omap_aes_done_task); 1145 1144 1146 1145 err = omap_aes_dma_init(dd); 1147 1146 if (err == -EPROBE_DEFER) { ··· 1230 1229 1231 1230 omap_aes_dma_cleanup(dd); 1232 1231 err_irq: 1233 - tasklet_kill(&dd->done_task); 1232 + cancel_work_sync(&dd->done_task); 1234 1233 err_pm_disable: 1235 1234 pm_runtime_disable(dev); 1236 1235 err_res: ··· 1265 1264 1266 1265 crypto_engine_exit(dd->engine); 1267 1266 1268 - tasklet_kill(&dd->done_task); 1267 + cancel_work_sync(&dd->done_task); 1269 1268 omap_aes_dma_cleanup(dd); 1270 1269 pm_runtime_disable(dd->dev); 1271 1270 }
+1 -1
drivers/crypto/omap-aes.h
··· 159 159 unsigned long flags; 160 160 int err; 161 161 162 - struct tasklet_struct done_task; 162 + struct work_struct done_task; 163 163 struct aead_queue aead_queue; 164 164 spinlock_t lock; 165 165
+9 -8
drivers/crypto/omap-des.c
··· 32 32 #include <linux/pm_runtime.h> 33 33 #include <linux/scatterlist.h> 34 34 #include <linux/string.h> 35 + #include <linux/workqueue.h> 35 36 36 37 #include "omap-crypto.h" 37 38 ··· 131 130 unsigned long flags; 132 131 int err; 133 132 134 - struct tasklet_struct done_task; 133 + struct work_struct done_task; 135 134 136 135 struct skcipher_request *req; 137 136 struct crypto_engine *engine; ··· 326 325 struct omap_des_dev *dd = data; 327 326 328 327 /* dma_lch_out - completed */ 329 - tasklet_schedule(&dd->done_task); 328 + queue_work(system_bh_wq, &dd->done_task); 330 329 } 331 330 332 331 static int omap_des_dma_init(struct omap_des_dev *dd) ··· 581 580 omap_des_crypt_dma_start(dd); 582 581 } 583 582 584 - static void omap_des_done_task(unsigned long data) 583 + static void omap_des_done_task(struct work_struct *t) 585 584 { 586 - struct omap_des_dev *dd = (struct omap_des_dev *)data; 585 + struct omap_des_dev *dd = from_work(dd, t, done_task); 587 586 int i; 588 587 589 588 pr_debug("enter done_task\n"); ··· 891 890 892 891 if (!dd->total) 893 892 /* All bytes read! */ 894 - tasklet_schedule(&dd->done_task); 893 + queue_work(system_bh_wq, &dd->done_task); 895 894 else 896 895 /* Enable DATA_IN interrupt for next block */ 897 896 omap_des_write(dd, DES_REG_IRQ_ENABLE(dd), 0x2); ··· 987 986 (reg & dd->pdata->major_mask) >> dd->pdata->major_shift, 988 987 (reg & dd->pdata->minor_mask) >> dd->pdata->minor_shift); 989 988 990 - tasklet_init(&dd->done_task, omap_des_done_task, (unsigned long)dd); 989 + INIT_WORK(&dd->done_task, omap_des_done_task); 991 990 992 991 err = omap_des_dma_init(dd); 993 992 if (err == -EPROBE_DEFER) { ··· 1054 1053 1055 1054 omap_des_dma_cleanup(dd); 1056 1055 err_irq: 1057 - tasklet_kill(&dd->done_task); 1056 + cancel_work_sync(&dd->done_task); 1058 1057 err_get: 1059 1058 pm_runtime_disable(dev); 1060 1059 err_res: ··· 1078 1077 crypto_engine_unregister_skcipher( 1079 1078 &dd->pdata->algs_info[i].algs_list[j]); 1080 1079 1081 - tasklet_kill(&dd->done_task); 1080 + cancel_work_sync(&dd->done_task); 1082 1081 omap_des_dma_cleanup(dd); 1083 1082 pm_runtime_disable(dd->dev); 1084 1083 }
+8 -7
drivers/crypto/omap-sham.c
··· 37 37 #include <linux/scatterlist.h> 38 38 #include <linux/slab.h> 39 39 #include <linux/string.h> 40 + #include <linux/workqueue.h> 40 41 41 42 #define MD5_DIGEST_SIZE 16 42 43 ··· 218 217 int irq; 219 218 int err; 220 219 struct dma_chan *dma_lch; 221 - struct tasklet_struct done_task; 220 + struct work_struct done_task; 222 221 u8 polling_mode; 223 222 u8 xmit_buf[BUFLEN] OMAP_ALIGNED; 224 223 ··· 562 561 struct omap_sham_dev *dd = param; 563 562 564 563 set_bit(FLAGS_DMA_READY, &dd->flags); 565 - tasklet_schedule(&dd->done_task); 564 + queue_work(system_bh_wq, &dd->done_task); 566 565 } 567 566 568 567 static int omap_sham_xmit_dma(struct omap_sham_dev *dd, size_t length, ··· 1704 1703 }, 1705 1704 }; 1706 1705 1707 - static void omap_sham_done_task(unsigned long data) 1706 + static void omap_sham_done_task(struct work_struct *t) 1708 1707 { 1709 - struct omap_sham_dev *dd = (struct omap_sham_dev *)data; 1708 + struct omap_sham_dev *dd = from_work(dd, t, done_task); 1710 1709 int err = 0; 1711 1710 1712 1711 dev_dbg(dd->dev, "%s: flags=%lx\n", __func__, dd->flags); ··· 1740 1739 static irqreturn_t omap_sham_irq_common(struct omap_sham_dev *dd) 1741 1740 { 1742 1741 set_bit(FLAGS_OUTPUT_READY, &dd->flags); 1743 - tasklet_schedule(&dd->done_task); 1742 + queue_work(system_bh_wq, &dd->done_task); 1744 1743 1745 1744 return IRQ_HANDLED; 1746 1745 } ··· 2060 2059 platform_set_drvdata(pdev, dd); 2061 2060 2062 2061 INIT_LIST_HEAD(&dd->list); 2063 - tasklet_init(&dd->done_task, omap_sham_done_task, (unsigned long)dd); 2062 + INIT_WORK(&dd->done_task, omap_sham_done_task); 2064 2063 crypto_init_queue(&dd->queue, OMAP_SHAM_QUEUE_LENGTH); 2065 2064 2066 2065 err = (dev->of_node) ? omap_sham_get_res_of(dd, dev, &res) : ··· 2195 2194 &dd->pdata->algs_info[i].algs_list[j]); 2196 2195 dd->pdata->algs_info[i].registered--; 2197 2196 } 2198 - tasklet_kill(&dd->done_task); 2197 + cancel_work_sync(&dd->done_task); 2199 2198 pm_runtime_dont_use_autosuspend(&pdev->dev); 2200 2199 pm_runtime_disable(&pdev->dev); 2201 2200