lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 06 Jan 2020 11:15:32 +0100
From:   Lucas Stach <l.stach@...gutronix.de>
To:     Christian Gmeiner <christian.gmeiner@...il.com>,
        linux-kernel@...r.kernel.org
Cc:     Russell King <linux+etnaviv@...linux.org.uk>,
        David Airlie <airlied@...ux.ie>,
        Daniel Vetter <daniel@...ll.ch>, etnaviv@...ts.freedesktop.org,
        dri-devel@...ts.freedesktop.org
Subject: Re: [PATCH 5/6] drm/etnaviv: update hwdb selection logic

On Do, 2020-01-02 at 11:02 +0100, Christian Gmeiner wrote:
> Take product id, customer id and eco id into account. If that
> delivers no match try a search for model and revision.
> 
> Signed-off-by: Christian Gmeiner <christian.gmeiner@...il.com>
> ---
>  drivers/gpu/drm/etnaviv/etnaviv_hwdb.c | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c b/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> index eb0f3eb87ced..d1744f1b44b1 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> @@ -44,9 +44,26 @@ bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu)
>  	struct etnaviv_chip_identity *ident = &gpu->identity;
>  	int i;
>  
> +	/* accurate match */
>  	for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) {
>  		if (etnaviv_chip_identities[i].model == ident->model &&
> -		    etnaviv_chip_identities[i].revision == ident->revision) {
> +		    etnaviv_chip_identities[i].revision == ident->revision &&
> +		    etnaviv_chip_identities[i].product_id == ident->product_id &&

Why not simply make this:
(etnaviv_chip_identities[i].product_id == ident->product_id ||
etnaviv_chip_identities[i].product_id == ~0U)
and similar for customer and eco ID?

With this we don't need two different walks through the HWDB, as long
as the more specific entries in the DB are ordered to the front of the
array.

Regards,
Lucas

> +		    etnaviv_chip_identities[i].customer_id == ident->customer_id &&
> +		    etnaviv_chip_identities[i].eco_id == ident->eco_id) {
> +			memcpy(ident, &etnaviv_chip_identities[i],
> +			       sizeof(*ident));
> +			return true;
> +		}
> +	}
> +
> +	/* match based only on model and revision */
> +	for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) {
> +		if (etnaviv_chip_identities[i].model == ident->model &&
> +		    etnaviv_chip_identities[i].revision == ident->revision &&
> +		    etnaviv_chip_identities[i].product_id == ~0U &&
> +		    etnaviv_chip_identities[i].customer_id == ~0U &&
> +		    etnaviv_chip_identities[i].eco_id == ~0U) {
>  			memcpy(ident, &etnaviv_chip_identities[i],
>  			       sizeof(*ident));
>  			return true;

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ