linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tomasz Figa <tfiga@chromium.org>
To: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: Ezequiel Garcia <ezequiel@collabora.com>,
	Dafna Hirschfeld <dafna.hirschfeld@collabora.com>,
	Hans Verkuil <hans.verkuil@cisco.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Sakari Ailus <sakari.ailus@iki.fi>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Pawel Osciak <posciak@chromium.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Helen Koike <helen.koike@collabora.com>,
	nicolas.dufresne@collabora.co.uk
Subject: Re: [PATCHv4 04/11] videobuf2: add queue memory consistency parameter
Date: Fri, 27 Mar 2020 12:27:41 +0100	[thread overview]
Message-ID: <CAAFQd5BhDLcKHR1aO2U5Lf6EBhoqtBJbg6LzWDQd7XkDJ1YUaw@mail.gmail.com> (raw)
In-Reply-To: <20200325023248.GA241329@google.com>

On Wed, Mar 25, 2020 at 3:32 AM Sergey Senozhatsky
<senozhatsky@chromium.org> wrote:
>
> On (20/03/24 07:17), Ezequiel Garcia wrote:
> [..]
> > > > > +static void set_queue_consistency(struct vb2_queue *q, bool consistent_mem)
> > > > > +{
> > > > > +       if (!vb2_queue_allows_cache_hints(q))
> > > > > +               return;
> > > > > +
> > > > > +       if (consistent_mem)
> > > > > +               q->dma_attrs &= ~DMA_ATTR_NON_CONSISTENT;
> > > > > +       else
> > > > > +               q->dma_attrs |= DMA_ATTR_NON_CONSISTENT;
> > > > > +}
> > > > > +
> > > > >   int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
> > > > > -               unsigned int *count)
> > > > > +               bool consistent_mem, unsigned int *count)
> > > > You extended the vb2_core_reqbufs accepting a new boolean that
> > > > is decided according to the setting of the V4L2_FLAG_MEMORY_NON_CONSISTENT
> > > > but in the future some other flags might be added, and so I think it
> > > > is better to replace the boolean with a u32 consisting of all the flags.
> > >
> > > Don't have any objections. Can change the `bool' to `u32'.
> > >
> >
> > or maybe an enum instead? That would help get a cleaner
> > interface.
>
> Hmm, interesting.
>
> The flags in question can be from different, unrelated groups
> (types), controlling various parts of the stack. Not necessarily
> all of them are memory_consistency related. We can, for instance,
> pass some additional flags to underlying memory allocators (contig,
> sg), etc.
>
> E.g.
>
>         enum MEMORY_ATTR {
>                 MEM_NON_CONSISTENT,
>                 ...
>         };
>
>         enum VMALLOC_ALLOCATOR_ATTR {
>                 DO_A_BARREL_ROLL,
>                 ...
>         };
>
>         enum DMA_SG_ALLOCATOR_ATTR {
>                 WRITEBACK_TO_TAPE_DEVICE,
>                 ...
>         };
>
>         enum DMA_CONTIG_ALLOCATOR_ATTR {
>                 PREFER_HTTPS,
>                 ...
>         };
>
> and so on. We maybe can keep all of those in one enum (umm, what should
> be the name?), and then either make sure that all of them are proper powers
> of two
>
>         enum AUX_FLAGS {
>                 MEM_NON_CONSISTENT              = (1 << 0),
>                 DO_A_BARREL_ROLL                = (1 << 1),
>                 WRITEBACK_TO_TAPE_DEVICE        = (1 << 2),
>                 PREFER_HTTPS                    = (1 << 3),
>         };
>
> or
>         enum AUX_FLAGS {
>                 MEM_NON_CONSISTENT              = 0,
>                 DO_A_BARREL_ROLL,
>                 WRITEBACK_TO_TAPE_DEVICE,
>                 PREFER_HTTPS,
>         };
>
> and make sure that those are not flags, but bits.
> IOW, if (flags & BIT(MEM_NON_CONSISTENT)).
>
>
> What do others think?

My feeling is that there it's a bit of an abuse of the language
construct. Enum is expected to be an enumeration type, where the value
is always one and only one of the defined values at the same time.
Making a bitwise OR of several values makes the resulting value
outside of the enum specification.

AFAICT, the typical approach in the kernel is to just have a block of
#define statements to define the flags and have the flag names
prefixed with some consistent prefix, e.g. VB2_QUEUE_FLAG_. The flags
itself would be defined using BIT() so they can be used directly in
the bitwise arithmetics.

Best regards,
Tomasz

  reply	other threads:[~2020-03-27 11:33 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-02  4:12 [PATCHv4 00/11] Implement V4L2_BUF_FLAG_NO_CACHE_* flags Sergey Senozhatsky
2020-03-02  4:12 ` [PATCHv4 01/11] videobuf2: add cache management members Sergey Senozhatsky
2020-03-06 13:57   ` Hans Verkuil
2020-03-07  5:22     ` Sergey Senozhatsky
2020-03-07  9:46     ` Sergey Senozhatsky
2020-03-07 10:10       ` Hans Verkuil
2020-03-07 11:28         ` Sergey Senozhatsky
2020-03-07 11:47           ` Hans Verkuil
2020-03-09  3:27             ` Sergey Senozhatsky
2020-03-09  3:44               ` Sergey Senozhatsky
2020-03-09  7:21               ` Hans Verkuil
2020-03-09  7:25                 ` Sergey Senozhatsky
2020-03-09  7:28                   ` Hans Verkuil
2020-03-09  7:39                     ` Sergey Senozhatsky
2020-03-09  8:58                     ` Tomasz Figa
2020-03-09  9:08                       ` Sergey Senozhatsky
2020-03-09  9:17                         ` Tomasz Figa
2020-03-09  9:29                           ` Sergey Senozhatsky
2020-03-09  4:03             ` Sergey Senozhatsky
2020-03-09  7:17               ` Hans Verkuil
2020-03-02  4:12 ` [PATCHv4 02/11] videobuf2: handle V4L2 buffer cache flags Sergey Senozhatsky
2020-03-02  4:12 ` [PATCHv4 03/11] videobuf2: add V4L2_FLAG_MEMORY_NON_CONSISTENT flag Sergey Senozhatsky
2020-03-06 13:58   ` Hans Verkuil
2020-03-07  8:09     ` Sergey Senozhatsky
2020-03-02  4:12 ` [PATCHv4 04/11] videobuf2: add queue memory consistency parameter Sergey Senozhatsky
2020-03-06 14:04   ` Hans Verkuil
2020-03-07  7:50     ` Sergey Senozhatsky
2020-03-07 10:03       ` Hans Verkuil
2020-03-20 13:46   ` Dafna Hirschfeld
2020-03-24  2:39     ` Sergey Senozhatsky
2020-03-24 10:17       ` Ezequiel Garcia
2020-03-25  2:32         ` Sergey Senozhatsky
2020-03-27 11:27           ` Tomasz Figa [this message]
2020-03-02  4:12 ` [PATCHv4 05/11] videobuf2: handle V4L2_FLAG_MEMORY_NON_CONSISTENT flag Sergey Senozhatsky
2020-03-06 15:30   ` Hans Verkuil
2020-03-07  7:51     ` Sergey Senozhatsky
2020-03-07  9:38       ` Sergey Senozhatsky
2020-03-07 10:05         ` Hans Verkuil
2020-03-02  4:12 ` [PATCHv4 06/11] videobuf2: factor out planes prepare/finish functions Sergey Senozhatsky
2020-03-02  4:12 ` [PATCHv4 07/11] videobuf2: do not sync caches when we are allowed not to Sergey Senozhatsky
2020-03-02  4:12 ` [PATCHv4 08/11] videobuf2: check ->synced flag in prepare() and finish() Sergey Senozhatsky
2020-03-02  4:12 ` [PATCHv4 09/11] videobuf2: add begin/end cpu_access callbacks to dma-contig Sergey Senozhatsky
2020-03-02  4:12 ` [PATCHv4 10/11] videobuf2: add begin/end cpu_access callbacks to dma-sg Sergey Senozhatsky
2020-03-06 14:04   ` Hans Verkuil
2020-03-07  5:26     ` Sergey Senozhatsky
2020-03-07  9:32       ` Hans Verkuil
2020-03-07  9:39         ` Sergey Senozhatsky
2020-03-02  4:12 ` [PATCHv4 11/11] videobuf2: don't test db_attach in dma-contig prepare and finish Sergey Senozhatsky
2020-03-06 14:18 ` [PATCHv4 00/11] Implement V4L2_BUF_FLAG_NO_CACHE_* flags Hans Verkuil
2020-03-07  8:08   ` Sergey Senozhatsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAAFQd5BhDLcKHR1aO2U5Lf6EBhoqtBJbg6LzWDQd7XkDJ1YUaw@mail.gmail.com \
    --to=tfiga@chromium.org \
    --cc=dafna.hirschfeld@collabora.com \
    --cc=ezequiel@collabora.com \
    --cc=hans.verkuil@cisco.com \
    --cc=helen.koike@collabora.com \
    --cc=kyungmin.park@samsung.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mchehab@kernel.org \
    --cc=nicolas.dufresne@collabora.co.uk \
    --cc=posciak@chromium.org \
    --cc=sakari.ailus@iki.fi \
    --cc=senozhatsky@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).