• Derek Basehore's avatar
    clk: Remove global clk traversal on fetch parent index · ede77858
    Derek Basehore authored
    It's not required to traverse the entire clk tree when the parents array
    contains a NULL value. We already have the parent clk_core pointer, so
    we can just compare the parent->name and parent_names[i] pointers.
    
    This can be a substantial power improvement in cases where the parent
    clk isn't known and that clk is never registered, because a mux having
    an unregistered parent name may traverse the clk tree on every
    clk_set_rate() call in clk_mux_determine_rate_flags(). This can happen
    hundreds of times a second for CPU clks.
    
    This patch is the combination of reverting commit 470b5e2f ("clk:
    simplify clk_fetch_parent_index() function") and optimizing the
    resulting code to never call __clk_lookup() because we already have the
    clk_core pointer we're looking for. That optimization went unnoticed
    even after commit da0f0b2c ("clk: Correct lookup logic in
    clk_fetch_parent_index()") tried to optimize this path.
    Signed-off-by: default avatarDerek Basehore <dbasehore@chromium.org>
    [sboyd@kernel.org: More description in commit text]
    Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    ede77858
clk.c 105 KB