mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
crypto: crypto4xx - use devm in probe
Allows removing some gotos and simplifying remove a bit. Tested Cisco MX60W. Signed-off-by: Rosen Penev <rosenp@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
7337b18f1e
commit
0a53948477
@ -653,8 +653,6 @@ static void crypto4xx_stop_all(struct crypto4xx_core_device *core_dev)
|
|||||||
crypto4xx_destroy_pdr(core_dev->dev);
|
crypto4xx_destroy_pdr(core_dev->dev);
|
||||||
crypto4xx_destroy_gdr(core_dev->dev);
|
crypto4xx_destroy_gdr(core_dev->dev);
|
||||||
crypto4xx_destroy_sdr(core_dev->dev);
|
crypto4xx_destroy_sdr(core_dev->dev);
|
||||||
kfree(core_dev->dev);
|
|
||||||
kfree(core_dev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 get_next_gd(u32 current)
|
static u32 get_next_gd(u32 current)
|
||||||
@ -1368,16 +1366,17 @@ static int crypto4xx_probe(struct platform_device *ofdev)
|
|||||||
|
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
|
|
||||||
core_dev = kzalloc(sizeof(struct crypto4xx_core_device), GFP_KERNEL);
|
core_dev = devm_kzalloc(
|
||||||
|
&ofdev->dev, sizeof(struct crypto4xx_core_device), GFP_KERNEL);
|
||||||
if (!core_dev)
|
if (!core_dev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
dev_set_drvdata(dev, core_dev);
|
dev_set_drvdata(dev, core_dev);
|
||||||
core_dev->ofdev = ofdev;
|
core_dev->ofdev = ofdev;
|
||||||
core_dev->dev = kzalloc(sizeof(struct crypto4xx_device), GFP_KERNEL);
|
core_dev->dev = devm_kzalloc(
|
||||||
rc = -ENOMEM;
|
&ofdev->dev, sizeof(struct crypto4xx_device), GFP_KERNEL);
|
||||||
if (!core_dev->dev)
|
if (!core_dev->dev)
|
||||||
goto err_alloc_dev;
|
return -ENOMEM;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Older version of 460EX/GT have a hardware bug.
|
* Older version of 460EX/GT have a hardware bug.
|
||||||
@ -1396,7 +1395,9 @@ static int crypto4xx_probe(struct platform_device *ofdev)
|
|||||||
core_dev->dev->core_dev = core_dev;
|
core_dev->dev->core_dev = core_dev;
|
||||||
core_dev->dev->is_revb = is_revb;
|
core_dev->dev->is_revb = is_revb;
|
||||||
core_dev->device = dev;
|
core_dev->device = dev;
|
||||||
mutex_init(&core_dev->rng_lock);
|
rc = devm_mutex_init(&ofdev->dev, &core_dev->rng_lock);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
spin_lock_init(&core_dev->lock);
|
spin_lock_init(&core_dev->lock);
|
||||||
INIT_LIST_HEAD(&core_dev->dev->alg_list);
|
INIT_LIST_HEAD(&core_dev->dev->alg_list);
|
||||||
ratelimit_default_init(&core_dev->dev->aead_ratelimit);
|
ratelimit_default_init(&core_dev->dev->aead_ratelimit);
|
||||||
@ -1424,12 +1425,12 @@ static int crypto4xx_probe(struct platform_device *ofdev)
|
|||||||
|
|
||||||
/* Register for Crypto isr, Crypto Engine IRQ */
|
/* Register for Crypto isr, Crypto Engine IRQ */
|
||||||
core_dev->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
|
core_dev->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
|
||||||
rc = request_irq(core_dev->irq, is_revb ?
|
rc = devm_request_irq(&ofdev->dev, core_dev->irq,
|
||||||
crypto4xx_ce_interrupt_handler_revb :
|
is_revb ? crypto4xx_ce_interrupt_handler_revb :
|
||||||
crypto4xx_ce_interrupt_handler, 0,
|
crypto4xx_ce_interrupt_handler,
|
||||||
KBUILD_MODNAME, dev);
|
0, KBUILD_MODNAME, dev);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto err_request_irq;
|
goto err_iomap;
|
||||||
|
|
||||||
/* need to setup pdr, rdr, gdr and sdr before this */
|
/* need to setup pdr, rdr, gdr and sdr before this */
|
||||||
crypto4xx_hw_init(core_dev->dev);
|
crypto4xx_hw_init(core_dev->dev);
|
||||||
@ -1438,25 +1439,17 @@ static int crypto4xx_probe(struct platform_device *ofdev)
|
|||||||
rc = crypto4xx_register_alg(core_dev->dev, crypto4xx_alg,
|
rc = crypto4xx_register_alg(core_dev->dev, crypto4xx_alg,
|
||||||
ARRAY_SIZE(crypto4xx_alg));
|
ARRAY_SIZE(crypto4xx_alg));
|
||||||
if (rc)
|
if (rc)
|
||||||
goto err_start_dev;
|
goto err_iomap;
|
||||||
|
|
||||||
ppc4xx_trng_probe(core_dev);
|
ppc4xx_trng_probe(core_dev);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_start_dev:
|
|
||||||
free_irq(core_dev->irq, dev);
|
|
||||||
err_request_irq:
|
|
||||||
irq_dispose_mapping(core_dev->irq);
|
|
||||||
err_iomap:
|
err_iomap:
|
||||||
tasklet_kill(&core_dev->tasklet);
|
tasklet_kill(&core_dev->tasklet);
|
||||||
err_build_sdr:
|
err_build_sdr:
|
||||||
crypto4xx_destroy_sdr(core_dev->dev);
|
crypto4xx_destroy_sdr(core_dev->dev);
|
||||||
crypto4xx_destroy_gdr(core_dev->dev);
|
crypto4xx_destroy_gdr(core_dev->dev);
|
||||||
crypto4xx_destroy_pdr(core_dev->dev);
|
crypto4xx_destroy_pdr(core_dev->dev);
|
||||||
kfree(core_dev->dev);
|
|
||||||
err_alloc_dev:
|
|
||||||
kfree(core_dev);
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1467,13 +1460,9 @@ static void crypto4xx_remove(struct platform_device *ofdev)
|
|||||||
|
|
||||||
ppc4xx_trng_remove(core_dev);
|
ppc4xx_trng_remove(core_dev);
|
||||||
|
|
||||||
free_irq(core_dev->irq, dev);
|
|
||||||
irq_dispose_mapping(core_dev->irq);
|
|
||||||
|
|
||||||
tasklet_kill(&core_dev->tasklet);
|
tasklet_kill(&core_dev->tasklet);
|
||||||
/* Un-register with Linux CryptoAPI */
|
/* Un-register with Linux CryptoAPI */
|
||||||
crypto4xx_unregister_alg(core_dev->dev);
|
crypto4xx_unregister_alg(core_dev->dev);
|
||||||
mutex_destroy(&core_dev->rng_lock);
|
|
||||||
/* Free all allocated memory */
|
/* Free all allocated memory */
|
||||||
crypto4xx_stop_all(core_dev);
|
crypto4xx_stop_all(core_dev);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user