All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kent Gibson <warthog618@gmail.com>
To: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	linux-gpio <linux-gpio@vger.kernel.org>,
	Linus Walleij <linus.walleij@linaro.org>
Subject: Re: [PATCH v2 02/18] gpio: uapi: define uAPI v2
Date: Thu, 6 Aug 2020 09:03:30 +0800	[thread overview]
Message-ID: <20200806010330.GA11890@sol> (raw)
In-Reply-To: <CAMpxmJWWmBULX+RdqN3nyXFO4M9sbu2Q6i11UJMiKxomVDr47g@mail.gmail.com>

On Wed, Aug 05, 2020 at 07:47:57PM +0200, Bartosz Golaszewski wrote:
> On Wed, Aug 5, 2020 at 7:19 AM Kent Gibson <warthog618@gmail.com> wrote:
> >
> 
> [snip]
> 
> > > >
> > > > +/*
> > > > + * Maximum number of requested lines.
> > > > + *
> > > > + * Must be a multiple of 8 to ensure 32/64-bit alignment of structs.
> > > > + */
> > > > +#define GPIOLINES_MAX 64
> > > > +
> > > > +/* The number of __u64 required for a bitmap for GPIOLINES_MAX lines */
> > > > +#define GPIOLINES_BITMAP_SIZE  __KERNEL_DIV_ROUND_UP(GPIOLINES_MAX, 64)
> > > > +
> > >
> > > In what circumstances can this be different than 1? It's worth
> > > documenting here I suppose.
> > >
> >
> > In terms of the API definition, GPIOLINES_MAX can be anything you want
> > and the definitions are still valid.  In practice in the mainline kernel
> > it would always be 1 for ABI compatibility.
> >
> > Chiselling GPIOLINES_MAX <= 64 into stone could simplify things a bit,
> > as all the bitmaps reduce to a single __u64.  Would you prefer that?
> >
> 
> I'm not sure I follow. We need to chisel some max value in stone. Up
> to that point it's been 64. We can make it more and the bitmap API
> would handle it alright but if we don't, then this
> __KERNEL_DIV_ROUND_UP() is unnecessary. Limiting it to 64 makes things
> very simple thanks to fitting into a __u64 though. I've personally
> never needed to request even half that so I guess this value's fine?
> 

By "chiselling in stone" I mean not supporting > 64 lines - even in
custom kernel builds.  The uAPI and definition and implementation would
lock that in.  As it stands a custom build could use > 64 and it should
all still work as the bitmaps would be resized.

I satisfied that 64 is more than enough for what this API is intended for,
so I'll change the bitmaps to a single __u64, and remove
GPIOLINES_BITMAP_SIZE.

[ snip]
> > > > +       __u64 bits[GPIOLINES_BITMAP_SIZE];
> > > > +};
> > > > +
> > >
> > > We can set values only for a subset of requested lines but AFAICT we
> > > can't read values of only a subset of lines. Would it be difficult to
> > > remove this limitation? While reading values always succeeds - even if
> > > the line is in input mode and has edge detected - I think that someone
> > > may want to request the max number of lines without reading all their
> > > values each time. Maybe consider merging this with struct
> > > gpioline_set_values?
> > >
> >
> > That is correct.
> >
> > I considered that corner case to be unlikely, as a major point of
> > requesting lines together is to be able to perform collective operations
> > on them as atomically as possible.  If you only want subsets then
> > request them as separate subsets.
> >
> 
> And yet this version implements heterogeneous config and setting edge
> detection and values of subsets of requested lines. :)
> 

The corner case I was referring to was only wanting to get a subset of
lines and caring that there may be a slight performance gain if the
kernel filters out the lines you aren't interested in :(.

> > Do you have a case in mind where you would have overlapping subsets?
> >
> 
> No, not really but then I also don't have a use-case for setting only
> a certain subset of lines.
> 
> > Not difficult to remove the limitation - I just didn't see sufficient
> > benefit.
> >
> 
> Using the same structure for setting and getting values is a benefit
> IMO. If it's not a difficult task, then I think it's worth adding it.
> 

OK, will add it in.

[ snip]
> > > (maybe even define a special macro to set all bits in mask -
> > > GPIOLINE_CONFIG_ALL_LINES or something) on a first-in-wins basis. I'm
> > > open to other suggestions though.
> > >
> >
> > I think I've addressed this elsewhere, and still think it is worthwhile
> > and very low cost.  I thought it was an easy win when I added it, and
> > still do.
> >
> > Happy to change the attrs to first-in-wins though - the validation of
> > the attrs is still my biggest bugbear with this version.
> 
> Yes, I read your other reply. Ok, makes sense to have default flags
> with an attribute for overrides. This just needs very explicit
> documentation.
> 

I'll add documentation that the attrs associations are on a
first-in-wins basis, and that subsequent associations are ignored.

Cheers,
Kent.

  reply	other threads:[~2020-08-06  1:03 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-25  4:19 [PATCH v2 00/18] gpio: cdev: add uAPI V2 Kent Gibson
2020-07-25  4:19 ` [PATCH v2 01/18] gpio: uapi: define GPIO_MAX_NAME_SIZE for array sizes Kent Gibson
2020-07-25  4:19 ` [PATCH v2 02/18] gpio: uapi: define uAPI v2 Kent Gibson
2020-08-04 17:42   ` Bartosz Golaszewski
2020-08-05  5:18     ` Kent Gibson
2020-08-05 17:47       ` Bartosz Golaszewski
2020-08-06  1:03         ` Kent Gibson [this message]
2020-08-06  1:15       ` Kent Gibson
2020-08-06 15:53         ` Bartosz Golaszewski
2020-07-25  4:19 ` [PATCH v2 03/18] gpiolib: make cdev a build option Kent Gibson
2020-07-25 20:29   ` Andy Shevchenko
2020-07-26 22:25   ` Linus Walleij
2020-07-27  1:46     ` Kent Gibson
2020-07-27  5:57       ` Kent Gibson
2020-07-27  8:15         ` Linus Walleij
2020-07-25  4:19 ` [PATCH v2 04/18] gpiolib: add build option for CDEV v1 ABI Kent Gibson
2020-07-25  4:19 ` [PATCH v2 05/18] gpiolib: cdev: support GPIO_GET_LINE_IOCTL and GPIOLINE_GET_VALUES_IOCTL Kent Gibson
2020-07-25 20:51   ` Andy Shevchenko
2020-07-26  1:12     ` Kent Gibson
2020-07-26  3:24       ` Kent Gibson
2020-07-29  2:28       ` Kent Gibson
2020-07-29  8:05         ` Andy Shevchenko
2020-07-29 10:01           ` Kent Gibson
2020-07-31 16:05       ` Bartosz Golaszewski
2020-08-02  3:31         ` Kent Gibson
2020-08-02  9:32           ` Kent Gibson
2020-08-03 19:59             ` Bartosz Golaszewski
2020-08-03 20:02           ` Bartosz Golaszewski
2020-08-03 23:01             ` Kent Gibson
2020-08-04 17:47               ` Bartosz Golaszewski
2020-08-05  3:06                 ` Kent Gibson
2020-07-25  4:19 ` [PATCH v2 06/18] gpiolib: cdev: support GPIO_GET_LINEINFO_V2_IOCTL and GPIO_GET_LINEINFO_WATCH_V2_IOCTL Kent Gibson
2020-07-25  4:19 ` [PATCH v2 07/18] gpiolib: cdev: support edge detection for uAPI v2 Kent Gibson
2020-08-04 19:28   ` Bartosz Golaszewski
2020-07-25  4:19 ` [PATCH v2 08/18] gpiolib: cdev: support GPIOLINE_SET_CONFIG_IOCTL Kent Gibson
2020-07-25  4:19 ` [PATCH v2 09/18] gpiolib: cdev: support GPIOLINE_SET_VALUES_IOCTL Kent Gibson
2020-07-25  4:19 ` [PATCH v2 10/18] gpiolib: cdev: support setting debounce Kent Gibson
2020-07-25  4:19 ` [PATCH v2 11/18] gpio: uapi: document uAPI v1 as deprecated Kent Gibson
2020-08-04 19:43   ` Bartosz Golaszewski
2020-07-25  4:19 ` [PATCH v2 12/18] tools: gpio: port lsgpio to v2 uAPI Kent Gibson
2020-07-25  4:19 ` [PATCH v2 13/18] tools: gpio: port gpio-watch " Kent Gibson
2020-07-25  4:19 ` [PATCH v2 14/18] tools: gpio: rename nlines to num_lines Kent Gibson
2020-07-25  4:19 ` [PATCH v2 15/18] tools: gpio: port gpio-hammer to v2 uAPI Kent Gibson
2020-07-25  4:19 ` [PATCH v2 16/18] tools: gpio: port gpio-event-mon " Kent Gibson
2020-07-25  4:19 ` [PATCH v2 17/18] tools: gpio: add debounce support to gpio-event-mon Kent Gibson
2020-07-25  4:19 ` [PATCH v2 18/18] tools: gpio: add multi-line monitoring " Kent Gibson

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=20200806010330.GA11890@sol \
    --to=warthog618@gmail.com \
    --cc=bgolaszewski@baylibre.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.