Re: [PATCH v3 1/6] hid: new driver for PicoLCD device

Bruno Prémont
2010-03-26T21:40:23Z

On Fri, 26 March 2010 Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote:
> On Friday 26 March 2010 01:59:19 pm Jiri Kosina wrote:
> > On Fri, 26 Mar 2010, Bruno Prémont wrote:
> > > > > + for (i = 0; i < PICOLCD_KEYS; i++) {
> > > > > + int key = ((int *)idev->keycode)[i];
> > > >
> > > > Keycodes are now short, not int. Also, just do:
> > > > input_set_capability(idev, EV_KEY, data->keycode[i]);
> > > >
> > > > > + if (key < KEY_MAX && key >= 0)
> > > > > + input_set_capability(idev, EV_KEY, key);
> > >
> > > Oops, I was not careful enough when switching over...
> >
> > Dmitry, thanks a lot for rapid review the driver.
> >
> > Bruno, could you please fix this and submit a followup 1/6 patch, so that
> > I could queue the driver in my tree?
> >
> > I have almost finished going over the driver and haven't encountered any
> > other issues that would require immediate fixing.
> >
> > Still, it would be nice to have the framebuffer/LCD/backlight bits
> > reviewed by respective subsystem maintainers. But I'll probably queue the
> > driver nevertheless and add potential ACKs later.
>
> FWIW I am not entrely happy with the whole send-and_wait implementation -
> it looks like it is not being called concurrently so we don't need mutex
> there... I'd do something like:

It can be called concurrently, not within patch 1/6 but it definitely
can once patch 6/6 is applied (concurrent access to debugfs files for
EEPROM and/or FLASH).
Even later on when FLASH (and EEPROM) access get moved to a better home
concurrent access will still exist.

> send_nand_wait() {
>
> set_bit(WAITING_RESPONSE, data->state);
> prepare message
> send message
> wait_for_event_interruptible_timeout(&data->wait,
> !test_bit(WAITING_RESPONSE, data->state));
> if (!test_bit()) {
> process
> return 0;
> }
>
> return -ETIME;
> }
>
> irq(...) {
>
> else if (test_bit(WAITING_RESPONSE, data->state)) {
> copy response...
> clear_bit(WAITING_RESPONSE, data->state);
> wake_up(&data->wait);
> }
> }
>
> and not bother with kmallocing pending structure, but it should not
> stop from merging driver.

It might be an option to not allocate the pending structure but as
the whole "pending" access is definitely not a hot path (flashing
firmware or splash and changing EEPROM values will most probably
not be done very often). The only more common use is version check
on probe.

So what is more expensive, the used memory or the CPU usage to
allocate/release the struct? That probably depends on reader's taste.

Bruno