From: Matt Mackall <mpm@selenic.com>
To: linux-kernel <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@osdl.org>
Cc: Pete Zaitcev <zaitcev@redhat.com>
Subject: [patch] arch-specific cond_syscall usage issues
Date: Fri, 9 Jan 2004 21:29:15 -0600 [thread overview]
Message-ID: <20040110032915.GW18208@waste.org> (raw)
Experimenting with trying to use cond_syscall for a few arch-specific
syscalls, I discovered that it can't actually be used outside the file
in which sys_ni_syscall is declared because the assembler doesn't feel
obliged to output the symbol in that case:
weak.c:
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
cond_syscall(sys_foo);
$ nm weak.o
U sys_ni_syscall
One arch (PPC) is apparently trying to use cond_syscall this way
anyway, though it's probably never been actually tested as the above
test was done on a PPC.
After trying a bunch of tricks to get it to work nicely, I decided
there are basically two alternatives: make weak versions of
sys_ni_syscall wherever they're wanted or put the arch-specific
cond_syscalls in kernel/sys.c where sys_ni_syscall is defined.
The former approach is a bit crufty and doesn't actually do the right
thing in practice as you'll get multiple copies of sys_ni_syscall in
your final image.
The latter introduces some slight arch-pollution in sys.c, but as
arch-specific cond_syscalls aren't all that frequent, it should be
pretty minor. So here's a patch to move the current offender to sys.c:
tiny-mpm/arch/ppc/kernel/syscalls.c | 2 --
tiny-mpm/kernel/sys.c | 3 +++
2 files changed, 3 insertions(+), 2 deletions(-)
diff -puN arch/ppc/kernel/syscalls.c~ppc_cond_syscall arch/ppc/kernel/syscalls.c
--- tiny/arch/ppc/kernel/syscalls.c~ppc_cond_syscall 2004-01-09 21:15:02.000000000 -0600
+++ tiny-mpm/arch/ppc/kernel/syscalls.c 2004-01-09 21:15:08.000000000 -0600
@@ -271,5 +271,3 @@ long ppc_fadvise64_64(int fd, int advice
{
return sys_fadvise64_64(fd, offset, len, advice);
}
-
-cond_syscall(sys_pciconfig_iobase);
diff -puN kernel/sys.c~ppc_cond_syscall kernel/sys.c
--- tiny/kernel/sys.c~ppc_cond_syscall 2004-01-09 21:15:02.000000000 -0600
+++ tiny-mpm/kernel/sys.c 2004-01-09 21:15:02.000000000 -0600
@@ -252,6 +252,9 @@ cond_syscall(sys_epoll_wait)
cond_syscall(sys_pciconfig_read)
cond_syscall(sys_pciconfig_write)
+/* arch-specific weak syscall entries */
+cond_syscall(sys_pciconfig_iobase)
+
static int set_one_prio(struct task_struct *p, int niceval, int error)
{
int no_nice;
_
--
Matt Mackall : http://www.selenic.com : Linux development and consulting
next reply other threads:[~2004-01-10 3:29 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-10 3:29 Matt Mackall [this message]
2004-01-10 3:37 ` [patch] arch-specific cond_syscall usage issues Andrew Morton
2004-01-10 3:53 ` Matt Mackall
2004-01-10 5:21 ` Pete Zaitcev
2004-01-10 6:03 ` Matt Mackall
2004-01-14 16:13 ` Tom Rini
2004-01-14 19:31 ` Andrew Morton
2004-01-14 19:47 ` Matt Mackall
2004-01-14 19:49 ` Tom Rini
2004-04-23 19:14 ` [PATCH 2.6] include/asm-ppc/dma-mapping.h: dma_unmap_page() Arthur Othieno
2004-04-23 23:50 ` Tom Rini
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=20040110032915.GW18208@waste.org \
--to=mpm@selenic.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=zaitcev@redhat.com \
/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.