media: vimc: use new release op
Use the new v4l2_subdev_internal_ops release op to free the subdev memory only when the last user closed the file handle. Move v4l2_device_unregister_subdev() to the end of the vimc_ent_sd_unregister() function since now the unregister_subdev() call may free the vimc_ent_device struct which is used after the unregister_subdev() call. So this now has to be done last. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
3650a23eda
commit
2b177f2849
@@ -380,6 +380,7 @@ int vimc_ent_sd_register(struct vimc_ent_device *ved,
|
||||
u32 function,
|
||||
u16 num_pads,
|
||||
const unsigned long *pads_flag,
|
||||
const struct v4l2_subdev_internal_ops *sd_int_ops,
|
||||
const struct v4l2_subdev_ops *sd_ops)
|
||||
{
|
||||
int ret;
|
||||
@@ -394,6 +395,7 @@ int vimc_ent_sd_register(struct vimc_ent_device *ved,
|
||||
|
||||
/* Initialize the subdev */
|
||||
v4l2_subdev_init(sd, sd_ops);
|
||||
sd->internal_ops = sd_int_ops;
|
||||
sd->entity.function = function;
|
||||
sd->entity.ops = &vimc_ent_sd_mops;
|
||||
sd->owner = THIS_MODULE;
|
||||
@@ -431,9 +433,9 @@ EXPORT_SYMBOL_GPL(vimc_ent_sd_register);
|
||||
|
||||
void vimc_ent_sd_unregister(struct vimc_ent_device *ved, struct v4l2_subdev *sd)
|
||||
{
|
||||
v4l2_device_unregister_subdev(sd);
|
||||
media_entity_cleanup(ved->ent);
|
||||
vimc_pads_cleanup(ved->pads);
|
||||
v4l2_device_unregister_subdev(sd);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vimc_ent_sd_unregister);
|
||||
|
||||
|
Reference in New Issue
Block a user