[BISECTED] Nokia 770 framebuffer breakage

Russell King - ARM Linux linux at arm.linux.org.uk
Mon Oct 19 13:05:22 PDT 2015


On Mon, Oct 19, 2015 at 10:37:59PM +0300, Aaro Koskinen wrote:
> Hi,
> 
> Somewhere between 4.1 .. 4.3-rc6 framebuffer on Nokia 770 stopped working.
> 
> Bisection points to:
> 
> commit 2568999835d7797afce3dcc3a3f368051ffcaf1f
> Author: Russell King <rmk+kernel at arm.linux.org.uk>
> Date:   Mon Mar 2 15:40:29 2015 +0000
> 
>     clkdev: add clkdev_create() helper
> 
> The commit cannot be reverted cleanly from current trees, but I re-tested
> that commit 2568999835d7797afce3dcc3a3f368051ffcaf1f does not work and
> commit 2568999835d7797afce3dcc3a3f368051ffcaf1f^1 indeed works.

Really need more information than that, like a kernel log or something.

clk_register_clkdev() should not have changed in any way, since the
change there effectively changes the sequence from:

        va_start(ap, dev_fmt);
-       cl = vclkdev_alloc(__clk_get_hw(clk), con_id, dev_fmt, ap);
        va_end(ap);
-       if (!cl)
-               return -ENOMEM;
-       clkdev_add(cl);
-       return 0;

to:

        va_start(ap, dev_fmt);
+       cl = vclkdev_alloc(__clk_get_hw(clk), con_id, dev_fmt, ap);
+       if (cl)
+               __clkdev_add(cl);
        va_end(ap);
+       return cl ? 0 : -ENOMEM;

So I'm guessing this isn't the problem.

However, clk_add_alias() changes slightly, from:

	fmt = alias_dev_name;
	va_start(ap, fmt);
	l = vclkdev_alloc(__clk_get_hw(clk), con_id, fmt, ap)
	va_end(ap);
-       if (!l)
-               return -ENODEV;
-       clkdev_add(l);
-       return 0;

to (effectively):

	fmt = "%s"
	va_start(ap, fmt);
	cl = vclkdev_alloc(__clk_get_hw(clk), con_id, fmt, ap);
	if (cl)
		clkdev_add(cl);
	va_end(ap);
+       return l ? 0 : -ENODEV;

In other words, there's the addition of a "%s" in the format string
which wasn't there before - which is reasonable as clk_add_alias()
doesn't take a format string.  This should improve the safety of the
function.

I guess things might go wrong if you pass a NULL alias device name?

Can you try this patch please?

diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
index c0eaf0973bd2..779b6ff0c7ad 100644
--- a/drivers/clk/clkdev.c
+++ b/drivers/clk/clkdev.c
@@ -333,7 +333,8 @@ int clk_add_alias(const char *alias, const char *alias_dev_name,
 	if (IS_ERR(r))
 		return PTR_ERR(r);
 
-	l = clkdev_create(r, alias, "%s", alias_dev_name);
+	l = clkdev_create(r, alias, alias_dev_name ? "%s" : NULL,
+			  alias_dev_name);
 	clk_put(r);
 
 	return l ? 0 : -ENODEV;


-- 
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.



More information about the linux-arm-kernel mailing list