Re: [PATCH v4 5/7] crypto: caam - fix RNG buffer cache alignment

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Please ignore it, you was included by accident.


Am 21.03.2017 um 10:24 schrieb Oleksij Rempel:
> this is alternate version of linux fix:
> ---------------------------------------------------------------------
> The hwrng output buffers (2) are cast inside of a a struct
> (caam_rng_ctx)
> allocated in one DMA-tagged region. While the kernel's heap allocator
> should place the overall struct on a cacheline aligned boundary, the 2
> buffers contained within may not necessarily align. Consenquently, the
> ends
> of unaligned buffers may not fully flush, and if so, stale data will be
> left
> behind, resulting in small repeating patterns.
> 
> This fix aligns the buffers inside the struct.
> 
> Note that not all of the data inside caam_rng_ctx necessarily needs to
> be
> DMA-tagged, only the buffers themselves require this. However, a fix
> would
> incur the expense of error-handling bloat in the case of allocation
> failure.
> 
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Steve Cornelius <steve.cornelius@xxxxxxxxxxxxx>
> Signed-off-by: Victoria Milhoan <vicki.milhoan@xxxxxxxxxxxxx>
> Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
> ---------------------------------------------------------------------
> 
> instead we will use just dma_alloc()
> 
> Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>
> ---
>  drivers/crypto/caam/caamrng.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/crypto/caam/caamrng.c b/drivers/crypto/caam/caamrng.c
> index aabad0416..31a92731d 100644
> --- a/drivers/crypto/caam/caamrng.c
> +++ b/drivers/crypto/caam/caamrng.c
> @@ -55,7 +55,7 @@
>  
>  /* Buffer, its dma address and lock */
>  struct buf_data {
> -	u8 buf[RN_BUF_SIZE];
> +	u8 *buf;
>  	dma_addr_t addr;
>  	u32 hw_desc[DESC_JOB_O_LEN];
>  #define BUF_NOT_EMPTY 0
> @@ -218,6 +218,8 @@ static int caam_init_buf(struct caam_rng_ctx *ctx, int buf_id)
>  	struct buf_data *bd = &ctx->bufs[buf_id];
>  	int err;
>  
> +	bd->buf = dma_alloc(RN_BUF_SIZE);
> +
>  	err = rng_create_job_desc(ctx, buf_id);
>  	if (err)
>  		return err;
> 


-- 
Regards,
Oleksij

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]