Hi,

>
>You do not need to pass multiple pointers, but instead a multiple data.
>You can do that via single area provided to the kernel and multiple size 
>fields, where each 
> one corresponds to the size of the contiguous sectors in the provided data.

[Loc Ho]
It sounds like the solution is to format the data (parameter values, src, dst) 
into a single buffer. This will require memory copy of the source and 
destination data as follow:
1. User space formating the user space buffer that includes:
        1a) size parameter fields (this is required regardless)
        2b) parameter data such as IV, adata, and etc (this is required 
regardless)
        3c) copy the source data from application buffer into this single 
buffer (this is extra memcpy)
2. Kernel operation of the single user buffer (this is required regardless)
3. User space copy the destination data buffer into its appropriate memory 
pointer
        3a) For hash, it is just the hash
        3b) For crypto, it is the entire buffer (= to source length)
        3c) For aead, it is the entire buffer + aead ICV

As you can see, there is two extra memcpy's. There is noticeable performance on 
our SoC (AMCC 4xx) which memory copy is performed.

I was thinking. What do you think about passing multiple data pointer using 
writev (vector write)? And possible a similar idea for AIO.

-Loc


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

Reply via email to