On Thu, 30 Aug 2018 at 15:27, Kamil Konieczny <k.konieczny@xxxxxxxxxxxxxxxxxxx> wrote: > > On 30.08.2018 15:09, Krzysztof Kozlowski wrote: > > [...] > > Thanks Stephan for hints. Let's assume the each of init, update and > > final are atomic... but how about the relation between update and > > final? I have two concurrent users in user-space but only one HW: > > > > Process A: Process B: > > init() and set_key() > > init() and different key > > update(some_data) > > update(different_data) > > final() > > final() > > > > The final() from process A will now produce the result of hashing/CRC > > of some_data and different_data (and even maybe mixed with init() for > > different key). All because in the meantime process B added its own > > data to the HW. > > > > Best regards, > > Krzysztof > Can your hardware do export/import ? > > If yes, you can use workqueue and guard HW with spinlock, > as in exynos hash in s5p-sss.c (or see other drivers). Yes, workqueue doing all necessary HW initialization would be the solution here as well. The point is what later Herbert wrote - I need to take care about the HW state because the requests even for shash will be coming in random order. Best regards, Krzysztof