Commit 9984a644 authored by Liang He's avatar Liang He Committed by Herbert Xu
Browse files

crypto: amcc - Hold the reference returned by of_find_compatible_node



In crypto4xx_probe(), we should hold the reference returned by
of_find_compatible_node() and use it to call of_node_put to keep
 refcount balance.

Signed-off-by: default avatarLiang He <windhl@126.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent cc8166bf
Loading
Loading
Loading
Loading
+24 −16
Original line number Diff line number Diff line
@@ -1378,6 +1378,7 @@ static int crypto4xx_probe(struct platform_device *ofdev)
	struct resource res;
	struct device *dev = &ofdev->dev;
	struct crypto4xx_core_device *core_dev;
	struct device_node *np;
	u32 pvr;
	bool is_revb = true;

@@ -1385,20 +1386,23 @@ static int crypto4xx_probe(struct platform_device *ofdev)
	if (rc)
		return -ENODEV;

	if (of_find_compatible_node(NULL, NULL, "amcc,ppc460ex-crypto")) {
	np = of_find_compatible_node(NULL, NULL, "amcc,ppc460ex-crypto");
	if (np) {
		mtdcri(SDR0, PPC460EX_SDR0_SRST,
		       mfdcri(SDR0, PPC460EX_SDR0_SRST) | PPC460EX_CE_RESET);
		mtdcri(SDR0, PPC460EX_SDR0_SRST,
		       mfdcri(SDR0, PPC460EX_SDR0_SRST) & ~PPC460EX_CE_RESET);
	} else if (of_find_compatible_node(NULL, NULL,
			"amcc,ppc405ex-crypto")) {
	} else {
		np = of_find_compatible_node(NULL, NULL, "amcc,ppc405ex-crypto");
		if (np) {
			mtdcri(SDR0, PPC405EX_SDR0_SRST,
				   mfdcri(SDR0, PPC405EX_SDR0_SRST) | PPC405EX_CE_RESET);
			mtdcri(SDR0, PPC405EX_SDR0_SRST,
				   mfdcri(SDR0, PPC405EX_SDR0_SRST) & ~PPC405EX_CE_RESET);
			is_revb = false;
	} else if (of_find_compatible_node(NULL, NULL,
			"amcc,ppc460sx-crypto")) {
		} else {
			np = of_find_compatible_node(NULL, NULL, "amcc,ppc460sx-crypto");
			if (np) {
				mtdcri(SDR0, PPC460SX_SDR0_SRST,
					mfdcri(SDR0, PPC460SX_SDR0_SRST) | PPC460SX_CE_RESET);
				mtdcri(SDR0, PPC460SX_SDR0_SRST,
@@ -1407,6 +1411,10 @@ static int crypto4xx_probe(struct platform_device *ofdev)
				printk(KERN_ERR "Crypto Function Not supported!\n");
				return -EINVAL;
			}
		}
	}

	of_node_put(np);

	core_dev = kzalloc(sizeof(struct crypto4xx_core_device), GFP_KERNEL);
	if (!core_dev)