ARM: 7392/1: CLKDEV: Optimize clk_find()
authorviresh kumar <viresh.kumar@st.com>
Thu, 19 Apr 2012 03:23:25 +0000 (04:23 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 19 Apr 2012 18:34:26 +0000 (19:34 +0100)
clk_find must return as soon as it gets the correct clock. Currently it check
all clocks until it found a lookup with both dev_id and con_id matching.

If only one of them is passed, then we don't actually need to wait for both of
them to match. We can quit as soon as the requested id (dev_id or con_id)
matches.

Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/clk/clkdev.c

index a9a11378282195c630587bba49431cbc0c489921..d4a59931e75ef8807c7787d3425c9e09cc75209f 100644 (file)
@@ -35,7 +35,12 @@ static DEFINE_MUTEX(clocks_mutex);
 static struct clk_lookup *clk_find(const char *dev_id, const char *con_id)
 {
        struct clk_lookup *p, *cl = NULL;
-       int match, best = 0;
+       int match, best_found = 0, best_possible = 0;
+
+       if (dev_id)
+               best_possible += 2;
+       if (con_id)
+               best_possible += 1;
 
        list_for_each_entry(p, &clocks, node) {
                match = 0;
@@ -50,10 +55,10 @@ static struct clk_lookup *clk_find(const char *dev_id, const char *con_id)
                        match += 1;
                }
 
-               if (match > best) {
+               if (match > best_found) {
                        cl = p;
-                       if (match != 3)
-                               best = match;
+                       if (match != best_possible)
+                               best_found = match;
                        else
                                break;
                }