crypto: caam - Dynamic memory allocation for caam_rng_ctx object
This patch allocates memory from DMAable region to the caam_rng_ctx object, earlier it had been statically allocated which resulted in errorneous behaviour on inserting the caamrng module at the runtime. Signed-off-by: Nitesh Lal <NiteshNarayanLal@freescale.com> Acked-by: Ruchika Gupta <ruchika.gupta@freescale.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
4f7f1d7cff
commit
6e4e603a9a
@ -76,7 +76,7 @@ struct caam_rng_ctx {
|
|||||||
struct buf_data bufs[2];
|
struct buf_data bufs[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct caam_rng_ctx rng_ctx;
|
static struct caam_rng_ctx *rng_ctx;
|
||||||
|
|
||||||
static inline void rng_unmap_buf(struct device *jrdev, struct buf_data *bd)
|
static inline void rng_unmap_buf(struct device *jrdev, struct buf_data *bd)
|
||||||
{
|
{
|
||||||
@ -137,7 +137,7 @@ static inline int submit_job(struct caam_rng_ctx *ctx, int to_current)
|
|||||||
|
|
||||||
static int caam_read(struct hwrng *rng, void *data, size_t max, bool wait)
|
static int caam_read(struct hwrng *rng, void *data, size_t max, bool wait)
|
||||||
{
|
{
|
||||||
struct caam_rng_ctx *ctx = &rng_ctx;
|
struct caam_rng_ctx *ctx = rng_ctx;
|
||||||
struct buf_data *bd = &ctx->bufs[ctx->current_buf];
|
struct buf_data *bd = &ctx->bufs[ctx->current_buf];
|
||||||
int next_buf_idx, copied_idx;
|
int next_buf_idx, copied_idx;
|
||||||
int err;
|
int err;
|
||||||
@ -237,12 +237,12 @@ static void caam_cleanup(struct hwrng *rng)
|
|||||||
struct buf_data *bd;
|
struct buf_data *bd;
|
||||||
|
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
bd = &rng_ctx.bufs[i];
|
bd = &rng_ctx->bufs[i];
|
||||||
if (atomic_read(&bd->empty) == BUF_PENDING)
|
if (atomic_read(&bd->empty) == BUF_PENDING)
|
||||||
wait_for_completion(&bd->filled);
|
wait_for_completion(&bd->filled);
|
||||||
}
|
}
|
||||||
|
|
||||||
rng_unmap_ctx(&rng_ctx);
|
rng_unmap_ctx(rng_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void caam_init_buf(struct caam_rng_ctx *ctx, int buf_id)
|
static void caam_init_buf(struct caam_rng_ctx *ctx, int buf_id)
|
||||||
@ -273,8 +273,9 @@ static struct hwrng caam_rng = {
|
|||||||
|
|
||||||
static void __exit caam_rng_exit(void)
|
static void __exit caam_rng_exit(void)
|
||||||
{
|
{
|
||||||
caam_jr_free(rng_ctx.jrdev);
|
caam_jr_free(rng_ctx->jrdev);
|
||||||
hwrng_unregister(&caam_rng);
|
hwrng_unregister(&caam_rng);
|
||||||
|
kfree(rng_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init caam_rng_init(void)
|
static int __init caam_rng_init(void)
|
||||||
@ -286,7 +287,9 @@ static int __init caam_rng_init(void)
|
|||||||
pr_err("Job Ring Device allocation for transform failed\n");
|
pr_err("Job Ring Device allocation for transform failed\n");
|
||||||
return PTR_ERR(dev);
|
return PTR_ERR(dev);
|
||||||
}
|
}
|
||||||
|
rng_ctx = kmalloc(sizeof(struct caam_rng_ctx), GFP_DMA);
|
||||||
|
if (!rng_ctx)
|
||||||
|
return -ENOMEM;
|
||||||
caam_init_rng(&rng_ctx, dev);
|
caam_init_rng(&rng_ctx, dev);
|
||||||
|
|
||||||
dev_info(dev, "registering rng-caam\n");
|
dev_info(dev, "registering rng-caam\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user