2010-01-22 08:46:07

by Dmitry Kasatkin

[permalink] [raw]
Subject: Async Crypto API

Hello,

I have one question about async api.

I work on AHASH driver and wonder about one thing.

while calculating hash, client might call many times

ahash_request_set_crypt(req, &sg, sha1, len);
crypto_ahash_update(req);
..
..
ahash_request_set_crypt(req, &sg, sha1, len);
crypto_ahash_finup(req);

right?

But because it is async and driver does not wait_for_completion,
previous request may not be completed before client will call next update.

But what should be the behavior of the driver?

Thanks,
Dmitry



2010-01-23 03:20:54

by Herbert Xu

[permalink] [raw]
Subject: Re: Async Crypto API

Dmitry Kasatkin <[email protected]> wrote:
> Hello,
>
> I have one question about async api.
>
> I work on AHASH driver and wonder about one thing.
>
> while calculating hash, client might call many times
>
> ahash_request_set_crypt(req, &sg, sha1, len);
> crypto_ahash_update(req);
> ..
> ..
> ahash_request_set_crypt(req, &sg, sha1, len);
> crypto_ahash_finup(req);
>
> right?
>
> But because it is async and driver does not wait_for_completion,
> previous request may not be completed before client will call next update.
>
> But what should be the behavior of the driver?

If any async operation returns EINPROGRESS, the client must not
proceed until that operation has completed.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-01-27 06:45:47

by Dmitry Kasatkin

[permalink] [raw]
Subject: Re: Async Crypto API

Hi,

1 more question.

>From what context "crypto_completion_t" can be called?
irq/tasklet/process
or something else?


Thanks,
Dmitry



ext Herbert Xu wrote:
> Dmitry Kasatkin <[email protected]> wrote:
>
>> Hello,
>>
>> I have one question about async api.
>>
>> I work on AHASH driver and wonder about one thing.
>>
>> while calculating hash, client might call many times
>>
>> ahash_request_set_crypt(req, &sg, sha1, len);
>> crypto_ahash_update(req);
>> ..
>> ..
>> ahash_request_set_crypt(req, &sg, sha1, len);
>> crypto_ahash_finup(req);
>>
>> right?
>>
>> But because it is async and driver does not wait_for_completion,
>> previous request may not be completed before client will call next update.
>>
>> But what should be the behavior of the driver?
>>
>
> If any async operation returns EINPROGRESS, the client must not
> proceed until that operation has completed.
>
> Cheers,
>

2010-01-29 09:03:07

by Herbert Xu

[permalink] [raw]
Subject: Re: Async Crypto API

On Wed, Jan 27, 2010 at 08:45:12AM +0200, Dmitry Kasatkin wrote:
> Hi,
>
> 1 more question.
>
> >From what context "crypto_completion_t" can be called?
> irq/tasklet/process
> or something else?

tasklet or process with BH off.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-02-02 12:23:10

by Dmitry Kasatkin

[permalink] [raw]
Subject: Re: Async Crypto API

Hi,

In the case when finup() is not used, just update/update/../final
driver finalize calculation from the final function.

It takes a time and if it may not sleep, can final() also return
EINPROGRESS?

Thanks,
Dmitry


ext Herbert Xu wrote:
> Dmitry Kasatkin <[email protected]> wrote:
>
>> Hello,
>>
>> I have one question about async api.
>>
>> I work on AHASH driver and wonder about one thing.
>>
>> while calculating hash, client might call many times
>>
>> ahash_request_set_crypt(req, &sg, sha1, len);
>> crypto_ahash_update(req);
>> ..
>> ..
>> ahash_request_set_crypt(req, &sg, sha1, len);
>> crypto_ahash_finup(req);
>>
>> right?
>>
>> But because it is async and driver does not wait_for_completion,
>> previous request may not be completed before client will call next update.
>>
>> But what should be the behavior of the driver?
>>
>
> If any async operation returns EINPROGRESS, the client must not
> proceed until that operation has completed.
>
> Cheers,
>

2010-02-02 12:32:00

by Dmitry Kasatkin

[permalink] [raw]
Subject: Re: Async Crypto API

Hi,

It actually would not make sense as final() suppose to cleanup
everything and in the case of EINPROGRESS we can not do it.

So the question how then to "wait for completion" of the hash by HW if
not to use finup()

- Dmitry


Kasatkin Dmitry (Nokia-D/Helsinki) wrote:
> Hi,
>
> In the case when finup() is not used, just update/update/../final
> driver finalize calculation from the final function.
>
> It takes a time and if it may not sleep, can final() also return
> EINPROGRESS?
>
> Thanks,
> Dmitry
>
>
> ext Herbert Xu wrote:
>
>> Dmitry Kasatkin <[email protected]> wrote:
>>
>>
>>> Hello,
>>>
>>> I have one question about async api.
>>>
>>> I work on AHASH driver and wonder about one thing.
>>>
>>> while calculating hash, client might call many times
>>>
>>> ahash_request_set_crypt(req, &sg, sha1, len);
>>> crypto_ahash_update(req);
>>> ..
>>> ..
>>> ahash_request_set_crypt(req, &sg, sha1, len);
>>> crypto_ahash_finup(req);
>>>
>>> right?
>>>
>>> But because it is async and driver does not wait_for_completion,
>>> previous request may not be completed before client will call next update.
>>>
>>> But what should be the behavior of the driver?
>>>
>>>
>> If any async operation returns EINPROGRESS, the client must not
>> proceed until that operation has completed.
>>
>> Cheers,
>>
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>

2010-02-02 13:47:15

by Dmitry Kasatkin

[permalink] [raw]
Subject: Re: Async Crypto API

in sync API final() does not have any data.

Is async driver also should ignore req->src in final() call?

- Dmitry


Kasatkin Dmitry (Nokia-D/Helsinki) wrote:
> Hi,
>
> It actually would not make sense as final() suppose to cleanup
> everything and in the case of EINPROGRESS we can not do it.
>
> So the question how then to "wait for completion" of the hash by HW if
> not to use finup()
>
> - Dmitry
>
>
> Kasatkin Dmitry (Nokia-D/Helsinki) wrote:
>
>> Hi,
>>
>> In the case when finup() is not used, just update/update/../final
>> driver finalize calculation from the final function.
>>
>> It takes a time and if it may not sleep, can final() also return
>> EINPROGRESS?
>>
>> Thanks,
>> Dmitry
>>
>>
>> ext Herbert Xu wrote:
>>
>>
>>> Dmitry Kasatkin <[email protected]> wrote:
>>>
>>>
>>>
>>>> Hello,
>>>>
>>>> I have one question about async api.
>>>>
>>>> I work on AHASH driver and wonder about one thing.
>>>>
>>>> while calculating hash, client might call many times
>>>>
>>>> ahash_request_set_crypt(req, &sg, sha1, len);
>>>> crypto_ahash_update(req);
>>>> ..
>>>> ..
>>>> ahash_request_set_crypt(req, &sg, sha1, len);
>>>> crypto_ahash_finup(req);
>>>>
>>>> right?
>>>>
>>>> But because it is async and driver does not wait_for_completion,
>>>> previous request may not be completed before client will call next update.
>>>>
>>>> But what should be the behavior of the driver?
>>>>
>>>>
>>>>
>>> If any async operation returns EINPROGRESS, the client must not
>>> proceed until that operation has completed.
>>>
>>> Cheers,
>>>
>>>
>>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>

2010-02-09 07:31:59

by Herbert Xu

[permalink] [raw]
Subject: Re: Async Crypto API

On Tue, Feb 02, 2010 at 02:17:51PM +0200, Dmitry Kasatkin wrote:
> Hi,
>
> In the case when finup() is not used, just update/update/../final
> driver finalize calculation from the final function.
>
> It takes a time and if it may not sleep, can final() also return
> EINPROGRESS?

Sure, final can certainly return EINPROGRESS.
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-02-09 07:32:25

by Herbert Xu

[permalink] [raw]
Subject: Re: Async Crypto API

On Tue, Feb 02, 2010 at 03:46:58PM +0200, Dmitry Kasatkin wrote:
> in sync API final() does not have any data.
>
> Is async driver also should ignore req->src in final() call?

Yes req->src can be ignored in final.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt