From: jsoe0708@tiscali.be
To: "Randolph Chung" <randolph@tausq.org>
Cc: parisc-linux@lists.parisc-linux.org
Subject: [parisc-linux] uaccess ya patch
Date: Tue, 26 Nov 2002 11:05:17 +0100 [thread overview]
Message-ID: <3DAAAD46000048D6@ocpmta1.be.tiscali.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 4524 bytes --]
Hi Randolph,
Much more for info, here is another way I found to implement __put_?_asm64.
--- uaccess.h.orig 2002-11-26 10:11:56.000000000 +0100
+++ uaccess.h 2002-11-26 09:58:08.000000000 +0100
@@ -28,6 +28,11 @@
* that put_user is the same as __put_user, etc.
*/
+extern int __get_kernel_bad(void);
+extern int __get_user_bad(void);
+extern int __put_kernel_bad(void);
+extern int __put_user_bad(void);
+
#define access_ok(type,addr,size) (1)
#define verify_area(type,addr,size) (0)
@@ -35,8 +40,12 @@
#define get_user __get_user
#if BITS_PER_LONG == 32
-#define LDD_KERNEL(ptr) BUG()
-#define LDD_USER(ptr) BUG()
+#define LDD_KERNEL(ptr) __get_kernel_bad();
+#define LDD_USER(ptr) __get_user_bad();
+/*
+#define STD_KERNEL(x, ptr) __put_kernel_bad();
+#define STD_USER(x, ptr) __put_user_bad();
+*/
#define STD_KERNEL(x, ptr) __put_kernel_asm64(x,ptr)
#define STD_USER(x, ptr) __put_user_asm64(x,ptr)
#else
@@ -75,7 +84,7 @@
case 2: __get_kernel_asm("ldh",ptr); break; \
case 4: __get_kernel_asm("ldw",ptr); break; \
case 8: LDD_KERNEL(ptr); break; \
- default: BUG(); break; \
+ default: __get_kernel_bad(); break; \
} \
} \
else { \
@@ -84,7 +93,7 @@
case 2: __get_user_asm("ldh",ptr); break; \
case 4: __get_user_asm("ldw",ptr); break; \
case 8: LDD_USER(ptr); break; \
- default: BUG(); break; \
+ default: __get_user_bad(); break; \
} \
} \
\
@@ -144,7 +153,7 @@
case 2: __put_kernel_asm("sth",x,ptr); break; \
case 4: __put_kernel_asm("stw",x,ptr); break; \
case 8: STD_KERNEL(x,ptr); break; \
- default: BUG(); break; \
+ default: __put_kernel_bad(); break; \
} \
} \
else { \
@@ -153,7 +162,7 @@
case 2: __put_user_asm("sth",x,ptr); break; \
case 4: __put_user_asm("stw",x,ptr); break; \
case 8: STD_USER(x,ptr); break; \
- default: BUG(); break; \
+ default: __put_user_bad(); break; \
} \
} \
\
@@ -211,45 +220,36 @@
: "=r"(__pu_err) \
: "r"(ptr), "r"(x), "0"(__pu_err))
-static inline void __put_kernel_asm64(u64 x, void *ptr)
-{
- u32 hi = x>>32;
- u32 lo = x&0xffffffff;
- __asm__ __volatile__ (
- "\n1:\tstw %1,0(%0)\n"
- "\n2:\tstw %2,4(%0)\n"
- "3:\n"
- "\t.section __ex_table,\"a\"\n"
- "\t.word\t1b\n"
- "\t.word\t(3b-1b)+1\n"
- "\t.word\t2b\n"
- "\t.word\t(3b-2b)+1\n"
- "\t.previous"
- : : "r"(ptr), "r"(hi), "r"(lo));
-
-}
-
-static inline void __put_user_asm64(u64 x, void *ptr)
-{
- u32 hi = x>>32;
- u32 lo = x&0xffffffff;
- __asm__ __volatile__ (
- "\n1:\tstw %1,0(%%sr3,%0)\n"
- "\n2:\tstw %2,4(%%sr3,%0)\n"
- "3:\n"
- "\t.section __ex_table,\"a\"\n"
- "\t.word\t1b\n"
- "\t.word\t(3b-1b)+1\n"
- "\t.word\t2b\n"
- "\t.word\t(3b-2b)+1\n"
- "\t.previous"
- : : "r"(ptr), "r"(hi), "r"(lo));
+#define __put_kernel_asm64(x, ptr) \
+ __asm__ __volatile__ ( \
+ "\n1:\tstw\t%2,0(%1)\n" \
+ "2:\tstw\t%R2,4(%1)\n" \
+ "3:\n" \
+ "\t.section __ex_table,\"a\"\n" \
+ "\t.word\t1b\n" \
+ "\t.word\t(3b-1b)+1\n" \
+ "\t.word\t2b\n" \
+ "\t.word\t(3b-2b)+1\n" \
+ "\t.previous" \
+ : "=r"(__pu_err) \
+ : "r"(ptr), "r"(x), "0"(__pu_err))
-}
+#define __put_user_asm64(x, ptr) \
+ __asm__ __volatile__ ( \
+ "\n1:\tstw\t%2,0(%%sr3,%1)\n" \
+ "2:\tstw\t%R2,4(%%sr3,%1)\n" \
+ "3:\n" \
+ "\t.section __ex_table,\"a\"\n" \
+ "\t.word\t1b\n" \
+ "\t.word\t(3b-1b)+1\n" \
+ "\t.word\t2b\n" \
+ "\t.word\t(3b-2b)+1\n" \
+ "\t.previous" \
+ : "=r"(__pu_err) \
+ : "r"(ptr), "r"(x), "0"(__pu_err))
#endif
-
/*
* Complex access routines -- external declarations
*/
Cheers,
Joel
********************************************************************************
Controlez mieux votre consommation Internet...surfez Tiscali Complete...http://tiscali.complete.be
[-- Attachment #2: pa-uaccess_h.txt --]
[-- Type: text/plain, Size: 4232 bytes --]
--- uaccess.h.orig 2002-11-26 10:11:56.000000000 +0100
+++ uaccess.h 2002-11-26 09:58:08.000000000 +0100
@@ -28,6 +28,11 @@
* that put_user is the same as __put_user, etc.
*/
+extern int __get_kernel_bad(void);
+extern int __get_user_bad(void);
+extern int __put_kernel_bad(void);
+extern int __put_user_bad(void);
+
#define access_ok(type,addr,size) (1)
#define verify_area(type,addr,size) (0)
@@ -35,8 +40,12 @@
#define get_user __get_user
#if BITS_PER_LONG == 32
-#define LDD_KERNEL(ptr) BUG()
-#define LDD_USER(ptr) BUG()
+#define LDD_KERNEL(ptr) __get_kernel_bad();
+#define LDD_USER(ptr) __get_user_bad();
+/*
+#define STD_KERNEL(x, ptr) __put_kernel_bad();
+#define STD_USER(x, ptr) __put_user_bad();
+*/
#define STD_KERNEL(x, ptr) __put_kernel_asm64(x,ptr)
#define STD_USER(x, ptr) __put_user_asm64(x,ptr)
#else
@@ -75,7 +84,7 @@
case 2: __get_kernel_asm("ldh",ptr); break; \
case 4: __get_kernel_asm("ldw",ptr); break; \
case 8: LDD_KERNEL(ptr); break; \
- default: BUG(); break; \
+ default: __get_kernel_bad(); break; \
} \
} \
else { \
@@ -84,7 +93,7 @@
case 2: __get_user_asm("ldh",ptr); break; \
case 4: __get_user_asm("ldw",ptr); break; \
case 8: LDD_USER(ptr); break; \
- default: BUG(); break; \
+ default: __get_user_bad(); break; \
} \
} \
\
@@ -144,7 +153,7 @@
case 2: __put_kernel_asm("sth",x,ptr); break; \
case 4: __put_kernel_asm("stw",x,ptr); break; \
case 8: STD_KERNEL(x,ptr); break; \
- default: BUG(); break; \
+ default: __put_kernel_bad(); break; \
} \
} \
else { \
@@ -153,7 +162,7 @@
case 2: __put_user_asm("sth",x,ptr); break; \
case 4: __put_user_asm("stw",x,ptr); break; \
case 8: STD_USER(x,ptr); break; \
- default: BUG(); break; \
+ default: __put_user_bad(); break; \
} \
} \
\
@@ -211,45 +220,36 @@
: "=r"(__pu_err) \
: "r"(ptr), "r"(x), "0"(__pu_err))
-static inline void __put_kernel_asm64(u64 x, void *ptr)
-{
- u32 hi = x>>32;
- u32 lo = x&0xffffffff;
- __asm__ __volatile__ (
- "\n1:\tstw %1,0(%0)\n"
- "\n2:\tstw %2,4(%0)\n"
- "3:\n"
- "\t.section __ex_table,\"a\"\n"
- "\t.word\t1b\n"
- "\t.word\t(3b-1b)+1\n"
- "\t.word\t2b\n"
- "\t.word\t(3b-2b)+1\n"
- "\t.previous"
- : : "r"(ptr), "r"(hi), "r"(lo));
-
-}
-
-static inline void __put_user_asm64(u64 x, void *ptr)
-{
- u32 hi = x>>32;
- u32 lo = x&0xffffffff;
- __asm__ __volatile__ (
- "\n1:\tstw %1,0(%%sr3,%0)\n"
- "\n2:\tstw %2,4(%%sr3,%0)\n"
- "3:\n"
- "\t.section __ex_table,\"a\"\n"
- "\t.word\t1b\n"
- "\t.word\t(3b-1b)+1\n"
- "\t.word\t2b\n"
- "\t.word\t(3b-2b)+1\n"
- "\t.previous"
- : : "r"(ptr), "r"(hi), "r"(lo));
+#define __put_kernel_asm64(x, ptr) \
+ __asm__ __volatile__ ( \
+ "\n1:\tstw\t%2,0(%1)\n" \
+ "2:\tstw\t%R2,4(%1)\n" \
+ "3:\n" \
+ "\t.section __ex_table,\"a\"\n" \
+ "\t.word\t1b\n" \
+ "\t.word\t(3b-1b)+1\n" \
+ "\t.word\t2b\n" \
+ "\t.word\t(3b-2b)+1\n" \
+ "\t.previous" \
+ : "=r"(__pu_err) \
+ : "r"(ptr), "r"(x), "0"(__pu_err))
-}
+#define __put_user_asm64(x, ptr) \
+ __asm__ __volatile__ ( \
+ "\n1:\tstw\t%2,0(%%sr3,%1)\n" \
+ "2:\tstw\t%R2,4(%%sr3,%1)\n" \
+ "3:\n" \
+ "\t.section __ex_table,\"a\"\n" \
+ "\t.word\t1b\n" \
+ "\t.word\t(3b-1b)+1\n" \
+ "\t.word\t2b\n" \
+ "\t.word\t(3b-2b)+1\n" \
+ "\t.previous" \
+ : "=r"(__pu_err) \
+ : "r"(ptr), "r"(x), "0"(__pu_err))
#endif
-
/*
* Complex access routines -- external declarations
*/
next reply other threads:[~2002-11-26 10:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-26 10:05 jsoe0708 [this message]
2002-11-26 16:29 ` [parisc-linux] Re: uaccess ya patch Randolph Chung
2002-11-26 17:02 ` jsoe0708
2002-11-26 17:22 ` Randolph Chung
2002-11-26 17:31 ` John David Anglin
2002-11-26 18:44 ` Randolph Chung
2002-11-26 18:56 ` John David Anglin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3DAAAD46000048D6@ocpmta1.be.tiscali.com \
--to=jsoe0708@tiscali.be \
--cc=parisc-linux@lists.parisc-linux.org \
--cc=randolph@tausq.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.