Skip to content

Commit c9e28fe

Browse files
Rahul Tanwarbebarino
authored andcommitted
clk: intel: Improve locking in the driver
Remove/reduce unnecessary spin locking of the code. Signed-off-by: Rahul Tanwar <[email protected]> Link: https://lore.kernel.org/r/79c0f5f9f5bc512a7e2b5f3c91f6341f28b5854c.1594880946.git.rahul.tanwar@linux.intel.com Signed-off-by: Stephen Boyd <[email protected]>
1 parent 8529fc0 commit c9e28fe

File tree

1 file changed

+5
-12
lines changed

1 file changed

+5
-12
lines changed

drivers/clk/x86/clk-cgu.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -420,18 +420,14 @@ lgm_clk_ddiv_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
420420
{
421421
struct lgm_clk_ddiv *ddiv = to_lgm_clk_ddiv(hw);
422422
unsigned int div0, div1, exdiv;
423-
unsigned long flags;
424423
u64 prate;
425424

426-
spin_lock_irqsave(&ddiv->lock, flags);
427425
div0 = lgm_get_clk_val(ddiv->membase, ddiv->reg,
428426
ddiv->shift0, ddiv->width0) + 1;
429427
div1 = lgm_get_clk_val(ddiv->membase, ddiv->reg,
430428
ddiv->shift1, ddiv->width1) + 1;
431429
exdiv = lgm_get_clk_val(ddiv->membase, ddiv->reg,
432430
ddiv->shift2, ddiv->width2);
433-
spin_unlock_irqrestore(&ddiv->lock, flags);
434-
435431
prate = (u64)parent_rate;
436432
do_div(prate, div0);
437433
do_div(prate, div1);
@@ -548,24 +544,21 @@ lgm_clk_ddiv_round_rate(struct clk_hw *hw, unsigned long rate,
548544
div = div * 2;
549545
div = DIV_ROUND_CLOSEST_ULL((u64)div, 5);
550546
}
547+
spin_unlock_irqrestore(&ddiv->lock, flags);
551548

552-
if (div <= 0) {
553-
spin_unlock_irqrestore(&ddiv->lock, flags);
549+
if (div <= 0)
554550
return *prate;
555-
}
556551

557-
if (lgm_clk_get_ddiv_val(div, &ddiv1, &ddiv2) != 0) {
558-
if (lgm_clk_get_ddiv_val(div + 1, &ddiv1, &ddiv2) != 0) {
559-
spin_unlock_irqrestore(&ddiv->lock, flags);
552+
if (lgm_clk_get_ddiv_val(div, &ddiv1, &ddiv2) != 0)
553+
if (lgm_clk_get_ddiv_val(div + 1, &ddiv1, &ddiv2) != 0)
560554
return -EINVAL;
561-
}
562-
}
563555

564556
rate64 = *prate;
565557
do_div(rate64, ddiv1);
566558
do_div(rate64, ddiv2);
567559

568560
/* if predivide bit is enabled, modify rounded rate by factor of 2.5 */
561+
spin_lock_irqsave(&ddiv->lock, flags);
569562
if (lgm_get_clk_val(ddiv->membase, ddiv->reg, ddiv->shift2, 1)) {
570563
rate64 = rate64 * 2;
571564
rate64 = DIV_ROUND_CLOSEST_ULL(rate64, 5);

0 commit comments

Comments
 (0)