[igt-dev] [PATCH i-g-t] lib: Use a bsearch to find the module name

Chris Wilson chris at chris-wilson.co.uk
Mon Sep 3 09:44:19 UTC 2018


Quoting Petri Latvala (2018-09-03 10:39:31)
> On Sat, Sep 01, 2018 at 07:09:11PM +0100, Chris Wilson wrote:
> > Even with a small number of known drivers (6), a bsearch will take at
> > most 3 steps, whereas the linear search will take 3 steps on average. In
> > the future with more known drivers, the logN bsearch will be even more
> > advantageous.
> > 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Katarzyna Dec <katarzyna.dec at intel.com>
> > ---
> >  lib/drmtest.c | 12 +++++++++---
> >  1 file changed, 9 insertions(+), 3 deletions(-)
> > 
> > diff --git a/lib/drmtest.c b/lib/drmtest.c
> > index 93228f900..bfb38f1e9 100644
> > --- a/lib/drmtest.c
> > +++ b/lib/drmtest.c
> > @@ -222,9 +222,15 @@ static int open_device(const char *name, unsigned int chipset)
> >       if (__get_drm_device_name(fd, dev_name, sizeof(dev_name) - 1) == -1)
> >               goto err;
> >  
> > -     for (const struct module *m = modules; m->module; m++) {
> > -             if (strcmp(m->module, dev_name) == 0) {
> > -                     chip = m->bit;
> > +     for (int start = 0, end = ARRAY_SIZE(modules) - 1; start < end; ){
> > +             int mid = start + (end - start) / 2;
> > +             int ret = strcmp(modules[mid].module, dev_name);
> > +             if (ret < 0) {
> > +                     end = mid;
> > +             } else if (ret > 0) {
> > +                     start = mid + 1;
> 
> 
> Isn't this the wrong way around?

* blinks.

Yes. Shame on me for assuming that a run through igt was good enough to
flush out the kinks. It just happens that vgem occupies the initial mid,
so anything that wanted vgem-only got it; everything else hit the
DRIVER_ANY.

amdgpu -> skip. Ah. Hmm, that should have been flagged :|
-Chris


More information about the igt-dev mailing list