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
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
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,
>
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
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,
>
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
>
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
>
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
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