[PATCH v3 16/24] media: Add i.MX media core driver

Russell King - ARM Linux linux at armlinux.org.uk
Thu Feb 2 22:50:04 UTC 2017


On Fri, Jan 06, 2017 at 06:11:34PM -0800, Steve Longerbeam wrote:
> +/* register an internal subdev as a platform device */
> +static struct imx_media_subdev *
> +add_internal_subdev(struct imx_media_dev *imxmd,
> +		    const struct internal_subdev *isd,
> +		    int ipu_id)
> +{
> +	struct imx_media_internal_sd_platformdata pdata;
> +	struct platform_device_info pdevinfo = {0};
> +	struct imx_media_subdev *imxsd;
> +	struct platform_device *pdev;
> +
> +	switch (isd->id->grp_id) {
> +	case IMX_MEDIA_GRP_ID_CAMIF0...IMX_MEDIA_GRP_ID_CAMIF1:
> +		pdata.grp_id = isd->id->grp_id +
> +			((2 * ipu_id) << IMX_MEDIA_GRP_ID_CAMIF_BIT);
> +		break;
> +	default:
> +		pdata.grp_id = isd->id->grp_id;
> +		break;
> +	}
> +
> +	/* the id of IPU this subdev will control */
> +	pdata.ipu_id = ipu_id;
> +
> +	/* create subdev name */
> +	imx_media_grp_id_to_sd_name(pdata.sd_name, sizeof(pdata.sd_name),
> +				    pdata.grp_id, ipu_id);
> +
> +	pdevinfo.name = isd->id->name;
> +	pdevinfo.id = ipu_id * num_isd + isd->id->index;
> +	pdevinfo.parent = imxmd->dev;
> +	pdevinfo.data = &pdata;
> +	pdevinfo.size_data = sizeof(pdata);
> +	pdevinfo.dma_mask = DMA_BIT_MASK(32);
> +
> +	pdev = platform_device_register_full(&pdevinfo);
> +	if (IS_ERR(pdev))
> +		return ERR_CAST(pdev);
> +
> +	imxsd = imx_media_add_async_subdev(imxmd, NULL, dev_name(&pdev->dev));
> +	if (IS_ERR(imxsd))
> +		return imxsd;
> +
> +	imxsd->num_sink_pads = isd->num_sink_pads;
> +	imxsd->num_src_pads = isd->num_src_pads;
> +
> +	return imxsd;
> +}

You seem to create platform devices here, but I see nowhere that you
ever remove them - so if you get to the lucky point of being able to
rmmod imx-media and then try to re-insert it, you end up with a load
of kernel warnings, one for each device created this way, and
platform_device_register_full() fails:

WARNING: CPU: 0 PID: 2143 at /home/rmk/git/linux-rmk/fs/sysfs/dir.c:31 sysfs_warn_dup+0x64/0x80
sysfs: cannot create duplicate filename '/devices/soc0/soc/soc:media at 0/imx-ipuv3-smfc.2'
Modules linked in: imx_media(C+) rfcomm bnep bluetooth nfsd imx_camif(C) imx_ic(C) imx_smfc(C) caam_jr snd_soc_imx_sgtl5000 snd_soc_fsl_asoc_card uvcvideo snd_soc_imx_spdif imx_mipi_csi2(C) imx_media_common(C) snd_soc_imx_audmux imx219 snd_soc_sgtl5000 video_multiplexer imx_sdma caam imx2_wdt rc_cec coda v4l2_mem2mem videobuf2_v4l2 snd_soc_fsl_ssi snd_soc_fsl_spdif videobuf2_dma_contig imx_pcm_dma videobuf2_core videobuf2_vmalloc videobuf2_memops imx_thermal dw_hdmi_cec dw_hdmi_ahb_audio etnaviv fuse rc_pinnacle_pctv_hd [last unloaded: imx_media]
CPU: 0 PID: 2143 Comm: modprobe Tainted: G         C      4.10.0-rc6+ #2103
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
Backtrace:
[<c0013ba4>] (dump_backtrace) from [<c0013de4>] (show_stack+0x18/0x1c)
 r6:60000013 r5:ffffffff r4:00000000 r3:00000000
[<c0013dcc>] (show_stack) from [<c03334e8>] (dump_stack+0xa4/0xdc)
[<c0333444>] (dump_stack) from [<c0033210>] (__warn+0xdc/0x108)
 r6:c08ad998 r5:00000000 r4:cf4e9a78 r3:ec984980
[<c0033134>] (__warn) from [<c00332f4>] (warn_slowpath_fmt+0x40/0x48)
 r10:e5800010 r8:ef1fa818 r7:ef1fa810 r6:ef202300 r5:e9809000 r4:ee868000
[<c00332b8>] (warn_slowpath_fmt) from [<c01f5918>] (sysfs_warn_dup+0x64/0x80)
 r3:ee868000 r2:c08ad9c0
[<c01f58b4>] (sysfs_warn_dup) from [<c01f5a10>] (sysfs_create_dir_ns+0x90/0x98)
 r6:ffffffef r5:ef202300 r4:eb5e3418
[<c01f5980>] (sysfs_create_dir_ns) from [<c03361a4>] (kobject_add_internal+0xa4/0x2d8)
 r6:ef1fa818 r5:00000000 r4:eb5e3418
[<c0336100>] (kobject_add_internal) from [<c033657c>] (kobject_add+0x50/0x98)
 r8:bf1f9018 r7:ef1fa810 r6:ef1fa818 r5:00000000 r4:eb5e3418
[<c0336530>] (kobject_add) from [<c0415fd8>] (device_add+0xc8/0x538)
 r3:ef1fa834 r2:00000000
 r6:eb5e3418 r5:00000000 r4:eb5e3410
[<c0415f10>] (device_add) from [<c041ae24>] (platform_device_add+0xb0/0x214)
 r10:e5800010 r9:00000000 r8:bf1f9018 r7:e5806fd4 r6:eb5e3410 r5:eb5e3400
 r4:00000000
[<c041ad74>] (platform_device_add) from [<c041b7f4>] (platform_device_register_full+0xe8/0x110)
 r7:e5806fd4 r6:00000002 r5:eb5e3400 r4:cf4e9c18
[<c041b70c>] (platform_device_register_full) from [<bf1f7f54>] (add_ipu_internal_subdevs+0x128/0x2c8 [imx_media])
 r5:bf1f9000 r4:00000918
[<bf1f7e2c>] (add_ipu_internal_subdevs [imx_media]) from [<bf1f8120>] (imx_media_add_internal_subdevs+0x2c/0x70 [imx_media])
 r10:00000048 r9:f31ceef8 r8:ef7f1d94 r7:e5800230 r6:e5800200 r5:e5800010
 r4:cf4e9c90
[<bf1f80f4>] (imx_media_add_internal_subdevs [imx_media]) from [<bf1f71ec>] (imx_media_probe+0xc4/0x1c0 [imx_media])
 r5:00000000 r4:e5800010
[<bf1f7128>] (imx_media_probe [imx_media]) from [<c041ac80>] (platform_drv_probe+0x58/0xb8)
 r8:00000000 r7:bf1fbd48 r6:fffffdfb r5:ef1fa810 r4:fffffffe
[<c041ac28>] (platform_drv_probe) from [<c0418c90>] (driver_probe_device+0x204/0x2c8)
 r7:bf1fbd48 r6:00000000 r5:c1419de8 r4:ef1fa810
[<c0418a8c>] (driver_probe_device) from [<c0418e10>] (__driver_attach+0xbc/0xc0)
 r10:00000124 r8:00000001 r7:00000000 r6:ef1fa844 r5:bf1fbd48 r4:ef1fa810
[<c0418d54>] (__driver_attach) from [<c04170b0>] (bus_for_each_dev+0x5c/0x90)
 r6:c0418d54 r5:bf1fbd48 r4:00000000 r3:00000000
[<c0417054>] (bus_for_each_dev) from [<c04184f4>] (driver_attach+0x24/0x28)
 r6:c0a45e90 r5:ed5a8980 r4:bf1fbd48
[<c04184d0>] (driver_attach) from [<c04181f4>] (bus_add_driver+0xf4/0x200)
[<c0418100>] (bus_add_driver) from [<c0419c90>] (driver_register+0x80/0xfc)
 r7:00000000 r6:bf1fe000 r5:c0a70528 r4:bf1fbd48
[<c0419c10>] (driver_register) from [<c041ab54>] (__platform_driver_register+0x48/0x4c)
 r5:c0a70528 r4:bf1fbdc0
[<c041ab0c>] (__platform_driver_register) from [<bf1fe018>] (imx_media_pdrv_init+0x18/0x24 [imx_media])
[<bf1fe000>] (imx_media_pdrv_init [imx_media]) from [<c00098ac>] (do_one_initcall+0x44/0x170)
[<c0009868>] (do_one_initcall) from [<c011b090>] (do_init_module+0x68/0x1d8)
 r8:00000001 r7:bf1fbdc0 r6:e9809540 r5:c0a70528 r4:bf1fbdc0
[<c011b028>] (do_init_module) from [<c00d2d44>] (load_module+0x195c/0x2080)
 r7:bf1fbdc0 r6:c09e04ec r5:c0a70528 r4:c09f5f27
[<c00d13e8>] (load_module) from [<c00d3640>] (SyS_finit_module+0x94/0xa0)
 r10:00000000 r9:cf4e8000 r8:7f6b2398 r7:00000003 r6:00000000 r5:00000000
 r4:7fffffff
[<c00d35ac>] (SyS_finit_module) from [<c000fd60>] (ret_fast_syscall+0x0/0x1c)
 r8:c000ff04 r7:0000017b r6:80c95148 r5:80c95b10 r4:80c95370
---[ end trace 05abce0bbb26bc34 ]---

imx-media: add_internal_subdevs failed with -17
imx-media: probe of soc:media at 0 failed with error -17

-- 
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.


More information about the devel mailing list