Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 257924
b: refs/heads/master
c: 6cb3ffe
h: refs/heads/master
v: v3
  • Loading branch information
Dmitry Kasatkin authored and Herbert Xu committed Jun 29, 2011
1 parent 89c7235 commit 6405642
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 171cb9a2807588630fed401f3e0b8ae22d91595f
refs/heads/master: 6cb3ffe100ef4c6d5be0bfe4f8ac6d4227bb91bd
24 changes: 9 additions & 15 deletions trunk/drivers/crypto/omap-sham.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,6 @@ struct omap_sham_dev {
int dma;
int dma_lch;
struct tasklet_struct done_task;
struct tasklet_struct queue_task;

unsigned long flags;
struct crypto_queue queue;
Expand Down Expand Up @@ -653,6 +652,9 @@ static void omap_sham_finish_req(struct ahash_request *req, int err)

if (req->base.complete)
req->base.complete(&req->base, err);

/* handle new request */
tasklet_schedule(&dd->done_task);
}

static int omap_sham_handle_queue(struct omap_sham_dev *dd,
Expand Down Expand Up @@ -716,11 +718,9 @@ static int omap_sham_handle_queue(struct omap_sham_dev *dd,
err = omap_sham_final_req(dd);
}
err1:
if (err != -EINPROGRESS) {
if (err != -EINPROGRESS)
/* done_task will not finish it, so do it here */
omap_sham_finish_req(req, err);
tasklet_schedule(&dd->queue_task);
}

dev_dbg(dd->dev, "exit, err: %d\n", err);

Expand Down Expand Up @@ -1035,6 +1035,11 @@ static void omap_sham_done_task(unsigned long data)
struct omap_sham_dev *dd = (struct omap_sham_dev *)data;
int ready = 0, err = 0;

if (!test_bit(FLAGS_BUSY, &dd->flags)) {
omap_sham_handle_queue(dd, NULL);
return;
}

if (test_and_clear_bit(FLAGS_OUTPUT_READY, &dd->flags))
ready = 1;

Expand All @@ -1050,18 +1055,9 @@ static void omap_sham_done_task(unsigned long data)
dev_dbg(dd->dev, "update done: err: %d\n", err);
/* finish curent request */
omap_sham_finish_req(dd->req, err);
/* start new request */
omap_sham_handle_queue(dd, NULL);
}
}

static void omap_sham_queue_task(unsigned long data)
{
struct omap_sham_dev *dd = (struct omap_sham_dev *)data;

omap_sham_handle_queue(dd, NULL);
}

static irqreturn_t omap_sham_irq(int irq, void *dev_id)
{
struct omap_sham_dev *dd = dev_id;
Expand Down Expand Up @@ -1137,7 +1133,6 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
INIT_LIST_HEAD(&dd->list);
spin_lock_init(&dd->lock);
tasklet_init(&dd->done_task, omap_sham_done_task, (unsigned long)dd);
tasklet_init(&dd->queue_task, omap_sham_queue_task, (unsigned long)dd);
crypto_init_queue(&dd->queue, OMAP_SHAM_QUEUE_LENGTH);

dd->irq = -1;
Expand Down Expand Up @@ -1246,7 +1241,6 @@ static int __devexit omap_sham_remove(struct platform_device *pdev)
for (i = 0; i < ARRAY_SIZE(algs); i++)
crypto_unregister_ahash(&algs[i]);
tasklet_kill(&dd->done_task);
tasklet_kill(&dd->queue_task);
iounmap(dd->io_base);
clk_put(dd->iclk);
omap_sham_dma_cleanup(dd);
Expand Down

0 comments on commit 6405642

Please sign in to comment.