<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>CHOON.NET Forums - Linux Kernel</title>
        <description>Linux is a clone of the operating system Unix, written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX and Single UNIX Specification compliance. This is the archive of the Linux Kernel Mailing List (LKML). Archive started on 29 March 2011 and ended on 27 Dec 2012.</description>
        <link>http://choon.net/forum/list.php?21</link>
        <lastBuildDate>Sun, 26 May 2013 03:42:57 +0800</lastBuildDate>
        <generator>Phorum 5.2.19</generator>
        <item>
            <guid>http://choon.net/forum/read.php?21,1720561,1720690#msg-1720690</guid>
            <title>Re: [PATCH] p54pci: don't return zero on failure path in p54p_probe()</title>
            <link>http://choon.net/forum/read.php?21,1720561,1720690#msg-1720690</link>
            <description><![CDATA[ On Tuesday 01 January 2013 23:44:38 Alexey Khoroshilov wrote:<br />
&gt; On 01/02/2013 01:45 AM, Christian Lamparter wrote:<br />
&gt; &gt; On Tuesday 01 January 2013 22:11:01 Alexey Khoroshilov wrote:<br />
&gt; &gt;&gt; If pci_set_dma_mask() or pci_set_consistent_dma_mask() fails in p54p_probe(),<br />
&gt; &gt;&gt; it breaks off initialization, deallocates all resources, but returns zero.<br />
&gt; &gt;&gt;<br />
&gt; &gt;&gt; The patch implements proper error code propagation.<br />
&gt; &gt; Uh, Thanks!<br />
&gt; &gt;<br />
&gt; &gt; But wait, I think there's another return 0 in the error<br />
&gt; &gt; path. See p54pci.c @ line 558:<br />
&gt; &gt;<br />
&gt; &gt; mem_len = pci_resource_len(pdev, 0);<br />
&gt; &gt; if (mem_len &lt; sizeof(...)) {<br />
&gt; &gt; 	dev_err(...)<br />
&gt; &gt; 	goto err_disabled_dev;<br />
&gt; &gt; }<br />
&gt; &gt;<br />
&gt; &gt; Do you think you can add a err = -EINVAL; before the goto too?<br />
&gt; You are right! But I would say -ENODEV is more popular error code in <br />
&gt; this case.<br />
pci_* functions seem to use a lot of -EIO too. Either way shouldn't<br />
really matter. So, let's make it -ENODEV.<br />
 <br />
&gt; &gt; [I wonder why this wasn't found by the verification project as<br />
&gt; &gt; well? Could it be that pci_resource_len(...) &lt; sizeof(...) is<br />
&gt; &gt; somehow always true and this is a dead branch?]<br />
&gt; Actually it was found, but I have no direct access to the results at the <br />
&gt; moment. My fault.<br />
&gt; <br />
&gt; Would you like I resend the patch to fix both?<br />
:)<br />
<br />
Don't forget the ACKed-by tag from the previous reply!<br />
<br />
Thanks<br />
<br />
Christian<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Christian Lamparter</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:49:00 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1719823,1720689#msg-1720689</guid>
            <title>[PATCH] epoll: prevent missed events on EPOLL_CTL_MOD</title>
            <link>http://choon.net/forum/read.php?21,1719823,1720689#msg-1720689</link>
            <description><![CDATA[ Linus Torvalds &lt;torvalds@linux-foundation.org&gt; wrote:<br />
&gt; Please document the barrier that this mb() pairs with, and then give<br />
&gt; an explanation for the fix in the commit message, and I'll happily<br />
&gt; take it. Even if it's just duplicating the comments above the<br />
&gt; wq_has_sleeper() function, except modified for the ep_modify() case.<br />
<br />
Hopefully my explanation is correct and makes sense below,<br />
I think both effects of the barrier are needed<br />
<br />
&gt; Of course, it would be good to get verification from Jason and Andreas<br />
&gt; that the alternate patch also works for them.<br />
<br />
Jason just confirmed it.<br />
<br />
------------------------------- 8&lt; ----------------------------<br />
From 02f43757d04bb6f2786e79eecf1cfa82e6574379 Mon Sep 17 00:00:00 2001<br />
From: Eric Wong &lt;normalperson@yhbt.net&gt;<br />
Date: Tue, 1 Jan 2013 21:20:27 +0000<br />
Subject: [PATCH] epoll: prevent missed events on EPOLL_CTL_MOD<br />
<br />
EPOLL_CTL_MOD sets the interest mask before calling f_op-&gt;poll() to<br />
ensure events are not missed.  Since the modifications to the interest<br />
mask are not protected by the same lock as ep_poll_callback, we need to<br />
ensure the change is visible to other CPUs calling ep_poll_callback.<br />
<br />
We also need to ensure f_op-&gt;poll() has an up-to-date view of past<br />
events which occured before we modified the interest mask.  So this<br />
barrier also pairs with the barrier in wq_has_sleeper().<br />
<br />
This should guarantee either ep_poll_callback or f_op-&gt;poll() (or both)<br />
will notice the readiness of a recently-ready/modified item.<br />
<br />
This issue was encountered by Andreas Voellmy and Junchang(Jason) Wang in:<br />
[<a href="http://thread.gmane.org/gmane.linux.kernel/1408782/"  rel="nofollow">thread.gmane.org</a>]<br />
<br />
Signed-off-by: Eric Wong &lt;normalperson@yhbt.net&gt;<br />
Cc: Hans Verkuil &lt;hans.verkuil@cisco.com&gt;<br />
Cc: Jiri Olsa &lt;jolsa@redhat.com&gt;<br />
Cc: Jonathan Corbet &lt;corbet@lwn.net&gt;<br />
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;<br />
Cc: Davide Libenzi &lt;davidel@xmailserver.org&gt;<br />
Cc: Hans de Goede &lt;hdegoede@redhat.com&gt;<br />
Cc: Mauro Carvalho Chehab &lt;mchehab@infradead.org&gt;<br />
Cc: David Miller &lt;davem@davemloft.net&gt;<br />
Cc: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;<br />
Cc: Andrew Morton &lt;akpm@linux-foundation.org&gt;<br />
Cc: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;<br />
Cc: Andreas Voellmy &lt;andreas.voellmy@yale.edu&gt;<br />
Tested-by: &quot;Junchang(Jason) Wang&quot; &lt;junchang.wang@yale.edu&gt;<br />
Cc: <a href="mailto:&#110;&#101;&#116;&#100;&#101;&#118;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#110;&#101;&#116;&#100;&#101;&#118;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
Cc: <a href="mailto:&#108;&#105;&#110;&#117;&#120;&#45;&#102;&#115;&#100;&#101;&#118;&#101;&#108;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#108;&#105;&#110;&#117;&#120;&#45;&#102;&#115;&#100;&#101;&#118;&#101;&#108;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
---<br />
 fs/eventpoll.c | 22 +++++++++++++++++++++-<br />
 1 file changed, 21 insertions(+), 1 deletion(-)<br />
<br />
diff --git a/fs/eventpoll.c b/fs/eventpoll.c<br />
index cd96649..39573ee 100644<br />
--- a/fs/eventpoll.c<br />
+++ b/fs/eventpoll.c<br />
@@ -1285,7 +1285,7 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even<br />
 	 * otherwise we might miss an event that happens between the<br />
 	 * f_op-&gt;poll() call and the new event set registering.<br />
 	 */<br />
-	epi-&gt;event.events = event-&gt;events;<br />
+	epi-&gt;event.events = event-&gt;events; /* need barrier below */<br />
 	pt._key = event-&gt;events;<br />
 	epi-&gt;event.data = event-&gt;data; /* protected by mtx */<br />
 	if (epi-&gt;event.events &amp; EPOLLWAKEUP) {<br />
@@ -1296,6 +1296,26 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even<br />
 	}<br />
 <br />
 	/*<br />
+	 * The following barrier has two effects:<br />
+	 *<br />
+	 * 1) Flush epi changes above to other CPUs.  This ensures<br />
+	 *    we do not miss events from ep_poll_callback if an<br />
+	 *    event occurs immediately after we call f_op-&gt;poll().<br />
+	 *    We need this because we did not take ep-&gt;lock while<br />
+	 *    changing epi above (but ep_poll_callback does take<br />
+	 *    ep-&gt;lock).<br />
+	 *<br />
+	 * 2) We also need to ensure we do not miss _past_ events<br />
+	 *    when calling f_op-&gt;poll().  This barrier also<br />
+	 *    pairs with the barrier in wq_has_sleeper (see<br />
+	 *    comments for wq_has_sleeper).<br />
+	 *<br />
+	 * This barrier will now guarantee ep_poll_callback or f_op-&gt;poll<br />
+	 * (or both) will notice the readiness of an item.<br />
+	 */<br />
+	smp_mb();<br />
+<br />
+	/*<br />
 	 * Get current event bits. We can safely use the file* here because<br />
 	 * its usage count has been increased by the caller of this function.<br />
 	 */<br />
-- <br />
Eric Wong<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Eric Wong</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:38:08 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1720688,1720688#msg-1720688</guid>
            <title>linux-next: manual merge of the s390 tree with the  tree</title>
            <link>http://choon.net/forum/read.php?21,1720688,1720688#msg-1720688</link>
            <description><![CDATA[ Hi all,<br />
<br />
Today's linux-next merge of the s390 tree got a conflict in<br />
arch/s390/kernel/smp.c between commit c8925a6e95b2 (&quot;ARCH: drivers remove<br />
__dev* attributes&quot;) from the driver-core.current tree and commit<br />
5059e4342f93 (&quot;s390/smp: fix section mismatch for smp_add_present_cpu()&quot;)<br />
from the s390 tree.<br />
<br />
I fixed it up (I used the s390 tree version) and can carry the fix as<br />
necessary (no action is required).<br />
<br />
-- <br />
Cheers,<br />
Stephen Rothwell                    <a href="mailto:&#115;&#102;&#114;&#64;&#99;&#97;&#110;&#98;&#46;&#97;&#117;&#117;&#103;&#46;&#111;&#114;&#103;&#46;&#97;&#117;">&#115;&#102;&#114;&#64;&#99;&#97;&#110;&#98;&#46;&#97;&#117;&#117;&#103;&#46;&#111;&#114;&#103;&#46;&#97;&#117;</a>]]></description>
            <dc:creator>Stephen Rothwell</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:27:31 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1720687,1720687#msg-1720687</guid>
            <title>linux-next: manual merge of the driver-core.current tree with Linus tree</title>
            <link>http://choon.net/forum/read.php?21,1720687,1720687#msg-1720687</link>
            <description><![CDATA[ Hi Greg,<br />
<br />
Today's linux-next merge of the driver-core.current tree got a conflict<br />
in drivers/i2c/busses/i2c-au1550.c between commit 0b255e927d47 (&quot;i2c:<br />
remove __dev* attributes from subsystem&quot;) from Linus' tree and commit<br />
eeb30d064414 (&quot;Drivers: i2c: remove __dev* attributes&quot;) from the<br />
driver-core.current tree.<br />
<br />
I fixed it up (I used the driver-core.current version) and can carry the<br />
fix as necessary (no action is required).<br />
<br />
-- <br />
Cheers,<br />
Stephen Rothwell                    <a href="mailto:&#115;&#102;&#114;&#64;&#99;&#97;&#110;&#98;&#46;&#97;&#117;&#117;&#103;&#46;&#111;&#114;&#103;&#46;&#97;&#117;">&#115;&#102;&#114;&#64;&#99;&#97;&#110;&#98;&#46;&#97;&#117;&#117;&#103;&#46;&#111;&#114;&#103;&#46;&#97;&#117;</a>]]></description>
            <dc:creator>Stephen Rothwell</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:27:30 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1719823,1720686#msg-1720686</guid>
            <title>Re: [PATCH] poll: prevent missed events if _qproc is NULL</title>
            <link>http://choon.net/forum/read.php?21,1719823,1720686#msg-1720686</link>
            <description><![CDATA[ Hi all,<br />
<br />
The alternate patch from Eric works well too. Even though I didn't see<br />
a performance boost compared with the old version, this one is clearer<br />
to me. Thanks your guys.<br />
<br />
<br />
Cheers!<br />
<br />
--Jason<br />
<br />
<br />
On Tue, Jan 1, 2013 at 5:53 PM, Linus Torvalds<br />
&lt;torvalds@linux-foundation.org&gt; wrote:<br />
&gt; On Tue, Jan 1, 2013 at 1:17 PM, Eric Wong &lt;normalperson@yhbt.net&gt; wrote:<br />
&gt;&gt;&gt;<br />
&gt;&gt;&gt; An alternate version (limited to epoll) would be:<br />
&gt;&gt;&gt;<br />
&gt;&gt;&gt; diff --git a/fs/eventpoll.c b/fs/eventpoll.c<br />
&gt;&gt;&gt; index cd96649..ca5f3d0 100644<br />
&gt;&gt;&gt; --- a/fs/eventpoll.c<br />
&gt;&gt;&gt; +++ b/fs/eventpoll.c<br />
&gt;&gt;&gt; @@ -1299,6 +1299,7 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even<br />
&gt;&gt;&gt;        * Get current event bits. We can safely use the file* here because<br />
&gt;&gt;&gt;        * its usage count has been increased by the caller of this function.<br />
&gt;&gt;&gt;        */<br />
&gt;&gt;&gt; +     smp_mb();<br />
&gt;&gt;&gt;       revents = epi-&gt;ffd.file-&gt;f_op-&gt;poll(epi-&gt;ffd.file, &amp;pt);<br />
&gt;&gt;&gt;<br />
&gt;&gt;&gt;       /*<br />
&gt;&gt;<br />
&gt;&gt; I was wrong, rereading 626cf236608505d376e4799adb4f7eb00a8594af,<br />
&gt;&gt; I think this race existed before.<br />
&gt;&gt;<br />
&gt;&gt; Perhaps my alternate patch above is a better fix.<br />
&gt;<br />
&gt; Please document the barrier that this mb() pairs with, and then give<br />
&gt; an explanation for the fix in the commit message, and I'll happily<br />
&gt; take it. Even if it's just duplicating the comments above the<br />
&gt; wq_has_sleeper() function, except modified for the ep_modify() case.<br />
&gt;<br />
&gt; Of course, it would be good to get verification from Jason and Andreas<br />
&gt; that the alternate patch also works for them.<br />
&gt;<br />
&gt;                Linus<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Junchang(Jason) Wang</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:27:25 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720584#msg-1720584</guid>
            <title>[PATCH v8 2/9] compiler-gcc.h: Add gcc-recommended GCC_VERSION macro</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720584#msg-1720584</link>
            <description><![CDATA[ Throughout compiler*.h, many version checks are made.  These can be<br />
simplified by using the macro that gcc's documentation recommends.<br />
However, my primary reason for adding this is that I need bug-check<br />
macros that are enabled at certain gcc versions and it's cleaner to use<br />
this macro than the tradition method:<br />
<br />
if __GNUC__ &gt; 4 || (__GNUC__ == 4 &amp;&amp; __GNUC_MINOR__ =&gt; 2)<br />
<br />
If you add patch level, it gets this ugly:<br />
<br />
if __GNUC__ &gt; 4 || (__GNUC__ == 4 &amp;&amp; (__GNUC_MINOR__ &gt; 2 || \<br />
   __GNUC_MINOR__ == 2 __GNUC_PATCHLEVEL__ &gt;= 1))<br />
<br />
As opposed to:<br />
<br />
if GCC_VERSION &gt;= 40201<br />
<br />
While having separate headers for gcc 3 &amp; 4 eliminates some of this<br />
verbosity, they can still be cleaned up by this.<br />
<br />
See also:<br />
[<a href="http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html"  rel="nofollow">gcc.gnu.org</a>]<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
Acked-by: David Rientjes &lt;rientjes@google.com&gt;<br />
---<br />
 include/linux/compiler-gcc.h |    3 +++<br />
 1 files changed, 3 insertions(+), 0 deletions(-)<br />
<br />
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h<br />
index 6a6d7ae..24545cd 100644<br />
--- a/include/linux/compiler-gcc.h<br />
+++ b/include/linux/compiler-gcc.h<br />
@@ -5,6 +5,9 @@<br />
 /*<br />
  * Common definitions for all gcc versions go here.<br />
  */<br />
+#define GCC_VERSION (__GNUC__ * 10000 \<br />
+		   + __GNUC_MINOR__ * 100 \<br />
+		   + __GNUC_PATCHLEVEL__)<br />
 <br />
 <br />
 /* Optimization barrier */<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:03:37 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720583#msg-1720583</guid>
            <title>[PATCH v8 3/9] compiler-gcc{3,4}.h: Use GCC_VERSION macro</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720583#msg-1720583</link>
            <description><![CDATA[ Using GCC_VERSION reduces complexity, is easier to read and is GCC's<br />
recommended mechanism for doing version checks. (Just don't ask me why<br />
they didn't define it in the first place.)  This also makes it easy to<br />
merge compiler-gcc{,3,4}.h should somebody want to.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: David Rientjes &lt;rientjes@google.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
---<br />
 include/linux/compiler-gcc3.h |    8 ++++----<br />
 include/linux/compiler-gcc4.h |   20 ++++++++++----------<br />
 2 files changed, 14 insertions(+), 14 deletions(-)<br />
<br />
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h<br />
index 37d4124..7d89feb 100644<br />
--- a/include/linux/compiler-gcc3.h<br />
+++ b/include/linux/compiler-gcc3.h<br />
@@ -2,22 +2,22 @@<br />
 #error &quot;Please don't include &lt;linux/compiler-gcc3.h&gt; directly, include &lt;linux/compiler.h&gt; instead.&quot;<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &lt; 2<br />
+#if GCC_VERSION &lt; 30200<br />
 # error Sorry, your compiler is too old - please upgrade it.<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 3<br />
+#if GCC_VERSION &gt;= 30300<br />
 # define __used			__attribute__((__used__))<br />
 #else<br />
 # define __used			__attribute__((__unused__))<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 4<br />
+#if GCC_VERSION &gt;= 30400<br />
 #define __must_check		__attribute__((warn_unused_result))<br />
 #endif<br />
 <br />
 #ifdef CONFIG_GCOV_KERNEL<br />
-# if __GNUC_MINOR__ &lt; 4<br />
+# if GCC_VERSION &lt; 30400<br />
 #   error &quot;GCOV profiling support for gcc versions below 3.4 not included&quot;<br />
 # endif /* __GNUC_MINOR__ */<br />
 #endif /* CONFIG_GCOV_KERNEL */<br />
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h<br />
index c9785c2..a9ffdfe 100644<br />
--- a/include/linux/compiler-gcc4.h<br />
+++ b/include/linux/compiler-gcc4.h<br />
@@ -4,7 +4,7 @@<br />
 <br />
 /* GCC 4.1.[01] miscompiles __weak */<br />
 #ifdef __KERNEL__<br />
-# if __GNUC_MINOR__ == 1 &amp;&amp; __GNUC_PATCHLEVEL__ &lt;= 1<br />
+# if GCC_VERSION &gt;= 40100 &amp;&amp;  GCC_VERSION &lt;= 40101<br />
 #  error Your version of gcc miscompiles the __weak directive<br />
 # endif<br />
 #endif<br />
@@ -13,11 +13,11 @@<br />
 #define __must_check 		__attribute__((warn_unused_result))<br />
 #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)<br />
 <br />
-#if __GNUC_MINOR__ &gt; 0<br />
+#if GCC_VERSION &gt;= 40100<br />
 # define __compiletime_object_size(obj) __builtin_object_size(obj, 0)<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 3<br />
+#if GCC_VERSION &gt;= 40300<br />
 /* Mark functions as cold. gcc will assume any path leading to a call<br />
    to them will be unlikely.  This means a lot of manual unlikely()s<br />
    are unnecessary now for any paths leading to the usual suspects<br />
@@ -41,9 +41,9 @@<br />
 # define __compiletime_warning(message) __attribute__((warning(message)))<br />
 # define __compiletime_error(message) __attribute__((error(message)))<br />
 #endif /* __CHECKER__ */<br />
-#endif /* __GNUC_MINOR__ &gt;= 3 */<br />
+#endif /* GCC_VERSION &gt;= 40300 */<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 5<br />
+#if GCC_VERSION &gt;= 40500<br />
 /*<br />
  * Mark a position in code as unreachable.  This can be used to<br />
  * suppress control flow warnings after asm blocks that transfer<br />
@@ -58,9 +58,9 @@<br />
 /* Mark a function definition as prohibited from being cloned. */<br />
 #define __noclone	__attribute__((__noclone__))<br />
 <br />
-#endif /* __GNUC_MINOR__ &gt;= 5 */<br />
+#endif /* GCC_VERSION &gt;= 40500 */<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 6<br />
+#if GCC_VERSION &gt;= 40600<br />
 /*<br />
  * Tell the optimizer that something else uses this function or variable.<br />
  */<br />
@@ -69,11 +69,11 @@<br />
 <br />
 <br />
 #ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP<br />
-#if __GNUC_MINOR__ &gt;= 4<br />
+#if GCC_VERSION &gt;= 40400<br />
 #define __HAVE_BUILTIN_BSWAP32__<br />
 #define __HAVE_BUILTIN_BSWAP64__<br />
 #endif<br />
-#if __GNUC_MINOR__ &gt;= 8 || (defined(__powerpc__) &amp;&amp; __GNUC_MINOR__ &gt;= 6)<br />
+#if GCC_VERSION &gt;= 40800 || (defined(__powerpc__) &amp;&amp; GCC_VERSION &gt;= 40600)<br />
 #define __HAVE_BUILTIN_BSWAP16__<br />
 #endif<br />
-#endif<br />
+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:03:30 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720582#msg-1720582</guid>
            <title>[PATCH v8 0/9] Cleanup &amp; new features for compiler*.h and bug.h</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720582#msg-1720582</link>
            <description><![CDATA[ Well, it looks like my new version of git properly handles the<br />
--in-reply-to switch now, so this patch set shouldn't be oddly threaded<br />
like the last version.<br />
<br />
 include/linux/bug.h           |   47 ++++++++++++++++++++++------------------<br />
 include/linux/compiler-gcc.h  |    3 ++<br />
 include/linux/compiler-gcc3.h |    8 +++---<br />
 include/linux/compiler-gcc4.h |   36 +++++++++++++++---------------<br />
 include/linux/compiler.h      |   32 +++++++++++++++++++++++++--<br />
 5 files changed, 80 insertions(+), 46 deletions(-)<br />
<br />
Changes in v8:<br />
o Correct bisection issue<br />
<br />
Changes in v7:<br />
o Rebase onto next-20121224 &amp; merge changes<br />
<br />
Changes in v6:<br />
o Remove extraneous double negation<br />
o Fixed faulty macro expansion in last patch<br />
<br />
Changes in v5:<br />
o Move BUILD_BUG* guts to a new compiletime_assert() macro in compiler.h.<br />
o Fix a double-evaluation problem.<br />
o Fix another bad macro definition when __CHECKER__ defined.<br />
<br />
Changes in v4:<br />
o Squash a minor commit (per Borislav Petkov)<br />
o Change some comment text (per Borislav Petkov)<br />
o Add some acks<br />
<br />
This patch set is a dependency of the generic red-black tree patch set, which<br />
I have now split up into three smaller sets and is based off of linux-next.<br />
<br />
The major aim of this patch set is to cleanup compiler-gcc*.h and improve<br />
the manageability of of compiler features at various versions (when they<br />
are broken, etc.), add some needed features to bug.h and clean that up as<br />
well.<br />
<br />
compiler-gcc*.h<br />
o Introduce GCC_VERSION - (e.g., gcc 4.7.1 becomes 40701).<br />
o Reorder all features based upon the version introduced (readability).<br />
o Change all version checks to use GCC_VERSION.<br />
o Remove redundant __linktime_error macro.<br />
o Introduce compiletime_assert() macro.<br />
<br />
bug.h<br />
o Improve BUILD_BUG_ON(expr) - now generates compile-time error post-gcc-4.4<br />
o Remove duplicate error messages in some cases.<br />
o Fix double-evaluation problem in BUILD_BUG_ON.<br />
o Fix bad macro definitions when using __CHECKER__.<br />
o Introduce BUILD_BUG_ON_MSG and clean up the implementations of the<br />
  BUILD_BUG* macros.<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:03:24 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720581#msg-1720581</guid>
            <title>[PATCH v8 8/9] compiler.h, bug.h: Prevent double error messages with BUILD_BUG{,_ON}</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720581#msg-1720581</link>
            <description><![CDATA[ Prior to the introduction of __attribute__((error(&quot;msg&quot;))) in gcc 4.3,<br />
creating compile-time errors required a little trickery.<br />
BUILD_BUG{,_ON} uses this attribute when available to generate<br />
compile-time errors, but also uses the negative-sized array trick for<br />
older compilers, resulting in two error messages in some cases.  The<br />
reason it's &quot;some&quot; cases is that as of gcc 4.4, the negative-sized array<br />
will not create an error in some situations, like inline functions.<br />
<br />
This patch replaces the negative-sized array code with the new<br />
__compiletime_error_fallback() macro which expands to the same thing<br />
unless the the error attribute is available, in which case it expands to<br />
do{}while(0), resulting in exactly one compile-time error on all<br />
versions of gcc.<br />
<br />
Note that we are not changing the negative-sized array code for the<br />
unoptimized version of BUILD_BUG_ON, since it has the potential to catch<br />
problems that would be disabled in later versions of gcc were<br />
__compiletime_error_fallback used.  The reason is that that an<br />
unoptimized build can't always remove calls to an error-attributed<br />
function call (like we are using) that should effectively become dead<br />
code if it were optimized.  However, using a negative-sized array with a<br />
similar value will not result in an false-positive (error). The only<br />
caveat being that it will also fail to catch valid conditions, which we<br />
should be expecting in an unoptimized build anyway.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
---<br />
 include/linux/bug.h      |    2 +-<br />
 include/linux/compiler.h |    5 +++++<br />
 2 files changed, 6 insertions(+), 1 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index 08d97e9..57c7688 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -67,7 +67,7 @@ struct pt_regs;<br />
 			__compiletime_error(&quot;BUILD_BUG_ON failed&quot;);	\<br />
 		if (__cond)						\<br />
 			__build_bug_on_failed();			\<br />
-		((void)sizeof(char[1 - 2 * __cond]));			\<br />
+		__compiletime_error_fallback(__cond);			\<br />
 	} while(0)<br />
 #endif<br />
 <br />
diff --git a/include/linux/compiler.h b/include/linux/compiler.h<br />
index 4c638be..423bb6b 100644<br />
--- a/include/linux/compiler.h<br />
+++ b/include/linux/compiler.h<br />
@@ -307,7 +307,12 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);<br />
 #endif<br />
 #ifndef __compiletime_error<br />
 # define __compiletime_error(message)<br />
+# define __compiletime_error_fallback(condition) \<br />
+	do { ((void)sizeof(char[1 - 2*!!(condition)])); } while (0)<br />
+#else<br />
+# define __compiletime_error_fallback(condition) do { } while (0)<br />
 #endif<br />
+<br />
 /*<br />
  * Prevent the compiler from merging or refetching accesses.  The compiler<br />
  * is also forbidden from reordering successive instances of ACCESS_ONCE(),<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:03:17 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720580#msg-1720580</guid>
            <title>[PATCH v8 4/9] compiler{,-gcc4}.h, bug.h: Remove duplicate macros</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720580#msg-1720580</link>
            <description><![CDATA[ __linktime_error() does the same thing as __compiletime_error() and is<br />
only used in bug.h.  Since the macro defines a function attribute that<br />
will cause a failure at compile-time (not link-time), it makes more<br />
sense to keep __compiletime_error(), which is also neatly mated with<br />
__compiletime_warning().<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: David Rientjes &lt;rientjes@google.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
---<br />
 include/linux/bug.h           |    2 +-<br />
 include/linux/compiler-gcc4.h |    2 --<br />
 include/linux/compiler.h      |    3 ---<br />
 3 files changed, 1 insertions(+), 6 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index b1cf40d..2a11774 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -74,7 +74,7 @@ extern int __build_bug_on_failed;<br />
 #define BUILD_BUG()						\<br />
 	do {							\<br />
 		extern void __build_bug_failed(void)		\<br />
-			__linktime_error(&quot;BUILD_BUG failed&quot;);	\<br />
+			__compiletime_error(&quot;BUILD_BUG failed&quot;);\<br />
 		__build_bug_failed();				\<br />
 	} while (0)<br />
 <br />
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h<br />
index a9ffdfe..68b162d 100644<br />
--- a/include/linux/compiler-gcc4.h<br />
+++ b/include/linux/compiler-gcc4.h<br />
@@ -33,8 +33,6 @@<br />
    the kernel context */<br />
 #define __cold			__attribute__((__cold__))<br />
 <br />
-#define __linktime_error(message) __attribute__((__error__(message)))<br />
-<br />
 #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)<br />
 <br />
 #ifndef __CHECKER__<br />
diff --git a/include/linux/compiler.h b/include/linux/compiler.h<br />
index dd852b7..4c638be 100644<br />
--- a/include/linux/compiler.h<br />
+++ b/include/linux/compiler.h<br />
@@ -308,9 +308,6 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);<br />
 #ifndef __compiletime_error<br />
 # define __compiletime_error(message)<br />
 #endif<br />
-#ifndef __linktime_error<br />
-# define __linktime_error(message)<br />
-#endif<br />
 /*<br />
  * Prevent the compiler from merging or refetching accesses.  The compiler<br />
  * is also forbidden from reordering successive instances of ACCESS_ONCE(),<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:03:08 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720579#msg-1720579</guid>
            <title>[PATCH v8 9/9] bug.h, compiler.h: Introduce compiletime_assert &amp; BUILD_BUG_ON_MSG</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720579#msg-1720579</link>
            <description><![CDATA[ Introduce compiletime_assert to compiler.h, which moves the details of<br />
how to break a build and emit an error message for a specific compiler<br />
to the headers where these details should be. Following in the tradition<br />
of the POSIX assert macro, compiletime_assert creates a build-time error<br />
when the supplied condition is *false*.<br />
<br />
Next, we add BUILD_BUG_ON_MSG to bug.h which simply wraps<br />
compiletime_assert, inverting the logic, so that it fails when the<br />
condition is *true*, consistent with the language &quot;build bug on.&quot; This<br />
macro allows you to specify the error message you want emitted when the<br />
supplied condition is true.<br />
<br />
Finally, we remove all other code from bug.h that mucks with these<br />
details (BUILD_BUG &amp; BUILD_BUG_ON), and have them all call<br />
BUILD_BUG_ON_MSG.  This not only reduces source code bloat, but also<br />
prevents the possibility of code being changed for one macro and not for<br />
the other (which was previously the case for BUILD_BUG and<br />
BUILD_BUG_ON).<br />
<br />
Since __compiletime_error_fallback is now only used in compiler.h, I'm<br />
considering it a private macro and removing the double negation that's<br />
now extraneous.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
---<br />
 include/linux/bug.h      |   28 +++++++++++++---------------<br />
 include/linux/compiler.h |   26 +++++++++++++++++++++++++-<br />
 2 files changed, 38 insertions(+), 16 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index 57c7688..3c09a00 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -17,6 +17,7 @@ struct pt_regs;<br />
 #define BUILD_BUG_ON_ZERO(e) (0)<br />
 #define BUILD_BUG_ON_NULL(e) ((void*)0)<br />
 #define BUILD_BUG_ON_INVALID(e) (0)<br />
+#define BUILD_BUG_ON_MSG(cond, msg) (0)<br />
 #define BUILD_BUG_ON(condition) (0)<br />
 #define BUILD_BUG() (0)<br />
 #else /* __CHECKER__ */<br />
@@ -40,6 +41,15 @@ struct pt_regs;<br />
 #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))<br />
 <br />
 /**<br />
+ * BUILD_BUG_ON_MSG - break compile if a condition is true &amp; emit supplied<br />
+ * 		      error message.<br />
+ * @condition: the condition which the compiler should know is false.<br />
+ *<br />
+ * See BUILD_BUG_ON for description.<br />
+ */<br />
+#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)<br />
+<br />
+/**<br />
  * BUILD_BUG_ON - break compile if a condition is true.<br />
  * @condition: the condition which the compiler should know is false.<br />
  *<br />
@@ -60,15 +70,8 @@ struct pt_regs;<br />
 #ifndef __OPTIMIZE__<br />
 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))<br />
 #else<br />
-#define BUILD_BUG_ON(condition)						\<br />
-	do {								\<br />
-		bool __cond = !!(condition);				\<br />
-		extern void __build_bug_on_failed(void)			\<br />
-			__compiletime_error(&quot;BUILD_BUG_ON failed&quot;);	\<br />
-		if (__cond)						\<br />
-			__build_bug_on_failed();			\<br />
-		__compiletime_error_fallback(__cond);			\<br />
-	} while(0)<br />
+#define BUILD_BUG_ON(condition) \<br />
+	BUILD_BUG_ON_MSG(condition, &quot;BUILD_BUG_ON failed: &quot; #condition)<br />
 #endif<br />
 <br />
 /**<br />
@@ -78,12 +81,7 @@ struct pt_regs;<br />
  * build time, you should use BUILD_BUG to detect if it is<br />
  * unexpectedly used.<br />
  */<br />
-#define BUILD_BUG()						\<br />
-	do {							\<br />
-		extern void __build_bug_failed(void)		\<br />
-			__compiletime_error(&quot;BUILD_BUG failed&quot;);\<br />
-		__build_bug_failed();				\<br />
-	} while (0)<br />
+#define BUILD_BUG() BUILD_BUG_ON_MSG(1, &quot;BUILD_BUG failed&quot;)<br />
 <br />
 #endif	/* __CHECKER__ */<br />
 <br />
diff --git a/include/linux/compiler.h b/include/linux/compiler.h<br />
index 423bb6b..10b8f23 100644<br />
--- a/include/linux/compiler.h<br />
+++ b/include/linux/compiler.h<br />
@@ -308,11 +308,35 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);<br />
 #ifndef __compiletime_error<br />
 # define __compiletime_error(message)<br />
 # define __compiletime_error_fallback(condition) \<br />
-	do { ((void)sizeof(char[1 - 2*!!(condition)])); } while (0)<br />
+	do { ((void)sizeof(char[1 - 2 * condition])); } while (0)<br />
 #else<br />
 # define __compiletime_error_fallback(condition) do { } while (0)<br />
 #endif<br />
 <br />
+#define __compiletime_assert(condition, msg, prefix, suffix)		\<br />
+	do {								\<br />
+		bool __cond = !(condition);				\<br />
+		extern void prefix ## suffix(void) __compiletime_error(msg); \<br />
+		if (__cond)						\<br />
+			prefix ## suffix();				\<br />
+		__compiletime_error_fallback(__cond);			\<br />
+	} while (0)<br />
+<br />
+#define _compiletime_assert(condition, msg, prefix, suffix) \<br />
+	__compiletime_assert(condition, msg, prefix, suffix)<br />
+<br />
+/**<br />
+ * compiletime_assert - break build and emit msg if condition is false<br />
+ * @condition: a compile-time constant condition to check<br />
+ * @msg:       a message to emit if condition is false<br />
+ *<br />
+ * In tradition of POSIX assert, this macro will break the build if the<br />
+ * supplied condition is *false*, emitting the supplied error message if the<br />
+ * compiler has support to do so.<br />
+ */<br />
+#define compiletime_assert(condition, msg) \<br />
+	_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)<br />
+<br />
 /*<br />
  * Prevent the compiler from merging or refetching accesses.  The compiler<br />
  * is also forbidden from reordering successive instances of ACCESS_ONCE(),<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:02:58 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720578#msg-1720578</guid>
            <title>[PATCH v8 7/9] bug.h: Make BUILD_BUG_ON generate compile-time error</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720578#msg-1720578</link>
            <description><![CDATA[ Negative sized arrays wont create a compile-time error in some cases<br />
starting with gcc 4.4 (e.g., inlined functions), but gcc 4.3 introduced<br />
the error function attribute that will.  This patch modifies<br />
BUILD_BUG_ON to behave like BUILD_BUG already does, using the error<br />
function attribute so that you don't have to build the entire kernel to<br />
discover that you have a problem, and then enjoy trying to track it down<br />
from a link-time error.<br />
<br />
Also, we are only including asm/bug.h and then expecting that<br />
linux/compiler.h will eventually be included to define __linktime_error<br />
(used in BUILD_BUG_ON). This patch includes it directly for clarity and<br />
to avoid the possibility of changes in &lt;arch&gt;/*/include/asm/bug.h being<br />
changed or not including linux/compiler.h for some reason.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
---<br />
 include/linux/bug.h |   32 +++++++++++++++++++-------------<br />
 1 files changed, 19 insertions(+), 13 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index 0d75762..08d97e9 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -2,6 +2,7 @@<br />
 #define _LINUX_BUG_H<br />
 <br />
 #include &lt;asm/bug.h&gt;<br />
+#include &lt;linux/compiler.h&gt;<br />
 <br />
 enum bug_trap_type {<br />
 	BUG_TRAP_TYPE_NONE = 0,<br />
@@ -43,25 +44,30 @@ struct pt_regs;<br />
  * @condition: the condition which the compiler should know is false.<br />
  *<br />
  * If you have some code which relies on certain constants being equal, or<br />
- * other compile-time-evaluated condition, you should use BUILD_BUG_ON to<br />
+ * some other compile-time-evaluated condition, you should use BUILD_BUG_ON to<br />
  * detect if someone changes it.<br />
  *<br />
- * The implementation uses gcc's reluctance to create a negative array, but<br />
- * gcc (as of 4.4) only emits that error for obvious cases (eg. not arguments<br />
- * to inline functions).  So as a fallback we use the optimizer; if it can't<br />
- * prove the condition is false, it will cause a link error on the undefined<br />
- * &quot;__build_bug_on_failed&quot;.  This error message can be harder to track down<br />
- * though, hence the two different methods.<br />
+ * The implementation uses gcc's reluctance to create a negative array, but gcc<br />
+ * (as of 4.4) only emits that error for obvious cases (e.g. not arguments to<br />
+ * inline functions).  Luckily, in 4.3 they added the &quot;error&quot; function<br />
+ * attribute just for this type of case.  Thus, we use a negative sized array<br />
+ * (should always create an error on gcc versions older than 4.4) and then call<br />
+ * an undefined function with the error attribute (should always create an<br />
+ * error on gcc 4.3 and later).  If for some reason, neither creates a<br />
+ * compile-time error, we'll still have a link-time error, which is harder to<br />
+ * track down.<br />
  */<br />
 #ifndef __OPTIMIZE__<br />
 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))<br />
 #else<br />
-extern int __build_bug_on_failed;<br />
-#define BUILD_BUG_ON(condition)					\<br />
-	do {							\<br />
-		bool __cond = !!(condition);			\<br />
-		((void)sizeof(char[1 - 2 * __cond]));		\<br />
-		if (__cond) __build_bug_on_failed = 1;		\<br />
+#define BUILD_BUG_ON(condition)						\<br />
+	do {								\<br />
+		bool __cond = !!(condition);				\<br />
+		extern void __build_bug_on_failed(void)			\<br />
+			__compiletime_error(&quot;BUILD_BUG_ON failed&quot;);	\<br />
+		if (__cond)						\<br />
+			__build_bug_on_failed();			\<br />
+		((void)sizeof(char[1 - 2 * __cond]));			\<br />
 	} while(0)<br />
 #endif<br />
 <br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:02:48 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720577#msg-1720577</guid>
            <title>[PATCH v8 5/9] bug.h: Fix BUILD_BUG_ON macro in __CHECKER__</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720577#msg-1720577</link>
            <description><![CDATA[ When __CHECKER__ is defined, we disable all of the BUILD_BUG.* macros.<br />
However, both BUILD_BUG_ON_NOT_POWER_OF_2 and BUILD_BUG_ON was<br />
evaluating to nothing in this case, and we want (0) since this is a<br />
function-like macro that will be followed by a semicolon.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
---<br />
 include/linux/bug.h |    4 ++--<br />
 1 files changed, 2 insertions(+), 2 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index 2a11774..27d404f 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -12,11 +12,11 @@ enum bug_trap_type {<br />
 struct pt_regs;<br />
 <br />
 #ifdef __CHECKER__<br />
-#define BUILD_BUG_ON_NOT_POWER_OF_2(n)<br />
+#define BUILD_BUG_ON_NOT_POWER_OF_2(n) (0)<br />
 #define BUILD_BUG_ON_ZERO(e) (0)<br />
 #define BUILD_BUG_ON_NULL(e) ((void*)0)<br />
 #define BUILD_BUG_ON_INVALID(e) (0)<br />
-#define BUILD_BUG_ON(condition)<br />
+#define BUILD_BUG_ON(condition) (0)<br />
 #define BUILD_BUG() (0)<br />
 #else /* __CHECKER__ */<br />
 <br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:02:38 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720576#msg-1720576</guid>
            <title>[PATCH v8 6/9] bug.h: Prevent double evaulation of in BUILD_BUG_ON</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720576#msg-1720576</link>
            <description><![CDATA[ When calling BUILD_BUG_ON in an optimized build using gcc 4.3 and later,<br />
the condition will be evaulated twice, possibily with side-effects.<br />
This patch eliminates that error.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
---<br />
 include/linux/bug.h |    5 +++--<br />
 1 files changed, 3 insertions(+), 2 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index 27d404f..0d75762 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -59,8 +59,9 @@ struct pt_regs;<br />
 extern int __build_bug_on_failed;<br />
 #define BUILD_BUG_ON(condition)					\<br />
 	do {							\<br />
-		((void)sizeof(char[1 - 2*!!(condition)]));	\<br />
-		if (condition) __build_bug_on_failed = 1;	\<br />
+		bool __cond = !!(condition);			\<br />
+		((void)sizeof(char[1 - 2 * __cond]));		\<br />
+		if (__cond) __build_bug_on_failed = 1;		\<br />
 	} while(0)<br />
 #endif<br />
 <br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:02:28 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720575#msg-1720575</guid>
            <title>[PATCH v8 1/9] compiler-gcc4.h: Reorder macros based upon gcc ver</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720575#msg-1720575</link>
            <description><![CDATA[ This helps to keep the file from getting confusing, removes one<br />
duplicate version check and should encourage future editors to put new<br />
macros where they belong.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: David Rientjes &lt;rientjes@google.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
---<br />
 include/linux/compiler-gcc4.h |   20 +++++++++++---------<br />
 1 files changed, 11 insertions(+), 9 deletions(-)<br />
<br />
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h<br />
index 662fd1b..c9785c2 100644<br />
--- a/include/linux/compiler-gcc4.h<br />
+++ b/include/linux/compiler-gcc4.h<br />
@@ -13,6 +13,10 @@<br />
 #define __must_check 		__attribute__((warn_unused_result))<br />
 #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)<br />
 <br />
+#if __GNUC_MINOR__ &gt; 0<br />
+# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)<br />
+#endif<br />
+<br />
 #if __GNUC_MINOR__ &gt;= 3<br />
 /* Mark functions as cold. gcc will assume any path leading to a call<br />
    to them will be unlikely.  This means a lot of manual unlikely()s<br />
@@ -33,6 +37,12 @@<br />
 <br />
 #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)<br />
 <br />
+#ifndef __CHECKER__<br />
+# define __compiletime_warning(message) __attribute__((warning(message)))<br />
+# define __compiletime_error(message) __attribute__((error(message)))<br />
+#endif /* __CHECKER__ */<br />
+#endif /* __GNUC_MINOR__ &gt;= 3 */<br />
+<br />
 #if __GNUC_MINOR__ &gt;= 5<br />
 /*<br />
  * Mark a position in code as unreachable.  This can be used to<br />
@@ -48,8 +58,7 @@<br />
 /* Mark a function definition as prohibited from being cloned. */<br />
 #define __noclone	__attribute__((__noclone__))<br />
 <br />
-#endif<br />
-#endif<br />
+#endif /* __GNUC_MINOR__ &gt;= 5 */<br />
 <br />
 #if __GNUC_MINOR__ &gt;= 6<br />
 /*<br />
@@ -58,13 +67,6 @@<br />
 #define __visible __attribute__((externally_visible))<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &gt; 0<br />
-#define __compiletime_object_size(obj) __builtin_object_size(obj, 0)<br />
-#endif<br />
-#if __GNUC_MINOR__ &gt;= 3 &amp;&amp; !defined(__CHECKER__)<br />
-#define __compiletime_warning(message) __attribute__((warning(message)))<br />
-#define __compiletime_error(message) __attribute__((error(message)))<br />
-#endif<br />
 <br />
 #ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP<br />
 #if __GNUC_MINOR__ &gt;= 4<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:02:18 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1719823,1720574#msg-1720574</guid>
            <title>Re: [PATCH] poll: prevent missed events if _qproc is NULL</title>
            <link>http://choon.net/forum/read.php?21,1719823,1720574#msg-1720574</link>
            <description><![CDATA[ On Tue, Jan 1, 2013 at 1:17 PM, Eric Wong &lt;normalperson@yhbt.net&gt; wrote:<br />
&gt;&gt;<br />
&gt;&gt; An alternate version (limited to epoll) would be:<br />
&gt;&gt;<br />
&gt;&gt; diff --git a/fs/eventpoll.c b/fs/eventpoll.c<br />
&gt;&gt; index cd96649..ca5f3d0 100644<br />
&gt;&gt; --- a/fs/eventpoll.c<br />
&gt;&gt; +++ b/fs/eventpoll.c<br />
&gt;&gt; @@ -1299,6 +1299,7 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even<br />
&gt;&gt;        * Get current event bits. We can safely use the file* here because<br />
&gt;&gt;        * its usage count has been increased by the caller of this function.<br />
&gt;&gt;        */<br />
&gt;&gt; +     smp_mb();<br />
&gt;&gt;       revents = epi-&gt;ffd.file-&gt;f_op-&gt;poll(epi-&gt;ffd.file, &amp;pt);<br />
&gt;&gt;<br />
&gt;&gt;       /*<br />
&gt;<br />
&gt; I was wrong, rereading 626cf236608505d376e4799adb4f7eb00a8594af,<br />
&gt; I think this race existed before.<br />
&gt;<br />
&gt; Perhaps my alternate patch above is a better fix.<br />
<br />
Please document the barrier that this mb() pairs with, and then give<br />
an explanation for the fix in the commit message, and I'll happily<br />
take it. Even if it's just duplicating the comments above the<br />
wq_has_sleeper() function, except modified for the ep_modify() case.<br />
<br />
Of course, it would be good to get verification from Jason and Andreas<br />
that the alternate patch also works for them.<br />
<br />
               Linus<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Linus Torvalds</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:02:08 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1720573,1720573#msg-1720573</guid>
            <title>[PATCH,staging/speakup] Prefix externally-visible symbols</title>
            <link>http://choon.net/forum/read.php?21,1720573,1720573#msg-1720573</link>
            <description><![CDATA[ This prefixes all externally-visible symbols of speakup with &quot;spk_&quot;.<br />
(or makes static some of them which do not actually need to be<br />
externally-visible)<br />
<br />
Signed-off-by: Samuel Thibault &lt;samuel.thibault@ens-lyon.org&gt;<br />
<br />
diff -ur linux/drivers/staging/speakup-orig/fakekey.c linux/drivers/staging/speakup/fakekey.c<br />
--- linux/drivers/staging/speakup-orig/fakekey.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/fakekey.c	2013-01-01 23:29:42.594104874 +0100<br />
@@ -28,7 +28,7 @@<br />
 #define PRESSED 1<br />
 #define RELEASED 0<br />
 <br />
-DEFINE_PER_CPU(bool, reporting_keystroke);<br />
+static DEFINE_PER_CPU(bool, reporting_keystroke);<br />
 <br />
 static struct input_dev *virt_keyboard;<br />
 <br />
diff -ur linux/drivers/staging/speakup-orig/i18n.c linux/drivers/staging/speakup/i18n.c<br />
--- linux/drivers/staging/speakup-orig/i18n.c	2012-12-11 23:21:20.595184070 +0100<br />
+++ linux/drivers/staging/speakup/i18n.c	2013-01-01 23:30:31.369098000 +0100<br />
@@ -390,7 +390,7 @@<br />
 <br />
 static const  int num_groups = sizeof(all_groups) / sizeof(struct msg_group_t);<br />
 <br />
-char *msg_get(enum msg_index_t index)<br />
+char *spk_msg_get(enum msg_index_t index)<br />
 {<br />
 	char *ch;<br />
 <br />
@@ -540,7 +540,7 @@<br />
  * -EINVAL -  Invalid format specifiers in formatted message or illegal index.<br />
  * -ENOMEM -  Unable to allocate memory.<br />
 */<br />
-ssize_t msg_set(enum msg_index_t index, char *text, size_t length)<br />
+ssize_t spk_msg_set(enum msg_index_t index, char *text, size_t length)<br />
 {<br />
 	int rc = 0;<br />
 	char *newstr = NULL;<br />
@@ -576,7 +576,7 @@<br />
  * Find a message group, given its name.  Return a pointer to the structure<br />
  * if found, or NULL otherwise.<br />
 */<br />
-struct msg_group_t *find_msg_group(const char *group_name)<br />
+struct msg_group_t *spk_find_msg_group(const char *group_name)<br />
 {<br />
 	struct msg_group_t *group = NULL;<br />
 	int i;<br />
@@ -590,7 +590,7 @@<br />
 	return group;<br />
 }<br />
 <br />
-void reset_msg_group(struct msg_group_t *group)<br />
+void spk_reset_msg_group(struct msg_group_t *group)<br />
 {<br />
 	unsigned long flags;<br />
 	enum msg_index_t i;<br />
@@ -606,14 +606,14 @@<br />
 }<br />
 <br />
 /* Called at initialization time, to establish default messages. */<br />
-void initialize_msgs(void)<br />
+void spk_initialize_msgs(void)<br />
 {<br />
 	memcpy(speakup_msgs, speakup_default_msgs,<br />
 		sizeof(speakup_default_msgs));<br />
 }<br />
 <br />
 /* Free user-supplied strings when module is unloaded: */<br />
-void free_user_msgs(void)<br />
+void spk_free_user_msgs(void)<br />
 {<br />
 	enum msg_index_t index;<br />
 	unsigned long flags;<br />
diff -ur linux/drivers/staging/speakup-orig/i18n.h linux/drivers/staging/speakup/i18n.h<br />
--- linux/drivers/staging/speakup-orig/i18n.h	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/i18n.h	2013-01-01 23:30:33.697049943 +0100<br />
@@ -218,11 +218,11 @@<br />
 	enum msg_index_t end;<br />
 };<br />
 <br />
-extern char *msg_get(enum msg_index_t index);<br />
-extern ssize_t msg_set(enum msg_index_t index, char *text, size_t length);<br />
-extern struct msg_group_t *find_msg_group(const char *group_name);<br />
-extern void reset_msg_group(struct msg_group_t *group);<br />
-extern void initialize_msgs(void);<br />
-extern void free_user_msgs(void);<br />
+extern char *spk_msg_get(enum msg_index_t index);<br />
+extern ssize_t spk_msg_set(enum msg_index_t index, char *text, size_t length);<br />
+extern struct msg_group_t *spk_find_msg_group(const char *group_name);<br />
+extern void spk_reset_msg_group(struct msg_group_t *group);<br />
+extern void spk_initialize_msgs(void);<br />
+extern void spk_free_user_msgs(void);<br />
 <br />
 #endif<br />
diff -ur linux/drivers/staging/speakup-orig/keyhelp.c linux/drivers/staging/speakup/keyhelp.c<br />
--- linux/drivers/staging/speakup-orig/keyhelp.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/keyhelp.c	2013-01-01 23:33:37.077264421 +0100<br />
@@ -115,10 +115,10 @@<br />
 	key &amp;= 0xff;<br />
 	for (i = 0; i &lt; 6; i++) {<br />
 		if (state &amp; masks<i>)<br />
-			synth_printf(&quot; %s&quot;, msg_get(MSG_STATES_START + i));<br />
+			synth_printf(&quot; %s&quot;, spk_msg_get(MSG_STATES_START + i));<br />
 	}<br />
 	if ((key &gt; 0) &amp;&amp; (key &lt;= num_key_names))<br />
-		synth_printf(&quot; %s\n&quot;, msg_get(MSG_KEYNAMES_START + (key - 1)));<br />
+		synth_printf(&quot; %s\n&quot;, spk_msg_get(MSG_KEYNAMES_START + (key - 1)));<br />
 }<br />
 <br />
 static int help_init(void)<br />
@@ -126,9 +126,9 @@<br />
 	char start = SPACE;<br />
 	int i;<br />
 	int num_funcs = MSG_FUNCNAMES_END - MSG_FUNCNAMES_START + 1;<br />
-state_tbl = our_keys[0]+SHIFT_TBL_SIZE+2;<br />
+state_tbl = spk_our_keys[0]+SHIFT_TBL_SIZE+2;<br />
 	for (i = 0; i &lt; num_funcs; i++) {<br />
-		char *cur_funcname = msg_get(MSG_FUNCNAMES_START + i);<br />
+		char *cur_funcname = spk_msg_get(MSG_FUNCNAMES_START + i);<br />
 		if (start == *cur_funcname)<br />
 			continue;<br />
 		start = *cur_funcname;<br />
@@ -137,7 +137,7 @@<br />
 	return 0;<br />
 }<br />
 <br />
-int handle_help(struct vc_data *vc, u_char type, u_char ch, u_short key)<br />
+int spk_handle_help(struct vc_data *vc, u_char type, u_char ch, u_short key)<br />
 {<br />
 	int i, n;<br />
 	char *name;<br />
@@ -147,15 +147,15 @@<br />
 		help_init();<br />
 	if (type == KT_LATIN) {<br />
 		if (ch == SPACE) {<br />
-			special_handler = NULL;<br />
-			synth_printf(&quot;%s\n&quot;, msg_get(MSG_LEAVING_HELP));<br />
+			spk_special_handler = NULL;<br />
+			synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_LEAVING_HELP));<br />
 			return 1;<br />
 		}<br />
 		ch |= 32; /* lower case */<br />
 		if (ch &lt; 'a' || ch &gt; 'z')<br />
 			return -1;<br />
 		if (letter_offsets[ch-'a'] == -1) {<br />
-			synth_printf(msg_get(MSG_NO_COMMAND), ch);<br />
+			synth_printf(spk_msg_get(MSG_NO_COMMAND), ch);<br />
 			synth_printf(&quot;\n&quot;);<br />
 			return 1;<br />
 		}<br />
@@ -169,47 +169,47 @@<br />
 			cur_item--;<br />
 		else<br />
 			return -1;<br />
-	} else if (type == KT_SPKUP &amp;&amp; ch == SPEAKUP_HELP &amp;&amp; !special_handler) {<br />
-		special_handler = handle_help;<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_HELP_INFO));<br />
+	} else if (type == KT_SPKUP &amp;&amp; ch == SPEAKUP_HELP &amp;&amp; !spk_special_handler) {<br />
+		spk_special_handler = spk_handle_help;<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_HELP_INFO));<br />
 		build_key_data(); /* rebuild each time in case new mapping */<br />
 		return 1;<br />
 	} else {<br />
 		name = NULL;<br />
 		if ((type != KT_SPKUP) &amp;&amp; (key &gt; 0) &amp;&amp; (key &lt;= num_key_names)) {<br />
 			synth_printf(&quot;%s\n&quot;,<br />
-				msg_get(MSG_KEYNAMES_START + key-1));<br />
+				spk_msg_get(MSG_KEYNAMES_START + key-1));<br />
 			return 1;<br />
 		}<br />
 		for (i = 0; funcvals<i> != 0 &amp;&amp; !name; i++) {<br />
 			if (ch == funcvals<i>)<br />
-				name = msg_get(MSG_FUNCNAMES_START + i);<br />
+				name = spk_msg_get(MSG_FUNCNAMES_START + i);<br />
 		}<br />
 		if (!name)<br />
 			return -1;<br />
-		kp = our_keys[key]+1;<br />
+		kp = spk_our_keys[key]+1;<br />
 		for (i = 0; i &lt; nstates; i++) {<br />
 			if (ch == kp<i>)<br />
 				break;<br />
 		}<br />
 		key += (state_tbl<i> &lt;&lt; 8);<br />
 		say_key(key);<br />
-		synth_printf(msg_get(MSG_KEYDESC), name);<br />
+		synth_printf(spk_msg_get(MSG_KEYDESC), name);<br />
 		synth_printf(&quot;\n&quot;);<br />
 		return 1;<br />
 	}<br />
-	name = msg_get(MSG_FUNCNAMES_START + cur_item);<br />
+	name = spk_msg_get(MSG_FUNCNAMES_START + cur_item);<br />
 	func = funcvals[cur_item];<br />
 	synth_printf(&quot;%s&quot;, name);<br />
 	if (key_offsets[func] == 0) {<br />
-		synth_printf(&quot; %s\n&quot;, msg_get(MSG_IS_UNASSIGNED));<br />
+		synth_printf(&quot; %s\n&quot;, spk_msg_get(MSG_IS_UNASSIGNED));<br />
 		return 1;<br />
 	}<br />
 	p_keys = key_data + key_offsets[func];<br />
 	for (n = 0; p_keys[n]; n++) {<br />
 		val = p_keys[n];<br />
 		if (n &gt; 0)<br />
-			synth_printf(&quot;%s &quot;, msg_get(MSG_DISJUNCTION));<br />
+			synth_printf(&quot;%s &quot;, spk_msg_get(MSG_DISJUNCTION));<br />
 		say_key(val);<br />
 	}<br />
 	return 1;<br />
diff -ur linux/drivers/staging/speakup-orig/kobjects.c linux/drivers/staging/speakup/kobjects.c<br />
--- linux/drivers/staging/speakup-orig/kobjects.c	2012-03-19 14:48:08.961869940 +0100<br />
+++ linux/drivers/staging/speakup/kobjects.c	2013-01-01 23:44:09.968200098 +0100<br />
@@ -41,7 +41,7 @@<br />
 			break;<br />
 		if (strcmp(&quot;characters&quot;, attr-&gt;attr.name) == 0) {<br />
 			len = scnprintf(buf_pointer, bufsize, &quot;%d\t%s\n&quot;,<br />
-					i, characters<i>);<br />
+					i, spk_characters<i>);<br />
 		} else {	/* show chartab entry */<br />
 			if (IS_TYPE(i, B_CTL))<br />
 				cp = &quot;B_CTL&quot;;<br />
@@ -185,12 +185,12 @@<br />
 		outptr[desc_length] = '\0';<br />
 <br />
 		if (do_characters) {<br />
-			if (characters[index] != default_chars[index])<br />
-				kfree(characters[index]);<br />
-			characters[index] = desc;<br />
+			if (spk_characters[index] != spk_default_chars[index])<br />
+				kfree(spk_characters[index]);<br />
+			spk_characters[index] = desc;<br />
 			used++;<br />
 		} else {<br />
-			charclass = chartab_get_value(keyword);<br />
+			charclass = spk_chartab_get_value(keyword);<br />
 			if (charclass == 0) {<br />
 				rejected++;<br />
 				cp = linefeed + 1;<br />
@@ -206,9 +206,9 @@<br />
 <br />
 	if (reset) {<br />
 		if (do_characters)<br />
-			reset_default_chars();<br />
+			spk_reset_default_chars();<br />
 		else<br />
-			reset_default_chartab();<br />
+			spk_reset_default_chartab();<br />
 	}<br />
 <br />
 	spk_unlock(flags);<br />
@@ -232,7 +232,7 @@<br />
 	u_char ch;<br />
 	unsigned long flags;<br />
 	spk_lock(flags);<br />
-	cp1 = key_buf + SHIFT_TBL_SIZE;<br />
+	cp1 = spk_key_buf + SHIFT_TBL_SIZE;<br />
 	num_keys = (int)(*cp1);<br />
 	nstates = (int)cp1[1];<br />
 	cp += sprintf(cp, &quot;%d, %d, %d,\n&quot;, KEY_MAP_VER, num_keys, nstates);<br />
@@ -271,7 +271,7 @@<br />
 		return -ENOMEM;<br />
 	}<br />
 	if (strchr(&quot;dDrR&quot;, *in_buff)) {<br />
-		set_key_info(key_defaults, key_buf);<br />
+		spk_set_key_info(spk_key_defaults, spk_key_buf);<br />
 		pr_info(&quot;keymap set to default values\n&quot;);<br />
 		kfree(in_buff);<br />
 		spk_unlock(flags);<br />
@@ -282,14 +282,14 @@<br />
 	cp = in_buff;<br />
 	cp1 = (u_char *)in_buff;<br />
 	for (i = 0; i &lt; 3; i++) {<br />
-		cp = s2uchar(cp, cp1);<br />
+		cp = spk_s2uchar(cp, cp1);<br />
 		cp1++;<br />
 	}<br />
 	i = (int)cp1[-2]+1;<br />
 	i *= (int)cp1[-1]+1;<br />
 	i += 2; /* 0 and last map ver */<br />
 	if (cp1[-3] != KEY_MAP_VER || cp1[-1] &gt; 10 ||<br />
-			i+SHIFT_TBL_SIZE+4 &gt;= sizeof(key_buf)) {<br />
+			i+SHIFT_TBL_SIZE+4 &gt;= sizeof(spk_key_buf)) {<br />
 		pr_warn(&quot;i %d %d %d %d\n&quot;, i,<br />
 				(int)cp1[-3], (int)cp1[-2], (int)cp1[-1]);<br />
 		kfree(in_buff);<br />
@@ -297,7 +297,7 @@<br />
 		return -EINVAL;<br />
 	}<br />
 	while (--i &gt;= 0) {<br />
-		cp = s2uchar(cp, cp1);<br />
+		cp = spk_s2uchar(cp, cp1);<br />
 		cp1++;<br />
 		if (!(*cp))<br />
 			break;<br />
@@ -307,8 +307,8 @@<br />
 		pr_warn(&quot;end %d %d %d %d\n&quot;, i,<br />
 				(int)cp1[-3], (int)cp1[-2], (int)cp1[-1]);<br />
 	} else {<br />
-		if (set_key_info(in_buff, key_buf)) {<br />
-			set_key_info(key_defaults, key_buf);<br />
+		if (spk_set_key_info(in_buff, spk_key_buf)) {<br />
+			spk_set_key_info(spk_key_defaults, spk_key_buf);<br />
 			ret = -EINVAL;<br />
 			pr_warn(&quot;set key failed\n&quot;);<br />
 		}<br />
@@ -343,7 +343,7 @@<br />
 	spk_lock(flags);<br />
 	if (ch&amp;2) {<br />
 		shut = 1;<br />
-		do_flush();<br />
+		spk_do_flush();<br />
 	} else {<br />
 		shut = 0;<br />
 	}<br />
@@ -388,7 +388,7 @@<br />
 	if (new_synth_name[len - 1] == '\n')<br />
 		len--;<br />
 	new_synth_name[len] = '\0';<br />
-	strlwr(new_synth_name);<br />
+	spk_strlwr(new_synth_name);<br />
 	if ((synth != NULL) &amp;&amp; (!strcmp(new_synth_name, synth-&gt;name))) {<br />
 		pr_warn(&quot;%s already in use\n&quot;, new_synth_name);<br />
 	} else if (synth_init(new_synth_name) != 0) {<br />
@@ -417,7 +417,7 @@<br />
 		bytes = min_t(size_t, len, 250);<br />
 		strncpy(tmp, ptr, bytes);<br />
 		tmp[bytes] = '\0';<br />
-		xlate(tmp);<br />
+		spk_xlate(tmp);<br />
 		synth_printf(&quot;%s&quot;, tmp);<br />
 		ptr += bytes;<br />
 		len -= bytes;<br />
@@ -455,14 +455,14 @@<br />
 	short mask;<br />
 	unsigned long flags;<br />
 <br />
-	p_header = var_header_by_name(attr-&gt;attr.name);<br />
+	p_header = spk_var_header_by_name(attr-&gt;attr.name);<br />
 	if (p_header == NULL) {<br />
 		pr_warn(&quot;p_header is null, attr-&gt;attr.name is %s\n&quot;,<br />
 			attr-&gt;attr.name);<br />
 		return -EINVAL;<br />
 	}<br />
 <br />
-	var = get_punc_var(p_header-&gt;var_id);<br />
+	var = spk_get_punc_var(p_header-&gt;var_id);<br />
 	if (var == NULL) {<br />
 		pr_warn(&quot;var is null, p_header-&gt;var_id is %i\n&quot;,<br />
 				p_header-&gt;var_id);<br />
@@ -470,7 +470,7 @@<br />
 	}<br />
 <br />
 	spk_lock(flags);<br />
-	pb = (struct st_bits_data *) &amp;punc_info[var-&gt;value];<br />
+	pb = (struct st_bits_data *) &amp;spk_punc_info[var-&gt;value];<br />
 	mask = pb-&gt;mask;<br />
 	for (i = 33; i &lt; 128; i++) {<br />
 		if (!(spk_chartab<i>&amp;mask))<br />
@@ -497,14 +497,14 @@<br />
 	if (x &lt; 1 || x &gt; 99)<br />
 		return -EINVAL;<br />
 <br />
-	p_header = var_header_by_name(attr-&gt;attr.name);<br />
+	p_header = spk_var_header_by_name(attr-&gt;attr.name);<br />
 	if (p_header == NULL) {<br />
 		pr_warn(&quot;p_header is null, attr-&gt;attr.name is %s\n&quot;,<br />
 			attr-&gt;attr.name);<br />
 		return -EINVAL;<br />
 	}<br />
 <br />
-	var = get_punc_var(p_header-&gt;var_id);<br />
+	var = spk_get_punc_var(p_header-&gt;var_id);<br />
 	if (var == NULL) {<br />
 		pr_warn(&quot;var is null, p_header-&gt;var_id is %i\n&quot;,<br />
 				p_header-&gt;var_id);<br />
@@ -520,9 +520,9 @@<br />
 	spk_lock(flags);<br />
 <br />
 	if (*punc_buf == 'd' || *punc_buf == 'r')<br />
-		x = set_mask_bits(0, var-&gt;value, 3);<br />
+		x = spk_set_mask_bits(0, var-&gt;value, 3);<br />
 	else<br />
-		x = set_mask_bits(punc_buf, var-&gt;value, 3);<br />
+		x = spk_set_mask_bits(punc_buf, var-&gt;value, 3);<br />
 <br />
 	spk_unlock(flags);<br />
 	return count;<br />
@@ -542,7 +542,7 @@<br />
 	char ch;<br />
 	unsigned long flags;<br />
 <br />
-	param = var_header_by_name(attr-&gt;attr.name);<br />
+	param = spk_var_header_by_name(attr-&gt;attr.name);<br />
 	if (param == NULL)<br />
 		return -EINVAL;<br />
 <br />
@@ -599,13 +599,13 @@<br />
 	int value;<br />
 	unsigned long flags;<br />
 <br />
-	param = var_header_by_name(attr-&gt;attr.name);<br />
+	param = spk_var_header_by_name(attr-&gt;attr.name);<br />
 	if (param == NULL)<br />
 		return -EINVAL;<br />
 	if (param-&gt;data == NULL)<br />
 		return 0;<br />
 	ret = 0;<br />
-	cp = xlate((char *) buf);<br />
+	cp = spk_xlate((char *) buf);<br />
 <br />
 	spk_lock(flags);<br />
 	switch (param-&gt;var_type) {<br />
@@ -618,7 +618,7 @@<br />
 		else<br />
 			len = E_SET;<br />
 		speakup_s2i(cp, &amp;value);<br />
-		ret = set_num_var(value, param, len);<br />
+		ret = spk_set_num_var(value, param, len);<br />
 		if (ret == E_RANGE) {<br />
 			var_data = param-&gt;data;<br />
 			pr_warn(&quot;value for %s out of range, expect %d to %d\n&quot;,<br />
@@ -636,7 +636,7 @@<br />
 		}<br />
 		cp = (char *) buf;<br />
 		cp[len] = '\0';<br />
-		ret = set_string_var(buf, param, len);<br />
+		ret = spk_set_string_var(buf, param, len);<br />
 		if (ret == E_TOOLONG)<br />
 			pr_warn(&quot;value too long for %s\n&quot;,<br />
 					attr-&gt;attr.name);<br />
@@ -652,19 +652,19 @@<br />
 	 */<br />
 	if (strcmp(attr-&gt;attr.name, &quot;voice&quot;) == 0) {<br />
 		if (synth &amp;&amp; synth-&gt;default_pitch) {<br />
-			param = var_header_by_name(&quot;pitch&quot;);<br />
+			param = spk_var_header_by_name(&quot;pitch&quot;);<br />
 			if (param)  {<br />
-				set_num_var(synth-&gt;default_pitch[value], param,<br />
+				spk_set_num_var(synth-&gt;default_pitch[value], param,<br />
 					E_NEW_DEFAULT);<br />
-				set_num_var(0, param, E_DEFAULT);<br />
+				spk_set_num_var(0, param, E_DEFAULT);<br />
 			}<br />
 		}<br />
 		if (synth &amp;&amp; synth-&gt;default_vol) {<br />
-			param = var_header_by_name(&quot;vol&quot;);<br />
+			param = spk_var_header_by_name(&quot;vol&quot;);<br />
 			if (param)  {<br />
-				set_num_var(synth-&gt;default_vol[value], param,<br />
+				spk_set_num_var(synth-&gt;default_vol[value], param,<br />
 					E_NEW_DEFAULT);<br />
-				set_num_var(0, param, E_DEFAULT);<br />
+				spk_set_num_var(0, param, E_DEFAULT);<br />
 			}<br />
 		}<br />
 	}<br />
@@ -694,7 +694,7 @@<br />
 		if (bufsize &lt;= 1)<br />
 			break;<br />
 		printed = scnprintf(buf_pointer, bufsize, &quot;%d\t%s\n&quot;,<br />
-			index, msg_get(cursor));<br />
+			index, spk_msg_get(cursor));<br />
 		buf_pointer += printed;<br />
 		bufsize -= printed;<br />
 	}<br />
@@ -788,7 +788,7 @@<br />
 			continue;<br />
 		}<br />
 <br />
-		msg_stored = msg_set(curmessage, temp, desc_length);<br />
+		msg_stored = spk_msg_set(curmessage, temp, desc_length);<br />
 		if (msg_stored &lt; 0) {<br />
 			retval = msg_stored;<br />
 			if (msg_stored == -ENOMEM)<br />
@@ -802,7 +802,7 @@<br />
 	}<br />
 <br />
 	if (reset)<br />
-		reset_msg_group(group);<br />
+		spk_reset_msg_group(group);<br />
 <br />
 	report_msg_status(reset, received, used, rejected, group-&gt;name);<br />
 	return retval;<br />
@@ -812,7 +812,7 @@<br />
 	struct kobj_attribute *attr, char *buf)<br />
 {<br />
 	ssize_t retval = 0;<br />
-	struct msg_group_t *group = find_msg_group(attr-&gt;attr.name);<br />
+	struct msg_group_t *group = spk_find_msg_group(attr-&gt;attr.name);<br />
 	unsigned long flags;<br />
 <br />
 	BUG_ON(!group);<br />
@@ -826,7 +826,7 @@<br />
 	const char *buf, size_t count)<br />
 {<br />
 	ssize_t retval = 0;<br />
-	struct msg_group_t *group = find_msg_group(attr-&gt;attr.name);<br />
+	struct msg_group_t *group = spk_find_msg_group(attr-&gt;attr.name);<br />
 <br />
 	BUG_ON(!group);<br />
 	retval = message_store_helper(buf, count, group);<br />
@@ -861,29 +861,29 @@<br />
 	__ATTR(repeats, USER_RW, punc_show, punc_store);<br />
 <br />
 static struct kobj_attribute attrib_bleep_attribute =<br />
-	__ATTR(attrib_bleep, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_attrib_bleep, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute bell_pos_attribute =<br />
-	__ATTR(bell_pos, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_bell_pos, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute bleep_time_attribute =<br />
-	__ATTR(bleep_time, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_bleep_time, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute bleeps_attribute =<br />
-	__ATTR(bleeps, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_bleeps, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute cursor_time_attribute =<br />
 	__ATTR(cursor_time, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute key_echo_attribute =<br />
-	__ATTR(key_echo, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_key_echo, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute no_interrupt_attribute =<br />
 	__ATTR(no_interrupt, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute punc_level_attribute =<br />
-	__ATTR(punc_level, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_punc_level, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute reading_punc_attribute =<br />
-	__ATTR(reading_punc, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_reading_punc, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute say_control_attribute =<br />
 	__ATTR(say_control, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute say_word_ctl_attribute =<br />
-	__ATTR(say_word_ctl, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_say_word_ctl, USER_RW, spk_var_show, spk_var_store);<br />
 static struct kobj_attribute spell_delay_attribute =<br />
-	__ATTR(spell_delay, USER_RW, spk_var_show, spk_var_store);<br />
+	__ATTR(spk_spell_delay, USER_RW, spk_var_show, spk_var_store);<br />
 <br />
 /*<br />
  * These attributes are i18n related.<br />
@@ -891,7 +891,7 @@<br />
 static struct kobj_attribute announcements_attribute =<br />
 	__ATTR(announcements, USER_RW, message_show, message_store);<br />
 static struct kobj_attribute characters_attribute =<br />
-	__ATTR(characters, USER_RW, chars_chartab_show, chars_chartab_store);<br />
+	__ATTR(spk_characters, USER_RW, chars_chartab_show, chars_chartab_store);<br />
 static struct kobj_attribute chartab_attribute =<br />
 	__ATTR(chartab, USER_RW, chars_chartab_show, chars_chartab_store);<br />
 static struct kobj_attribute ctl_keys_attribute =<br />
diff -ur linux/drivers/staging/speakup-orig/main.c linux/drivers/staging/speakup/main.c<br />
--- linux/drivers/staging/speakup-orig/main.c	2012-10-01 14:19:04.552069389 +0200<br />
+++ linux/drivers/staging/speakup/main.c	2013-01-01 23:38:06.587701022 +0100<br />
@@ -65,23 +65,23 @@<br />
 <br />
 char *synth_name;<br />
 module_param_named(synth, synth_name, charp, S_IRUGO);<br />
-module_param_named(quiet, quiet_boot, bool, S_IRUGO);<br />
+module_param_named(quiet, spk_quiet_boot, bool, S_IRUGO);<br />
 <br />
 MODULE_PARM_DESC(synth, &quot;Synth to start if speakup is built in.&quot;);<br />
 MODULE_PARM_DESC(quiet, &quot;Do not announce when the synthesizer is found.&quot;);<br />
 <br />
-special_func special_handler;<br />
+special_func spk_special_handler;<br />
 <br />
-short pitch_shift, synth_flags;<br />
+short spk_pitch_shift, synth_flags;<br />
 static char buf[256];<br />
-int attrib_bleep, bleeps, bleep_time = 10;<br />
-int no_intr, spell_delay;<br />
-int key_echo, say_word_ctl;<br />
-int say_ctrl, bell_pos;<br />
-short punc_mask;<br />
-int punc_level, reading_punc;<br />
-char str_caps_start[MAXVARLEN + 1] = &quot;\0&quot;, str_caps_stop[MAXVARLEN + 1] = &quot;\0&quot;;<br />
-const struct st_bits_data punc_info[] = {<br />
+int spk_attrib_bleep, spk_bleeps, spk_bleep_time = 10;<br />
+int spk_no_intr, spk_spell_delay;<br />
+int spk_key_echo, spk_say_word_ctl;<br />
+int spk_say_ctrl, spk_bell_pos;<br />
+short spk_punc_mask;<br />
+int spk_punc_level, spk_reading_punc;<br />
+char spk_str_caps_start[MAXVARLEN + 1] = &quot;\0&quot;, spk_str_caps_stop[MAXVARLEN + 1] = &quot;\0&quot;;<br />
+const struct st_bits_data spk_punc_info[] = {<br />
 	{&quot;none&quot;, &quot;&quot;, 0},<br />
 	{&quot;some&quot;, &quot;/$%&amp;@&quot;, SOME},<br />
 	{&quot;most&quot;, &quot;$%&amp;#()=+*/@^&lt;&gt;|\\&quot;, MOST},<br />
@@ -95,9 +95,9 @@<br />
 <br />
 static char mark_cut_flag;<br />
 #define MAX_KEY 160<br />
-u_char *our_keys[MAX_KEY], *shift_table;<br />
-u_char key_buf[600];<br />
-const u_char key_defaults[] = {<br />
+u_char *spk_our_keys[MAX_KEY], *spk_shift_table;<br />
+u_char spk_key_buf[600];<br />
+const u_char spk_key_defaults[] = {<br />
 #include &quot;speakupmap.h&quot;<br />
 };<br />
 <br />
@@ -129,9 +129,9 @@<br />
 /* array of 256 char pointers (one for each character description)<br />
  * initialized to default_chars and user selectable via<br />
  * /proc/speakup/characters */<br />
-char *characters[256];<br />
+char *spk_characters[256];<br />
 <br />
-char *default_chars[256] = {<br />
+char *spk_default_chars[256] = {<br />
 /*000*/ &quot;null&quot;, &quot;^a&quot;, &quot;^b&quot;, &quot;^c&quot;, &quot;^d&quot;, &quot;^e&quot;, &quot;^f&quot;, &quot;^g&quot;,<br />
 /*008*/ &quot;^h&quot;, &quot;^i&quot;, &quot;^j&quot;, &quot;^k&quot;, &quot;^l&quot;, &quot;^m&quot;, &quot;^n&quot;, &quot;^o&quot;,<br />
 /*016*/ &quot;^p&quot;, &quot;^q&quot;, &quot;^r&quot;, &quot;^s&quot;, &quot;^t&quot;, &quot;^u&quot;, &quot;^v&quot;, &quot;^w&quot;,<br />
@@ -238,7 +238,7 @@<br />
 };<br />
 <br />
 struct task_struct *speakup_task;<br />
-struct bleep unprocessed_sound;<br />
+struct bleep spk_unprocessed_sound;<br />
 static int spk_keydown;<br />
 static u_char spk_lastkey, spk_close_press, keymap_flags;<br />
 static u_char last_keycode, this_speakup_key;<br />
@@ -251,14 +251,14 @@<br />
 static int keyboard_notifier_call(struct notifier_block *,<br />
 				  unsigned long code, void *param);<br />
 <br />
-struct notifier_block keyboard_notifier_block = {<br />
+static struct notifier_block keyboard_notifier_block = {<br />
 	.notifier_call = keyboard_notifier_call,<br />
 };<br />
 <br />
 static int vt_notifier_call(struct notifier_block *,<br />
 			    unsigned long code, void *param);<br />
 <br />
-struct notifier_block vt_notifier_block = {<br />
+static struct notifier_block vt_notifier_block = {<br />
 	.notifier_call = vt_notifier_call,<br />
 };<br />
 <br />
@@ -282,13 +282,13 @@<br />
 		350, 370, 392, 414, 440, 466, 491, 523, 554, 587, 619, 659<br />
 	};<br />
 	short freq;<br />
-	int time = bleep_time;<br />
+	int time = spk_bleep_time;<br />
 	freq = vals[val % 12];<br />
 	if (val &gt; 11)<br />
 		freq *= (1 &lt;&lt; (val / 12));<br />
-	unprocessed_sound.freq = freq;<br />
-	unprocessed_sound.jiffies = msecs_to_jiffies(time);<br />
-	unprocessed_sound.active = 1;<br />
+	spk_unprocessed_sound.freq = freq;<br />
+	spk_unprocessed_sound.jiffies = msecs_to_jiffies(time);<br />
+	spk_unprocessed_sound.active = 1;<br />
 	/* We can only have 1 active sound at a time. */<br />
 }<br />
 <br />
@@ -300,7 +300,7 @@<br />
 	spk_parked &amp;= 0xfe;<br />
 	speakup_date(vc);<br />
 	if (synth != NULL)<br />
-		do_flush();<br />
+		spk_do_flush();<br />
 }<br />
 <br />
 static void speech_kill(struct vc_data *vc)<br />
@@ -313,9 +313,9 @@<br />
 	if (val == 2 || spk_killed) {<br />
 		/* dead */<br />
 		spk_shut_up &amp;= ~0x40;<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_IAM_ALIVE));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_IAM_ALIVE));<br />
 	} else {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_YOU_KILLED_SPEAKUP));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_YOU_KILLED_SPEAKUP));<br />
 		spk_shut_up |= 0x40;<br />
 	}<br />
 }<br />
@@ -324,10 +324,10 @@<br />
 {<br />
 	if (spk_shut_up &amp; 0x80) {<br />
 		spk_shut_up &amp;= 0x7f;<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_HEY_THATS_BETTER));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_HEY_THATS_BETTER));<br />
 	} else {<br />
 		spk_shut_up |= 0x80;<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_YOU_TURNED_ME_OFF));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_YOU_TURNED_ME_OFF));<br />
 	}<br />
 	speakup_date(vc);<br />
 }<br />
@@ -336,10 +336,10 @@<br />
 {<br />
 	if (spk_parked &amp; 0x80) {<br />
 		spk_parked = 0;<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_UNPARKED));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_UNPARKED));<br />
 	} else {<br />
 		spk_parked |= 0x80;<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_PARKED));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_PARKED));<br />
 	}<br />
 }<br />
 <br />
@@ -350,16 +350,16 @@<br />
 <br />
 	if (!mark_cut_flag) {<br />
 		mark_cut_flag = 1;<br />
-		xs = (u_short) spk_x;<br />
-		ys = (u_short) spk_y;<br />
+		spk_xs = (u_short) spk_x;<br />
+		spk_ys = (u_short) spk_y;<br />
 		spk_sel_cons = vc;<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_MARK));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_MARK));<br />
 		return;<br />
 	}<br />
-	xe = (u_short) spk_x;<br />
-	ye = (u_short) spk_y;<br />
+	spk_xe = (u_short) spk_x;<br />
+	spk_ye = (u_short) spk_y;<br />
 	mark_cut_flag = 0;<br />
-	synth_printf(&quot;%s\n&quot;, msg_get(MSG_CUT));<br />
+	synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_CUT));<br />
 <br />
 	speakup_clear_selection();<br />
 	ret = speakup_set_selection(tty);<br />
@@ -383,9 +383,9 @@<br />
 {<br />
 	if (mark_cut_flag) {<br />
 		mark_cut_flag = 0;<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_MARK_CLEARED));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_MARK_CLEARED));<br />
 	} else {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_PASTE));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_PASTE));<br />
 		speakup_paste_selection(tty);<br />
 	}<br />
 }<br />
@@ -395,16 +395,16 @@<br />
 	int fg = spk_attr &amp; 0x0f;<br />
 	int bg = spk_attr &gt;&gt; 4;<br />
 	if (fg &gt; 8) {<br />
-		synth_printf(&quot;%s &quot;, msg_get(MSG_BRIGHT));<br />
+		synth_printf(&quot;%s &quot;, spk_msg_get(MSG_BRIGHT));<br />
 		fg -= 8;<br />
 	}<br />
-	synth_printf(&quot;%s&quot;, msg_get(MSG_COLORS_START + fg));<br />
+	synth_printf(&quot;%s&quot;, spk_msg_get(MSG_COLORS_START + fg));<br />
 	if (bg &gt; 7) {<br />
-		synth_printf(&quot; %s &quot;, msg_get(MSG_ON_BLINKING));<br />
+		synth_printf(&quot; %s &quot;, spk_msg_get(MSG_ON_BLINKING));<br />
 		bg -= 8;<br />
 	} else<br />
-		synth_printf(&quot; %s &quot;, msg_get(MSG_ON));<br />
-	synth_printf(&quot;%s\n&quot;, msg_get(MSG_COLORS_START + bg));<br />
+		synth_printf(&quot; %s &quot;, spk_msg_get(MSG_ON));<br />
+	synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_COLORS_START + bg));<br />
 }<br />
 <br />
 enum {<br />
@@ -417,24 +417,24 @@<br />
 <br />
 static void announce_edge(struct vc_data *vc, int msg_id)<br />
 {<br />
-	if (bleeps &amp; 1)<br />
+	if (spk_bleeps &amp; 1)<br />
 		bleep(spk_y);<br />
-	if ((bleeps &amp; 2) &amp;&amp; (msg_id &lt; edge_quiet))<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_EDGE_MSGS_START + msg_id - 1));<br />
+	if ((spk_bleeps &amp; 2) &amp;&amp; (msg_id &lt; edge_quiet))<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_EDGE_MSGS_START + msg_id - 1));<br />
 }<br />
 <br />
 static void speak_char(u_char ch)<br />
 {<br />
-	char *cp = characters[ch];<br />
-	struct var_t *direct = get_var(DIRECT);<br />
+	char *cp = spk_characters[ch];<br />
+	struct var_t *direct = spk_get_var(DIRECT);<br />
 	if (direct &amp;&amp; direct-&gt;u.n.value) {<br />
 		if (IS_CHAR(ch, B_CAP)) {<br />
-			pitch_shift++;<br />
-			synth_printf(&quot;%s&quot;, str_caps_start);<br />
+			spk_pitch_shift++;<br />
+			synth_printf(&quot;%s&quot;, spk_str_caps_start);<br />
 		}<br />
 		synth_printf(&quot;%c&quot;, ch);<br />
 		if (IS_CHAR(ch, B_CAP))<br />
-			synth_printf(&quot;%s&quot;, str_caps_stop);<br />
+			synth_printf(&quot;%s&quot;, spk_str_caps_stop);<br />
 		return;<br />
 	}<br />
 	if (cp == NULL) {<br />
@@ -443,13 +443,13 @@<br />
 	}<br />
 	synth_buffer_add(SPACE);<br />
 	if (IS_CHAR(ch, B_CAP)) {<br />
-		pitch_shift++;<br />
-		synth_printf(&quot;%s&quot;, str_caps_start);<br />
+		spk_pitch_shift++;<br />
+		synth_printf(&quot;%s&quot;, spk_str_caps_start);<br />
 		synth_printf(&quot;%s&quot;, cp);<br />
-		synth_printf(&quot;%s&quot;, str_caps_stop);<br />
+		synth_printf(&quot;%s&quot;, spk_str_caps_stop);<br />
 	} else {<br />
 		if (*cp == '^') {<br />
-			synth_printf(&quot;%s&quot;, msg_get(MSG_CTRL));<br />
+			synth_printf(&quot;%s&quot;, spk_msg_get(MSG_CTRL));<br />
 			cp++;<br />
 		}<br />
 		synth_printf(&quot;%s&quot;, cp);<br />
@@ -479,9 +479,9 @@<br />
 	spk_old_attr = spk_attr;<br />
 	ch = get_char(vc, (u_short *) spk_pos, &amp;spk_attr);<br />
 	if (spk_attr != spk_old_attr) {<br />
-		if (attrib_bleep &amp; 1)<br />
+		if (spk_attrib_bleep &amp; 1)<br />
 			bleep(spk_y);<br />
-		if (attrib_bleep &amp; 2)<br />
+		if (spk_attrib_bleep &amp; 2)<br />
 			say_attributes(vc);<br />
 	}<br />
 	speak_char(ch &amp; 0xff);<br />
@@ -497,7 +497,7 @@<br />
 		synth_printf(&quot;%s\n&quot;, phonetic[--ch]);<br />
 	} else {<br />
 		if (IS_CHAR(ch, B_NUM))<br />
-			synth_printf(&quot;%s &quot;, msg_get(MSG_NUMBER));<br />
+			synth_printf(&quot;%s &quot;, spk_msg_get(MSG_NUMBER));<br />
 		speak_char(ch);<br />
 	}<br />
 }<br />
@@ -527,8 +527,8 @@<br />
 }<br />
 <br />
 /* get_word - will first check to see if the character under the<br />
- * reading cursor is a space and if say_word_ctl is true it will<br />
- * return the word space.  If say_word_ctl is not set it will check to<br />
+ * reading cursor is a space and if spk_say_word_ctl is true it will<br />
+ * return the word space.  If spk_say_word_ctl is not set it will check to<br />
  * see if there is a word starting on the next position to the right<br />
  * and return that word if it exists.  If it does not exist it will<br />
  * move left to the beginning of any previous word on the line or the<br />
@@ -544,9 +544,9 @@<br />
 	ch = (char)get_char(vc, (u_short *) tmp_pos, &amp;temp);<br />
 <br />
 /* decided to take out the sayword if on a space (mis-information */<br />
-	if (say_word_ctl &amp;&amp; ch == SPACE) {<br />
+	if (spk_say_word_ctl &amp;&amp; ch == SPACE) {<br />
 		*buf = '\0';<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_SPACE));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_SPACE));<br />
 		return 0;<br />
 	} else if ((tmpx &lt; vc-&gt;vc_cols - 2)<br />
 		   &amp;&amp; (ch == SPACE || ch == 0 || IS_WDLM(ch))<br />
@@ -582,13 +582,13 @@<br />
 static void say_word(struct vc_data *vc)<br />
 {<br />
 	u_long cnt = get_word(vc);<br />
-	u_short saved_punc_mask = punc_mask;<br />
+	u_short saved_punc_mask = spk_punc_mask;<br />
 	if (cnt == 0)<br />
 		return;<br />
-	punc_mask = PUNC;<br />
+	spk_punc_mask = PUNC;<br />
 	buf[cnt++] = SPACE;<br />
 	spkup_write(buf, cnt);<br />
-	punc_mask = saved_punc_mask;<br />
+	spk_punc_mask = saved_punc_mask;<br />
 }<br />
 <br />
 static void say_prev_word(struct vc_data *vc)<br />
@@ -686,22 +686,22 @@<br />
 static void spell_word(struct vc_data *vc)<br />
 {<br />
 	static char *delay_str[] = { &quot;&quot;, &quot;,&quot;, &quot;.&quot;, &quot;. .&quot;, &quot;. . .&quot; };<br />
-	char *cp = buf, *str_cap = str_caps_stop;<br />
-	char *cp1, *last_cap = str_caps_stop;<br />
+	char *cp = buf, *str_cap = spk_str_caps_stop;<br />
+	char *cp1, *last_cap = spk_str_caps_stop;<br />
 	u_char ch;<br />
 	if (!get_word(vc))<br />
 		return;<br />
 	while ((ch = (u_char) *cp)) {<br />
 		if (cp != buf)<br />
-			synth_printf(&quot; %s &quot;, delay_str[spell_delay]);<br />
+			synth_printf(&quot; %s &quot;, delay_str[spk_spell_delay]);<br />
 		if (IS_CHAR(ch, B_CAP)) {<br />
-			str_cap = str_caps_start;<br />
-			if (*str_caps_stop)<br />
-				pitch_shift++;<br />
+			str_cap = spk_str_caps_start;<br />
+			if (*spk_str_caps_stop)<br />
+				spk_pitch_shift++;<br />
 			else	/* synth has no pitch */<br />
-				last_cap = str_caps_stop;<br />
+				last_cap = spk_str_caps_stop;<br />
 		} else<br />
-			str_cap = str_caps_stop;<br />
+			str_cap = spk_str_caps_stop;<br />
 		if (str_cap != last_cap) {<br />
 			synth_printf(&quot;%s&quot;, str_cap);<br />
 			last_cap = str_cap;<br />
@@ -711,17 +711,17 @@<br />
 			ch &amp;= 31;<br />
 			cp1 = phonetic[--ch];<br />
 		} else {<br />
-			cp1 = characters[ch];<br />
+			cp1 = spk_characters[ch];<br />
 			if (*cp1 == '^') {<br />
-				synth_printf(&quot;%s&quot;, msg_get(MSG_CTRL));<br />
+				synth_printf(&quot;%s&quot;, spk_msg_get(MSG_CTRL));<br />
 				cp1++;<br />
 			}<br />
 		}<br />
 		synth_printf(&quot;%s&quot;, cp1);<br />
 		cp++;<br />
 	}<br />
-	if (str_cap != str_caps_stop)<br />
-		synth_printf(&quot;%s&quot;, str_caps_stop);<br />
+	if (str_cap != spk_str_caps_stop)<br />
+		synth_printf(&quot;%s&quot;, spk_str_caps_stop);<br />
 }<br />
 <br />
 static int get_line(struct vc_data *vc)<br />
@@ -746,9 +746,9 @@<br />
 {<br />
 	int i = get_line(vc);<br />
 	char *cp;<br />
-	u_short saved_punc_mask = punc_mask;<br />
+	u_short saved_punc_mask = spk_punc_mask;<br />
 	if (i == 0) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_BLANK));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_BLANK));<br />
 		return;<br />
 	}<br />
 	buf[i++] = '\n';<br />
@@ -758,9 +758,9 @@<br />
 			cp++;<br />
 		synth_printf(&quot;%d, &quot;, (cp - buf) + 1);<br />
 	}<br />
-	punc_mask = punc_masks[reading_punc];<br />
+	spk_punc_mask = spk_punc_masks[spk_reading_punc];<br />
 	spkup_write(buf, i);<br />
-	punc_mask = saved_punc_mask;<br />
+	spk_punc_mask = saved_punc_mask;<br />
 }<br />
 <br />
 static void say_prev_line(struct vc_data *vc)<br />
@@ -792,7 +792,7 @@<br />
 {<br />
 	int i = 0;<br />
 	u_char tmp;<br />
-	u_short saved_punc_mask = punc_mask;<br />
+	u_short saved_punc_mask = spk_punc_mask;<br />
 	spk_old_attr = spk_attr;<br />
 	spk_attr = get_attributes((u_short *) from);<br />
 	while (from &lt; to) {<br />
@@ -809,10 +809,10 @@<br />
 	if (i &lt; 1)<br />
 		return i;<br />
 	if (read_punc)<br />
-		punc_mask = punc_info[reading_punc].mask;<br />
+		spk_punc_mask = spk_punc_info[spk_reading_punc].mask;<br />
 	spkup_write(buf, i);<br />
 	if (read_punc)<br />
-		punc_mask = saved_punc_mask;<br />
+		spk_punc_mask = saved_punc_mask;<br />
 	return i - 1;<br />
 }<br />
 <br />
@@ -824,7 +824,7 @@<br />
 	start += from * 2;<br />
 	if (say_from_to(vc, start, end, read_punc) &lt;= 0)<br />
 		if (cursor_track != read_all_mode)<br />
-			synth_printf(&quot;%s\n&quot;, msg_get(MSG_BLANK));<br />
+			synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_BLANK));<br />
 }<br />
 <br />
 /* Sentence Reading Commands */<br />
@@ -924,7 +924,7 @@<br />
 {<br />
 	u_long start, end, from, to;<br />
 	if (win_start &lt; 2) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_NO_WINDOW));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_NO_WINDOW));<br />
 		return;<br />
 	}<br />
 	start = vc-&gt;vc_origin + (win_top * vc-&gt;vc_size_row);<br />
@@ -975,7 +975,7 @@<br />
 	u_char ch;<br />
 	spk_parked |= 0x01;<br />
 	if (len == 0) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_BLANK));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_BLANK));<br />
 		return;<br />
 	}<br />
 	for (i = 0; i &lt; len; i++)<br />
@@ -994,7 +994,7 @@<br />
 	u_char ch;<br />
 	spk_parked |= 0x01;<br />
 	if (len == 0) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_BLANK));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_BLANK));<br />
 		return;<br />
 	}<br />
 	ch = buf[--len];<br />
@@ -1006,7 +1006,7 @@<br />
 <br />
 static void say_position(struct vc_data *vc)<br />
 {<br />
-	synth_printf(msg_get(MSG_POS_INFO), spk_y + 1, spk_x + 1,<br />
+	synth_printf(spk_msg_get(MSG_POS_INFO), spk_y + 1, spk_x + 1,<br />
 		     vc-&gt;vc_num + 1);<br />
 	synth_printf(&quot;\n&quot;);<br />
 }<br />
@@ -1017,7 +1017,7 @@<br />
 	u_char tmp;<br />
 	u_short ch = get_char(vc, (u_short *) spk_pos, &amp;tmp);<br />
 	ch &amp;= 0xff;<br />
-	synth_printf(msg_get(MSG_CHAR_INFO), ch, ch);<br />
+	synth_printf(spk_msg_get(MSG_CHAR_INFO), ch, ch);<br />
 }<br />
 <br />
 /* these are stub functions to keep keyboard.c happy. */<br />
@@ -1066,7 +1066,7 @@<br />
 		} else {<br />
 			if ((last_type &amp; CH_RPT) &amp;&amp; rep_count &gt; 2) {<br />
 				synth_printf(&quot; &quot;);<br />
-				synth_printf(msg_get(MSG_REPEAT_DESC),<br />
+				synth_printf(spk_msg_get(MSG_REPEAT_DESC),<br />
 					     ++rep_count);<br />
 				synth_printf(&quot; &quot;);<br />
 			}<br />
@@ -1074,7 +1074,7 @@<br />
 		}<br />
 		if (ch == spk_lastkey) {<br />
 			rep_count = 0;<br />
-			if (key_echo == 1 &amp;&amp; ch &gt;= MINECHOCHAR)<br />
+			if (spk_key_echo == 1 &amp;&amp; ch &gt;= MINECHOCHAR)<br />
 				speak_char(ch);<br />
 		} else if (char_type &amp; B_ALPHA) {<br />
 			if ((synth_flags &amp; SF_DEC) &amp;&amp; (last_type &amp; PUNC))<br />
@@ -1083,7 +1083,7 @@<br />
 		} else if (char_type &amp; B_NUM) {<br />
 			rep_count = 0;<br />
 			synth_printf(&quot;%c&quot;, ch);<br />
-		} else if (char_type &amp; punc_mask) {<br />
+		} else if (char_type &amp; spk_punc_mask) {<br />
 			speak_char(ch);<br />
 			char_type &amp;= ~PUNC;	/* for dec nospell processing */<br />
 		} else if (char_type &amp; SYNTH_OK) {<br />
@@ -1111,7 +1111,7 @@<br />
 	if (in_count &gt; 2 &amp;&amp; rep_count &gt; 2) {<br />
 		if (last_type &amp; CH_RPT) {<br />
 			synth_printf(&quot; &quot;);<br />
-			synth_printf(msg_get(MSG_REPEAT_DESC2), ++rep_count);<br />
+			synth_printf(spk_msg_get(MSG_REPEAT_DESC2), ++rep_count);<br />
 			synth_printf(&quot; &quot;);<br />
 		}<br />
 		rep_count = 0;<br />
@@ -1135,22 +1135,22 @@<br />
 		case KVAL(K_SHIFT):<br />
 			del_timer(&amp;cursor_timer);<br />
 			spk_shut_up &amp;= 0xfe;<br />
-			do_flush();<br />
+			spk_do_flush();<br />
 			read_all_doc(vc);<br />
 			break;<br />
 		case KVAL(K_CTRL):<br />
 			del_timer(&amp;cursor_timer);<br />
 			cursor_track = prev_cursor_track;<br />
 			spk_shut_up &amp;= 0xfe;<br />
-			do_flush();<br />
+			spk_do_flush();<br />
 			break;<br />
 		}<br />
 	} else {<br />
 		spk_shut_up &amp;= 0xfe;<br />
-		do_flush();<br />
+		spk_do_flush();<br />
 	}<br />
-	if (say_ctrl &amp;&amp; value &lt; NUM_CTL_LABELS)<br />
-		synth_printf(&quot;%s&quot;, msg_get(MSG_CTL_START + value));<br />
+	if (spk_say_ctrl &amp;&amp; value &lt; NUM_CTL_LABELS)<br />
+		synth_printf(&quot;%s&quot;, spk_msg_get(MSG_CTL_START + value));<br />
 	spk_unlock(flags);<br />
 }<br />
 <br />
@@ -1171,12 +1171,12 @@<br />
 	spk_lastkey = value;<br />
 	spk_keydown++;<br />
 	spk_parked &amp;= 0xfe;<br />
-	if (key_echo == 2 &amp;&amp; value &gt;= MINECHOCHAR)<br />
+	if (spk_key_echo == 2 &amp;&amp; value &gt;= MINECHOCHAR)<br />
 		speak_char(value);<br />
 	spk_unlock(flags);<br />
 }<br />
 <br />
-int set_key_info(const u_char *key_info, u_char *k_buffer)<br />
+int spk_set_key_info(const u_char *key_info, u_char *k_buffer)<br />
 {<br />
 	int i = 0, states, key_data_len;<br />
 	const u_char *cp = key_info;<br />
@@ -1188,12 +1188,12 @@<br />
 	num_keys = *cp;<br />
 	states = (int)cp[1];<br />
 	key_data_len = (states + 1) * (num_keys + 1);<br />
-	if (key_data_len + SHIFT_TBL_SIZE + 4 &gt;= sizeof(key_buf))<br />
+	if (key_data_len + SHIFT_TBL_SIZE + 4 &gt;= sizeof(spk_key_buf))<br />
 		return -2;<br />
 	memset(k_buffer, 0, SHIFT_TBL_SIZE);<br />
-	memset(our_keys, 0, sizeof(our_keys));<br />
-	shift_table = k_buffer;<br />
-	our_keys[0] = shift_table;<br />
+	memset(spk_our_keys, 0, sizeof(spk_our_keys));<br />
+	spk_shift_table = k_buffer;<br />
+	spk_our_keys[0] = spk_shift_table;<br />
 	cp1 += SHIFT_TBL_SIZE;<br />
 	memcpy(cp1, cp, key_data_len + 3);<br />
 	/* get num_keys, states and data */<br />
@@ -1202,13 +1202,13 @@<br />
 		ch = *cp1++;<br />
 		if (ch &gt;= SHIFT_TBL_SIZE)<br />
 			return -3;<br />
-		shift_table[ch] = i;<br />
+		spk_shift_table[ch] = i;<br />
 	}<br />
 	keymap_flags = *cp1++;<br />
 	while ((ch = *cp1)) {<br />
 		if (ch &gt;= MAX_KEY)<br />
 			return -4;<br />
-		our_keys[ch] = cp1;<br />
+		spk_our_keys[ch] = cp1;<br />
 		cp1 += states + 1;<br />
 	}<br />
 	return 0;<br />
@@ -1237,24 +1237,24 @@<br />
 		cursor_track = prev_cursor_track;<br />
 	if (++cursor_track &gt;= CT_Max)<br />
 		cursor_track = 0;<br />
-	synth_printf(&quot;%s\n&quot;, msg_get(MSG_CURSOR_MSGS_START + cursor_track));<br />
+	synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_CURSOR_MSGS_START + cursor_track));<br />
 }<br />
 <br />
-void reset_default_chars(void)<br />
+void spk_reset_default_chars(void)<br />
 {<br />
 	int i;<br />
 <br />
 	/* First, free any non-default */<br />
 	for (i = 0; i &lt; 256; i++) {<br />
-		if ((characters<i> != NULL)<br />
-		    &amp;&amp; (characters<i> != default_chars<i>))<br />
-			kfree(characters<i>);<br />
+		if ((spk_characters<i> != NULL)<br />
+		    &amp;&amp; (spk_characters<i> != spk_default_chars<i>))<br />
+			kfree(spk_characters<i>);<br />
 	}<br />
 <br />
-	memcpy(characters, default_chars, sizeof(default_chars));<br />
+	memcpy(spk_characters, spk_default_chars, sizeof(spk_default_chars));<br />
 }<br />
 <br />
-void reset_default_chartab(void)<br />
+void spk_reset_default_chartab(void)<br />
 {<br />
 	memcpy(spk_chartab, default_chartab, sizeof(default_chartab));<br />
 }<br />
@@ -1267,8 +1267,8 @@<br />
 	if (type != KT_LATIN || (ch_type &amp; B_NUM) || ch &lt; SPACE)<br />
 		return -1;<br />
 	if (ch == SPACE) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_EDIT_DONE));<br />
-		special_handler = NULL;<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_EDIT_DONE));<br />
+		spk_special_handler = NULL;<br />
 		return 1;<br />
 	}<br />
 	if (mask &lt; PUNC &amp;&amp; !(ch_type &amp; PUNC))<br />
@@ -1276,8 +1276,8 @@<br />
 	spk_chartab[ch] ^= mask;<br />
 	speak_char(ch);<br />
 	synth_printf(&quot; %s\n&quot;,<br />
-		     (spk_chartab[ch] &amp; mask) ? msg_get(MSG_ON) :<br />
-		     msg_get(MSG_OFF));<br />
+		     (spk_chartab[ch] &amp; mask) ? spk_msg_get(MSG_ON) :<br />
+		     spk_msg_get(MSG_OFF));<br />
 	return 1;<br />
 }<br />
 <br />
@@ -1346,7 +1346,7 @@<br />
 	if (cursor_track != read_all_mode)<br />
 		prev_cursor_track = cursor_track;<br />
 	cursor_track = read_all_mode;<br />
-	reset_index_count(0);<br />
+	spk_reset_index_count(0);<br />
 	if (get_sentence_buf(vc, 0) == -1)<br />
 		kbd_fakekey2(vc, RA_DOWN_ARROW);<br />
 	else {<br />
@@ -1361,7 +1361,7 @@<br />
 	del_timer(&amp;cursor_timer);<br />
 	cursor_track = prev_cursor_track;<br />
 	spk_shut_up &amp;= 0xfe;<br />
-	do_flush();<br />
+	spk_do_flush();<br />
 }<br />
 <br />
 static void start_read_all_timer(struct vc_data *vc, int command)<br />
@@ -1370,7 +1370,7 @@<br />
 <br />
 	cursor_con = vc-&gt;vc_num;<br />
 	read_all_key = command;<br />
-	cursor_timeout = get_var(CURSOR_TIME);<br />
+	cursor_timeout = spk_get_var(CURSOR_TIME);<br />
 	mod_timer(&amp;cursor_timer,<br />
 		  jiffies + msecs_to_jiffies(cursor_timeout-&gt;u.n.value));<br />
 }<br />
@@ -1382,9 +1382,9 @@<br />
 	switch (command) {<br />
 	case RA_NEXT_SENT:<br />
 		/* Get Current Sentence */<br />
-		get_index_count(&amp;indcount, &amp;sentcount);<br />
+		spk_get_index_count(&amp;indcount, &amp;sentcount);<br />
 		/*printk(&quot;%d %d  &quot;, indcount, sentcount); */<br />
-		reset_index_count(sentcount + 1);<br />
+		spk_reset_index_count(sentcount + 1);<br />
 		if (indcount == 1) {<br />
 			if (!say_sentence_num(sentcount + 1, 0)) {<br />
 				kbd_fakekey2(vc, RA_FIND_NEXT_SENT);<br />
@@ -1395,7 +1395,7 @@<br />
 			sn = 0;<br />
 			if (!say_sentence_num(sentcount + 1, 1)) {<br />
 				sn = 1;<br />
-				reset_index_count(sn);<br />
+				spk_reset_index_count(sn);<br />
 			} else<br />
 				synth_insert_next_index(0);<br />
 			if (!say_sentence_num(sn, 0)) {<br />
@@ -1437,7 +1437,7 @@<br />
 	case RA_FIND_PREV_SENT:<br />
 		break;<br />
 	case RA_TIMER:<br />
-		get_index_count(&amp;indcount, &amp;sentcount);<br />
+		spk_get_index_count(&amp;indcount, &amp;sentcount);<br />
 		if (indcount &lt; 2)<br />
 			kbd_fakekey2(vc, RA_DOWN_ARROW);<br />
 		else<br />
@@ -1458,7 +1458,7 @@<br />
 		}<br />
 		del_timer(&amp;cursor_timer);<br />
 		spk_shut_up &amp;= 0xfe;<br />
-		do_flush();<br />
+		spk_do_flush();<br />
 		start_read_all_timer(vc, value + 1);<br />
 		spk_unlock(flags);<br />
 		return NOTIFY_STOP;<br />
@@ -1479,8 +1479,8 @@<br />
 		return;<br />
 	}<br />
 	spk_shut_up &amp;= 0xfe;<br />
-	if (no_intr)<br />
-		do_flush();<br />
+	if (spk_no_intr)<br />
+		spk_do_flush();<br />
 /* the key press flushes if !no_inter but we want to flush on cursor<br />
  * moves regardless of no_inter state */<br />
 	is_cursor = value + 1;<br />
@@ -1491,7 +1491,7 @@<br />
 	cursor_con = vc-&gt;vc_num;<br />
 	if (cursor_track == CT_Highlight)<br />
 		reset_highlight_buffers(vc);<br />
-	cursor_timeout = get_var(CURSOR_TIME);<br />
+	cursor_timeout = spk_get_var(CURSOR_TIME);<br />
 	mod_timer(&amp;cursor_timer,<br />
 		  jiffies + msecs_to_jiffies(cursor_timeout-&gt;u.n.value));<br />
 	spk_unlock(flags);<br />
@@ -1603,7 +1603,7 @@<br />
 			if (speakup_console[vc_num]-&gt;ht.ry[hc] != vc-&gt;vc_y)<br />
 				return 0;<br />
 		spk_parked |= 0x01;<br />
-		do_flush();<br />
+		spk_do_flush();<br />
 		spkup_write(speakup_console[vc_num]-&gt;ht.highbuf[hc],<br />
 			    speakup_console[vc_num]-&gt;ht.highsize[hc]);<br />
 		spk_pos = spk_cp = speakup_console[vc_num]-&gt;ht.rpos[hc];<br />
@@ -1685,7 +1685,7 @@<br />
 	if (!spk_trylock(flags))<br />
 		/* Speakup output, discard */<br />
 		return;<br />
-	if (bell_pos &amp;&amp; spk_keydown &amp;&amp; (vc-&gt;vc_x == bell_pos - 1))<br />
+	if (spk_bell_pos &amp;&amp; spk_keydown &amp;&amp; (vc-&gt;vc_x == spk_bell_pos - 1))<br />
 		bleep(3);<br />
 	if ((is_cursor) || (cursor_track == read_all_mode)) {<br />
 		if (cursor_track == CT_Highlight)<br />
@@ -1726,19 +1726,19 @@<br />
 		return;<br />
 	spk_lock(flags);<br />
 	spk_shut_up &amp;= 0xfe;<br />
-	if (no_intr)<br />
-		do_flush();<br />
+	if (spk_no_intr)<br />
+		spk_do_flush();<br />
 	switch (value) {<br />
 	case KVAL(K_CAPS):<br />
-		label = msg_get(MSG_KEYNAME_CAPSLOCK);<br />
+		label = spk_msg_get(MSG_KEYNAME_CAPSLOCK);<br />
 		on_off = vt_get_leds(fg_console, VC_CAPSLOCK);<br />
 		break;<br />
 	case KVAL(K_NUM):<br />
-		label = msg_get(MSG_KEYNAME_NUMLOCK);<br />
+		label = spk_msg_get(MSG_KEYNAME_NUMLOCK);<br />
 		on_off = vt_get_leds(fg_console, VC_NUMLOCK);<br />
 		break;<br />
 	case KVAL(K_HOLD):<br />
-		label = msg_get(MSG_KEYNAME_SCROLLLOCK);<br />
+		label = spk_msg_get(MSG_KEYNAME_SCROLLLOCK);<br />
 		on_off = vt_get_leds(fg_console, VC_SCROLLOCK);<br />
 		if (speakup_console[vc-&gt;vc_num])<br />
 			speakup_console[vc-&gt;vc_num]-&gt;tty_stopped = on_off;<br />
@@ -1750,7 +1750,7 @@<br />
 	}<br />
 	if (on_off &lt; 2)<br />
 		synth_printf(&quot;%s %s\n&quot;,<br />
-			     label, msg_get(MSG_STATUS_START + on_off));<br />
+			     label, spk_msg_get(MSG_STATUS_START + on_off));<br />
 	spk_unlock(flags);<br />
 }<br />
 <br />
@@ -1764,13 +1764,13 @@<br />
 	int var_id = (int)value - VAR_START;<br />
 	int how = (var_id &amp; 1) ? E_INC : E_DEC;<br />
 	var_id = var_id / 2 + FIRST_SET_VAR;<br />
-	p_header = get_var_header(var_id);<br />
+	p_header = spk_get_var_header(var_id);<br />
 	if (p_header == NULL)<br />
 		return -1;<br />
 	if (p_header-&gt;var_type != VAR_NUM)<br />
 		return -1;<br />
 	var_data = p_header-&gt;data;<br />
-	if (set_num_var(1, p_header, how) != 0)<br />
+	if (spk_set_num_var(1, p_header, how) != 0)<br />
 		return -1;<br />
 	if (!spk_close_press) {<br />
 		for (pn = p_header-&gt;name; *pn; pn++) {<br />
@@ -1790,18 +1790,18 @@<br />
 {<br />
 	char info[40];<br />
 	if (win_start &gt; 1) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_WINDOW_ALREADY_SET));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_WINDOW_ALREADY_SET));<br />
 		return;<br />
 	}<br />
 	if (spk_x &lt; win_left || spk_y &lt; win_top) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_END_BEFORE_START));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_END_BEFORE_START));<br />
 		return;<br />
 	}<br />
 	if (win_start &amp;&amp; spk_x == win_left &amp;&amp; spk_y == win_top) {<br />
 		win_left = 0;<br />
 		win_right = vc-&gt;vc_cols - 1;<br />
 		win_bottom = spk_y;<br />
-		snprintf(info, sizeof(info), msg_get(MSG_WINDOW_LINE),<br />
+		snprintf(info, sizeof(info), spk_msg_get(MSG_WINDOW_LINE),<br />
 			 (int)win_top + 1);<br />
 	} else {<br />
 		if (!win_start) {<br />
@@ -1811,8 +1811,8 @@<br />
 			win_bottom = spk_y;<br />
 			win_right = spk_x;<br />
 		}<br />
-		snprintf(info, sizeof(info), msg_get(MSG_WINDOW_BOUNDARY),<br />
-			 (win_start) ? msg_get(MSG_END) : msg_get(MSG_START),<br />
+		snprintf(info, sizeof(info), spk_msg_get(MSG_WINDOW_BOUNDARY),<br />
+			 (win_start) ? spk_msg_get(MSG_END) : spk_msg_get(MSG_START),<br />
 			 (int)spk_y + 1, (int)spk_x + 1);<br />
 	}<br />
 	synth_printf(&quot;%s\n&quot;, info);<br />
@@ -1824,32 +1824,32 @@<br />
 	win_top = win_bottom = 0;<br />
 	win_left = win_right = 0;<br />
 	win_start = 0;<br />
-	synth_printf(&quot;%s\n&quot;, msg_get(MSG_WINDOW_CLEARED));<br />
+	synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_WINDOW_CLEARED));<br />
 }<br />
 <br />
 static void speakup_win_enable(struct vc_data *vc)<br />
 {<br />
 	if (win_start &lt; 2) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_NO_WINDOW));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_NO_WINDOW));<br />
 		return;<br />
 	}<br />
 	win_enabled ^= 1;<br />
 	if (win_enabled)<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_WINDOW_SILENCED));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_WINDOW_SILENCED));<br />
 	else<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_WINDOW_SILENCE_DISABLED));<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_WINDOW_SILENCE_DISABLED));<br />
 }<br />
 <br />
 static void speakup_bits(struct vc_data *vc)<br />
 {<br />
 	int val = this_speakup_key - (FIRST_EDIT_BITS - 1);<br />
-	if (special_handler != NULL || val &lt; 1 || val &gt; 6) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_ERROR));<br />
+	if (spk_special_handler != NULL || val &lt; 1 || val &gt; 6) {<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_ERROR));<br />
 		return;<br />
 	}<br />
-	pb_edit = &amp;punc_info[val];<br />
-	synth_printf(msg_get(MSG_EDIT_PROMPT), pb_edit-&gt;name);<br />
-	special_handler = edit_bits;<br />
+	pb_edit = &amp;spk_punc_info[val];<br />
+	synth_printf(spk_msg_get(MSG_EDIT_PROMPT), pb_edit-&gt;name);<br />
+	spk_special_handler = edit_bits;<br />
 }<br />
 <br />
 static int handle_goto(struct vc_data *vc, u_char type, u_char ch, u_short key)<br />
@@ -1887,9 +1887,9 @@<br />
 	if (ch &lt; 'x' || ch &gt; 'y') {<br />
 oops:<br />
 		if (!spk_killed)<br />
-			synth_printf(&quot; %s\n&quot;, msg_get(MSG_GOTO_CANCELED));<br />
+			synth_printf(&quot; %s\n&quot;, spk_msg_get(MSG_GOTO_CANCELED));<br />
 		goto_buf[num = 0] = '\0';<br />
-		special_handler = NULL;<br />
+		spk_special_handler = NULL;<br />
 		return 1;<br />
 	}<br />
 	cp = speakup_s2i(goto_buf, &amp;go_pos);<br />
@@ -1917,7 +1917,7 @@<br />
 	}<br />
 	goto_buf[num = 0] = '\0';<br />
 do_goto:<br />
-	special_handler = NULL;<br />
+	spk_special_handler = NULL;<br />
 	spk_parked |= 0x01;<br />
 	if (goto_x) {<br />
 		spk_pos -= spk_x * 2;<br />
@@ -1934,18 +1934,18 @@<br />
 <br />
 static void speakup_goto(struct vc_data *vc)<br />
 {<br />
-	if (special_handler != NULL) {<br />
-		synth_printf(&quot;%s\n&quot;, msg_get(MSG_ERROR));<br />
+	if (spk_special_handler != NULL) {<br />
+		synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_ERROR));<br />
 		return;<br />
 	}<br />
-	synth_printf(&quot;%s\n&quot;, msg_get(MSG_GOTO));<br />
-	special_handler = handle_goto;<br />
+	synth_printf(&quot;%s\n&quot;, spk_msg_get(MSG_GOTO));<br />
+	spk_special_handler = handle_goto;<br />
 	return;<br />
 }<br />
 <br />
 static void speakup_help(struct vc_data *vc)<br />
 {<br />
-	handle_help(vc, KT_SPKUP, SPEAKUP_HELP, 0);<br />
+	spk_handle_help(vc, KT_SPKUP, SPEAKUP_HELP, 0);<br />
 }<br />
 <br />
 static void do_nothing(struct vc_data *vc)<br />
@@ -1992,7 +1992,7 @@<br />
 	spk_shut_up &amp;= 0xfe;<br />
 	this_speakup_key = value;<br />
 	if (value &lt; SPKUP_MAX_FUNC &amp;&amp; spkup_handler[value]) {<br />
-		do_flush();<br />
+		spk_do_flush();<br />
 		(*spkup_handler[value]) (vc);<br />
 	} else {<br />
 		if (inc_dec_var(value) &lt; 0)<br />
@@ -2032,7 +2032,7 @@<br />
 	}<br />
 	if (keycode &gt;= MAX_KEY)<br />
 		goto no_map;<br />
-	key_info = our_keys[keycode];<br />
+	key_info = spk_our_keys[keycode];<br />
 	if (key_info == 0)<br />
 		goto no_map;<br />
 	/* Check valid read all mode keys */<br />
@@ -2051,7 +2051,7 @@<br />
 		}<br />
 	}<br />
 	shift_info = (shift_state &amp; 0x0f) + key_speakup;<br />
-	offset = shift_table[shift_info];<br />
+	offset = spk_shift_table[shift_info];<br />
 	if (offset) {<br />
 		new_key = key_info[offset];<br />
 		if (new_key) {<br />
@@ -2062,7 +2062,7 @@<br />
 				if (up_flag || spk_killed)<br />
 					goto out;<br />
 				spk_shut_up &amp;= 0xfe;<br />
-				do_flush();<br />
+				spk_do_flush();<br />
 				goto out;<br />
 			}<br />
 			if (up_flag)<br />
@@ -2070,7 +2070,7 @@<br />
 			if (last_keycode == keycode &amp;&amp;<br />
 			    last_spk_jiffy + MAX_DELAY &gt; jiffies) {<br />
 				spk_close_press = 1;<br />
-				offset = shift_table[shift_info + 32];<br />
+				offset = spk_shift_table[shift_info + 32];<br />
 				/* double press? */<br />
 				if (offset &amp;&amp; key_info[offset])<br />
 					new_key = key_info[offset];<br />
@@ -2082,7 +2082,7 @@<br />
 		}<br />
 	}<br />
 no_map:<br />
-	if (type == KT_SPKUP &amp;&amp; special_handler == NULL) {<br />
+	if (type == KT_SPKUP &amp;&amp; spk_special_handler == NULL) {<br />
 		do_spkup(vc, new_key);<br />
 		spk_close_press = 0;<br />
 		ret = 1;<br />
@@ -2096,9 +2096,9 @@<br />
 	    || (value == KVAL(K_LEFT))<br />
 	    || (value == KVAL(K_RIGHT));<br />
 	if ((cursor_track != read_all_mode) || !kh)<br />
-		if (!no_intr)<br />
-			do_flush();<br />
-	if (special_handler) {<br />
+		if (!spk_no_intr)<br />
+			spk_do_flush();<br />
+	if (spk_special_handler) {<br />
 		if (type == KT_SPEC &amp;&amp; value == 1) {<br />
 			value = '\n';<br />
 			type = KT_LATIN;<br />
@@ -2106,7 +2106,7 @@<br />
 			type = KT_LATIN;<br />
 		else if (value == 0x7f)<br />
 			value = 8;	/* make del = backspace */<br />
-		ret = (*special_handler) (vc, type, value, keycode);<br />
+		ret = (*spk_special_handler) (vc, type, value, keycode);<br />
 		spk_close_press = 0;<br />
 		if (ret &lt; 0)<br />
 			bleep(9);<br />
@@ -2237,11 +2237,11 @@<br />
 		speakup_unregister_var(i);<br />
 <br />
 	for (i = 0; i &lt; 256; i++) {<br />
-		if (characters<i> != default_chars<i>)<br />
-			kfree(characters<i>);<br />
+		if (spk_characters<i> != spk_default_chars<i>)<br />
+			kfree(spk_characters<i>);<br />
 	}<br />
 <br />
-	free_user_msgs();<br />
+	spk_free_user_msgs();<br />
 }<br />
 <br />
 /* call by: module_init() */<br />
@@ -2254,20 +2254,20 @@<br />
 	struct var_t *var;<br />
 <br />
 	/* These first few initializations cannot fail. */<br />
-	initialize_msgs();	/* Initialize arrays for i18n. */<br />
-	reset_default_chars();<br />
-	reset_default_chartab();<br />
-	strlwr(synth_name);<br />
+	spk_initialize_msgs();	/* Initialize arrays for i18n. */<br />
+	spk_reset_default_chars();<br />
+	spk_reset_default_chartab();<br />
+	spk_strlwr(synth_name);<br />
 	spk_vars[0].u.n.high = vc-&gt;vc_cols;<br />
 	for (var = spk_vars; var-&gt;var_id != MAXVARS; var++)<br />
 		speakup_register_var(var);<br />
 	for (var = synth_time_vars;<br />
 	     (var-&gt;var_id &gt;= 0) &amp;&amp; (var-&gt;var_id &lt; MAXVARS); var++)<br />
 		speakup_register_var(var);<br />
-	for (i = 1; punc_info<i>.mask != 0; i++)<br />
-		set_mask_bits(0, i, 2);<br />
+	for (i = 1; spk_punc_info<i>.mask != 0; i++)<br />
+		spk_set_mask_bits(0, i, 2);<br />
 <br />
-	set_key_info(key_defaults, key_buf);<br />
+	spk_set_key_info(spk_key_defaults, spk_key_buf);<br />
 <br />
 	/* From here on out, initializations can fail. */<br />
 	err = speakup_add_virtual_keyboard();<br />
@@ -2290,7 +2290,7 @@<br />
 				goto error_kobjects;<br />
 		}<br />
 <br />
-	if (quiet_boot)<br />
+	if (spk_quiet_boot)<br />
 		spk_shut_up |= 0x01;<br />
 <br />
 	err = speakup_kobj_init();<br />
@@ -2352,11 +2352,11 @@<br />
 		speakup_unregister_var(i);<br />
 <br />
 	for (i = 0; i &lt; 256; i++) {<br />
-		if (characters<i> != default_chars<i>)<br />
-			kfree(characters<i>);<br />
+		if (spk_characters<i> != spk_default_chars<i>)<br />
+			kfree(spk_characters<i>);<br />
 	}<br />
 <br />
-	free_user_msgs();<br />
+	spk_free_user_msgs();<br />
 <br />
 out:<br />
 	return err;<br />
diff -ur linux/drivers/staging/speakup-orig/selection.c linux/drivers/staging/speakup/selection.c<br />
--- linux/drivers/staging/speakup-orig/selection.c	2012-10-01 14:19:04.552069389 +0200<br />
+++ linux/drivers/staging/speakup/selection.c	2013-01-01 23:38:11.895591455 +0100<br />
@@ -10,7 +10,7 @@<br />
 /* Don't take this from &lt;ctype.h&gt;: 011-015 on the screen aren't spaces */<br />
 #define ishardspace(c)      ((c) == ' ')<br />
 <br />
-unsigned short xs, ys, xe, ye; /* our region points */<br />
+unsigned short spk_xs, spk_ys, spk_xe, spk_ye; /* our region points */<br />
 <br />
 /* Variables for selection control. */<br />
 /* must not be disallocated */<br />
@@ -51,12 +51,12 @@<br />
 	int i, ps, pe;<br />
 	struct vc_data *vc = vc_cons[fg_console].d;<br />
 <br />
-	xs = limit(xs, vc-&gt;vc_cols - 1);<br />
-	ys = limit(ys, vc-&gt;vc_rows - 1);<br />
-	xe = limit(xe, vc-&gt;vc_cols - 1);<br />
-	ye = limit(ye, vc-&gt;vc_rows - 1);<br />
-	ps = ys * vc-&gt;vc_size_row + (xs &lt;&lt; 1);<br />
-	pe = ye * vc-&gt;vc_size_row + (xe &lt;&lt; 1);<br />
+	spk_xs = limit(spk_xs, vc-&gt;vc_cols - 1);<br />
+	spk_ys = limit(spk_ys, vc-&gt;vc_rows - 1);<br />
+	spk_xe = limit(spk_xe, vc-&gt;vc_cols - 1);<br />
+	spk_ye = limit(spk_ye, vc-&gt;vc_rows - 1);<br />
+	ps = spk_ys * vc-&gt;vc_size_row + (spk_xs &lt;&lt; 1);<br />
+	pe = spk_ye * vc-&gt;vc_size_row + (spk_xe &lt;&lt; 1);<br />
 <br />
 	if (ps &gt; pe) {<br />
 		/* make sel_start &lt;= sel_end */<br />
diff -ur linux/drivers/staging/speakup-orig/serialio.c linux/drivers/staging/speakup/serialio.c<br />
--- linux/drivers/staging/speakup-orig/serialio.c	2012-05-21 02:32:02.699795705 +0200<br />
+++ linux/drivers/staging/speakup/serialio.c	2013-01-01 23:36:29.793699089 +0100<br />
@@ -116,7 +116,7 @@<br />
 	outb(1, speakup_info.port_tts + UART_FCR);	/* Turn FIFO On */<br />
 }<br />
 <br />
-void stop_serial_interrupt(void)<br />
+void spk_stop_serial_interrupt(void)<br />
 {<br />
 	if (speakup_info.port_tts == 0)<br />
 		return;<br />
@@ -130,7 +130,7 @@<br />
 	free_irq(serstate-&gt;irq, (void *) synth_readbuf_handler);<br />
 }<br />
 <br />
-int wait_for_xmitr(void)<br />
+int spk_wait_for_xmitr(void)<br />
 {<br />
 	int tmout = SPK_XMITR_TIMEOUT;<br />
 	if ((synth-&gt;alive) &amp;&amp; (timeouts &gt;= NUM_DISABLE_TIMEOUTS)) {<br />
@@ -195,7 +195,7 @@<br />
 <br />
 int spk_serial_out(const char ch)<br />
 {<br />
-	if (synth-&gt;alive &amp;&amp; wait_for_xmitr()) {<br />
+	if (synth-&gt;alive &amp;&amp; spk_wait_for_xmitr()) {<br />
 		outb_p(ch, speakup_info.port_tts);<br />
 		return 1;<br />
 	}<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_acntpc.c linux/drivers/staging/speakup/speakup_acntpc.c<br />
--- linux/drivers/staging/speakup-orig/speakup_acntpc.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_acntpc.c	2013-01-01 23:22:14.283359688 +0100<br />
@@ -182,9 +182,9 @@<br />
 	struct var_t *full_time;<br />
 	struct var_t *jiffy_delta;<br />
 <br />
-	jiffy_delta = get_var(JIFFY);<br />
-	delay_time = get_var(DELAY);<br />
-	full_time = get_var(FULL);<br />
+	jiffy_delta = spk_get_var(JIFFY);<br />
+	delay_time = spk_get_var(DELAY);<br />
+	full_time = spk_get_var(FULL);<br />
 <br />
 	spk_lock(flags);<br />
 	jiffy_delta_val = jiffy_delta-&gt;u.n.value;<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_acntsa.c linux/drivers/staging/speakup/speakup_acntsa.c<br />
--- linux/drivers/staging/speakup-orig/speakup_acntsa.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_acntsa.c	2013-01-01 23:31:33.695811381 +0100<br />
@@ -128,7 +128,7 @@<br />
 {<br />
 	int failed;<br />
 <br />
-	failed = serial_synth_probe(synth);<br />
+	failed = spk_serial_synth_probe(synth);<br />
 	if (failed == 0) {<br />
 		spk_synth_immediate(synth, &quot;\033=R\r&quot;);<br />
 		mdelay(100);<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_apollo.c linux/drivers/staging/speakup/speakup_apollo.c<br />
--- linux/drivers/staging/speakup-orig/speakup_apollo.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_apollo.c	2013-01-01 23:31:36.667750031 +0100<br />
@@ -112,7 +112,7 @@<br />
 	.startup = SYNTH_START,<br />
 	.checkval = SYNTH_CHECK,<br />
 	.vars = vars,<br />
-	.probe = serial_synth_probe,<br />
+	.probe = spk_serial_synth_probe,<br />
 	.release = spk_serial_release,<br />
 	.synth_immediate = spk_synth_immediate,<br />
 	.catch_up = do_catch_up,<br />
@@ -145,9 +145,9 @@<br />
 	int delay_time_val = 0;<br />
 	int jiffy_delta_val = 0;<br />
 <br />
-	jiffy_delta = get_var(JIFFY);<br />
-	delay_time = get_var(DELAY);<br />
-	full_time = get_var(FULL);<br />
+	jiffy_delta = spk_get_var(JIFFY);<br />
+	delay_time = spk_get_var(DELAY);<br />
+	full_time = spk_get_var(FULL);<br />
 	spk_lock(flags);<br />
 	jiffy_delta_val = jiffy_delta-&gt;u.n.value;<br />
 	spk_unlock(flags);<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_audptr.c linux/drivers/staging/speakup/speakup_audptr.c<br />
--- linux/drivers/staging/speakup-orig/speakup_audptr.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_audptr.c	2013-01-01 23:31:39.655688351 +0100<br />
@@ -162,7 +162,7 @@<br />
 {<br />
 	int failed = 0;<br />
 <br />
-	failed = serial_synth_probe(synth);<br />
+	failed = spk_serial_synth_probe(synth);<br />
 	if (failed == 0)<br />
 		synth_version(synth);<br />
 	synth-&gt;alive = !failed;<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_bns.c linux/drivers/staging/speakup/speakup_bns.c<br />
--- linux/drivers/staging/speakup-orig/speakup_bns.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_bns.c	2013-01-01 23:31:43.327612552 +0100<br />
@@ -100,7 +100,7 @@<br />
 	.startup = SYNTH_START,<br />
 	.checkval = SYNTH_CHECK,<br />
 	.vars = vars,<br />
-	.probe = serial_synth_probe,<br />
+	.probe = spk_serial_synth_probe,<br />
 	.release = spk_serial_release,<br />
 	.synth_immediate = spk_synth_immediate,<br />
 	.catch_up = spk_do_catch_up,<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_decext.c linux/drivers/staging/speakup/speakup_decext.c<br />
--- linux/drivers/staging/speakup-orig/speakup_decext.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_decext.c	2013-01-01 23:31:45.803561440 +0100<br />
@@ -130,7 +130,7 @@<br />
 	.startup = SYNTH_START,<br />
 	.checkval = SYNTH_CHECK,<br />
 	.vars = vars,<br />
-	.probe = serial_synth_probe,<br />
+	.probe = spk_serial_synth_probe,<br />
 	.release = spk_serial_release,<br />
 	.synth_immediate = spk_synth_immediate,<br />
 	.catch_up = do_catch_up,<br />
@@ -162,8 +162,8 @@<br />
 	int jiffy_delta_val = 0;<br />
 	int delay_time_val = 0;<br />
 <br />
-	jiffy_delta = get_var(JIFFY);<br />
-	delay_time = get_var(DELAY);<br />
+	jiffy_delta = spk_get_var(JIFFY);<br />
+	delay_time = spk_get_var(DELAY);<br />
 <br />
 	spk_lock(flags);<br />
 	jiffy_delta_val = jiffy_delta-&gt;u.n.value;<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_decpc.c linux/drivers/staging/speakup/speakup_decpc.c<br />
--- linux/drivers/staging/speakup-orig/speakup_decpc.c	2012-10-01 14:19:04.552069389 +0200<br />
+++ linux/drivers/staging/speakup/speakup_decpc.c	2013-01-01 23:22:29.223051270 +0100<br />
@@ -375,8 +375,8 @@<br />
 	int jiffy_delta_val;<br />
 	int delay_time_val;<br />
 <br />
-	jiffy_delta = get_var(JIFFY);<br />
-	delay_time = get_var(DELAY);<br />
+	jiffy_delta = spk_get_var(JIFFY);<br />
+	delay_time = spk_get_var(DELAY);<br />
 	spk_lock(flags);<br />
 	jiffy_delta_val = jiffy_delta-&gt;u.n.value;<br />
 	spk_unlock(flags);<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_dectlk.c linux/drivers/staging/speakup/speakup_dectlk.c<br />
--- linux/drivers/staging/speakup-orig/speakup_dectlk.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_dectlk.c	2013-01-01 23:31:48.603503640 +0100<br />
@@ -134,7 +134,7 @@<br />
 	.vars = vars,<br />
 	.default_pitch = ap_defaults,<br />
 	.default_vol = g5_defaults,<br />
-	.probe = serial_synth_probe,<br />
+	.probe = spk_serial_synth_probe,<br />
 	.release = spk_serial_release,<br />
 	.synth_immediate = spk_synth_immediate,<br />
 	.catch_up = do_catch_up,<br />
@@ -214,8 +214,8 @@<br />
 	int jiffy_delta_val;<br />
 	int delay_time_val;<br />
 <br />
-	jiffy_delta = get_var(JIFFY);<br />
-	delay_time = get_var(DELAY);<br />
+	jiffy_delta = spk_get_var(JIFFY);<br />
+	delay_time = spk_get_var(DELAY);<br />
 	spk_lock(flags);<br />
 	jiffy_delta_val = jiffy_delta-&gt;u.n.value;<br />
 	spk_unlock(flags);<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_dtlk.c linux/drivers/staging/speakup/speakup_dtlk.c<br />
--- linux/drivers/staging/speakup-orig/speakup_dtlk.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_dtlk.c	2013-01-01 23:28:02.764165703 +0100<br />
@@ -198,8 +198,8 @@<br />
 	int jiffy_delta_val;<br />
 	int delay_time_val;<br />
 <br />
-	jiffy_delta = get_var(JIFFY);<br />
-	delay_time = get_var(DELAY);<br />
+	jiffy_delta = spk_get_var(JIFFY);<br />
+	delay_time = spk_get_var(DELAY);<br />
 	spk_lock(flags);<br />
 	jiffy_delta_val = jiffy_delta-&gt;u.n.value;<br />
 	spk_unlock(flags);<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_dummy.c linux/drivers/staging/speakup/speakup_dummy.c<br />
--- linux/drivers/staging/speakup-orig/speakup_dummy.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_dummy.c	2013-01-01 23:31:51.031453520 +0100<br />
@@ -102,7 +102,7 @@<br />
 	.startup = SYNTH_START,<br />
 	.checkval = SYNTH_CHECK,<br />
 	.vars = vars,<br />
-	.probe = serial_synth_probe,<br />
+	.probe = spk_serial_synth_probe,<br />
 	.release = spk_serial_release,<br />
 	.synth_immediate = spk_synth_immediate,<br />
 	.catch_up = spk_do_catch_up,<br />
diff -ur linux/drivers/staging/speakup-orig/speakup.h linux/drivers/staging/speakup/speakup.h<br />
--- linux/drivers/staging/speakup-orig/speakup.h	2012-03-19 14:48:08.965869854 +0100<br />
+++ linux/drivers/staging/speakup/speakup.h	2013-01-01 23:44:08.444231555 +0100<br />
@@ -50,34 +50,34 @@<br />
 #define E_UNDEF -1<br />
 <br />
 extern int speakup_thread(void *data);<br />
-extern void reset_default_chars(void);<br />
-extern void reset_default_chartab(void);<br />
+extern void spk_reset_default_chars(void);<br />
+extern void spk_reset_default_chartab(void);<br />
 extern void synth_start(void);<br />
 void synth_insert_next_index(int sent_num);<br />
-void reset_index_count(int sc);<br />
-void get_index_count(int *linecount, int *sentcount);<br />
-extern int set_key_info(const u_char *key_info, u_char *k_buffer);<br />
-extern char *strlwr(char *s);<br />
+void spk_reset_index_count(int sc);<br />
+void spk_get_index_count(int *linecount, int *sentcount);<br />
+extern int spk_set_key_info(const u_char *key_info, u_char *k_buffer);<br />
+extern char *spk_strlwr(char *s);<br />
 extern char *speakup_s2i(char *start, int *dest);<br />
-extern char *s2uchar(char *start, char *dest);<br />
-extern char *xlate(char *s);<br />
+extern char *spk_s2uchar(char *start, char *dest);<br />
+extern char *spk_xlate(char *s);<br />
 extern int speakup_kobj_init(void);<br />
 extern void speakup_kobj_exit(void);<br />
-extern int chartab_get_value(char *keyword);<br />
+extern int spk_chartab_get_value(char *keyword);<br />
 extern void speakup_register_var(struct var_t *var);<br />
 extern void speakup_unregister_var(enum var_id_t var_id);<br />
-extern struct st_var_header *get_var_header(enum var_id_t var_id);<br />
-extern struct st_var_header *var_header_by_name(const char *name);<br />
-extern struct punc_var_t *get_punc_var(enum var_id_t var_id);<br />
-extern int set_num_var(int val, struct st_var_header *var, int how);<br />
-extern int set_string_var(const char *page, struct st_var_header *var, int len);<br />
-extern int set_mask_bits(const char *input, const int which, const int how);<br />
-extern special_func special_handler;<br />
-extern int handle_help(struct vc_data *vc, u_char type, u_char ch, u_short key);<br />
+extern struct st_var_header *spk_get_var_header(enum var_id_t var_id);<br />
+extern struct st_var_header *spk_var_header_by_name(const char *name);<br />
+extern struct punc_var_t *spk_get_punc_var(enum var_id_t var_id);<br />
+extern int spk_set_num_var(int val, struct st_var_header *var, int how);<br />
+extern int spk_set_string_var(const char *page, struct st_var_header *var, int len);<br />
+extern int spk_set_mask_bits(const char *input, const int which, const int how);<br />
+extern special_func spk_special_handler;<br />
+extern int spk_handle_help(struct vc_data *vc, u_char type, u_char ch, u_short key);<br />
 extern int synth_init(char *name);<br />
 extern void synth_release(void);<br />
 <br />
-extern void do_flush(void);<br />
+extern void spk_do_flush(void);<br />
 extern void speakup_start_ttys(void);<br />
 extern void synth_buffer_add(char ch);<br />
 extern void synth_buffer_clear(void);<br />
@@ -90,35 +90,35 @@<br />
 extern int synth_supports_indexing(void);<br />
 <br />
 extern struct vc_data *spk_sel_cons;<br />
-extern unsigned short xs, ys, xe, ye; /* our region points */<br />
+extern unsigned short spk_xs, spk_ys, spk_xe, spk_ye; /* our region points */<br />
 <br />
 extern wait_queue_head_t speakup_event;<br />
 extern struct kobject *speakup_kobj;<br />
 extern struct task_struct *speakup_task;<br />
-extern const u_char key_defaults[];<br />
+extern const u_char spk_key_defaults[];<br />
 <br />
 /* Protect speakup synthesizer list */<br />
 extern struct mutex spk_mutex;<br />
 extern struct st_spk_t *speakup_console[];<br />
 extern struct spk_synth *synth;<br />
-extern char pitch_buff[];<br />
-extern u_char *our_keys[];<br />
-extern short punc_masks[];<br />
-extern char str_caps_start[], str_caps_stop[];<br />
-extern const struct st_bits_data punc_info[];<br />
-extern u_char key_buf[600];<br />
-extern char *characters[];<br />
-extern char *default_chars[];<br />
+extern char spk_pitch_buff[];<br />
+extern u_char *spk_our_keys[];<br />
+extern short spk_punc_masks[];<br />
+extern char spk_str_caps_start[], spk_str_caps_stop[];<br />
+extern const struct st_bits_data spk_punc_info[];<br />
+extern u_char spk_key_buf[600];<br />
+extern char *spk_characters[];<br />
+extern char *spk_default_chars[];<br />
 extern u_short spk_chartab[];<br />
-extern int no_intr, say_ctrl, say_word_ctl, punc_level;<br />
-extern int reading_punc, attrib_bleep, bleeps;<br />
-extern int bleep_time, bell_pos;<br />
-extern int spell_delay, key_echo;<br />
-extern short punc_mask;<br />
-extern short pitch_shift, synth_flags;<br />
-extern bool quiet_boot;<br />
+extern int spk_no_intr, spk_say_ctrl, spk_say_word_ctl, spk_punc_level;<br />
+extern int spk_reading_punc, spk_attrib_bleep, spk_bleeps;<br />
+extern int spk_bleep_time, spk_bell_pos;<br />
+extern int spk_spell_delay, spk_key_echo;<br />
+extern short spk_punc_mask;<br />
+extern short spk_pitch_shift, synth_flags;<br />
+extern bool spk_quiet_boot;<br />
 extern char *synth_name;<br />
-extern struct bleep unprocessed_sound;<br />
+extern struct bleep spk_unprocessed_sound;<br />
 <br />
 /* Prototypes from fakekey.c. */<br />
 int speakup_add_virtual_keyboard(void);<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_keypc.c linux/drivers/staging/speakup/speakup_keypc.c<br />
--- linux/drivers/staging/speakup-orig/speakup_keypc.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_keypc.c	2013-01-01 23:22:45.606713044 +0100<br />
@@ -184,9 +184,9 @@<br />
 	int full_time_val;<br />
 	int jiffy_delta_val;<br />
 <br />
-	jiffy_delta = get_var(JIFFY);<br />
-	delay_time = get_var(DELAY);<br />
-	full_time = get_var(FULL);<br />
+	jiffy_delta = spk_get_var(JIFFY);<br />
+	delay_time = spk_get_var(DELAY);<br />
+	full_time = spk_get_var(FULL);<br />
 spk_lock(flags);<br />
 	jiffy_delta_val = jiffy_delta-&gt;u.n.value;<br />
 	spk_unlock(flags);<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_ltlk.c linux/drivers/staging/speakup/speakup_ltlk.c<br />
--- linux/drivers/staging/speakup-orig/speakup_ltlk.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_ltlk.c	2013-01-01 23:31:53.491402739 +0100<br />
@@ -161,7 +161,7 @@<br />
 {<br />
 	int failed = 0;<br />
 <br />
-	failed = serial_synth_probe(synth);<br />
+	failed = spk_serial_synth_probe(synth);<br />
 	if (failed == 0)<br />
 		synth_interrogate(synth);<br />
 	synth-&gt;alive = !failed;<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_spkout.c linux/drivers/staging/speakup/speakup_spkout.c<br />
--- linux/drivers/staging/speakup-orig/speakup_spkout.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_spkout.c	2013-01-01 23:31:57.871312325 +0100<br />
@@ -107,7 +107,7 @@<br />
 	.startup = SYNTH_START,<br />
 	.checkval = SYNTH_CHECK,<br />
 	.vars = vars,<br />
-	.probe = serial_synth_probe,<br />
+	.probe = spk_serial_synth_probe,<br />
 	.release = spk_serial_release,<br />
 	.synth_immediate = spk_synth_immediate,<br />
 	.catch_up = spk_do_catch_up,<br />
diff -ur linux/drivers/staging/speakup-orig/speakup_txprt.c linux/drivers/staging/speakup/speakup_txprt.c<br />
--- linux/drivers/staging/speakup-orig/speakup_txprt.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/speakup_txprt.c	2013-01-01 23:32:00.879250232 +0100<br />
@@ -100,7 +100,7 @@<br />
 	.startup = SYNTH_START,<br />
 	.checkval = SYNTH_CHECK,<br />
 	.vars = vars,<br />
-	.probe = serial_synth_probe,<br />
+	.probe = spk_serial_synth_probe,<br />
 	.release = spk_serial_release,<br />
 	.synth_immediate = spk_synth_immediate,<br />
 	.catch_up = spk_do_catch_up,<br />
diff -ur linux/drivers/staging/speakup-orig/spk_priv.h linux/drivers/staging/speakup/spk_priv.h<br />
--- linux/drivers/staging/speakup-orig/spk_priv.h	2012-05-21 02:32:02.699795705 +0200<br />
+++ linux/drivers/staging/speakup/spk_priv.h	2013-01-01 23:36:31.289668208 +0100<br />
@@ -45,8 +45,8 @@<br />
 #define KT_SPKUP 15<br />
 <br />
 extern const struct old_serial_port *spk_serial_init(int index);<br />
-extern void stop_serial_interrupt(void);<br />
-extern int wait_for_xmitr(void);<br />
+extern void spk_stop_serial_interrupt(void);<br />
+extern int spk_wait_for_xmitr(void);<br />
 extern unsigned char spk_serial_in(void);<br />
 extern unsigned char spk_serial_in_nowait(void);<br />
 extern int spk_serial_out(const char ch);<br />
@@ -55,13 +55,13 @@<br />
 extern char synth_buffer_getc(void);<br />
 extern char synth_buffer_peek(void);<br />
 extern int synth_buffer_empty(void);<br />
-extern struct var_t *get_var(enum var_id_t var_id);<br />
+extern struct var_t *spk_get_var(enum var_id_t var_id);<br />
 extern ssize_t spk_var_show(struct kobject *kobj, struct kobj_attribute *attr,<br />
 	char *buf);<br />
 extern ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,<br />
 	const char *buf, size_t count);<br />
 <br />
-extern int serial_synth_probe(struct spk_synth *synth);<br />
+extern int spk_serial_synth_probe(struct spk_synth *synth);<br />
 extern const char *spk_synth_immediate(struct spk_synth *synth, const char *buff);<br />
 extern void spk_do_catch_up(struct spk_synth *synth);<br />
 extern void spk_synth_flush(struct spk_synth *synth);<br />
diff -ur linux/drivers/staging/speakup-orig/synth.c linux/drivers/staging/speakup/synth.c<br />
--- linux/drivers/staging/speakup-orig/synth.c	2012-10-01 14:19:04.556069308 +0200<br />
+++ linux/drivers/staging/speakup/synth.c	2013-01-01 23:36:33.997612309 +0100<br />
@@ -20,9 +20,9 @@<br />
 #define MAXSYNTHS       16      /* Max number of synths in array. */<br />
 static struct spk_synth *synths[MAXSYNTHS];<br />
 struct spk_synth *synth;<br />
-char pitch_buff[32] = &quot;&quot;;<br />
+char spk_pitch_buff[32] = &quot;&quot;;<br />
 static int module_status;<br />
-bool quiet_boot;<br />
+bool spk_quiet_boot;<br />
 <br />
 struct speakup_info_t speakup_info = {<br />
 	.spinlock = __SPIN_LOCK_UNLOCKED(speakup_info.spinlock),<br />
@@ -32,7 +32,7 @@<br />
 <br />
 static int do_synth_init(struct spk_synth *in_synth);<br />
 <br />
-int serial_synth_probe(struct spk_synth *synth)<br />
+int spk_serial_synth_probe(struct spk_synth *synth)<br />
 {<br />
 	const struct old_serial_port *ser;<br />
 	int failed = 0;<br />
@@ -59,7 +59,7 @@<br />
 	synth-&gt;alive = 1;<br />
 	return 0;<br />
 }<br />
-EXPORT_SYMBOL_GPL(serial_synth_probe);<br />
+EXPORT_SYMBOL_GPL(spk_serial_synth_probe);<br />
 <br />
 /* Main loop of the progression thread: keep eating from the buffer<br />
  * and push to the serial port, waiting as needed<br />
@@ -79,9 +79,9 @@<br />
 	int delay_time_val;<br />
 	int full_time_val;<br />
 <br />
-	jiffy_delta = get_var(JIFFY);<br />
-	full_time = get_var(FULL);<br />
-	delay_time = get_var(DELAY);<br />
+	jiffy_delta = spk_get_var(JIFFY);<br />
+	full_time = spk_get_var(FULL);<br />
+	delay_time = spk_get_var(DELAY);<br />
 <br />
 	spk_lock(flags);<br />
 	jiffy_delta_val = jiffy_delta-&gt;u.n.value;<br />
@@ -139,7 +139,7 @@<br />
 	while ((ch = *buff)) {<br />
 		if (ch == '\n')<br />
 			ch = synth-&gt;procspeech;<br />
-		if (wait_for_xmitr())<br />
+		if (spk_wait_for_xmitr())<br />
 			outb(ch, speakup_info.port_tts);<br />
 		else<br />
 			return buff;<br />
@@ -166,7 +166,7 @@<br />
 {<br />
 	if (synth-&gt;alive)<br />
 		return 1;<br />
-	if (!synth-&gt;alive &amp;&amp; wait_for_xmitr() &gt; 0) {<br />
+	if (!synth-&gt;alive &amp;&amp; spk_wait_for_xmitr() &gt; 0) {<br />
 		/* restart */<br />
 		synth-&gt;alive = 1;<br />
 		synth_printf(&quot;%s&quot;, synth-&gt;init);<br />
@@ -192,20 +192,20 @@<br />
 		synth_buffer_clear();<br />
 		return;<br />
 	}<br />
-	trigger_time = get_var(TRIGGER);<br />
+	trigger_time = spk_get_var(TRIGGER);<br />
 	if (!timer_pending(&amp;thread_timer))<br />
 		mod_timer(&amp;thread_timer, jiffies +<br />
 			msecs_to_jiffies(trigger_time-&gt;u.n.value));<br />
 }<br />
 <br />
-void do_flush(void)<br />
+void spk_do_flush(void)<br />
 {<br />
 	speakup_info.flushing = 1;<br />
 	synth_buffer_clear();<br />
 	if (synth-&gt;alive) {<br />
-		if (pitch_shift) {<br />
-			synth_printf(&quot;%s&quot;, pitch_buff);<br />
-			pitch_shift = 0;<br />
+		if (spk_pitch_shift) {<br />
+			synth_printf(&quot;%s&quot;, spk_pitch_buff);<br />
+			spk_pitch_shift = 0;<br />
 		}<br />
 	}<br />
 	wake_up_interruptible_all(&amp;speakup_event);<br />
@@ -241,7 +241,7 @@<br />
 static int index_count;<br />
 static int sentence_count;<br />
 <br />
-void reset_index_count(int sc)<br />
+void spk_reset_index_count(int sc)<br />
 {<br />
 	static int first = 1;<br />
 	if (first)<br />
@@ -277,7 +277,7 @@<br />
 	}<br />
 }<br />
 <br />
-void get_index_count(int *linecount, int *sentcount)<br />
+void spk_get_index_count(int *linecount, int *sentcount)<br />
 {<br />
 	int ind = synth-&gt;get_index();<br />
 	if (ind) {<br />
@@ -384,7 +384,7 @@<br />
 	for (var = synth-&gt;vars;<br />
 		(var-&gt;var_id &gt;= 0) &amp;&amp; (var-&gt;var_id &lt; MAXVARS); var++)<br />
 		speakup_register_var(var);<br />
-	if (!quiet_boot)<br />
+	if (!spk_quiet_boot)<br />
 		synth_printf(&quot;%s found\n&quot;, synth-&gt;long_name);<br />
 	if (synth-&gt;attributes.name<br />
 	&amp;&amp; sysfs_create_group(speakup_kobj, &amp;(synth-&gt;attributes)) &lt; 0)<br />
@@ -412,7 +412,7 @@<br />
 		sysfs_remove_group(speakup_kobj, &amp;(synth-&gt;attributes));<br />
 	for (var = synth-&gt;vars; var-&gt;var_id != MAXVARS; var++)<br />
 		speakup_unregister_var(var-&gt;var_id);<br />
-	stop_serial_interrupt();<br />
+	spk_stop_serial_interrupt();<br />
 	synth-&gt;release();<br />
 	synth = NULL;<br />
 }<br />
@@ -460,4 +460,4 @@<br />
 }<br />
 EXPORT_SYMBOL_GPL(synth_remove);<br />
 <br />
-short punc_masks[] = { 0, SOME, MOST, PUNC, PUNC|B_SYM };<br />
+short spk_punc_masks[] = { 0, SOME, MOST, PUNC, PUNC|B_SYM };<br />
diff -ur linux/drivers/staging/speakup-orig/thread.c linux/drivers/staging/speakup/thread.c<br />
--- linux/drivers/staging/speakup-orig/thread.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/thread.c	2013-01-01 23:35:52.418470610 +0100<br />
@@ -23,8 +23,8 @@<br />
 		DEFINE_WAIT(wait);<br />
 		while (1) {<br />
 			spk_lock(flags);<br />
-			our_sound = unprocessed_sound;<br />
-			unprocessed_sound.active = 0;<br />
+			our_sound = spk_unprocessed_sound;<br />
+			spk_unprocessed_sound.active = 0;<br />
 			prepare_to_wait(&amp;speakup_event, &amp;wait,<br />
 				TASK_INTERRUPTIBLE);<br />
 			should_break = kthread_should_stop() ||<br />
diff -ur linux/drivers/staging/speakup-orig/varhandlers.c linux/drivers/staging/speakup/varhandlers.c<br />
--- linux/drivers/staging/speakup-orig/varhandlers.c	2011-10-24 09:10:05.000000000 +0200<br />
+++ linux/drivers/staging/speakup/varhandlers.c	2013-01-01 23:44:12.360150723 +0100<br />
@@ -16,24 +16,24 @@<br />
 	{ &quot;ex_num&quot;, EXNUMBER, VAR_PROC, NULL, NULL },<br />
 	{ &quot;characters&quot;, CHARS, VAR_PROC, NULL, NULL },<br />
 	{ &quot;synth_direct&quot;, SYNTH_DIRECT, VAR_PROC, NULL, NULL },<br />
-	{ &quot;caps_start&quot;, CAPS_START, VAR_STRING, str_caps_start, NULL },<br />
-	{ &quot;caps_stop&quot;, CAPS_STOP, VAR_STRING, str_caps_stop, NULL },<br />
+	{ &quot;caps_start&quot;, CAPS_START, VAR_STRING, spk_str_caps_start, NULL },<br />
+	{ &quot;caps_stop&quot;, CAPS_STOP, VAR_STRING, spk_str_caps_stop, NULL },<br />
 	{ &quot;delay_time&quot;, DELAY, VAR_TIME, NULL, NULL },<br />
 	{ &quot;trigger_time&quot;, TRIGGER, VAR_TIME, NULL, NULL },<br />
 	{ &quot;jiffy_delta&quot;, JIFFY, VAR_TIME, NULL, NULL },<br />
 	{ &quot;full_time&quot;, FULL, VAR_TIME, NULL, NULL },<br />
-	{ &quot;spell_delay&quot;, SPELL_DELAY, VAR_NUM, &amp;spell_delay, NULL },<br />
-	{ &quot;bleeps&quot;, BLEEPS, VAR_NUM, &amp;bleeps, NULL },<br />
-	{ &quot;attrib_bleep&quot;, ATTRIB_BLEEP, VAR_NUM, &amp;attrib_bleep, NULL },<br />
-	{ &quot;bleep_time&quot;, BLEEP_TIME, VAR_TIME, &amp;bleep_time, NULL },<br />
+	{ &quot;spell_delay&quot;, SPELL_DELAY, VAR_NUM, &amp;spk_spell_delay, NULL },<br />
+	{ &quot;bleeps&quot;, BLEEPS, VAR_NUM, &amp;spk_bleeps, NULL },<br />
+	{ &quot;attrib_bleep&quot;, ATTRIB_BLEEP, VAR_NUM, &amp;spk_attrib_bleep, NULL },<br />
+	{ &quot;bleep_time&quot;, BLEEP_TIME, VAR_TIME, &amp;spk_bleep_time, NULL },<br />
 	{ &quot;cursor_time&quot;, CURSOR_TIME, VAR_TIME, NULL, NULL },<br />
-	{ &quot;punc_level&quot;, PUNC_LEVEL, VAR_NUM, &amp;punc_level, NULL },<br />
-	{ &quot;reading_punc&quot;, READING_PUNC, VAR_NUM, &amp;reading_punc, NULL },<br />
-	{ &quot;say_control&quot;, SAY_CONTROL, VAR_NUM, &amp;say_ctrl, NULL },<br />
-	{ &quot;say_word_ctl&quot;, SAY_WORD_CTL, VAR_NUM, &amp;say_word_ctl, NULL },<br />
-	{ &quot;no_interrupt&quot;, NO_INTERRUPT, VAR_NUM, &amp;no_intr, NULL },<br />
-	{ &quot;key_echo&quot;, KEY_ECHO, VAR_NUM, &amp;key_echo, NULL },<br />
-	{ &quot;bell_pos&quot;, BELL_POS, VAR_NUM, &amp;bell_pos, NULL },<br />
+	{ &quot;punc_level&quot;, PUNC_LEVEL, VAR_NUM, &amp;spk_punc_level, NULL },<br />
+	{ &quot;reading_punc&quot;, READING_PUNC, VAR_NUM, &amp;spk_reading_punc, NULL },<br />
+	{ &quot;say_control&quot;, SAY_CONTROL, VAR_NUM, &amp;spk_say_ctrl, NULL },<br />
+	{ &quot;say_word_ctl&quot;, SAY_WORD_CTL, VAR_NUM, &amp;spk_say_word_ctl, NULL },<br />
+	{ &quot;no_interrupt&quot;, NO_INTERRUPT, VAR_NUM, &amp;spk_no_intr, NULL },<br />
+	{ &quot;key_echo&quot;, KEY_ECHO, VAR_NUM, &amp;spk_key_echo, NULL },<br />
+	{ &quot;bell_pos&quot;, BELL_POS, VAR_NUM, &amp;spk_bell_pos, NULL },<br />
 	{ &quot;rate&quot;, RATE, VAR_NUM, NULL, NULL },<br />
 	{ &quot;pitch&quot;, PITCH, VAR_NUM, NULL, NULL },<br />
 	{ &quot;vol&quot;, VOL, VAR_NUM, NULL, NULL },<br />
@@ -58,7 +58,7 @@<br />
 	{ -1, -1 },<br />
 };<br />
 <br />
-int chartab_get_value(char *keyword)<br />
+int spk_chartab_get_value(char *keyword)<br />
 {<br />
 	int value = 0;<br />
 <br />
@@ -103,11 +103,11 @@<br />
 	p_header-&gt;data = var;<br />
 	switch (p_header-&gt;var_type) {<br />
 	case VAR_STRING:<br />
-		set_string_var(nothing, p_header, 0);<br />
+		spk_set_string_var(nothing, p_header, 0);<br />
 		break;<br />
 	case VAR_NUM:<br />
 	case VAR_TIME:<br />
-		set_num_var(0, p_header, E_DEFAULT);<br />
+		spk_set_num_var(0, p_header, E_DEFAULT);<br />
 		break;<br />
 	default:<br />
 		break;<br />
@@ -123,7 +123,7 @@<br />
 	p_header-&gt;data = NULL;<br />
 }<br />
 <br />
-struct st_var_header *get_var_header(enum var_id_t var_id)<br />
+struct st_var_header *spk_get_var_header(enum var_id_t var_id)<br />
 {<br />
 	struct st_var_header *p_header;<br />
 	if (var_id &lt; 0 || var_id &gt;= MAXVARS)<br />
@@ -134,7 +134,7 @@<br />
 	return p_header;<br />
 }<br />
 <br />
-struct st_var_header *var_header_by_name(const char *name)<br />
+struct st_var_header *spk_var_header_by_name(const char *name)<br />
 {<br />
 	int i;<br />
 	struct st_var_header *where = NULL;<br />
@@ -151,15 +151,15 @@<br />
 	return where;<br />
 }<br />
 <br />
-struct var_t *get_var(enum var_id_t var_id)<br />
+struct var_t *spk_get_var(enum var_id_t var_id)<br />
 {<br />
 	BUG_ON(var_id &lt; 0 || var_id &gt;= MAXVARS);<br />
 	BUG_ON(!var_ptrs[var_id]);<br />
 	return var_ptrs[var_id]-&gt;data;<br />
 }<br />
-EXPORT_SYMBOL_GPL(get_var);<br />
+EXPORT_SYMBOL_GPL(spk_get_var);<br />
 <br />
-struct punc_var_t *get_punc_var(enum var_id_t var_id)<br />
+struct punc_var_t *spk_get_punc_var(enum var_id_t var_id)<br />
 {<br />
 	struct punc_var_t *rv = NULL;<br />
 	struct punc_var_t *where;<br />
@@ -175,7 +175,7 @@<br />
 }<br />
 <br />
 /* handlers for setting vars */<br />
-int set_num_var(int input, struct st_var_header *var, int how)<br />
+int spk_set_num_var(int input, struct st_var_header *var, int how)<br />
 {<br />
 	int val;<br />
 	short ret = 0;<br />
@@ -217,7 +217,7 @@<br />
 	if (p_val != NULL)<br />
 		*p_val = val;<br />
 	if (var-&gt;var_id == PUNC_LEVEL) {<br />
-		punc_mask = punc_masks[val];<br />
+		spk_punc_mask = spk_punc_masks[val];<br />
 		return ret;<br />
 	}<br />
 	if (var_data-&gt;u.n.multiplier != 0)<br />
@@ -232,7 +232,7 @@<br />
 	if (!var_data-&gt;u.n.synth_fmt)<br />
 		return ret;<br />
 	if (var-&gt;var_id == PITCH)<br />
-		cp = pitch_buff;<br />
+		cp = spk_pitch_buff;<br />
 	else<br />
 		cp = buf;<br />
 	if (!var_data-&gt;u.n.out_str)<br />
@@ -244,7 +244,7 @@<br />
 	return ret;<br />
 }<br />
 <br />
-int set_string_var(const char *page, struct st_var_header *var, int len)<br />
+int spk_set_string_var(const char *page, struct st_var_header *var, int len)<br />
 {<br />
 	int ret = 0;<br />
 	struct var_t *var_data = var-&gt;data;<br />
@@ -267,21 +267,21 @@<br />
 	return ret;<br />
 }<br />
 <br />
-/* set_mask_bits sets or clears the punc/delim/repeat bits,<br />
+/* spk_set_mask_bits sets or clears the punc/delim/repeat bits,<br />
  * if input is null uses the defaults.<br />
  * values for how: 0 clears bits of chars supplied,<br />
  * 1 clears allk, 2 sets bits for chars */<br />
-int set_mask_bits(const char *input, const int which, const int how)<br />
+int spk_set_mask_bits(const char *input, const int which, const int how)<br />
 {<br />
 	u_char *cp;<br />
-	short mask = punc_info[which].mask;<br />
+	short mask = spk_punc_info[which].mask;<br />
 	if (how&amp;1) {<br />
-		for (cp = (u_char *)punc_info[3].value; *cp; cp++)<br />
+		for (cp = (u_char *)spk_punc_info[3].value; *cp; cp++)<br />
 			spk_chartab[*cp] &amp;= ~mask;<br />
 	}<br />
 	cp = (u_char *)input;<br />
 	if (cp == 0)<br />
-		cp = punc_info[which].value;<br />
+		cp = spk_punc_info[which].value;<br />
 	else {<br />
 		for ( ; *cp; cp++) {<br />
 			if (*cp &lt; SPACE)<br />
@@ -308,7 +308,7 @@<br />
 	return 0;<br />
 }<br />
 <br />
-char *strlwr(char *s)<br />
+char *spk_strlwr(char *s)<br />
 {<br />
 	char *p;<br />
 	if (s == NULL)<br />
@@ -341,7 +341,7 @@<br />
 	return start;<br />
 }<br />
 <br />
-char *s2uchar(char *start, char *dest)<br />
+char *spk_s2uchar(char *start, char *dest)<br />
 {<br />
 	int val = 0;<br />
 	while (*start &amp;&amp; *start &lt;= SPACE)<br />
@@ -357,7 +357,7 @@<br />
 	return start;<br />
 }<br />
 <br />
-char *xlate(char *s)<br />
+char *spk_xlate(char *s)<br />
 {<br />
 	static const char finds[] = &quot;nrtvafe&quot;;<br />
 	static const char subs[] = &quot;\n\r\t\013\001\014\033&quot;;<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]</i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i>]]></description>
            <dc:creator>Samuel Thibault</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:02:01 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1666529,1720572#msg-1720572</guid>
            <title>Re: [RFC] AES instead of SHA1 for /dev/urandom</title>
            <link>http://choon.net/forum/read.php?21,1666529,1720572#msg-1720572</link>
            <description><![CDATA[ On Wed 2012-12-12 20:10:16, NeilBrown wrote:<br />
&gt; On Wed, 12 Dec 2012 09:58:16 +0100 Ondřej Bílka &lt;neleai@seznam.cz&gt; wrote:<br />
&gt; <br />
&gt; &gt; On Wed, Dec 12, 2012 at 01:08:26PM +1100, NeilBrown wrote:<br />
&gt; &gt; &gt; On Wed, 12 Dec 2012 03:03:54 +0100 Ondřej Bílka &lt;neleai@seznam.cz&gt; wrote:<br />
&gt; &gt; &gt; <br />
&gt; &gt; &gt; &gt; I consider to speed-up /dev/urandom on recent intel processors by<br />
&gt; &gt; &gt; &gt; using hardware aes. Same for accelerated aes crypto.<br />
&gt; &gt; &gt; &gt; <br />
&gt; &gt; &gt; &gt; Would you accept a patch if I wrote it?<br />
&gt; &gt; &gt; <br />
&gt; &gt; &gt; Have you read  [<a href="https://lwn.net/Articles/525459"  rel="nofollow">lwn.net</a>]  ?<br />
&gt; &gt; &gt; <br />
&gt; &gt; Yes<br />
&gt; &gt; &gt; In particular the paragraph containing:<br />
&gt; &gt; &gt; <br />
&gt; &gt; &gt;    A member of the audience asked why the kernel couldn't just do away with<br />
&gt; &gt; &gt;    the existing system and use the HWRNG directly.<br />
&gt; &gt; &gt; <br />
&gt; &gt; &gt; Does that answer your question in any way?<br />
&gt; &gt; &gt; <br />
&gt; &gt; No as AES is a HWRNG about as much as horse is type of automobile.<br />
&gt; <br />
&gt; Yes, of course.  Thanks.<br />
<br />
Dunno. Some people don't trust HWRNG for various reasons.... (what if<br />
it malfunctions? what if it is backdoored?)<br />
<br />
									Pavel<br />
-- <br />
(english) [<a href="http://www.livejournal.com/~pavelmachek"  rel="nofollow">www.livejournal.com</a>]<br />
(cesky, pictures) [<a href="http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html"  rel="nofollow">atrey.karlin.mff.cuni.cz</a>]<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Pavel Machek</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:02:01 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1720561,1720571#msg-1720571</guid>
            <title>Re: [PATCH] p54pci: don't return zero on failure path in p54p_probe()</title>
            <link>http://choon.net/forum/read.php?21,1720561,1720571#msg-1720571</link>
            <description><![CDATA[ On 01/02/2013 01:45 AM, Christian Lamparter wrote:<br />
&gt; On Tuesday 01 January 2013 22:11:01 Alexey Khoroshilov wrote:<br />
&gt;&gt; If pci_set_dma_mask() or pci_set_consistent_dma_mask() fails in p54p_probe(),<br />
&gt;&gt; it breaks off initialization, deallocates all resources, but returns zero.<br />
&gt;&gt;<br />
&gt;&gt; The patch implements proper error code propagation.<br />
&gt; Uh, Thanks!<br />
&gt;<br />
&gt; But wait, I think there's another return 0 in the error<br />
&gt; path. See p54pci.c @ line 558:<br />
&gt;<br />
&gt; mem_len = pci_resource_len(pdev, 0);<br />
&gt; if (mem_len &lt; sizeof(...)) {<br />
&gt; 	dev_err(...)<br />
&gt; 	goto err_disabled_dev;<br />
&gt; }<br />
&gt;<br />
&gt; Do you think you can add a err = -EINVAL; before the goto too?<br />
You are right! But I would say -ENODEV is more popular error code in <br />
this case.<br />
&gt; [I wonder why this wasn't found by the verification project as<br />
&gt; well? Could it be that pci_resource_len(...) &lt; sizeof(...) is<br />
&gt; somehow always true and this is a dead branch?]<br />
Actually it was found, but I have no direct access to the results at the <br />
moment. My fault.<br />
<br />
Would you like I resend the patch to fix both?<br />
<br />
--<br />
Best regards,<br />
Alexey<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Alexey Khoroshilov</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:54 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1720530,1720570#msg-1720570</guid>
            <title>Re: Tux3 report: New news for the new year</title>
            <link>http://choon.net/forum/read.php?21,1720530,1720570#msg-1720570</link>
            <description><![CDATA[ Hi Martin,<br />
<br />
Thanks for the &quot;tux3 howto&quot;. Obviously tux3.org needs refresh, but you hit the <br />
main points.<br />
<br />
On Tuesday, January 01, 2013 03:37:08 PM you wrote:<br />
&gt; Writing a file with<br />
&gt; <br />
&gt; ./tux3 write tux3.img /etc/fstab<br />
&gt; <br />
&gt; also seemed to work, but I gave up holding down the enter key at:<br />
&gt; <br />
&gt; delta_get: delta 448, refcount 2<br />
&gt; tuxio: write 1 bytes at 4484, isize = 0x1184<br />
&gt; delta_put: delta 448, refcount 1<br />
&gt; <br />
&gt; /etc/fstab is 1714 bytes long.<br />
<br />
Indeed, the trace output is too chatty, but it's nice that it wrote a file. The <br />
tux3 command is cool, it can access and update an unmounted tux3 volume, even <br />
make diagrams of it. This will form the basis of our maintenance suite. A <br />
basic &quot;tux3 fsck&quot; is under construction:<br />
<br />
    [<a href="http://phunq.net/pipermail/tux3/2012-December/000012.html"  rel="nofollow">phunq.net</a>]<br />
    &quot;Towards basic filesystem checking&quot;<br />
<br />
    [<a href="http://phunq.net/pipermail/tux3/2012-December/000013.html"  rel="nofollow">phunq.net</a>]<br />
    &quot;Towards basic filesystem checking (simplified)&quot;<br />
<br />
&gt; No tux3fuse, but then, I lacked libfuse-dev, after installing, compiling<br />
&gt; worked:<br />
&gt; <br />
&gt; martin@merkaba:~[…]&gt; make tux3fuse<br />
&gt; gcc -MF ./.deps/tux3fuse.d -MP -MMD -m64 -std=gnu99 -Wall -g -rdynamic<br />
&gt; -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -<br />
&gt; I/home/martin/Linux/Dateisysteme/tux3/tux3/user -Wall -Wextra -Werror<br />
&gt; -Wundef -Wstrict-prototypes -Werror-implicit- function-declaration<br />
&gt; -Wno-unused-parameter -Wno-sign-compare -Wno-missing-field-initializers<br />
&gt; -D_FORTIFY_SOURCE=2 - DLOCK_DEBUG=1 -DROLLUP_DEBUG=1<br />
&gt; -DDISABLE_ASYNC_BACKEND=1   $(pkg-config --cflags fuse) tux3fuse.c -lfuse<br />
&gt; -o tux3fuse libtux3.a libklib/libklib.a<br />
&gt; <br />
&gt; Then I could use it:<br />
&gt; <br />
&gt; martin@merkaba:~[…]&gt; ./tux3 mkfs tux3.img<br />
&gt; __setup_sb: blocksize 4096, blockbits 12, blockmask 00000fff<br />
&gt; __setup_sb: volblocks 25600, freeblocks 25600, freeinodes 281474976710656,<br />
&gt; nextalloc 0 __setup_sb: atom_dictsize 0, freeatom 0, atomgen 1<br />
&gt; __setup_sb: logchain 0, logcount 0<br />
&gt; make tux3 filesystem on tux3.img (0x6400000 bytes)<br />
&gt; […]<br />
&gt; <br />
&gt; martin@merkaba:~[…]&gt; sudo ./tux3fuse tux3.img /mnt/zeit<br />
&gt; [sudo] password for martin:<br />
&gt; <br />
&gt; martin@merkaba:~[…]&gt; mount | grep fuse<br />
&gt; fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)<br />
&gt; tux3.img on /mnt/zeit type fuse.tux3.img<br />
&gt; (rw,nosuid,nodev,relatime,user_id=0,group_id=0)<br />
&gt; <br />
&gt; But I am stuck with accessing it:<br />
&gt; <br />
&gt; martin@merkaba:~[…]&gt; LANG=C ls -l /mnt/zeit<br />
&gt; ls: cannot access /mnt/zeit: Permission denied<br />
&gt; <br />
&gt; martin@merkaba:~[…]&gt; LANG=C sudo chown martin:martin /mnt/zeit<br />
&gt; chown: cannot access '/mnt/zeit': Transport endpoint is not connected<br />
&gt; martin@merkaba:~[…]&gt; LANG=C sudo ls -l /mnt/zeit<br />
&gt; ls: cannot access /mnt/zeit: Transport endpoint is not connected<br />
&gt; martin@merkaba:~[…]&gt;<br />
&gt; <br />
&gt; Unmounting it again worked nicely.<br />
<br />
That would be a bug, most probably in the fuse glue. Nearly all the testing <br />
recently has been on the kernel port (mostly under kvm) so its nice to hear <br />
that tux3 write still works and tux3fuse almost works. Probably, the fuse glue <br />
hit an assert and bailed out, causing the &quot;endpoint is not connected&quot; state. A <br />
good example of why it would be nice to beef up our team a little. Anybody who <br />
wants to take charge of the fuse glue is welcome.<br />
<br />
&gt; I keep it at that for now until I may take time to take a closer look.<br />
&gt;<br />
&gt; I think its better to continue this on tux3 mailing list, which I have<br />
&gt; subscribed to. But I thought I post this here, to give others some starting<br />
&gt; point for own experiments as I did not any documentation about this<br />
&gt; in the git repo.<br />
<br />
Thanks, that was great, and quick. We look forward to seeing you on the Tux3 <br />
mailing list.<br />
<br />
Another thing I forgot to post is a link to the tux3 mailing list:<br />
<br />
     [<a href="http://phunq.net/mailman/listinfo/tux3"  rel="nofollow">phunq.net</a>]<br />
<br />
Also, we are on oftc.net, #tux3 channel.<br />
<br />
We will do our best to improve the howto documentation. A wiki would be nice. <br />
We may start one on github, then set one up on tux3.org later. Currently, the <br />
main focus is on filling in the last few big pieces needed to scale well, and <br />
of course, debugging. A few more helping hands on things like wikis and <br />
documentation refresh would be most appreciated. For now, design documentation <br />
and howtos get posted to the Tux3 mailing list. You are more than welcome to <br />
post your recipes above.<br />
<br />
Thanks again,<br />
<br />
Daniel<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Daniel Phillips</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:47 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1720561,1720569#msg-1720569</guid>
            <title>Re: [PATCH] p54pci: don't return zero on failure path in p54p_probe()</title>
            <link>http://choon.net/forum/read.php?21,1720561,1720569#msg-1720569</link>
            <description><![CDATA[ On Tuesday 01 January 2013 22:11:01 Alexey Khoroshilov wrote:<br />
&gt; If pci_set_dma_mask() or pci_set_consistent_dma_mask() fails in p54p_probe(),<br />
&gt; it breaks off initialization, deallocates all resources, but returns zero.<br />
&gt; <br />
&gt; The patch implements proper error code propagation.<br />
<br />
Uh, Thanks!<br />
<br />
But wait, I think there's another return 0 in the error<br />
path. See p54pci.c @ line 558:<br />
<br />
mem_len = pci_resource_len(pdev, 0);<br />
if (mem_len &lt; sizeof(...)) {<br />
	dev_err(...)<br />
	goto err_disabled_dev;<br />
}<br />
<br />
Do you think you can add a err = -EINVAL; before the goto too?<br />
[I wonder why this wasn't found by the verification project as<br />
well? Could it be that pci_resource_len(...) &lt; sizeof(...) is <br />
somehow always true and this is a dead branch?]<br />
<br />
&gt; Found by Linux Driver Verification project (linuxtesting.org).<br />
&gt; <br />
&gt; Signed-off-by: Alexey Khoroshilov &lt;khoroshilov@ispras.ru&gt;<br />
Acked-by: Christian Lamparter &lt;chunkeey@googlemail.com&gt;<br />
<br />
Regards,<br />
	Christian<br />
&gt; ---<br />
&gt;  drivers/net/wireless/p54/p54pci.c |    6 ++++--<br />
&gt;  1 file changed, 4 insertions(+), 2 deletions(-)<br />
&gt; <br />
&gt; diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c<br />
&gt; index 933e5d9..fef69ea 100644<br />
&gt; --- a/drivers/net/wireless/p54/p54pci.c<br />
&gt; +++ b/drivers/net/wireless/p54/p54pci.c<br />
&gt; @@ -568,8 +568,10 @@ static int p54p_probe(struct pci_dev *pdev,<br />
&gt;  		goto err_disable_dev;<br />
&gt;  	}<br />
&gt;  <br />
&gt; -	if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) ||<br />
&gt; -	    pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {<br />
&gt; +	err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));<br />
&gt; +	if (!err)<br />
&gt; +		err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));<br />
&gt; +	if (err) {<br />
&gt;  		dev_err(&amp;pdev-&gt;dev, &quot;No suitable DMA available\n&quot;);<br />
&gt;  		goto err_free_reg;<br />
&gt;  	}<br />
&gt; <br />
<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Christian Lamparter</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:40 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720568#msg-1720568</guid>
            <title>Re: [PATCH v7 1/9] compiler-gcc4.h: Reorder macros based upon gcc ver</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720568#msg-1720568</link>
            <description><![CDATA[ On 01/01/2013 03:09 PM, <a href="mailto:&#100;&#97;&#110;&#105;&#101;&#108;&#102;&#115;&#97;&#110;&#116;&#111;&#115;&#64;&#97;&#116;&#116;&#46;&#110;&#101;&#116;">&#100;&#97;&#110;&#105;&#101;&#108;&#102;&#115;&#97;&#110;&#116;&#111;&#115;&#64;&#97;&#116;&#116;&#46;&#110;&#101;&#116;</a> wrote:<br />
<br />
&gt;   #ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP<br />
&gt; -#if __GNUC_MINOR__&gt;= 4<br />
&gt; +#if GCC_VERSION&gt;= 40400<br />
&gt;   #define __HAVE_BUILTIN_BSWAP32__<br />
&gt;   #define __HAVE_BUILTIN_BSWAP64__<br />
&gt;   #endif<br />
&gt; -#if __GNUC_MINOR__&gt;= 8 || (defined(__powerpc__)&amp;&amp;  __GNUC_MINOR__&gt;= 6)<br />
&gt; +#if GCC_VERSION&gt;= 40800 || (defined(__powerpc__)&amp;&amp;  GCC_VERSION&gt;= 40600)<br />
&gt;   #define __HAVE_BUILTIN_BSWAP16__<br />
&gt;   #endif<br />
&gt; -#endif<br />
&gt; +#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */<br />
I'm terribly sorry, I appear to have broken bisectability here.<br />
<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Daniel Santos</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:33 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1719823,1720567#msg-1720567</guid>
            <title>Re: [PATCH] poll: prevent missed events if _qproc is NULL</title>
            <link>http://choon.net/forum/read.php?21,1719823,1720567#msg-1720567</link>
            <description><![CDATA[ Eric Wong &lt;normalperson@yhbt.net&gt; wrote:<br />
&gt; Eric Dumazet &lt;eric.dumazet@gmail.com&gt; wrote:<br />
&gt; &gt; commit 626cf236608505d376e4799adb4f7eb00a8594af should not have this<br />
&gt; &gt; side effect, at least for poll()/select() functions. The epoll() changes<br />
&gt; &gt; I am not yet very confident.<br />
&gt; <br />
&gt; I have a better explanation of the epoll problem below.<br />
&gt; <br />
&gt; An alternate version (limited to epoll) would be:<br />
&gt; <br />
&gt; diff --git a/fs/eventpoll.c b/fs/eventpoll.c<br />
&gt; index cd96649..ca5f3d0 100644<br />
&gt; --- a/fs/eventpoll.c<br />
&gt; +++ b/fs/eventpoll.c<br />
&gt; @@ -1299,6 +1299,7 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even<br />
&gt;  	 * Get current event bits. We can safely use the file* here because<br />
&gt;  	 * its usage count has been increased by the caller of this function.<br />
&gt;  	 */<br />
&gt; +	smp_mb();<br />
&gt;  	revents = epi-&gt;ffd.file-&gt;f_op-&gt;poll(epi-&gt;ffd.file, &amp;pt);<br />
&gt;  <br />
&gt;  	/*<br />
&gt; <br />
&gt; &gt; I suspect a race already existed before this commit, it would be nice to<br />
&gt; &gt; track it properly.<br />
&gt; <br />
&gt; I don't believe this race existed before that change.<br />
<br />
I was wrong, rereading 626cf236608505d376e4799adb4f7eb00a8594af,<br />
I think this race existed before.<br />
<br />
Perhaps my alternate patch above is a better fix.<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Eric Wong</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:27 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720566#msg-1720566</guid>
            <title>[PATCH v7 2/9] compiler-gcc.h: Add gcc-recommended GCC_VERSION macro</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720566#msg-1720566</link>
            <description><![CDATA[ Throughout compiler*.h, many version checks are made.  These can be<br />
simplified by using the macro that gcc's documentation recommends.<br />
However, my primary reason for adding this is that I need bug-check<br />
macros that are enabled at certain gcc versions and it's cleaner to use<br />
this macro than the tradition method:<br />
<br />
if __GNUC__ &gt; 4 || (__GNUC__ == 4 &amp;&amp; __GNUC_MINOR__ =&gt; 2)<br />
<br />
If you add patch level, it gets this ugly:<br />
<br />
if __GNUC__ &gt; 4 || (__GNUC__ == 4 &amp;&amp; (__GNUC_MINOR__ &gt; 2 || \<br />
   __GNUC_MINOR__ == 2 __GNUC_PATCHLEVEL__ &gt;= 1))<br />
<br />
As opposed to:<br />
<br />
if GCC_VERSION &gt;= 40201<br />
<br />
While having separate headers for gcc 3 &amp; 4 eliminates some of this<br />
verbosity, they can still be cleaned up by this.<br />
<br />
See also:<br />
[<a href="http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html"  rel="nofollow">gcc.gnu.org</a>]<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
Acked-by: David Rientjes &lt;rientjes@google.com&gt;<br />
---<br />
 include/linux/compiler-gcc.h |    3 +++<br />
 1 files changed, 3 insertions(+), 0 deletions(-)<br />
<br />
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h<br />
index 6a6d7ae..24545cd 100644<br />
--- a/include/linux/compiler-gcc.h<br />
+++ b/include/linux/compiler-gcc.h<br />
@@ -5,6 +5,9 @@<br />
 /*<br />
  * Common definitions for all gcc versions go here.<br />
  */<br />
+#define GCC_VERSION (__GNUC__ * 10000 \<br />
+		   + __GNUC_MINOR__ * 100 \<br />
+		   + __GNUC_PATCHLEVEL__)<br />
 <br />
 <br />
 /* Optimization barrier */<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:20 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720565#msg-1720565</guid>
            <title>[PATCH v7 3/9] compiler-gcc{3,4}.h: Use GCC_VERSION macro</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720565#msg-1720565</link>
            <description><![CDATA[ Using GCC_VERSION reduces complexity, is easier to read and is GCC's<br />
recommended mechanism for doing version checks. (Just don't ask me why<br />
they didn't define it in the first place.)  This also makes it easy to<br />
merge compiler-gcc{,3,4}.h should somebody want to.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: David Rientjes &lt;rientjes@google.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
---<br />
 include/linux/compiler-gcc3.h |    8 ++++----<br />
 include/linux/compiler-gcc4.h |   14 +++++++-------<br />
 2 files changed, 11 insertions(+), 11 deletions(-)<br />
<br />
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h<br />
index 37d4124..7d89feb 100644<br />
--- a/include/linux/compiler-gcc3.h<br />
+++ b/include/linux/compiler-gcc3.h<br />
@@ -2,22 +2,22 @@<br />
 #error &quot;Please don't include &lt;linux/compiler-gcc3.h&gt; directly, include &lt;linux/compiler.h&gt; instead.&quot;<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &lt; 2<br />
+#if GCC_VERSION &lt; 30200<br />
 # error Sorry, your compiler is too old - please upgrade it.<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 3<br />
+#if GCC_VERSION &gt;= 30300<br />
 # define __used			__attribute__((__used__))<br />
 #else<br />
 # define __used			__attribute__((__unused__))<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 4<br />
+#if GCC_VERSION &gt;= 30400<br />
 #define __must_check		__attribute__((warn_unused_result))<br />
 #endif<br />
 <br />
 #ifdef CONFIG_GCOV_KERNEL<br />
-# if __GNUC_MINOR__ &lt; 4<br />
+# if GCC_VERSION &lt; 30400<br />
 #   error &quot;GCOV profiling support for gcc versions below 3.4 not included&quot;<br />
 # endif /* __GNUC_MINOR__ */<br />
 #endif /* CONFIG_GCOV_KERNEL */<br />
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h<br />
index 78090c6..a9ffdfe 100644<br />
--- a/include/linux/compiler-gcc4.h<br />
+++ b/include/linux/compiler-gcc4.h<br />
@@ -4,7 +4,7 @@<br />
 <br />
 /* GCC 4.1.[01] miscompiles __weak */<br />
 #ifdef __KERNEL__<br />
-# if __GNUC_MINOR__ == 1 &amp;&amp; __GNUC_PATCHLEVEL__ &lt;= 1<br />
+# if GCC_VERSION &gt;= 40100 &amp;&amp;  GCC_VERSION &lt;= 40101<br />
 #  error Your version of gcc miscompiles the __weak directive<br />
 # endif<br />
 #endif<br />
@@ -13,11 +13,11 @@<br />
 #define __must_check 		__attribute__((warn_unused_result))<br />
 #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)<br />
 <br />
-#if __GNUC_MINOR__ &gt; 0<br />
+#if GCC_VERSION &gt;= 40100<br />
 # define __compiletime_object_size(obj) __builtin_object_size(obj, 0)<br />
 #endif<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 3<br />
+#if GCC_VERSION &gt;= 40300<br />
 /* Mark functions as cold. gcc will assume any path leading to a call<br />
    to them will be unlikely.  This means a lot of manual unlikely()s<br />
    are unnecessary now for any paths leading to the usual suspects<br />
@@ -41,9 +41,9 @@<br />
 # define __compiletime_warning(message) __attribute__((warning(message)))<br />
 # define __compiletime_error(message) __attribute__((error(message)))<br />
 #endif /* __CHECKER__ */<br />
-#endif /* __GNUC_MINOR__ &gt;= 3 */<br />
+#endif /* GCC_VERSION &gt;= 40300 */<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 5<br />
+#if GCC_VERSION &gt;= 40500<br />
 /*<br />
  * Mark a position in code as unreachable.  This can be used to<br />
  * suppress control flow warnings after asm blocks that transfer<br />
@@ -58,9 +58,9 @@<br />
 /* Mark a function definition as prohibited from being cloned. */<br />
 #define __noclone	__attribute__((__noclone__))<br />
 <br />
-#endif /* __GNUC_MINOR__ &gt;= 5 */<br />
+#endif /* GCC_VERSION &gt;= 40500 */<br />
 <br />
-#if __GNUC_MINOR__ &gt;= 6<br />
+#if GCC_VERSION &gt;= 40600<br />
 /*<br />
  * Tell the optimizer that something else uses this function or variable.<br />
  */<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:14 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720564#msg-1720564</guid>
            <title>[PATCH v7 6/9] bug.h: Prevent double evaulation of in BUILD_BUG_ON</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720564#msg-1720564</link>
            <description><![CDATA[ When calling BUILD_BUG_ON in an optimized build using gcc 4.3 and later,<br />
the condition will be evaulated twice, possibily with side-effects.<br />
This patch eliminates that error.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
---<br />
 include/linux/bug.h |    5 +++--<br />
 1 files changed, 3 insertions(+), 2 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index 27d404f..0d75762 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -59,8 +59,9 @@ struct pt_regs;<br />
 extern int __build_bug_on_failed;<br />
 #define BUILD_BUG_ON(condition)					\<br />
 	do {							\<br />
-		((void)sizeof(char[1 - 2*!!(condition)]));	\<br />
-		if (condition) __build_bug_on_failed = 1;	\<br />
+		bool __cond = !!(condition);			\<br />
+		((void)sizeof(char[1 - 2 * __cond]));		\<br />
+		if (__cond) __build_bug_on_failed = 1;		\<br />
 	} while(0)<br />
 #endif<br />
 <br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:07 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720563#msg-1720563</guid>
            <title>[PATCH v7 9/9] bug.h, compiler.h: Introduce compiletime_assert &amp; BUILD_BUG_ON_MSG</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720563#msg-1720563</link>
            <description><![CDATA[ Introduce compiletime_assert to compiler.h, which moves the details of<br />
how to break a build and emit an error message for a specific compiler<br />
to the headers where these details should be. Following in the tradition<br />
of the POSIX assert macro, compiletime_assert creates a build-time error<br />
when the supplied condition is *false*.<br />
<br />
Next, we add BUILD_BUG_ON_MSG to bug.h which simply wraps<br />
compiletime_assert, inverting the logic, so that it fails when the<br />
condition is *true*, consistent with the language &quot;build bug on.&quot; This<br />
macro allows you to specify the error message you want emitted when the<br />
supplied condition is true.<br />
<br />
Finally, we remove all other code from bug.h that mucks with these<br />
details (BUILD_BUG &amp; BUILD_BUG_ON), and have them all call<br />
BUILD_BUG_ON_MSG.  This not only reduces source code bloat, but also<br />
prevents the possibility of code being changed for one macro and not for<br />
the other (which was previously the case for BUILD_BUG and<br />
BUILD_BUG_ON).<br />
<br />
Since __compiletime_error_fallback is now only used in compiler.h, I'm<br />
considering it a private macro and removing the double negation that's<br />
now extraneous.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
---<br />
 include/linux/bug.h      |   28 +++++++++++++---------------<br />
 include/linux/compiler.h |   26 +++++++++++++++++++++++++-<br />
 2 files changed, 38 insertions(+), 16 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index 57c7688..3c09a00 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -17,6 +17,7 @@ struct pt_regs;<br />
 #define BUILD_BUG_ON_ZERO(e) (0)<br />
 #define BUILD_BUG_ON_NULL(e) ((void*)0)<br />
 #define BUILD_BUG_ON_INVALID(e) (0)<br />
+#define BUILD_BUG_ON_MSG(cond, msg) (0)<br />
 #define BUILD_BUG_ON(condition) (0)<br />
 #define BUILD_BUG() (0)<br />
 #else /* __CHECKER__ */<br />
@@ -40,6 +41,15 @@ struct pt_regs;<br />
 #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))<br />
 <br />
 /**<br />
+ * BUILD_BUG_ON_MSG - break compile if a condition is true &amp; emit supplied<br />
+ * 		      error message.<br />
+ * @condition: the condition which the compiler should know is false.<br />
+ *<br />
+ * See BUILD_BUG_ON for description.<br />
+ */<br />
+#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)<br />
+<br />
+/**<br />
  * BUILD_BUG_ON - break compile if a condition is true.<br />
  * @condition: the condition which the compiler should know is false.<br />
  *<br />
@@ -60,15 +70,8 @@ struct pt_regs;<br />
 #ifndef __OPTIMIZE__<br />
 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))<br />
 #else<br />
-#define BUILD_BUG_ON(condition)						\<br />
-	do {								\<br />
-		bool __cond = !!(condition);				\<br />
-		extern void __build_bug_on_failed(void)			\<br />
-			__compiletime_error(&quot;BUILD_BUG_ON failed&quot;);	\<br />
-		if (__cond)						\<br />
-			__build_bug_on_failed();			\<br />
-		__compiletime_error_fallback(__cond);			\<br />
-	} while(0)<br />
+#define BUILD_BUG_ON(condition) \<br />
+	BUILD_BUG_ON_MSG(condition, &quot;BUILD_BUG_ON failed: &quot; #condition)<br />
 #endif<br />
 <br />
 /**<br />
@@ -78,12 +81,7 @@ struct pt_regs;<br />
  * build time, you should use BUILD_BUG to detect if it is<br />
  * unexpectedly used.<br />
  */<br />
-#define BUILD_BUG()						\<br />
-	do {							\<br />
-		extern void __build_bug_failed(void)		\<br />
-			__compiletime_error(&quot;BUILD_BUG failed&quot;);\<br />
-		__build_bug_failed();				\<br />
-	} while (0)<br />
+#define BUILD_BUG() BUILD_BUG_ON_MSG(1, &quot;BUILD_BUG failed&quot;)<br />
 <br />
 #endif	/* __CHECKER__ */<br />
 <br />
diff --git a/include/linux/compiler.h b/include/linux/compiler.h<br />
index 423bb6b..10b8f23 100644<br />
--- a/include/linux/compiler.h<br />
+++ b/include/linux/compiler.h<br />
@@ -308,11 +308,35 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);<br />
 #ifndef __compiletime_error<br />
 # define __compiletime_error(message)<br />
 # define __compiletime_error_fallback(condition) \<br />
-	do { ((void)sizeof(char[1 - 2*!!(condition)])); } while (0)<br />
+	do { ((void)sizeof(char[1 - 2 * condition])); } while (0)<br />
 #else<br />
 # define __compiletime_error_fallback(condition) do { } while (0)<br />
 #endif<br />
 <br />
+#define __compiletime_assert(condition, msg, prefix, suffix)		\<br />
+	do {								\<br />
+		bool __cond = !(condition);				\<br />
+		extern void prefix ## suffix(void) __compiletime_error(msg); \<br />
+		if (__cond)						\<br />
+			prefix ## suffix();				\<br />
+		__compiletime_error_fallback(__cond);			\<br />
+	} while (0)<br />
+<br />
+#define _compiletime_assert(condition, msg, prefix, suffix) \<br />
+	__compiletime_assert(condition, msg, prefix, suffix)<br />
+<br />
+/**<br />
+ * compiletime_assert - break build and emit msg if condition is false<br />
+ * @condition: a compile-time constant condition to check<br />
+ * @msg:       a message to emit if condition is false<br />
+ *<br />
+ * In tradition of POSIX assert, this macro will break the build if the<br />
+ * supplied condition is *false*, emitting the supplied error message if the<br />
+ * compiler has support to do so.<br />
+ */<br />
+#define compiletime_assert(condition, msg) \<br />
+	_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)<br />
+<br />
 /*<br />
  * Prevent the compiler from merging or refetching accesses.  The compiler<br />
  * is also forbidden from reordering successive instances of ACCESS_ONCE(),<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:01:01 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720562#msg-1720562</guid>
            <title>[PATCH v7 4/9] compiler{,-gcc4}.h, bug.h: Remove duplicate macros</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720562#msg-1720562</link>
            <description><![CDATA[ __linktime_error() does the same thing as __compiletime_error() and is<br />
only used in bug.h.  Since the macro defines a function attribute that<br />
will cause a failure at compile-time (not link-time), it makes more<br />
sense to keep __compiletime_error(), which is also neatly mated with<br />
__compiletime_warning().<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
Acked-by: David Rientjes &lt;rientjes@google.com&gt;<br />
Acked-by: Borislav Petkov &lt;bp@alien8.de&gt;<br />
---<br />
 include/linux/bug.h           |    2 +-<br />
 include/linux/compiler-gcc4.h |    2 --<br />
 include/linux/compiler.h      |    3 ---<br />
 3 files changed, 1 insertions(+), 6 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index b1cf40d..2a11774 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -74,7 +74,7 @@ extern int __build_bug_on_failed;<br />
 #define BUILD_BUG()						\<br />
 	do {							\<br />
 		extern void __build_bug_failed(void)		\<br />
-			__linktime_error(&quot;BUILD_BUG failed&quot;);	\<br />
+			__compiletime_error(&quot;BUILD_BUG failed&quot;);\<br />
 		__build_bug_failed();				\<br />
 	} while (0)<br />
 <br />
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h<br />
index a9ffdfe..68b162d 100644<br />
--- a/include/linux/compiler-gcc4.h<br />
+++ b/include/linux/compiler-gcc4.h<br />
@@ -33,8 +33,6 @@<br />
    the kernel context */<br />
 #define __cold			__attribute__((__cold__))<br />
 <br />
-#define __linktime_error(message) __attribute__((__error__(message)))<br />
-<br />
 #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)<br />
 <br />
 #ifndef __CHECKER__<br />
diff --git a/include/linux/compiler.h b/include/linux/compiler.h<br />
index dd852b7..4c638be 100644<br />
--- a/include/linux/compiler.h<br />
+++ b/include/linux/compiler.h<br />
@@ -308,9 +308,6 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);<br />
 #ifndef __compiletime_error<br />
 # define __compiletime_error(message)<br />
 #endif<br />
-#ifndef __linktime_error<br />
-# define __linktime_error(message)<br />
-#endif<br />
 /*<br />
  * Prevent the compiler from merging or refetching accesses.  The compiler<br />
  * is also forbidden from reordering successive instances of ACCESS_ONCE(),<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:00:54 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1720561,1720561#msg-1720561</guid>
            <title>[PATCH] p54pci: don't return zero on failure path in p54p_probe()</title>
            <link>http://choon.net/forum/read.php?21,1720561,1720561#msg-1720561</link>
            <description><![CDATA[ If pci_set_dma_mask() or pci_set_consistent_dma_mask() fails in p54p_probe(),<br />
it breaks off initialization, deallocates all resources, but returns zero.<br />
<br />
The patch implements proper error code propagation.<br />
<br />
Found by Linux Driver Verification project (linuxtesting.org).<br />
<br />
Signed-off-by: Alexey Khoroshilov &lt;khoroshilov@ispras.ru&gt;<br />
---<br />
 drivers/net/wireless/p54/p54pci.c |    6 ++++--<br />
 1 file changed, 4 insertions(+), 2 deletions(-)<br />
<br />
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c<br />
index 933e5d9..fef69ea 100644<br />
--- a/drivers/net/wireless/p54/p54pci.c<br />
+++ b/drivers/net/wireless/p54/p54pci.c<br />
@@ -568,8 +568,10 @@ static int p54p_probe(struct pci_dev *pdev,<br />
 		goto err_disable_dev;<br />
 	}<br />
 <br />
-	if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) ||<br />
-	    pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {<br />
+	err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));<br />
+	if (!err)<br />
+		err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));<br />
+	if (err) {<br />
 		dev_err(&amp;pdev-&gt;dev, &quot;No suitable DMA available\n&quot;);<br />
 		goto err_free_reg;<br />
 	}<br />
-- <br />
1.7.9.5<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Alexey Khoroshilov</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:00:48 +0800</pubDate>
        </item>
        <item>
            <guid>http://choon.net/forum/read.php?21,1419946,1720560#msg-1720560</guid>
            <title>[PATCH v7 8/9] compiler.h, bug.h: Prevent double error messages with BUILD_BUG{,_ON}</title>
            <link>http://choon.net/forum/read.php?21,1419946,1720560#msg-1720560</link>
            <description><![CDATA[ Prior to the introduction of __attribute__((error(&quot;msg&quot;))) in gcc 4.3,<br />
creating compile-time errors required a little trickery.<br />
BUILD_BUG{,_ON} uses this attribute when available to generate<br />
compile-time errors, but also uses the negative-sized array trick for<br />
older compilers, resulting in two error messages in some cases.  The<br />
reason it's &quot;some&quot; cases is that as of gcc 4.4, the negative-sized array<br />
will not create an error in some situations, like inline functions.<br />
<br />
This patch replaces the negative-sized array code with the new<br />
__compiletime_error_fallback() macro which expands to the same thing<br />
unless the the error attribute is available, in which case it expands to<br />
do{}while(0), resulting in exactly one compile-time error on all<br />
versions of gcc.<br />
<br />
Note that we are not changing the negative-sized array code for the<br />
unoptimized version of BUILD_BUG_ON, since it has the potential to catch<br />
problems that would be disabled in later versions of gcc were<br />
__compiletime_error_fallback used.  The reason is that that an<br />
unoptimized build can't always remove calls to an error-attributed<br />
function call (like we are using) that should effectively become dead<br />
code if it were optimized.  However, using a negative-sized array with a<br />
similar value will not result in an false-positive (error). The only<br />
caveat being that it will also fail to catch valid conditions, which we<br />
should be expecting in an unoptimized build anyway.<br />
<br />
Signed-off-by: Daniel Santos &lt;daniel.santos@pobox.com&gt;<br />
---<br />
 include/linux/bug.h      |    2 +-<br />
 include/linux/compiler.h |    5 +++++<br />
 2 files changed, 6 insertions(+), 1 deletions(-)<br />
<br />
diff --git a/include/linux/bug.h b/include/linux/bug.h<br />
index 08d97e9..57c7688 100644<br />
--- a/include/linux/bug.h<br />
+++ b/include/linux/bug.h<br />
@@ -67,7 +67,7 @@ struct pt_regs;<br />
 			__compiletime_error(&quot;BUILD_BUG_ON failed&quot;);	\<br />
 		if (__cond)						\<br />
 			__build_bug_on_failed();			\<br />
-		((void)sizeof(char[1 - 2 * __cond]));			\<br />
+		__compiletime_error_fallback(__cond);			\<br />
 	} while(0)<br />
 #endif<br />
 <br />
diff --git a/include/linux/compiler.h b/include/linux/compiler.h<br />
index 4c638be..423bb6b 100644<br />
--- a/include/linux/compiler.h<br />
+++ b/include/linux/compiler.h<br />
@@ -307,7 +307,12 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);<br />
 #endif<br />
 #ifndef __compiletime_error<br />
 # define __compiletime_error(message)<br />
+# define __compiletime_error_fallback(condition) \<br />
+	do { ((void)sizeof(char[1 - 2*!!(condition)])); } while (0)<br />
+#else<br />
+# define __compiletime_error_fallback(condition) do { } while (0)<br />
 #endif<br />
+<br />
 /*<br />
  * Prevent the compiler from merging or refetching accesses.  The compiler<br />
  * is also forbidden from reordering successive instances of ACCESS_ONCE(),<br />
-- <br />
1.7.8.6<br />
<br />
--<br />
To unsubscribe from this list: send the line &quot;unsubscribe linux-kernel&quot; in<br />
the body of a message to <a href="mailto:&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;">&#109;&#97;&#106;&#111;&#114;&#100;&#111;&#109;&#111;&#64;&#118;&#103;&#101;&#114;&#46;&#107;&#101;&#114;&#110;&#101;&#108;&#46;&#111;&#114;&#103;</a><br />
More majordomo info at  [<a href="http://vger.kernel.org/majordomo-info.html"  rel="nofollow">vger.kernel.org</a>]<br />
Please read the FAQ at  [<a href="http://www.tux.org/lkml/"  rel="nofollow">www.tux.org</a>]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Linux Kernel</category>
            <pubDate>Wed, 02 Jan 2013 09:00:48 +0800</pubDate>
        </item>
    </channel>
</rss>
