On 27/09/2023 17:35, Benjamin Gaignard wrote: > Change how offset 'cookie' field value is computed to make possible > to use more buffers (up to 0x7fff) > With this encoding pattern we know the maximum number that a queue > could store so we can check ing at queue init time. > It also make easier and faster to find buffer and plane from using > the offset field. > Change __find_plane_by_offset() prototype to return the video buffer > itself rather than it index. > > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxxxxx> > --- > .../media/common/videobuf2/videobuf2-core.c | 74 +++++++++---------- > 1 file changed, 35 insertions(+), 39 deletions(-) > > diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c > index cf6727d9c81f..6eeddb3a01c7 100644 > --- a/drivers/media/common/videobuf2/videobuf2-core.c > +++ b/drivers/media/common/videobuf2/videobuf2-core.c > @@ -31,6 +31,14 @@ > > #include <trace/events/vb2.h> > > +#define PLANE_INDEX_SHIFT (PAGE_SHIFT + 3) > +#define PLANE_INDEX_MASK 0x7 > +#define BUFFER_INDEX_MASK 0x7fff > + > +#if PAGE_SHIFT != 12 > +#error Expected PAGE_SHIFT to be 12 So it turns out this can actually be something other than 12. Search for CONFIG_ARM64_PAGE_SHIFT and CONFIG_PPC_PAGE_SHIFT. arm64 supports 12, 14, 16 and powerpc64 supports 12, 14, 16, 18. I think we should calculate the BUFFER_INDEX_MASK based on the PAGE_SHIFT value. Even with a PAGE_SHIFT of 18, you can still allocate up to 512 buffers. Regards, Hans