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

Petri Latvala petri.latvala at intel.com
Mon Sep 3 09:39:31 UTC 2018


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?


-- 
Petri Latvala




> +		} else {
> +			chip = modules[mid].bit;
>  			break;
>  		}
>  	}
> -- 
> 2.19.0.rc1
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev


More information about the igt-dev mailing list