From: Anton Blanchard <anton@samba.org>
To: Andrew Morton <akpm@osdl.org>
Cc: torvalds@osdl.org, pj@sgi.com, ak@muc.de, linux-arch@vger.kernel.org
Subject: Re: [PATCH] [ppc64] Fix compat cpu affinity on big endian 64bit
Date: Wed, 8 Sep 2004 15:34:29 +1000 [thread overview]
Message-ID: <20040908053429.GH25278@krispykreme> (raw)
In-Reply-To: <20040907222250.62bc6ff9.akpm@osdl.org>
> umm, wanna send along a patch which defines BITS_PER_COMPAT_LONG?
Yep, did you get the first in the series? Its hiding at the bottom.
Anton
--
Date: Wed, 8 Sep 2004 10:33:59 +1000
From: Anton Blanchard <anton@samba.org>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Paul Jackson <pj@sgi.com>, ak@muc.de,
Andrew Morton <akpm@osdl.org>,
Linux Arch list <linux-arch@vger.kernel.org>
Subject: [PATCH] [ppc64] compat_get_bitmap/compat_put_bitmap
Signed-off-by: Anton Blanchard <anton@samba.org>
diff -puN kernel/compat.c~compat_bitmap kernel/compat.c
--- gr_work/kernel/compat.c~compat_bitmap 2004-09-04 00:56:24.297280051 -0500
+++ gr_work-anton/kernel/compat.c 2004-09-04 00:56:24.313277511 -0500
@@ -590,3 +590,83 @@ long compat_clock_nanosleep(clockid_t wh
/* timer_create is architecture specific because it needs sigevent conversion */
+long compat_get_bitmap(unsigned long *mask, compat_ulong_t __user *umask,
+ unsigned long bitmap_size)
+{
+ int i, j;
+ unsigned long m;
+ compat_ulong_t um;
+ unsigned long nr_compat_longs;
+
+ /* align bitmap up to nearest compat_long_t boundary */
+ bitmap_size = ALIGN(bitmap_size, BITS_PER_COMPAT_LONG);
+
+ if (verify_area(VERIFY_READ, umask, bitmap_size / 8))
+ return -EFAULT;
+
+ nr_compat_longs = BITS_TO_COMPAT_LONGS(bitmap_size);
+
+ for (i = 0; i < BITS_TO_LONGS(bitmap_size); i++) {
+ m = 0;
+
+ for (j = 0; j < sizeof(m)/sizeof(um); j++) {
+ /*
+ * We dont want to read past the end of the userspace
+ * bitmap. We must however ensure the end of the
+ * kernel bitmap is zeroed.
+ */
+ if (nr_compat_longs-- > 0) {
+ if (__get_user(um, umask))
+ return -EFAULT;
+ } else {
+ um = 0;
+ }
+
+ umask++;
+ m |= (long)um << (j * BITS_PER_COMPAT_LONG);
+ }
+ *mask++ = m;
+ }
+
+ return 0;
+}
+
+long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask,
+ unsigned long bitmap_size)
+{
+ int i, j;
+ unsigned long m;
+ compat_ulong_t um;
+ unsigned long nr_compat_longs;
+
+ /* align bitmap up to nearest compat_long_t boundary */
+ bitmap_size = ALIGN(bitmap_size, BITS_PER_COMPAT_LONG);
+
+ if (verify_area(VERIFY_WRITE, umask, bitmap_size / 8))
+ return -EFAULT;
+
+ nr_compat_longs = BITS_TO_COMPAT_LONGS(bitmap_size);
+
+ for (i = 0; i < BITS_TO_LONGS(bitmap_size); i++) {
+ m = *mask++;
+
+ for (j = 0; j < sizeof(m)/sizeof(um); j++) {
+ um = m;
+
+ /*
+ * We dont want to write past the end of the userspace
+ * bitmap.
+ */
+ if (nr_compat_longs-- > 0) {
+ if (__put_user(um, umask))
+ return -EFAULT;
+ }
+
+ umask++;
+ m >>= 4*sizeof(um);
+ m >>= 4*sizeof(um);
+ }
+ }
+
+ return 0;
+}
diff -puN include/linux/compat.h~compat_bitmap include/linux/compat.h
--- gr_work/include/linux/compat.h~compat_bitmap 2004-09-04 00:56:24.302279257 -0500
+++ gr_work-anton/include/linux/compat.h 2004-09-04 00:56:24.314277352 -0500
@@ -132,5 +132,15 @@ asmlinkage long compat_sys_select(int n,
compat_ulong_t __user *outp, compat_ulong_t __user *exp,
struct compat_timeval __user *tvp);
+#define BITS_PER_COMPAT_LONG (8*sizeof(compat_long_t))
+
+#define BITS_TO_COMPAT_LONGS(bits) \
+ (((bits)+BITS_PER_COMPAT_LONG-1)/BITS_PER_COMPAT_LONG)
+
+long compat_get_bitmap(unsigned long *mask, compat_ulong_t __user *umask,
+ unsigned long bitmap_size);
+long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask,
+ unsigned long bitmap_size);
+
#endif /* CONFIG_COMPAT */
#endif /* _LINUX_COMPAT_H */
_
next prev parent reply other threads:[~2004-09-08 5:35 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20040831183655.58d784a3.pj@sgi.com>
[not found] ` <20040904133701.GE33964@muc.de>
[not found] ` <20040904171417.67649169.pj@sgi.com>
[not found] ` <Pine.LNX.4.58.0409041717230.4735@ppc970.osdl.org>
[not found] ` <20040904180548.2dcdd488.pj@sgi.com>
[not found] ` <Pine.LNX.4.58.0409041827280.2331@ppc970.osdl.org>
[not found] ` <20040904204850.48b7cfbd.pj@sgi.com>
[not found] ` <Pine.LNX.4.58.0409042055460.2331@ppc970.osdl.org>
[not found] ` <20040904211749.3f713a8a.pj@sgi.com>
[not found] ` <20040904215205.0a067ab8.pj@sgi.com>
[not found] ` <20040906182330.GA79122@muc.de>
[not found] ` <Pine.LNX.4.58.0409061147220.28608@ppc970.osdl.org>
[not found] ` <20040906141142.663941fb.pj@sgi.com>
2004-09-07 14:40 ` [PATCH] Fix argument checking in sched_setaffinity Linus Torvalds
2004-09-07 14:48 ` Geert Uytterhoeven
2004-09-07 14:49 ` Andi Kleen
2004-09-07 21:44 ` Ralf Baechle
2004-09-07 22:55 ` Paul Jackson
2004-09-08 6:58 ` Andi Kleen
2004-09-08 7:26 ` Paul Jackson
2004-09-08 0:26 ` Anton Blanchard
2004-09-07 14:50 ` Matthew Wilcox
2004-09-08 0:24 ` Anton Blanchard
2004-09-08 0:33 ` [PATCH] [ppc64] compat_get_bitmap/compat_put_bitmap Anton Blanchard
2004-09-08 0:40 ` [PATCH] [ppc64] Fix compat cpu affinity on big endian 64bit Anton Blanchard
2004-09-08 0:43 ` [PATCH] [ppc64] Fix compat NUMA API " Anton Blanchard
2004-09-08 5:22 ` [PATCH] [ppc64] Fix compat cpu affinity " Andrew Morton
2004-09-08 5:34 ` Anton Blanchard [this message]
2004-09-08 5:43 ` Andrew Morton
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=20040908053429.GH25278@krispykreme \
--to=anton@samba.org \
--cc=ak@muc.de \
--cc=akpm@osdl.org \
--cc=linux-arch@vger.kernel.org \
--cc=pj@sgi.com \
--cc=torvalds@osdl.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox