From: Phil Elwell Date: Thu, 16 Dec 2021 16:25:00 +0000 (+0000) Subject: staging/bcm2835-isp: Fix cleanup after init fail X-Git-Tag: submit/tizen/20220208.074352~370 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3ec9b52daa865f1253caf56f243f699c5a796ff7;p=platform%2Fkernel%2Flinux-rpi.git staging/bcm2835-isp: Fix cleanup after init fail bcm2835_isp_remove is called on an initialisation failure, but at that point the drvdata hasn't been set. This causes a crash when e.g. using the cutdown firmware (gpu_mem=16). Move platform_set_drvdata before the instance probing loop to avoid the problem. See: https://github.com/raspberrypi/linux/issues/4774 Signed-off-by: Phil Elwell --- diff --git a/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c b/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c index 5a0245b..8166f8e 100644 --- a/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c +++ b/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c @@ -1774,6 +1774,8 @@ static int bcm2835_isp_probe(struct platform_device *pdev) if (!bcm2835_isp_instances) return -ENOMEM; + platform_set_drvdata(pdev, bcm2835_isp_instances); + for (i = 0; i < BCM2835_ISP_NUM_INSTANCES; i++) { ret = bcm2835_isp_probe_instance(pdev, &bcm2835_isp_instances[i], i); @@ -1781,7 +1783,6 @@ static int bcm2835_isp_probe(struct platform_device *pdev) goto error; } - platform_set_drvdata(pdev, bcm2835_isp_instances); dev_info(&pdev->dev, "Loaded V4L2 %s\n", BCM2835_ISP_NAME); return 0;