[PATCH v2 26/76] media: Set file->private_data in v4l2_fh_add()

Partially applied
From:Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date:
Message-ID:<20250809211654.28887-27-laurent.pinchart@ideasonboard.com>
Patch:v2 · 26/76
Language:zh_CN
Patch-ID:801249bbc5fe822ee53cf650f376b03d075410b3
Files:Documentation/driver-api/media/v4l2-fh.rstDocumentation/translations/zh_CN/video4linux/v4l2-framework.txtdrivers/media/pci/cx18/cx18-fileops.cdrivers/media/pci/ivtv/ivtv-fileops.cdrivers/media/pci/saa7164/saa7164-encoder.cdrivers/media/pci/saa7164/saa7164-vbi.cdrivers/media/platform/allegro-dvt/allegro-core.cdrivers/media/platform/amlogic/meson-ge2d/ge2d.cdrivers/media/platform/amphion/vpu_v4l2.cdrivers/media/platform/chips-media/coda/coda-common.cdrivers/media/platform/chips-media/wave5/wave5-vpu-dec.cdrivers/media/platform/chips-media/wave5/wave5-vpu-enc.cdrivers/media/platform/imagination/e5010-jpeg-enc.cdrivers/media/platform/m2m-deinterlace.cdrivers/media/platform/mediatek/jpeg/mtk_jpeg_core.cdrivers/media/platform/mediatek/mdp/mtk_mdp_m2m.cdrivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.cdrivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.cdrivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.cdrivers/media/platform/nvidia/tegra-vde/v4l2.cdrivers/media/platform/nxp/dw100/dw100.cdrivers/media/platform/nxp/imx-jpeg/mxc-jpeg.cdrivers/media/platform/nxp/imx-pxp.cdrivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.cdrivers/media/platform/nxp/mx2_emmaprp.cdrivers/media/platform/qcom/iris/iris_vidc.cdrivers/media/platform/qcom/venus/vdec.cdrivers/media/platform/qcom/venus/venc.cdrivers/media/platform/renesas/rcar_fdp1.cdrivers/media/platform/renesas/rcar_jpu.cdrivers/media/platform/renesas/vsp1/vsp1_video.cdrivers/media/platform/rockchip/rga/rga.cdrivers/media/platform/rockchip/rkvdec/rkvdec.cdrivers/media/platform/samsung/exynos-gsc/gsc-m2m.cdrivers/media/platform/samsung/exynos4-is/fimc-m2m.cdrivers/media/platform/samsung/s5p-g2d/g2d.cdrivers/media/platform/samsung/s5p-jpeg/jpeg-core.cdrivers/media/platform/samsung/s5p-mfc/s5p_mfc.cdrivers/media/platform/st/sti/bdisp/bdisp-v4l2.cdrivers/media/platform/st/sti/delta/delta-v4l2.cdrivers/media/platform/st/sti/hva/hva-v4l2.cdrivers/media/platform/st/stm32/dma2d/dma2d.cdrivers/media/platform/sunxi/sun8i-di/sun8i-di.cdrivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.cdrivers/media/platform/ti/omap3isp/ispvideo.cdrivers/media/platform/ti/vpe/vpe.cdrivers/media/platform/verisilicon/hantro_drv.cdrivers/media/test-drivers/vicodec/vicodec-core.cdrivers/media/test-drivers/vim2m.cdrivers/media/test-drivers/visl/visl-core.cdrivers/media/usb/hdpvr/hdpvr-video.cdrivers/media/usb/pvrusb2/pvrusb2-v4l2.cdrivers/media/usb/uvc/uvc_v4l2.cdrivers/media/v4l2-core/v4l2-fh.cdrivers/media/v4l2-core/v4l2-subdev.cdrivers/staging/media/imx/imx-media-csc-scaler.cdrivers/staging/media/meson/vdec/vdec.cdrivers/staging/media/sunxi/cedrus/cedrus.cdrivers/staging/most/video/video.cdrivers/usb/gadget/function/uvc_v4l2.cinclude/media/v4l2-fh.h

Patch content 61 changed files

From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> All the drivers that use v4l2_fh and call v4l2_fh_add() manually store apointer to the v4l2_fh instance in file->private_data in their videodevice .open() file operation handler. Move the code to thev4l2_fh_add() function to avoid direct access to file->private_data indrivers. This requires adding a file pointer argument to the function. Changes to drivers have been generated with the following coccinellesemantic patch: @@expression fh;identifier filp;identifier open;type ret;@@ret open(..., struct file *filp, ...){	<...-	filp->private_data = fh;	...-	v4l2_fh_add(fh);+	v4l2_fh_add(fh, filp);	...>} @@expression fh;identifier filp;identifier open;type ret;@@ret open(..., struct file *filp, ...){	<...-	v4l2_fh_add(fh);+	v4l2_fh_add(fh, filp);	...-	filp->private_data = fh;	...>} Manual changes have been applied to Documentation/ to update the usagepatterns, to drivers/media/v4l2-core/v4l2-fh.c to update thev4l2_fh_add() prototype set file->private_data, and toinclude/media/v4l2-fh.h to update the v4l2_fh_add() function prototypeand its documentation. Additionally, white space issues have been fixed manually indrivers/media/platform/nvidia/tegra-vde/v4l2.c,drivers/media/platform/rockchip/rkvdec/rkvdec.c,drivers/media/v4l2-core/v4l2-fh.c anddrivers/staging/most/video/video.c. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>--- Documentation/driver-api/media/v4l2-fh.rst    | 42 ++++++++++--------- .../zh_CN/video4linux/v4l2-framework.txt      |  5 +-- drivers/media/pci/cx18/cx18-fileops.c         |  3 +- drivers/media/pci/ivtv/ivtv-fileops.c         |  4 +- drivers/media/pci/saa7164/saa7164-encoder.c   |  3 +- drivers/media/pci/saa7164/saa7164-vbi.c       |  3 +- .../media/platform/allegro-dvt/allegro-core.c |  3 +- .../media/platform/amlogic/meson-ge2d/ge2d.c  |  3 +- drivers/media/platform/amphion/vpu_v4l2.c     |  3 +- .../platform/chips-media/coda/coda-common.c   |  3 +- .../chips-media/wave5/wave5-vpu-dec.c         |  3 +- .../chips-media/wave5/wave5-vpu-enc.c         |  3 +- .../platform/imagination/e5010-jpeg-enc.c     |  3 +- drivers/media/platform/m2m-deinterlace.c      |  3 +- .../platform/mediatek/jpeg/mtk_jpeg_core.c    |  3 +- .../media/platform/mediatek/mdp/mtk_mdp_m2m.c |  3 +- .../platform/mediatek/mdp3/mtk-mdp3-m2m.c     |  3 +- .../vcodec/decoder/mtk_vcodec_dec_drv.c       |  3 +- .../vcodec/encoder/mtk_vcodec_enc_drv.c       |  3 +- .../media/platform/nvidia/tegra-vde/v4l2.c    |  3 +- drivers/media/platform/nxp/dw100/dw100.c      |  3 +- .../media/platform/nxp/imx-jpeg/mxc-jpeg.c    |  3 +- drivers/media/platform/nxp/imx-pxp.c          |  3 +- .../platform/nxp/imx8-isi/imx8-isi-m2m.c      |  3 +- drivers/media/platform/nxp/mx2_emmaprp.c      |  3 +- drivers/media/platform/qcom/iris/iris_vidc.c  |  3 +- drivers/media/platform/qcom/venus/vdec.c      |  3 +- drivers/media/platform/qcom/venus/venc.c      |  3 +- drivers/media/platform/renesas/rcar_fdp1.c    |  3 +- drivers/media/platform/renesas/rcar_jpu.c     |  3 +- .../media/platform/renesas/vsp1/vsp1_video.c  |  4 +- drivers/media/platform/rockchip/rga/rga.c     |  3 +- .../media/platform/rockchip/rkvdec/rkvdec.c   |  3 +- .../platform/samsung/exynos-gsc/gsc-m2m.c     |  3 +- .../platform/samsung/exynos4-is/fimc-m2m.c    |  3 +- drivers/media/platform/samsung/s5p-g2d/g2d.c  |  3 +- .../platform/samsung/s5p-jpeg/jpeg-core.c     |  3 +- .../media/platform/samsung/s5p-mfc/s5p_mfc.c  |  3 +- .../media/platform/st/sti/bdisp/bdisp-v4l2.c  |  3 +- .../media/platform/st/sti/delta/delta-v4l2.c  |  3 +- drivers/media/platform/st/sti/hva/hva-v4l2.c  |  3 +- drivers/media/platform/st/stm32/dma2d/dma2d.c |  3 +- .../media/platform/sunxi/sun8i-di/sun8i-di.c  |  3 +- .../sunxi/sun8i-rotate/sun8i_rotate.c         |  3 +- drivers/media/platform/ti/omap3isp/ispvideo.c |  3 +- drivers/media/platform/ti/vpe/vpe.c           |  3 +- .../media/platform/verisilicon/hantro_drv.c   |  3 +- .../media/test-drivers/vicodec/vicodec-core.c |  3 +- drivers/media/test-drivers/vim2m.c            |  3 +- drivers/media/test-drivers/visl/visl-core.c   |  3 +- drivers/media/usb/hdpvr/hdpvr-video.c         |  3 +- drivers/media/usb/pvrusb2/pvrusb2-v4l2.c      |  3 +- drivers/media/usb/uvc/uvc_v4l2.c              |  3 +- drivers/media/v4l2-core/v4l2-fh.c             |  7 ++-- drivers/media/v4l2-core/v4l2-subdev.c         |  3 +- .../staging/media/imx/imx-media-csc-scaler.c  |  3 +- drivers/staging/media/meson/vdec/vdec.c       |  3 +- drivers/staging/media/sunxi/cedrus/cedrus.c   |  3 +- drivers/staging/most/video/video.c            |  4 +- drivers/usb/gadget/function/uvc_v4l2.c        |  3 +- include/media/v4l2-fh.h                       |  5 ++- 61 files changed, 89 insertions(+), 144 deletions(-) diff --git a/Documentation/driver-api/media/v4l2-fh.rst b/Documentation/driver-api/media/v4l2-fh.rstindex 2c87b74578d9..a7393067f5db 100644--- a/Documentation/driver-api/media/v4l2-fh.rst+++ b/Documentation/driver-api/media/v4l2-fh.rst@@ -11,25 +11,22 @@ data that is used by the V4L2 framework. 	since it is also used to implement priority handling 	(:ref:`VIDIOC_G_PRIORITY`). -The users of :c:type:`v4l2_fh` (in the V4L2 framework, not the driver) know-whether a driver uses :c:type:`v4l2_fh` as its ``file->private_data`` pointer-by testing the ``V4L2_FL_USES_V4L2_FH`` bit in :c:type:`video_device`->flags.-This bit is set whenever :c:func:`v4l2_fh_init` is called.+struct v4l2_fh is allocated in the driver's ``open()`` file operation handler.+It is typically embedded in a larger driver-specific structure. The+:c:type:`v4l2_fh` must be initialized with a call to :c:func:`v4l2_fh_init`,+and added to the video device with :c:func:`v4l2_fh_add`. This associates the+:c:type:`v4l2_fh` with the :c:type:`file` by setting ``file->private_data`` to+point to the :c:type:`v4l2_fh`. -struct v4l2_fh is allocated as a part of the driver's own file handle-structure and ``file->private_data`` is set to it in the driver's ``open()``-function by the driver. The :c:type:`v4l2_fh` file handle can be retrieved-from the :c:type:`file` using :c:func:`file_to_v4l2_fh`. Drivers must not-access ``file->private_data`` directly.+Similarly, the struct v4l2_fh is freed in the driver's ``release()`` file+operation handler. It must be removed from the video device with+:c:func:`v4l2_fh_del` and cleaned up with :c:func:`v4l2_fh_exit` before being+freed. -In many cases the struct v4l2_fh will be embedded in a larger-structure. In that case you should call:--#) :c:func:`v4l2_fh_init` and :c:func:`v4l2_fh_add` in ``open()``-#) :c:func:`v4l2_fh_del` and :c:func:`v4l2_fh_exit` in ``release()``--Drivers can extract their own file handle structure by using the container_of-macro.+Drivers must not access ``file->private_data`` directly. They can retrieve the+:c:type:`v4l2_fh` associated with a :c:type:`file` by calling+:c:func:`file_to_v4l2_fh`. Drivers can extract their own file handle structure+by using the container_of macro.  Example: @@ -58,8 +55,7 @@ Example:  		... -		file->private_data = &my_fh->fh;-		v4l2_fh_add(&my_fh->fh);+		v4l2_fh_add(&my_fh->fh, file); 		return 0; 	} @@ -84,7 +80,7 @@ Below is a short description of the :c:type:`v4l2_fh` functions used:   :c:type:`v4l2_file_operations`->open() handler.  :c:func:`v4l2_fh_add <v4l2_fh_add>`-(:c:type:`fh <v4l2_fh>`)+(:c:type:`fh <v4l2_fh>`, struct file \*filp)  - Add a :c:type:`v4l2_fh` to :c:type:`video_device` file handle list.   Must be called once the file handle is completely initialized.@@ -138,6 +134,12 @@ associated device node:  - Same, but it calls v4l2_fh_is_singular with filp->private_data. +.. note::+        The V4L2 framework knows whether a driver uses :c:type:`v4l2_fh` as its+        ``file->private_data`` pointer by testing the ``V4L2_FL_USES_V4L2_FH``+        bit in :c:type:`video_device`->flags. This bit is set whenever+        :c:func:`v4l2_fh_init` is called.+  V4L2 fh functions and data structures ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^diff --git a/Documentation/translations/zh_CN/video4linux/v4l2-framework.txt b/Documentation/translations/zh_CN/video4linux/v4l2-framework.txtindex a9eb62fa1531..2d38ae17d940 100644--- a/Documentation/translations/zh_CN/video4linux/v4l2-framework.txt+++ b/Documentation/translations/zh_CN/video4linux/v4l2-framework.txt@@ -812,8 +812,7 @@ int my_open(struct file *file)  	... -	file->private_data = &my_fh->fh;-	v4l2_fh_add(&my_fh->fh);+	v4l2_fh_add(&my_fh->fh, file); 	return 0; } @@ -836,7 +835,7 @@ void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev)   初始化文件句柄。这*必须*在驱动的 v4l2_file_operations->open()   函数中执行。 -void v4l2_fh_add(struct v4l2_fh *fh)+void v4l2_fh_add(struct v4l2_fh *fh, struct file *filp)    添加一个 v4l2_fh 到 video_device 文件句柄列表。一旦文件句柄   初始化完成就必须调用。diff --git a/drivers/media/pci/cx18/cx18-fileops.c b/drivers/media/pci/cx18/cx18-fileops.cindex 89e38b303630..f90b547f5d67 100644--- a/drivers/media/pci/cx18/cx18-fileops.c+++ b/drivers/media/pci/cx18/cx18-fileops.c@@ -743,8 +743,7 @@ static int cx18_serialized_open(struct cx18_stream *s, struct file *filp) 	item->type = s->type;  	item->open_id = cx->open_id++;-	filp->private_data = &item->fh;-	v4l2_fh_add(&item->fh);+	v4l2_fh_add(&item->fh, filp);  	if (item->type == CX18_ENC_STREAM_TYPE_RAD && 			v4l2_fh_is_singular_file(filp)) {diff --git a/drivers/media/pci/ivtv/ivtv-fileops.c b/drivers/media/pci/ivtv/ivtv-fileops.cindex 67964a3c382c..aa5f5f16427c 100644--- a/drivers/media/pci/ivtv/ivtv-fileops.c+++ b/drivers/media/pci/ivtv/ivtv-fileops.c@@ -998,9 +998,7 @@ static int ivtv_open(struct file *filp) 	v4l2_fh_init(&item->fh, &s->vdev); 	item->itv = itv; 	item->type = s->type;--	filp->private_data = &item->fh;-	v4l2_fh_add(&item->fh);+	v4l2_fh_add(&item->fh, filp);  	if (item->type == IVTV_ENC_STREAM_TYPE_RAD && 			v4l2_fh_is_singular_file(filp)) {diff --git a/drivers/media/pci/saa7164/saa7164-encoder.c b/drivers/media/pci/saa7164/saa7164-encoder.cindex 296f50b6b8d3..e6e353a251cf 100644--- a/drivers/media/pci/saa7164/saa7164-encoder.c+++ b/drivers/media/pci/saa7164/saa7164-encoder.c@@ -725,8 +725,7 @@ static int fops_open(struct file *file)  	fh->port = port; 	v4l2_fh_init(&fh->fh, video_devdata(file));-	v4l2_fh_add(&fh->fh);-	file->private_data = &fh->fh;+	v4l2_fh_add(&fh->fh, file);  	return 0; }diff --git a/drivers/media/pci/saa7164/saa7164-vbi.c b/drivers/media/pci/saa7164/saa7164-vbi.cindex a7e398f30472..181442fcb43b 100644--- a/drivers/media/pci/saa7164/saa7164-vbi.c+++ b/drivers/media/pci/saa7164/saa7164-vbi.c@@ -428,8 +428,7 @@ static int fops_open(struct file *file)  	fh->port = port; 	v4l2_fh_init(&fh->fh, video_devdata(file));-	v4l2_fh_add(&fh->fh);-	file->private_data = &fh->fh;+	v4l2_fh_add(&fh->fh, file);  	return 0; }diff --git a/drivers/media/platform/allegro-dvt/allegro-core.c b/drivers/media/platform/allegro-dvt/allegro-core.cindex 74977f3ae484..8c30f3cd4fc5 100644--- a/drivers/media/platform/allegro-dvt/allegro-core.c+++ b/drivers/media/platform/allegro-dvt/allegro-core.c@@ -3219,8 +3219,7 @@ static int allegro_open(struct file *file) 	}  	list_add(&channel->list, &dev->channels);-	file->private_data = &channel->fh;-	v4l2_fh_add(&channel->fh);+	v4l2_fh_add(&channel->fh, file);  	allegro_channel_adjust(channel); diff --git a/drivers/media/platform/amlogic/meson-ge2d/ge2d.c b/drivers/media/platform/amlogic/meson-ge2d/ge2d.cindex c7df29a2d820..d36891b546bc 100644--- a/drivers/media/platform/amlogic/meson-ge2d/ge2d.c+++ b/drivers/media/platform/amlogic/meson-ge2d/ge2d.c@@ -860,8 +860,7 @@ static int ge2d_open(struct file *file) 		return ret; 	} 	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ge2d_setup_ctrls(ctx); diff --git a/drivers/media/platform/amphion/vpu_v4l2.c b/drivers/media/platform/amphion/vpu_v4l2.cindex 57ca6262bb04..e13bfe09af1b 100644--- a/drivers/media/platform/amphion/vpu_v4l2.c+++ b/drivers/media/platform/amphion/vpu_v4l2.c@@ -760,7 +760,7 @@ int vpu_v4l2_open(struct file *file, struct vpu_inst *inst) 	inst->min_buffer_cap = 2; 	inst->min_buffer_out = 2; 	v4l2_fh_init(&inst->fh, func->vfd);-	v4l2_fh_add(&inst->fh);+	v4l2_fh_add(&inst->fh, file);  	ret = call_vop(inst, ctrl_init); 	if (ret)@@ -774,7 +774,6 @@ int vpu_v4l2_open(struct file *file, struct vpu_inst *inst) 	}  	inst->fh.ctrl_handler = &inst->ctrl_handler;-	file->private_data = &inst->fh; 	inst->state = VPU_CODEC_STATE_DEINIT; 	inst->workqueue = alloc_ordered_workqueue("vpu_inst", WQ_MEM_RECLAIM); 	if (inst->workqueue) {diff --git a/drivers/media/platform/chips-media/coda/coda-common.c b/drivers/media/platform/chips-media/coda/coda-common.cindex 459b59149390..7d874fd502b8 100644--- a/drivers/media/platform/chips-media/coda/coda-common.c+++ b/drivers/media/platform/chips-media/coda/coda-common.c@@ -2642,8 +2642,7 @@ static int coda_open(struct file *file) 	if (ctx->ops->seq_end_work) 		INIT_WORK(&ctx->seq_end_work, ctx->ops->seq_end_work); 	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	ctx->dev = dev; 	ctx->idx = idx; diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.cindex f3188d720ed3..88eb933a5144 100644--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c@@ -1761,8 +1761,7 @@ static int wave5_vpu_open_dec(struct file *filp) 		return -ENOMEM;  	v4l2_fh_init(&inst->v4l2_fh, vdev);-	filp->private_data = &inst->v4l2_fh;-	v4l2_fh_add(&inst->v4l2_fh);+	v4l2_fh_add(&inst->v4l2_fh, filp);  	INIT_LIST_HEAD(&inst->list); diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.cindex b69a1206fa12..322c1498758a 100644--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c@@ -1587,8 +1587,7 @@ static int wave5_vpu_open_enc(struct file *filp) 		return -ENOMEM;  	v4l2_fh_init(&inst->v4l2_fh, vdev);-	filp->private_data = &inst->v4l2_fh;-	v4l2_fh_add(&inst->v4l2_fh);+	v4l2_fh_add(&inst->v4l2_fh, filp);  	INIT_LIST_HEAD(&inst->list); diff --git a/drivers/media/platform/imagination/e5010-jpeg-enc.c b/drivers/media/platform/imagination/e5010-jpeg-enc.cindex 295461325862..1da00ff4b1e3 100644--- a/drivers/media/platform/imagination/e5010-jpeg-enc.c+++ b/drivers/media/platform/imagination/e5010-jpeg-enc.c@@ -742,8 +742,7 @@ static int e5010_open(struct file *file) 	}  	v4l2_fh_init(&ctx->fh, vdev);-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ctx->e5010 = e5010; 	ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(e5010->m2m_dev, ctx, queue_init);diff --git a/drivers/media/platform/m2m-deinterlace.c b/drivers/media/platform/m2m-deinterlace.cindex 1812c07837ad..a343dffd19f0 100644--- a/drivers/media/platform/m2m-deinterlace.c+++ b/drivers/media/platform/m2m-deinterlace.c@@ -847,7 +847,6 @@ static int deinterlace_open(struct file *file) 		return -ENOMEM;  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = pcdev;  	ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(pcdev->m2m_dev, ctx, &queue_init);@@ -866,7 +865,7 @@ static int deinterlace_open(struct file *file) 	}  	ctx->colorspace = V4L2_COLORSPACE_REC709;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	dprintk(pcdev, "Created instance %p, m2m_ctx: %p\n", 		ctx, ctx->fh.m2m_ctx);diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.cindex 3a7a6eb53d89..5178a1b170fe 100644--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c@@ -1176,8 +1176,7 @@ static int mtk_jpeg_open(struct file *file) 	INIT_LIST_HEAD(&ctx->dst_done_queue); 	spin_lock_init(&ctx->done_queue_lock); 	v4l2_fh_init(&ctx->fh, vfd);-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ctx->jpeg = jpeg; 	ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(jpeg->m2m_dev, ctx,diff --git a/drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.c b/drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.cindex 2d894b5bfaa7..7a1a8e51dbca 100644--- a/drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.c+++ b/drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.c@@ -1070,14 +1070,13 @@ static int mtk_mdp_m2m_open(struct file *file) 	mutex_init(&ctx->slock); 	ctx->id = mdp->id_counter++; 	v4l2_fh_init(&ctx->fh, vfd);-	file->private_data = &ctx->fh; 	ret = mtk_mdp_ctrls_create(ctx); 	if (ret) 		goto error_ctrls;  	/* Use separate control handler per file handle */ 	ctx->fh.ctrl_handler = &ctx->ctrl_handler;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	INIT_LIST_HEAD(&ctx->list);  	ctx->mdp_dev = mdp;diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.cindex 886ff25c70eb..847d6b310e74 100644--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c@@ -590,14 +590,13 @@ static int mdp_m2m_open(struct file *file) 	ctx->mdp_dev = mdp;  	v4l2_fh_init(&ctx->fh, vdev);-	file->private_data = &ctx->fh; 	ret = mdp_m2m_ctrls_create(ctx); 	if (ret) 		goto err_exit_fh;  	/* Use separate control handler per file handle */ 	ctx->fh.ctrl_handler = &ctx->ctrl_handler;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	mutex_init(&ctx->ctx_lock); 	ctx->m2m_ctx = v4l2_m2m_ctx_init(mdp->m2m_dev, ctx, mdp_m2m_queue_init);diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.c b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.cindex 18801883c31a..952a77c383bd 100644--- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.c+++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.c@@ -206,8 +206,7 @@ static int fops_vcodec_open(struct file *file) 	mutex_lock(&dev->dev_mutex); 	ctx->id = dev->id_counter++; 	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	INIT_LIST_HEAD(&ctx->list); 	ctx->dev = dev; 	if (ctx->dev->vdec_pdata->is_subdev_supported) {diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.cindex e26a6c3ffa0c..9cacb6cbcf28 100644--- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c+++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c@@ -129,8 +129,7 @@ static int fops_vcodec_open(struct file *file) 	 */ 	ctx->id = dev->id_counter++; 	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	INIT_LIST_HEAD(&ctx->list); 	ctx->dev = dev; 	init_waitqueue_head(&ctx->queue[0]);diff --git a/drivers/media/platform/nvidia/tegra-vde/v4l2.c b/drivers/media/platform/nvidia/tegra-vde/v4l2.cindex 393dc3f07d5c..688b776b3010 100644--- a/drivers/media/platform/nvidia/tegra-vde/v4l2.c+++ b/drivers/media/platform/nvidia/tegra-vde/v4l2.c@@ -832,8 +832,7 @@ static int tegra_open(struct file *file) 		goto free_ctrls; 	} -	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	tegra_reset_coded_fmt(ctx); 	tegra_try_coded_fmt(file, &ctx->fh, &ctx->coded_fmt);diff --git a/drivers/media/platform/nxp/dw100/dw100.c b/drivers/media/platform/nxp/dw100/dw100.cindex 2460f09a6813..2bd30910ddf9 100644--- a/drivers/media/platform/nxp/dw100/dw100.c+++ b/drivers/media/platform/nxp/dw100/dw100.c@@ -607,7 +607,6 @@ static int dw100_open(struct file *file)  	mutex_init(&ctx->vq_mutex); 	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dw_dev = dw_dev;  	ctx->q_data[DW100_QUEUE_SRC].fmt = &formats[0];@@ -651,7 +650,7 @@ static int dw100_open(struct file *file) 		goto err; 	} -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	return 0; diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.cindex 8eef7ebd0428..d7cecc56a9eb 100644--- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c+++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c@@ -2205,8 +2205,7 @@ static int mxc_jpeg_open(struct file *file) 	}  	v4l2_fh_init(&ctx->fh, mxc_vfd);-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ctx->mxc_jpeg = mxc_jpeg; diff --git a/drivers/media/platform/nxp/imx-pxp.c b/drivers/media/platform/nxp/imx-pxp.cindex 879b1803a2b3..9602409f3ece 100644--- a/drivers/media/platform/nxp/imx-pxp.c+++ b/drivers/media/platform/nxp/imx-pxp.c@@ -1660,7 +1660,6 @@ static int pxp_open(struct file *file) 	}  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = dev; 	hdl = &ctx->hdl; 	v4l2_ctrl_handler_init(hdl, 4);@@ -1699,7 +1698,7 @@ static int pxp_open(struct file *file) 		goto open_unlock; 	} -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	atomic_inc(&dev->num_inst);  	dprintk(dev, "Created instance: %p, m2m_ctx: %p\n",diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.cindex 6444392c5e62..d6df6e2725f5 100644--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c@@ -673,7 +673,6 @@ static int mxc_isi_m2m_open(struct file *file) 	mutex_init(&ctx->vb2_lock);  	v4l2_fh_init(&ctx->fh, vdev);-	file->private_data = &ctx->fh;  	ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(m2m->m2m_dev, ctx, 					    &mxc_isi_m2m_queue_init);@@ -694,7 +693,7 @@ static int mxc_isi_m2m_open(struct file *file) 	if (ret) 		goto err_ctrls; -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	return 0; diff --git a/drivers/media/platform/nxp/mx2_emmaprp.c b/drivers/media/platform/nxp/mx2_emmaprp.cindex 5c8c6285ec1e..8c8f834e6250 100644--- a/drivers/media/platform/nxp/mx2_emmaprp.c+++ b/drivers/media/platform/nxp/mx2_emmaprp.c@@ -730,7 +730,6 @@ static int emmaprp_open(struct file *file) 		return -ENOMEM;  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = pcdev;  	if (mutex_lock_interruptible(&pcdev->dev_mutex)) {@@ -752,7 +751,7 @@ static int emmaprp_open(struct file *file) 	clk_prepare_enable(pcdev->clk_emma_ahb); 	ctx->q_data[V4L2_M2M_SRC].fmt = &formats[1]; 	ctx->q_data[V4L2_M2M_DST].fmt = &formats[0];-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	mutex_unlock(&pcdev->dev_mutex);  	dprintk(pcdev, "Created instance %p, m2m_ctx: %p\n", ctx, ctx->fh.m2m_ctx);diff --git a/drivers/media/platform/qcom/iris/iris_vidc.c b/drivers/media/platform/qcom/iris/iris_vidc.cindex 64ebec2ca6b3..cdd34a3b71ff 100644--- a/drivers/media/platform/qcom/iris/iris_vidc.c+++ b/drivers/media/platform/qcom/iris/iris_vidc.c@@ -25,8 +25,7 @@ static void iris_v4l2_fh_init(struct iris_inst *inst, struct file *filp) { 	v4l2_fh_init(&inst->fh, inst->core->vdev_dec); 	inst->fh.ctrl_handler = &inst->ctrl_handler;-	v4l2_fh_add(&inst->fh);-	filp->private_data = &inst->fh;+	v4l2_fh_add(&inst->fh, filp); }  static void iris_v4l2_fh_deinit(struct iris_inst *inst, struct file *filp)diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.cindex d10ca6d89f6d..55c27345b7d8 100644--- a/drivers/media/platform/qcom/venus/vdec.c+++ b/drivers/media/platform/qcom/venus/vdec.c@@ -1732,9 +1732,8 @@ static int vdec_open(struct file *file) 	v4l2_fh_init(&inst->fh, core->vdev_dec);  	inst->fh.ctrl_handler = &inst->ctrl_handler;-	v4l2_fh_add(&inst->fh);+	v4l2_fh_add(&inst->fh, file); 	inst->fh.m2m_ctx = inst->m2m_ctx;-	file->private_data = &inst->fh;  	return 0; diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.cindex 0838d64ce8fe..fba07557a399 100644--- a/drivers/media/platform/qcom/venus/venc.c+++ b/drivers/media/platform/qcom/venus/venc.c@@ -1515,9 +1515,8 @@ static int venc_open(struct file *file) 	v4l2_fh_init(&inst->fh, core->vdev_enc);  	inst->fh.ctrl_handler = &inst->ctrl_handler;-	v4l2_fh_add(&inst->fh);+	v4l2_fh_add(&inst->fh, file); 	inst->fh.m2m_ctx = inst->m2m_ctx;-	file->private_data = &inst->fh;  	return 0; diff --git a/drivers/media/platform/renesas/rcar_fdp1.c b/drivers/media/platform/renesas/rcar_fdp1.cindex 12a5dcc0ca6c..f1ea303ac038 100644--- a/drivers/media/platform/renesas/rcar_fdp1.c+++ b/drivers/media/platform/renesas/rcar_fdp1.c@@ -2093,7 +2093,6 @@ static int fdp1_open(struct file *file) 	}  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->fdp1 = fdp1;  	/* Initialise Queues */@@ -2142,7 +2141,7 @@ static int fdp1_open(struct file *file) 	if (ret < 0) 		goto error_pm; -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	dprintk(fdp1, "Created instance: %p, m2m_ctx: %p\n", 		ctx, ctx->fh.m2m_ctx);diff --git a/drivers/media/platform/renesas/rcar_jpu.c b/drivers/media/platform/renesas/rcar_jpu.cindex 7d5e9df53dfb..d0d4ee3f8bdc 100644--- a/drivers/media/platform/renesas/rcar_jpu.c+++ b/drivers/media/platform/renesas/rcar_jpu.c@@ -1231,8 +1231,7 @@ static int jpu_open(struct file *file)  	v4l2_fh_init(&ctx->fh, vfd); 	ctx->fh.ctrl_handler = &ctx->ctrl_handler;-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ctx->jpu = jpu; 	ctx->encoder = vfd == &jpu->vfd_encoder;diff --git a/drivers/media/platform/renesas/vsp1/vsp1_video.c b/drivers/media/platform/renesas/vsp1/vsp1_video.cindex 656fb5e6cb30..b6dc1ee3dc50 100644--- a/drivers/media/platform/renesas/vsp1/vsp1_video.c+++ b/drivers/media/platform/renesas/vsp1/vsp1_video.c@@ -1079,9 +1079,7 @@ static int vsp1_video_open(struct file *file) 		return -ENOMEM;  	v4l2_fh_init(vfh, &video->video);-	v4l2_fh_add(vfh);--	file->private_data = vfh;+	v4l2_fh_add(vfh, file);  	ret = vsp1_device_get(video->vsp1); 	if (ret < 0) {diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.cindex 8a6e618d605c..d88817023996 100644--- a/drivers/media/platform/rockchip/rga/rga.c+++ b/drivers/media/platform/rockchip/rga/rga.c@@ -395,8 +395,7 @@ static int rga_open(struct file *file) 		return ret; 	} 	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	rga_setup_ctrls(ctx); diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec.c b/drivers/media/platform/rockchip/rkvdec/rkvdec.cindex 41ab90cbcc0c..2fbad685e92c 100644--- a/drivers/media/platform/rockchip/rkvdec/rkvdec.c+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec.c@@ -938,8 +938,7 @@ static int rkvdec_open(struct file *filp) 	if (ret) 		goto err_cleanup_m2m_ctx; -	filp->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, filp);  	return 0; diff --git a/drivers/media/platform/samsung/exynos-gsc/gsc-m2m.c b/drivers/media/platform/samsung/exynos-gsc/gsc-m2m.cindex 968bb4327b7a..39d84ffd1b05 100644--- a/drivers/media/platform/samsung/exynos-gsc/gsc-m2m.c+++ b/drivers/media/platform/samsung/exynos-gsc/gsc-m2m.c@@ -625,8 +625,7 @@ static int gsc_m2m_open(struct file *file)  	/* Use separate control handler per file handle */ 	ctx->fh.ctrl_handler = &ctx->ctrl_handler;-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ctx->gsc_dev = gsc; 	/* Default color format */diff --git a/drivers/media/platform/samsung/exynos4-is/fimc-m2m.c b/drivers/media/platform/samsung/exynos4-is/fimc-m2m.cindex feedf60dad09..b002b02a899e 100644--- a/drivers/media/platform/samsung/exynos4-is/fimc-m2m.c+++ b/drivers/media/platform/samsung/exynos4-is/fimc-m2m.c@@ -634,8 +634,7 @@ static int fimc_m2m_open(struct file *file)  	/* Use separate control handler per file handle */ 	ctx->fh.ctrl_handler = &ctx->ctrls.handler;-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	/* Setup the device context for memory-to-memory mode */ 	ctx->state = FIMC_CTX_M2M;diff --git a/drivers/media/platform/samsung/s5p-g2d/g2d.c b/drivers/media/platform/samsung/s5p-g2d/g2d.cindex 44fcedbbc90a..e34cae9c9cf6 100644--- a/drivers/media/platform/samsung/s5p-g2d/g2d.c+++ b/drivers/media/platform/samsung/s5p-g2d/g2d.c@@ -257,8 +257,7 @@ static int g2d_open(struct file *file) 		return ret; 	} 	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	g2d_setup_ctrls(ctx); diff --git a/drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c b/drivers/media/platform/samsung/s5p-jpeg/jpeg-core.cindex a5ecfe03db09..9e35dd939ad7 100644--- a/drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c+++ b/drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c@@ -970,8 +970,7 @@ static int s5p_jpeg_open(struct file *file) 	v4l2_fh_init(&ctx->fh, vfd); 	/* Use separate control handler per file handle */ 	ctx->fh.ctrl_handler = &ctx->ctrl_handler;-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ctx->jpeg = jpeg; 	if (vfd == jpeg->vfd_encoder) {diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.cindex dd9761df59df..74629db05121 100644--- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c+++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c@@ -801,8 +801,7 @@ static int s5p_mfc_open(struct file *file) 	} 	init_waitqueue_head(&ctx->queue); 	v4l2_fh_init(&ctx->fh, vdev);-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	ctx->dev = dev; 	INIT_LIST_HEAD(&ctx->src_queue); 	INIT_LIST_HEAD(&ctx->dst_queue);diff --git a/drivers/media/platform/st/sti/bdisp/bdisp-v4l2.c b/drivers/media/platform/st/sti/bdisp/bdisp-v4l2.cindex f3844e4e47ca..5e983799e298 100644--- a/drivers/media/platform/st/sti/bdisp/bdisp-v4l2.c+++ b/drivers/media/platform/st/sti/bdisp/bdisp-v4l2.c@@ -608,8 +608,7 @@ static int bdisp_open(struct file *file)  	/* Use separate control handler per file handle */ 	ctx->fh.ctrl_handler = &ctx->ctrl_handler;-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	/* Default format */ 	ctx->src = bdisp_dflt_fmt;diff --git a/drivers/media/platform/st/sti/delta/delta-v4l2.c b/drivers/media/platform/st/sti/delta/delta-v4l2.cindex a12fdbd8abed..3063a98ed25b 100644--- a/drivers/media/platform/st/sti/delta/delta-v4l2.c+++ b/drivers/media/platform/st/sti/delta/delta-v4l2.c@@ -1639,8 +1639,7 @@ static int delta_open(struct file *file) 	ctx->dev = delta;  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	INIT_WORK(&ctx->run_work, delta_run_work); 	mutex_init(&ctx->lock);diff --git a/drivers/media/platform/st/sti/hva/hva-v4l2.c b/drivers/media/platform/st/sti/hva/hva-v4l2.cindex 29142c806cb7..2f9413fa7318 100644--- a/drivers/media/platform/st/sti/hva/hva-v4l2.c+++ b/drivers/media/platform/st/sti/hva/hva-v4l2.c@@ -1174,8 +1174,7 @@ static int hva_open(struct file *file)  	INIT_WORK(&ctx->run_work, hva_run_work); 	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ret = hva_ctrls_setup(ctx); 	if (ret) {diff --git a/drivers/media/platform/st/stm32/dma2d/dma2d.c b/drivers/media/platform/st/stm32/dma2d/dma2d.cindex f4c5d73447a7..b2bced06a1e6 100644--- a/drivers/media/platform/st/stm32/dma2d/dma2d.c+++ b/drivers/media/platform/st/stm32/dma2d/dma2d.c@@ -304,8 +304,7 @@ static int dma2d_open(struct file *file) 	}  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	dma2d_setup_ctrls(ctx); diff --git a/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c b/drivers/media/platform/sunxi/sun8i-di/sun8i-di.cindex e9c7c99fbc55..7823eb97faf7 100644--- a/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c+++ b/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c@@ -730,7 +730,6 @@ static int deinterlace_open(struct file *file) 	deinterlace_prepare_format(&ctx->dst_fmt);  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = dev;  	ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx,@@ -740,7 +739,7 @@ static int deinterlace_open(struct file *file) 		goto err_free; 	} -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	mutex_unlock(&dev->dev_mutex); diff --git a/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c b/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.cindex 9ea65cb7187f..368a858b8c0f 100644--- a/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c+++ b/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c@@ -659,7 +659,6 @@ static int rotate_open(struct file *file) 	rotate_set_cap_format(ctx, &ctx->dst_fmt, ctx->rotate);  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = dev;  	ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx,@@ -669,7 +668,7 @@ static int rotate_open(struct file *file) 		goto err_free; 	} -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	ret = rotate_setup_ctrls(ctx); 	if (ret)diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.cindex b76d40aeca17..d10a2b96c13c 100644--- a/drivers/media/platform/ti/omap3isp/ispvideo.c+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c@@ -1297,7 +1297,7 @@ static int isp_video_open(struct file *file) 		return -ENOMEM;  	v4l2_fh_init(&handle->vfh, &video->video);-	v4l2_fh_add(&handle->vfh);+	v4l2_fh_add(&handle->vfh, file);  	/* If this is the first user, initialise the pipeline. */ 	if (omap3isp_get(video->isp) == NULL) {@@ -1333,7 +1333,6 @@ static int isp_video_open(struct file *file) 	handle->timeperframe.denominator = 1;  	handle->video = video;-	file->private_data = &handle->vfh;  done: 	if (ret < 0) {diff --git a/drivers/media/platform/ti/vpe/vpe.c b/drivers/media/platform/ti/vpe/vpe.cindex 4b9b2bec7377..a47c5d31c475 100644--- a/drivers/media/platform/ti/vpe/vpe.c+++ b/drivers/media/platform/ti/vpe/vpe.c@@ -2310,7 +2310,6 @@ static int vpe_open(struct file *file) 	init_adb_hdrs(ctx);  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;  	hdl = &ctx->hdl; 	v4l2_ctrl_handler_init(hdl, 1);@@ -2364,7 +2363,7 @@ static int vpe_open(struct file *file) 		goto exit_fh; 	} -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	/* 	 * for now, just report the creation of the first instance, we can laterdiff --git a/drivers/media/platform/verisilicon/hantro_drv.c b/drivers/media/platform/verisilicon/hantro_drv.cindex b20b9c7f4131..aadc3d8fb3d1 100644--- a/drivers/media/platform/verisilicon/hantro_drv.c+++ b/drivers/media/platform/verisilicon/hantro_drv.c@@ -663,8 +663,7 @@ static int hantro_open(struct file *filp) 	}  	v4l2_fh_init(&ctx->fh, vdev);-	filp->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, filp);  	hantro_reset_fmts(ctx); diff --git a/drivers/media/test-drivers/vicodec/vicodec-core.c b/drivers/media/test-drivers/vicodec/vicodec-core.cindex e27f6761cba1..f20d9d9643f5 100644--- a/drivers/media/test-drivers/vicodec/vicodec-core.c+++ b/drivers/media/test-drivers/vicodec/vicodec-core.c@@ -1848,7 +1848,6 @@ static int vicodec_open(struct file *file) 		ctx->is_stateless = true;  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = dev; 	hdl = &ctx->hdl; 	v4l2_ctrl_handler_init(hdl, 5);@@ -1932,7 +1931,7 @@ static int vicodec_open(struct file *file) 		goto open_unlock; 	} -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  open_unlock: 	mutex_unlock(vfd->lock);diff --git a/drivers/media/test-drivers/vim2m.c b/drivers/media/test-drivers/vim2m.cindex 55d885be5bcc..24574025f58f 100644--- a/drivers/media/test-drivers/vim2m.c+++ b/drivers/media/test-drivers/vim2m.c@@ -1389,7 +1389,6 @@ static int vim2m_open(struct file *file) 	}  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = dev; 	hdl = &ctx->hdl; 	v4l2_ctrl_handler_init(hdl, 4);@@ -1433,7 +1432,7 @@ static int vim2m_open(struct file *file) 		goto open_unlock; 	} -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	atomic_inc(&dev->num_inst);  	dprintk(dev, 1, "Created instance: %p, m2m_ctx: %p\n",diff --git a/drivers/media/test-drivers/visl/visl-core.c b/drivers/media/test-drivers/visl/visl-core.cindex 5bf3136b36eb..0f43ec23f40b 100644--- a/drivers/media/test-drivers/visl/visl-core.c+++ b/drivers/media/test-drivers/visl/visl-core.c@@ -341,7 +341,6 @@ static int visl_open(struct file *file) 	ctx->tpg_str_buf = kzalloc(TPG_STR_BUF_SZ, GFP_KERNEL);  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = dev;  	rc = visl_init_ctrls(ctx);@@ -361,7 +360,7 @@ static int visl_open(struct file *file) 	if (rc) 		goto free_m2m_ctx; -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	dprintk(dev, "Created instance: %p, m2m_ctx: %p\n", 		ctx, ctx->fh.m2m_ctx);diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c b/drivers/media/usb/hdpvr/hdpvr-video.cindex ea17f1a5f5b0..6c6e467f8554 100644--- a/drivers/media/usb/hdpvr/hdpvr-video.c+++ b/drivers/media/usb/hdpvr/hdpvr-video.c@@ -380,8 +380,7 @@ static int hdpvr_open(struct file *file) 		return -ENOMEM; 	fh->legacy_mode = true; 	v4l2_fh_init(&fh->fh, video_devdata(file));-	v4l2_fh_add(&fh->fh);-	file->private_data = &fh->fh;+	v4l2_fh_add(&fh->fh, file); 	return 0; } diff --git a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.cindex 481b03bbecf8..04c77af0c51e 100644--- a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c+++ b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c@@ -1003,10 +1003,9 @@ static int pvr2_v4l2_open(struct file *file) 	}  	fhp->file = file;-	file->private_data = &fhp->fh;  	fhp->fw_mode_flag = pvr2_hdw_cpufw_get_enabled(hdw);-	v4l2_fh_add(&fhp->fh);+	v4l2_fh_add(&fhp->fh, file);  	return 0; }diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.cindex 6dd329a972fd..09677ed639ae 100644--- a/drivers/media/usb/uvc/uvc_v4l2.c+++ b/drivers/media/usb/uvc/uvc_v4l2.c@@ -600,10 +600,9 @@ static int uvc_v4l2_open(struct file *file) 		return -ENOMEM;  	v4l2_fh_init(&handle->vfh, &stream->vdev);-	v4l2_fh_add(&handle->vfh);+	v4l2_fh_add(&handle->vfh, file); 	handle->chain = stream->chain; 	handle->stream = stream;-	file->private_data = &handle->vfh;  	return 0; }diff --git a/drivers/media/v4l2-core/v4l2-fh.c b/drivers/media/v4l2-core/v4l2-fh.cindex 7a5f7aa5e253..b59b1084d8cd 100644--- a/drivers/media/v4l2-core/v4l2-fh.c+++ b/drivers/media/v4l2-core/v4l2-fh.c@@ -41,10 +41,12 @@ void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev) } EXPORT_SYMBOL_GPL(v4l2_fh_init); -void v4l2_fh_add(struct v4l2_fh *fh)+void v4l2_fh_add(struct v4l2_fh *fh, struct file *filp) { 	unsigned long flags; +	filp->private_data = fh;+ 	v4l2_prio_open(fh->vdev->prio, &fh->prio); 	spin_lock_irqsave(&fh->vdev->fh_lock, flags); 	list_add(&fh->list, &fh->vdev->fh_list);@@ -57,11 +59,10 @@ int v4l2_fh_open(struct file *filp) 	struct video_device *vdev = video_devdata(filp); 	struct v4l2_fh *fh = kzalloc(sizeof(*fh), GFP_KERNEL); -	filp->private_data = fh; 	if (fh == NULL) 		return -ENOMEM; 	v4l2_fh_init(fh, vdev);-	v4l2_fh_add(fh);+	v4l2_fh_add(fh, filp); 	return 0; } EXPORT_SYMBOL_GPL(v4l2_fh_open);diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.cindex 29d3b788b288..bf35ac436249 100644--- a/drivers/media/v4l2-core/v4l2-subdev.c+++ b/drivers/media/v4l2-core/v4l2-subdev.c@@ -86,8 +86,7 @@ static int subdev_open(struct file *file) 	}  	v4l2_fh_init(&subdev_fh->vfh, vdev);-	v4l2_fh_add(&subdev_fh->vfh);-	file->private_data = &subdev_fh->vfh;+	v4l2_fh_add(&subdev_fh->vfh, file);  	if (sd->v4l2_dev->mdev && sd->entity.graph_obj.mdev->dev) { 		struct module *owner;diff --git a/drivers/staging/media/imx/imx-media-csc-scaler.c b/drivers/staging/media/imx/imx-media-csc-scaler.cindex fb67b383436d..7fedb33dda34 100644--- a/drivers/staging/media/imx/imx-media-csc-scaler.c+++ b/drivers/staging/media/imx/imx-media-csc-scaler.c@@ -765,8 +765,7 @@ static int ipu_csc_scaler_open(struct file *file) 	ctx->rot_mode = IPU_ROTATE_NONE;  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh;-	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file); 	ctx->priv = priv;  	ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(priv->m2m_dev, ctx,diff --git a/drivers/staging/media/meson/vdec/vdec.c b/drivers/staging/media/meson/vdec/vdec.cindex f1ee53f9f298..b92666ff50a1 100644--- a/drivers/staging/media/meson/vdec/vdec.c+++ b/drivers/staging/media/meson/vdec/vdec.c@@ -908,9 +908,8 @@ static int vdec_open(struct file *file)  	v4l2_fh_init(&sess->fh, core->vdev_dec); 	sess->fh.ctrl_handler = &sess->ctrl_handler;-	v4l2_fh_add(&sess->fh);+	v4l2_fh_add(&sess->fh, file); 	sess->fh.m2m_ctx = sess->m2m_ctx;-	file->private_data = &sess->fh;  	return 0; diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.cindex 80b43187f6ee..ebefd646dbdb 100644--- a/drivers/staging/media/sunxi/cedrus/cedrus.c+++ b/drivers/staging/media/sunxi/cedrus/cedrus.c@@ -366,7 +366,6 @@ static int cedrus_open(struct file *file) 	}  	v4l2_fh_init(&ctx->fh, video_devdata(file));-	file->private_data = &ctx->fh; 	ctx->dev = dev; 	ctx->bit_depth = 8; @@ -383,7 +382,7 @@ static int cedrus_open(struct file *file) 	if (ret) 		goto err_m2m_release; -	v4l2_fh_add(&ctx->fh);+	v4l2_fh_add(&ctx->fh, file);  	mutex_unlock(&dev->dev_mutex); diff --git a/drivers/staging/most/video/video.c b/drivers/staging/most/video/video.cindex 116331cead2a..24a68e3e5419 100644--- a/drivers/staging/most/video/video.c+++ b/drivers/staging/most/video/video.c@@ -96,9 +96,7 @@ static int comp_vdev_open(struct file *filp)  	fh->mdev = mdev; 	v4l2_fh_init(&fh->fh, vdev);-	filp->private_data = &fh->fh;--	v4l2_fh_add(&fh->fh);+	v4l2_fh_add(&fh->fh, filp);  	ret = most_start_channel(mdev->iface, mdev->ch_idx, &comp); 	if (ret) {diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.cindex 886300a29b90..680f25d17dc2 100644--- a/drivers/usb/gadget/function/uvc_v4l2.c+++ b/drivers/usb/gadget/function/uvc_v4l2.c@@ -672,10 +672,9 @@ uvc_v4l2_open(struct file *file) 		return -ENOMEM;  	v4l2_fh_init(&handle->vfh, vdev);-	v4l2_fh_add(&handle->vfh);+	v4l2_fh_add(&handle->vfh, file);  	handle->device = &uvc->video;-	file->private_data = &handle->vfh;  	return 0; }diff --git a/include/media/v4l2-fh.h b/include/media/v4l2-fh.hindex 14e7136e693f..d8fcf49f10e0 100644--- a/include/media/v4l2-fh.h+++ b/include/media/v4l2-fh.h@@ -87,11 +87,14 @@ void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev);  * v4l2_fh_add - Add the fh to the list of file handles on a video_device.  *  * @fh: pointer to &struct v4l2_fh+ * @filp: pointer to &struct file associated with @fh+ *+ * The function sets filp->private_data to point to @fh.  *  * .. note::  *    The @fh file handle must be initialised first.  */-void v4l2_fh_add(struct v4l2_fh *fh);+void v4l2_fh_add(struct v4l2_fh *fh, struct file *filp);  /**  * v4l2_fh_open - Ancillary routine that can be used as the open\(\) op-- Regards, Laurent Pinchart