Re: [PATCH v2] HID: core: simplify active collection tracking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 16, 2019 at 4:13 AM Peter Hutterer <peter.hutterer@xxxxxxxxx> wrote:
>
> On Mon, Jan 14, 2019 at 08:19:22AM +0100, Philipp Zabel wrote:
> > Manually tracking an active collection to set collection parents is not
> > necessary, we just have to look one step back into the collection stack
> > to find the correct parent.
> >
> > Signed-off-by: Philipp Zabel <philipp.zabel@xxxxxxxxx>
> > ---
> > Changes since v1:
> >  - Rebased onto commit ee46967fc6e ("HID: core: replace the collection tree
> >    pointers with indices").
>
>
> yep, much simpler, and it passes the test suite. Thanks!
>
> Reviewed-by: Peter Hutterer <peter.hutterer@xxxxxxxxx>

Thanks both of you.

Applied to for-5.0/upstream-fixes

Cheers,
Benjamin

>
> Cheers,
>    Peter
>
>
> > ---
> >  drivers/hid/hid-core.c | 13 ++-----------
> >  include/linux/hid.h    |  1 -
> >  2 files changed, 2 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> > index f9093dedf647..9993b692598f 100644
> > --- a/drivers/hid/hid-core.c
> > +++ b/drivers/hid/hid-core.c
> > @@ -173,8 +173,8 @@ static int open_collection(struct hid_parser *parser, unsigned type)
> >       collection->type = type;
> >       collection->usage = usage;
> >       collection->level = parser->collection_stack_ptr - 1;
> > -     collection->parent_idx = parser->active_collection_idx;
> > -     parser->active_collection_idx = collection_index;
> > +     collection->parent_idx = (collection->level == 0) ? -1 :
> > +             parser->collection_stack[collection->level - 1];
> >
> >       if (type == HID_COLLECTION_APPLICATION)
> >               parser->device->maxapplication++;
> > @@ -193,13 +193,6 @@ static int close_collection(struct hid_parser *parser)
> >               return -EINVAL;
> >       }
> >       parser->collection_stack_ptr--;
> > -     if (parser->active_collection_idx != -1) {
> > -             struct hid_device *device = parser->device;
> > -             struct hid_collection *c;
> > -
> > -             c = &device->collection[parser->active_collection_idx];
> > -             parser->active_collection_idx = c->parent_idx;
> > -     }
> >       return 0;
> >  }
> >
> > @@ -825,7 +818,6 @@ static int hid_scan_report(struct hid_device *hid)
> >               return -ENOMEM;
> >
> >       parser->device = hid;
> > -     parser->active_collection_idx = -1;
> >       hid->group = HID_GROUP_GENERIC;
> >
> >       /*
> > @@ -1179,7 +1171,6 @@ int hid_open_report(struct hid_device *device)
> >       }
> >
> >       parser->device = device;
> > -     parser->active_collection_idx = -1;
> >
> >       end = start + size;
> >
> > diff --git a/include/linux/hid.h b/include/linux/hid.h
> > index 992bbb7196df..f9707d1dcb58 100644
> > --- a/include/linux/hid.h
> > +++ b/include/linux/hid.h
> > @@ -658,7 +658,6 @@ struct hid_parser {
> >       unsigned int         *collection_stack;
> >       unsigned int          collection_stack_ptr;
> >       unsigned int          collection_stack_size;
> > -     int                   active_collection_idx; /* device->collection */
> >       struct hid_device    *device;
> >       unsigned int          scan_flags;
> >  };
> > --
> > 2.20.1
> >



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux