[libcamera-devel] [PATCH v1 4/5] v4l2: v4l2_compat_manager: Store V4L2CameraFile in mmaps_

paul.elder at ideasonboard.com paul.elder at ideasonboard.com
Fri Jan 14 11:57:29 CET 2022


Hi Laurent,

On Tue, Dec 28, 2021 at 11:59:50PM +0200, Laurent Pinchart wrote:
> The mmaps_ map stores a pointer to the V4L2CameraProxy to avoid
> increasing the reference count on the V4L2CameraFile shared pointer
> needlessly. While this provides a small optimization, it prevents
> accessing the V4L2CameraFile from the munmap() function which doesn't
> take an fd as argument.
> 
> To prepare for improved debugging that will require access to
> V4L2CameraFile in munmap(), store the V4L2CameraFile pointer in mmaps_.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> ---
>  src/v4l2/v4l2_compat_manager.cpp | 10 +++-------
>  src/v4l2/v4l2_compat_manager.h   |  2 +-
>  2 files changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp
> index 585046e97e4b..ded568beb60e 100644
> --- a/src/v4l2/v4l2_compat_manager.cpp
> +++ b/src/v4l2/v4l2_compat_manager.cpp
> @@ -198,11 +198,7 @@ void *V4L2CompatManager::mmap(void *addr, size_t length, int prot, int flags,
>  	if (map == MAP_FAILED)
>  		return map;
>  
> -	/*
> -	 * Map to V4L2CameraProxy directly to prevent adding more references
> -	 * to V4L2CameraFile.
> -	 */
> -	mmaps_[map] = file->proxy();
> +	mmaps_[map] = file;
>  	return map;
>  }
>  
> @@ -212,9 +208,9 @@ int V4L2CompatManager::munmap(void *addr, size_t length)
>  	if (device == mmaps_.end())
>  		return fops_.munmap(addr, length);
>  
> -	V4L2CameraProxy *proxy = device->second;
> +	V4L2CameraFile *file = device->second.get();
>  
> -	int ret = proxy->munmap(addr, length);
> +	int ret = file->proxy()->munmap(addr, length);
>  	if (ret < 0)
>  		return ret;
>  
> diff --git a/src/v4l2/v4l2_compat_manager.h b/src/v4l2/v4l2_compat_manager.h
> index f52069f7b62d..64af9a8c008f 100644
> --- a/src/v4l2/v4l2_compat_manager.h
> +++ b/src/v4l2/v4l2_compat_manager.h
> @@ -65,5 +65,5 @@ private:
>  
>  	std::vector<std::unique_ptr<V4L2CameraProxy>> proxies_;
>  	std::map<int, std::shared_ptr<V4L2CameraFile>> files_;
> -	std::map<void *, V4L2CameraProxy *> mmaps_;
> +	std::map<void *, std::shared_ptr<V4L2CameraFile>> mmaps_;
>  };
> -- 
> Regards,
> 
> Laurent Pinchart
> 


More information about the libcamera-devel mailing list