Skip to content

Commit 8483c83

Browse files
ndreysherbertx
authored andcommitted
crypto: caam - use struct hwrng's .init for initialization
Make caamrng code a bit more symmetric by moving initialization code to .init hook of struct hwrng. Signed-off-by: Andrey Smirnov <[email protected]> Reviewed-by: Horia Geantă <[email protected]> Cc: Chris Healy <[email protected]> Cc: Lucas Stach <[email protected]> Cc: Horia Geantă <[email protected]> Cc: Herbert Xu <[email protected]> Cc: Iuliana Prodan <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Signed-off-by: Herbert Xu <[email protected]>
1 parent f0ac02c commit 8483c83

File tree

1 file changed

+24
-23
lines changed

1 file changed

+24
-23
lines changed

drivers/crypto/caam/caamrng.c

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ static void caam_cleanup(struct hwrng *rng)
256256
}
257257

258258
rng_unmap_ctx(rng_ctx);
259+
caam_jr_free(rng_ctx->jrdev);
259260
}
260261

261262
static int caam_init_buf(struct caam_rng_ctx *ctx, int buf_id)
@@ -274,28 +275,43 @@ static int caam_init_buf(struct caam_rng_ctx *ctx, int buf_id)
274275
return 0;
275276
}
276277

277-
static int caam_init_rng(struct caam_rng_ctx *ctx, struct device *jrdev)
278+
static int caam_init(struct hwrng *rng)
278279
{
280+
struct caam_rng_ctx *ctx = rng_ctx;
279281
int err;
280282

281-
ctx->jrdev = jrdev;
283+
ctx->jrdev = caam_jr_alloc();
284+
err = PTR_ERR_OR_ZERO(ctx->jrdev);
285+
if (err) {
286+
pr_err("Job Ring Device allocation for transform failed\n");
287+
return err;
288+
}
282289

283290
err = rng_create_sh_desc(ctx);
284291
if (err)
285-
return err;
292+
goto free_jrdev;
286293

287294
ctx->current_buf = 0;
288295
ctx->cur_buf_idx = 0;
289296

290297
err = caam_init_buf(ctx, 0);
291298
if (err)
292-
return err;
299+
goto free_jrdev;
300+
301+
err = caam_init_buf(ctx, 1);
302+
if (err)
303+
goto free_jrdev;
293304

294-
return caam_init_buf(ctx, 1);
305+
return 0;
306+
307+
free_jrdev:
308+
caam_jr_free(ctx->jrdev);
309+
return err;
295310
}
296311

297312
static struct hwrng caam_rng = {
298313
.name = "rng-caam",
314+
.init = caam_init,
299315
.cleanup = caam_cleanup,
300316
.read = caam_read,
301317
};
@@ -305,14 +321,12 @@ void caam_rng_exit(void)
305321
if (!init_done)
306322
return;
307323

308-
caam_jr_free(rng_ctx->jrdev);
309324
hwrng_unregister(&caam_rng);
310325
kfree(rng_ctx);
311326
}
312327

313328
int caam_rng_init(struct device *ctrldev)
314329
{
315-
struct device *dev;
316330
u32 rng_inst;
317331
struct caam_drv_private *priv = dev_get_drvdata(ctrldev);
318332
int err;
@@ -328,31 +342,18 @@ int caam_rng_init(struct device *ctrldev)
328342
if (!rng_inst)
329343
return 0;
330344

331-
dev = caam_jr_alloc();
332-
if (IS_ERR(dev)) {
333-
pr_err("Job Ring Device allocation for transform failed\n");
334-
return PTR_ERR(dev);
335-
}
336345
rng_ctx = kmalloc(sizeof(*rng_ctx), GFP_DMA | GFP_KERNEL);
337-
if (!rng_ctx) {
338-
err = -ENOMEM;
339-
goto free_caam_alloc;
340-
}
341-
err = caam_init_rng(rng_ctx, dev);
342-
if (err)
343-
goto free_rng_ctx;
346+
if (!rng_ctx)
347+
return -ENOMEM;
344348

345-
dev_info(dev, "registering rng-caam\n");
349+
dev_info(ctrldev, "registering rng-caam\n");
346350

347351
err = hwrng_register(&caam_rng);
348352
if (!err) {
349353
init_done = true;
350354
return err;
351355
}
352356

353-
free_rng_ctx:
354357
kfree(rng_ctx);
355-
free_caam_alloc:
356-
caam_jr_free(dev);
357358
return err;
358359
}

0 commit comments

Comments
 (0)