Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5593eaa854d0b23c3b270933a93b9b82946df729
Commit:     5593eaa854d0b23c3b270933a93b9b82946df729
Parent:     9aa3909c0ea33da41755e15182fa4f88ae036d83
Author:     H. Peter Anvin <[EMAIL PROTECTED]>
AuthorDate: Sat Jul 14 16:47:13 2007 -0700
Committer:  H. Peter Anvin <[EMAIL PROTECTED]>
CommitDate: Wed Jul 18 11:36:17 2007 -0700

    [x86 setup] Fix assembly constraints
    
    Fix incorrect assembly constraints.  In particular, fix memory
    constraints used inside push..pop, which can cause invalid operation
    since gcc may generate %esp-relative references.
    
    Additionally:
    
    outl() should have "dN" not "dn".
    
    query_mca() shouldn't listen 16/32-bit registers in an 8-bit only
    context.
    
    has_eflag(): the "mask" is only used well after both the stack pointer
    and the output registers have been touched; this requires the output
    registers to be earlyclobbers (=&) and the input to exclude memory (so
    "ri", not "g").
    
    Thanks to Etienne Lorrain and Chuck Ebbert for prompting this review.
    
    Cc: Etienne Lorrain <[EMAIL PROTECTED]>
    Cc: Chuck Ebbert <[EMAIL PROTECTED]>
    Signed-off-by: H. Peter Anvin <[EMAIL PROTECTED]>
---
 arch/i386/boot/boot.h     |    2 +-
 arch/i386/boot/cpucheck.c |    4 ++--
 arch/i386/boot/mca.c      |    2 +-
 arch/i386/boot/pm.c       |    2 +-
 arch/i386/boot/video.c    |    2 +-
 arch/i386/boot/voyager.c  |    2 +-
 6 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/i386/boot/boot.h b/arch/i386/boot/boot.h
index 0329c4f..dec70c9 100644
--- a/arch/i386/boot/boot.h
+++ b/arch/i386/boot/boot.h
@@ -56,7 +56,7 @@ static inline u16 inw(u16 port)
 
 static inline void outl(u32 v, u16 port)
 {
-       asm volatile("outl %0,%1" : : "a" (v), "dn" (port));
+       asm volatile("outl %0,%1" : : "a" (v), "dN" (port));
 }
 static inline u32 inl(u32 port)
 {
diff --git a/arch/i386/boot/cpucheck.c b/arch/i386/boot/cpucheck.c
index 8b0f447..991e8ce 100644
--- a/arch/i386/boot/cpucheck.c
+++ b/arch/i386/boot/cpucheck.c
@@ -115,8 +115,8 @@ static int has_eflag(u32 mask)
            "pushfl ; "
            "popl %1 ; "
            "popfl"
-           : "=r" (f0), "=r" (f1)
-           : "g" (mask));
+           : "=&r" (f0), "=&r" (f1)
+           : "ri" (mask));
 
        return !!((f0^f1) & mask);
 }
diff --git a/arch/i386/boot/mca.c b/arch/i386/boot/mca.c
index 9b68bd1..68222f2 100644
--- a/arch/i386/boot/mca.c
+++ b/arch/i386/boot/mca.c
@@ -26,7 +26,7 @@ int query_mca(void)
            "setc %0 ; "
            "movw %%es, %1 ; "
            "popw %%es"
-           : "=acdSDm" (err), "=acdSDm" (es), "=b" (bx)
+           : "=acd" (err), "=acdSD" (es), "=b" (bx)
            : "a" (0xc000));
 
        if (err)
diff --git a/arch/i386/boot/pm.c b/arch/i386/boot/pm.c
index 3fa53e1..1df025c 100644
--- a/arch/i386/boot/pm.c
+++ b/arch/i386/boot/pm.c
@@ -65,7 +65,7 @@ static void move_kernel_around(void)
                             "popw %%ds ; "
                             "popw %%es"
                             : "+c" (dwords)
-                            : "rm" (dst_seg), "rm" (src_seg)
+                            : "r" (dst_seg), "r" (src_seg)
                             : "esi", "edi");
 
                syssize -= paras;
diff --git a/arch/i386/boot/video.c b/arch/i386/boot/video.c
index 3bb3573..027a2c9 100644
--- a/arch/i386/boot/video.c
+++ b/arch/i386/boot/video.c
@@ -411,7 +411,7 @@ static void restore_screen(void)
                             "1: rep;stosl ; "
                             "popw %%es"
                             : "+D" (dst), "+c" (npad)
-                            : "bdSm" (video_segment),
+                            : "bdS" (video_segment),
                               "a" (0x07200720));
        }
 
diff --git a/arch/i386/boot/voyager.c b/arch/i386/boot/voyager.c
index 9221614..61c8fe0 100644
--- a/arch/i386/boot/voyager.c
+++ b/arch/i386/boot/voyager.c
@@ -32,7 +32,7 @@ int query_voyager(void)
            "setc %0 ; "
            "movw %%es, %1 ; "
            "popw %%es"
-           : "=qm" (err), "=rm" (es), "=D" (di)
+           : "=q" (err), "=r" (es), "=D" (di)
            : "a" (0xffc0));
 
        if (err)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to