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, 3 Jul 2017 15:58:34 +0200
From:   Boris Brezillon <boris.brezillon@...e-electrons.com>
To:     Quentin Schulz <quentin.schulz@...e-electrons.com>
Cc:     mturquette@...libre.com, sboyd@...eaurora.org, robh+dt@...nel.org,
        mark.rutland@....com, nicolas.ferre@...rochip.com,
        alexandre.belloni@...e-electrons.com, linux@...linux.org.uk,
        lgirdwood@...il.com, broonie@...nel.org, perex@...ex.cz,
        tiwai@...e.com, linux-clk@...r.kernel.org,
        devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
        linux-arm-kernel@...ts.infradead.org, alsa-devel@...a-project.org,
        thomas.petazzoni@...e-electrons.com
Subject: Re: [PATCH 1/6] clk: at91: clk-generated: remove useless divisor
 loop

On Fri, 23 Jun 2017 11:00:54 +0200
Quentin Schulz <quentin.schulz@...e-electrons.com> wrote:

> The driver requests the current clk rate of each of its parent clocks to
> decide whether a clock rate is suitable or not. It does not request
> determine_rate from a parent clock which could request a rate change in
> parent clock (i.e. there is no parent rate propagation).
> 
> We know the rate we want (passed along req argument of the function) and
> the parent clock rate, thus we know the closest rounded divisor, we
> don't need to iterate over the available divisors to find the best one
> for a given clock.
> 
> Signed-off-by: Quentin Schulz <quentin.schulz@...e-electrons.com>

Acked-by: Boris Brezillon <boris.brezillon@...e-electrons.com>

> ---
>  drivers/clk/at91/clk-generated.c | 25 ++++++++++++-------------
>  1 file changed, 12 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c
> index 07c8f701e51c..dab7002937e6 100644
> --- a/drivers/clk/at91/clk-generated.c
> +++ b/drivers/clk/at91/clk-generated.c
> @@ -124,19 +124,18 @@ static int clk_generated_determine_rate(struct clk_hw *hw,
>  		    (gck->range.max && min_rate > gck->range.max))
>  			continue;
>  
> -		for (div = 1; div < GENERATED_MAX_DIV + 2; div++) {
> -			tmp_rate = DIV_ROUND_CLOSEST(parent_rate, div);
> -			tmp_diff = abs(req->rate - tmp_rate);
> -
> -			if (best_diff < 0 || best_diff > tmp_diff) {
> -				best_rate = tmp_rate;
> -				best_diff = tmp_diff;
> -				req->best_parent_rate = parent_rate;
> -				req->best_parent_hw = parent;
> -			}
> -
> -			if (!best_diff || tmp_rate < req->rate)
> -				break;
> +		div = DIV_ROUND_CLOSEST(parent_rate, req->rate);
> +		if (!div)
> +			tmp_rate = parent_rate;
> +		else
> +			tmp_rate = parent_rate / div;
> +		tmp_diff = abs(req->rate - tmp_rate);
> +
> +		if (best_diff < 0 || best_diff > tmp_diff) {
> +			best_rate = tmp_rate;
> +			best_diff = tmp_diff;
> +			req->best_parent_rate = parent_rate;
> +			req->best_parent_hw = parent;
>  		}
>  
>  		if (!best_diff)

Powered by blists - more mailing lists