2015-03-18 04:01:08

by sri sowj

[permalink] [raw]
Subject: How to handle an error while processing crypto request (backlogged)

Hi All,

I am not really clear how to handle an error when processing
backlogged messages.I did not get any document or references in this
regard,It would be a great help if any suggestions are provided.

As per my understanding "Back Logged messages" Processing will be as below:

Step #1:

Let's say "M" is the message to be encrypted and its divided chunks M1 to M4.
M=M1+M2+M3+M4. Now when feeding M1 to M4 to crypto engine,when M1 is
under processing [H(M10] ,M2,M3,M4 will be enqueued i.e., backlogged

M4,M3,M2 ----> H(M1)

Here H(M1) under processing, M2 - M4 request comes when M0 is under
processing so M1-M4 are backlogged.

Step #2:

once the M1 is processed Linux crypto driver has to be notified
through either an interrupt or a call back
to process remaining messages.This process will be repeating till it
completes processing all backlogged
messages M2,M3,M4.

Now let us say when processing M2 if some errors comes like processing
unit like DMA channel is stopped,
then how to handle this error scenario.

I have referred omap-aes.c from open source but its not really clear.

static int omap_aes_handle_queue(struct omap_aes_dev *dd,
struct ablkcipher_request *req)
{

///////////
//////////

err = omap_aes_crypt_dma_start(dd);
if (err) {
/* aes_task will not finish it, so do it here */

omap_aes_finish_req(dd, err);
//whatever compete call back is called not really sure
what it is meant for?,may for re-initializing the request?


tasklet_schedule(&dd->queue_task);
// Here it will call *_aes_handle_queue again ,but
this messages already deleted while dequeuing,so how does it work?
}

return ret; /* return ret, which is enqueue return value */
}


BR,
Srisowj