The v4l2_fh abstraction layer provides to drivers support to represent per-open file handle context and associate driver-specific data to them.
Currently drivers that do not require custom per-file handle data can use the v4l2_fh_open() and v4l2_fh_release() helpers as handlers v4l2_file_operations open() and close() functions. The two helpers set the file->private_data pointer to the newly allocated v4l2_fh. Drivers that instead store per-file handle data and represent them with driver-specific types that embed an instance of struct v4l2_fh have instead to use different helpers: v4l2_fh_init() and v4l2_fh_add() it's their responsibility to initialize file->private_data with what they consider more opportune. Unfortunately this leads to inconsistencies and slightly different implementations in drivers, which increase the maintenance burden. The series starts with patches from Laurent to address some of these inconsistencies. Some drivers in-facts set the file->private_data pointer to their own driver-specific types that embed the v4l2_fh. As the driver-specific type can be accessed with a simple container_of we can make all drivers set file->private_data to point to the v4l2_fh to make all the code base use the same pattern. Once all drivers have been made consistent we can modify the framework to automate the file->private_data initialisation by modifying v4l2_fh_add() to set file->private_data to the v4l2_fh allocated by drivers as part of their private structures. Once that's done we can now remove all direct accesses to file->private_data by providing the file_to_v4l2_fh helper. Now that all drivers that use v4l2_fh are guaranteed to have file->private_data initialised we can remove accesses to the 'void *priv' filed provided by v4l2-ioctl to drivers to make sure they always go through the file * and retrieve the driver specific type from the v4l2_fh there embedded. This guarantees a more robust data type layout and make usage of v4l2_fh more consistent and clear across the code base. Once that's done, the v4l2-ioctl layer can be modified to stop passing file->private_data as the second argument to all ioctl handlers, as it is not ideal to have access to the same data through two different entry point. As mentioned in the commit message of the last patch, there are plans to re-use the second ioctl argument to provide drivers a video_device_state. This patch series paves the way for that by making sure the argument can be re-used safely. Signed-off-by: Jacopo Mondi <jacopo.mo...@ideasonboard.com> --- Jacopo Mondi (36): media: rcar-vin: Do not set file->private_data media: rzg2l-cru: Do not set file->private_data media: camss: Remove custom .release fop() media: v4l2-ioctl: Access v4l2_fh from private_data media: allegro: Access v4l2_fh from file media: meson-ge2d: Access v4l2_fh from file media: coda: Access v4l2_fh from file media: wave5: Access v4l2_fh from file media: m2m-deinterlace: Access v4l2_fh from file media: mtk: jpeg: Access v4l2_fh from file->private_data media: mtk_mdp_m2m: Access v4l2_fh from file media: mtk: mdp3: Access v4l2_fh from file media: mtk: vcodec: Access v4l2_fh from file media: tegra-vde: Access v4l2_fh from file media: imx-jpeg: Access v4l2_fh from file media: imx-isi: Access v4l2_fh from file media: nxp: mx2: Access v4l2_fh from file media: renesas: Access v4l2_fh from file media: rockhip: rga: Access v4l2_fh from file media: rockchip: rkvdec: Access v4l2_fh from file media: exynos-gsc: Access v4l2_fh from file media: exynos4-is: Access v4l2_fh from file media: s3c-camif: Set queue owner using file media: s5p-g2d: Access v4l2_fh from file media: s5p-jpeg: Access v4l2_fh from file media: s5p-mfc: Access v4l2_fh from file media: bdisp: Access v4l2_fh from file media: st: delta: Access v4l2_fh from file media: stm32: dma2d: Access v4l2_fh from file media: omap3isp: Access v4l2_fh from file media: cx18: Access v4l2_fh from file media: ivtv: Access v4l2_fh from file media: zoran: Remove access to __fh media: usb: hdpvr: Access v4l2_fh from file media: usb: uvc: Access v4l2_fh from file media: staging: imx: Access v4l2_fh from file Laurent Pinchart (29): media: pci: saa7164: Store v4l2_fh pointer in file->private_data media: imagination: Store v4l2_fh pointer in file->private_data media: ti: vpe: Store v4l2_fh pointer in file->private_data media: usb: hdpvr: Store v4l2_fh pointer in file->private_data media: usb: pvrusb2: Store v4l2_fh pointer in file->private_data media: usb: uvcvideo: Store v4l2_fh pointer in file->private_data media: staging: most: Store v4l2_fh pointer in file->private_data media: Wrap file->private_data access with a helper function media: Replace file->private_data access with file_to_v4l2_fh() media: nvidia: tegra-vde: Replace file->private_data access media: Replace file->private_data access with custom functions media: pci: ivtv: Don't create fake v4l2_fh media: amphion: Make some vpu_v4l2 functions static media: amphion: Delete v4l2_fh synchronously in .release() media: visl: Drop visl_v4l2fh_to_ctx() function media: v4l2-fh: Move piece of documentation to correct function media: camss: Replace .open() file operation with v4l2_fh_open() media: chips-media: wave5: Pass file pointer to wave5_cleanup_instance() media: qcom: iris: Pass file pointer to iris_v4l2_fh_(de)init() media: qcom: iris: Set file->private_data in iris_v4l2_fh_(de)init() media: qcom: iris: Drop unused argument to iris_get_inst() media: qcom: venus: Pass file pointer to venus_close_common() media: Set file->private_data in v4l2_fh_add() media: Reset file->private_data to NULL in v4l2_fh_del() media: hantro: Access v4l2_fh from file->private_data media: v4l2-ctrls: Move v4l2_fh retrieval after V4L2_FL_USES_V4L2_FH check media: ipu6: isys: Don't set V4L2_FL_USES_V4L2_FH manually media: staging: ipu7: isys: Don't set V4L2_FL_USES_V4L2_FH manually media: v4l2-ioctl: Stop passing fh pointer to ioctl handlers Documentation/driver-api/media/v4l2-fh.rst | 56 ++--- .../zh_CN/video4linux/v4l2-framework.txt | 11 +- drivers/media/common/videobuf2/videobuf2-v4l2.c | 2 +- drivers/media/pci/cx18/cx18-driver.h | 2 +- drivers/media/pci/cx18/cx18-fileops.c | 11 +- drivers/media/pci/cx18/cx18-ioctl.c | 64 +++--- drivers/media/pci/intel/ipu6/ipu6-isys-video.c | 1 - drivers/media/pci/ivtv/ivtv-alsa-pcm.c | 2 - drivers/media/pci/ivtv/ivtv-driver.h | 7 +- drivers/media/pci/ivtv/ivtv-fileops.c | 40 ++-- drivers/media/pci/ivtv/ivtv-ioctl.c | 124 +++++------ drivers/media/pci/ivtv/ivtv-irq.c | 4 +- drivers/media/pci/saa7164/saa7164-encoder.c | 30 ++- drivers/media/pci/saa7164/saa7164-vbi.c | 25 ++- drivers/media/pci/saa7164/saa7164.h | 10 + drivers/media/pci/zoran/zoran.h | 6 - drivers/media/pci/zoran/zoran_driver.c | 3 +- drivers/media/platform/allegro-dvt/allegro-core.c | 32 +-- drivers/media/platform/amlogic/meson-ge2d/ge2d.c | 25 ++- drivers/media/platform/amphion/vpu.h | 2 +- drivers/media/platform/amphion/vpu_v4l2.c | 22 +- drivers/media/platform/amphion/vpu_v4l2.h | 8 - .../media/platform/chips-media/coda/coda-common.c | 50 +++-- .../platform/chips-media/wave5/wave5-helper.c | 10 +- .../platform/chips-media/wave5/wave5-helper.h | 2 +- .../platform/chips-media/wave5/wave5-vpu-dec.c | 23 +- .../platform/chips-media/wave5/wave5-vpu-enc.c | 29 ++- .../media/platform/chips-media/wave5/wave5-vpu.h | 5 + .../media/platform/imagination/e5010-jpeg-enc.c | 23 +- .../media/platform/imagination/e5010-jpeg-enc.h | 5 + drivers/media/platform/m2m-deinterlace.c | 26 ++- .../media/platform/mediatek/jpeg/mtk_jpeg_core.c | 37 ++-- drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.c | 29 ++- .../media/platform/mediatek/mdp3/mtk-mdp3-m2m.c | 25 ++- .../mediatek/vcodec/decoder/mtk_vcodec_dec.c | 36 ++-- .../mediatek/vcodec/decoder/mtk_vcodec_dec_drv.c | 9 +- .../mediatek/vcodec/decoder/mtk_vcodec_dec_drv.h | 5 + .../mediatek/vcodec/encoder/mtk_vcodec_enc.c | 37 ++-- .../mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c | 9 +- .../mediatek/vcodec/encoder/mtk_vcodec_enc_drv.h | 4 +- drivers/media/platform/nvidia/tegra-vde/v4l2.c | 35 ++- drivers/media/platform/nxp/dw100/dw100.c | 7 +- drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c | 45 ++-- drivers/media/platform/nxp/imx-pxp.c | 7 +- drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c | 21 +- drivers/media/platform/nxp/mx2_emmaprp.c | 24 ++- drivers/media/platform/qcom/camss/camss-video.c | 43 +--- drivers/media/platform/qcom/iris/iris_vidc.c | 36 ++-- drivers/media/platform/qcom/venus/core.c | 4 +- drivers/media/platform/qcom/venus/core.h | 4 +- drivers/media/platform/qcom/venus/vdec.c | 5 +- drivers/media/platform/qcom/venus/venc.c | 5 +- .../media/platform/renesas/rcar-vin/rcar-v4l2.c | 2 - drivers/media/platform/renesas/rcar_fdp1.c | 17 +- drivers/media/platform/renesas/rcar_jpu.c | 27 ++- .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 1 - drivers/media/platform/renesas/vsp1/vsp1_histo.c | 6 +- drivers/media/platform/renesas/vsp1/vsp1_video.c | 18 +- drivers/media/platform/rockchip/rga/rga.c | 16 +- drivers/media/platform/rockchip/rga/rga.h | 5 + drivers/media/platform/rockchip/rkvdec/rkvdec.c | 21 +- drivers/media/platform/rockchip/rkvdec/rkvdec.h | 4 +- .../media/platform/samsung/exynos-gsc/gsc-core.h | 6 +- .../media/platform/samsung/exynos-gsc/gsc-m2m.c | 37 ++-- .../media/platform/samsung/exynos4-is/fimc-core.h | 5 +- .../media/platform/samsung/exynos4-is/fimc-m2m.c | 19 +- .../platform/samsung/s3c-camif/camif-capture.c | 26 +-- drivers/media/platform/samsung/s5p-g2d/g2d.c | 22 +- .../media/platform/samsung/s5p-jpeg/jpeg-core.c | 33 ++- drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c | 13 +- .../platform/samsung/s5p-mfc/s5p_mfc_common.h | 6 + .../media/platform/samsung/s5p-mfc/s5p_mfc_dec.c | 22 +- .../media/platform/samsung/s5p-mfc/s5p_mfc_enc.c | 24 +-- drivers/media/platform/st/sti/bdisp/bdisp-v4l2.c | 30 +-- drivers/media/platform/st/sti/delta/delta-v4l2.c | 41 ++-- drivers/media/platform/st/sti/hva/hva-v4l2.c | 38 ++-- drivers/media/platform/st/sti/hva/hva.h | 2 - drivers/media/platform/st/stm32/dma2d/dma2d.c | 18 +- drivers/media/platform/sunxi/sun8i-di/sun8i-di.c | 10 +- .../platform/sunxi/sun8i-rotate/sun8i_rotate.c | 10 +- drivers/media/platform/ti/omap3isp/ispvideo.c | 36 ++-- drivers/media/platform/ti/omap3isp/ispvideo.h | 6 +- drivers/media/platform/ti/vpe/vpe.c | 21 +- drivers/media/platform/verisilicon/hantro.h | 4 +- drivers/media/platform/verisilicon/hantro_drv.c | 10 +- drivers/media/platform/verisilicon/hantro_v4l2.c | 22 +- drivers/media/platform/xilinx/xilinx-dma.c | 10 +- drivers/media/test-drivers/vicodec/vicodec-core.c | 7 +- drivers/media/test-drivers/vim2m.c | 7 +- drivers/media/test-drivers/visl/visl-core.c | 5 +- drivers/media/test-drivers/visl/visl.h | 7 +- drivers/media/test-drivers/vivid/vivid-core.c | 4 +- drivers/media/test-drivers/vivid/vivid-radio-rx.c | 4 +- drivers/media/test-drivers/vivid/vivid-radio-tx.c | 4 +- drivers/media/usb/hdpvr/hdpvr-video.c | 39 ++-- drivers/media/usb/pvrusb2/pvrusb2-v4l2.c | 69 +++--- drivers/media/usb/uvc/uvc_metadata.c | 10 +- drivers/media/usb/uvc/uvc_v4l2.c | 47 ++-- drivers/media/usb/uvc/uvcvideo.h | 5 + drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 2 +- drivers/media/v4l2-core/v4l2-ctrls-api.c | 9 +- drivers/media/v4l2-core/v4l2-fh.c | 16 +- drivers/media/v4l2-core/v4l2-ioctl.c | 53 ++--- drivers/media/v4l2-core/v4l2-mem2mem.c | 34 +-- drivers/media/v4l2-core/v4l2-subdev.c | 16 +- drivers/staging/media/imx/imx-media-csc-scaler.c | 26 +-- drivers/staging/media/ipu7/ipu7-isys-video.c | 1 - drivers/staging/media/meson/vdec/vdec.c | 29 +-- drivers/staging/media/meson/vdec/vdec.h | 5 + drivers/staging/media/sunxi/cedrus/cedrus.c | 8 +- drivers/staging/media/sunxi/cedrus/cedrus.h | 5 + drivers/staging/media/sunxi/cedrus/cedrus_video.c | 5 - drivers/staging/most/video/video.c | 19 +- drivers/usb/gadget/function/uvc.h | 5 + drivers/usb/gadget/function/uvc_v4l2.c | 8 +- include/media/v4l2-fh.h | 28 ++- include/media/v4l2-ioctl.h | 236 ++++++++++----------- 117 files changed, 1203 insertions(+), 1185 deletions(-) --- base-commit: d968e50b5c26642754492dea23cbd3592bde62d8 change-id: 20250801-media-private-data-4515851e7e1d Best regards, -- Jacopo Mondi <jacopo.mo...@ideasonboard.com> _______________________________________________ Mjpeg-users mailing list Mjpeg-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mjpeg-users