All of lore.kernel.org
 help / color / mirror / Atom feed
From: "David S. Miller" <davem@redhat.com>
To: Andrew Morton <akpm@osdl.org>
Cc: arnd@arndb.de, arun.sharma@intel.com, linux-arch@vger.kernel.org
Subject: Re: sys getdents64 needs compat wrapper ?
Date: Sat, 5 Jun 2004 12:31:50 -0700	[thread overview]
Message-ID: <20040605123150.562eda8e.davem@redhat.com> (raw)
In-Reply-To: <20040605114113.13926473.akpm@osdl.org>

On Sat, 5 Jun 2004 11:41:13 -0700
Andrew Morton <akpm@osdl.org> wrote:

> Easier to read, yes.  But __put_user() is faster.  It's a single
> instruction!

It emits a lot of fixup code though, multiply that by the number of
struct members you're copying over and over the entire kernel it begins
to be a non-trivial amount of .text space.

Actually, even the main part is 2 instructions on Sparc.  One to
do the load/store and one to clear the return value to zero for
success.

It would be much better to have a generic way on each platform to
operate on a series of user structure members like this is so
that the code output looks like:

	load/store	[%ptr + 0], %reg0	! struct foo->a
	load/store	[%ptr + 4], %reg1	! struct foo->b
	load/store	[%ptr + 8], %reg2	! struct foo->c
	clr		%retval
exception_label:

That is the optimal solution for these things.  Because right now
we get code like:

	load/store	[%ptr + 0], %reg0	! struct foo->a
	clr		%retval
exception_label1:
	cmp		%retval, 0
	bne		fault_path
	load/store	[%ptr + 4], %reg1	! struct foo->b
	clr		%retval
exception_label2:
	cmp		%retval, 0
	bne		fault_path
	load/store	[%ptr + 8], %reg2	! struct foo->c
	clr		%retval
exception_label3:

But the optimization is terribly hard to do generic, and the
register availability for such tricks is very platform dependent.

  reply	other threads:[~2004-06-05 19:34 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-05 14:52 =?iso-8859-1?Q?Re:_Re:_Re:_sys_getdents64_needs_compat_wrapper_??= Arnd Bergmann
2004-06-05 18:41 ` sys getdents64 needs compat wrapper ? Andrew Morton
2004-06-05 19:31   ` David S. Miller [this message]
  -- strict thread matches above, loose matches on Subject: below --
2004-05-20 21:06 =?iso-8859-1?Q?Re:_sys_getdents64_needs_compat_wrapper_??= Arnd Bergmann
2004-06-05  0:16 ` =?iso-8859-1?Q?Re:_sys_getdents64_needs_compat_wrapper_??= Arun Sharma
2004-06-05  0:28   ` sys getdents64 needs compat wrapper ? David S. Miller
2004-06-07 21:13     ` Arun Sharma
2004-06-07 21:58       ` David S. Miller
2004-06-11 15:09       ` Arnd Bergmann
2004-06-14 18:15         ` Arun Sharma
2004-06-17 22:28           ` Arun Sharma
2004-06-17 23:36             ` Arnd Bergmann
2004-06-18  0:56               ` Arun Sharma
2004-06-18 17:05                 ` Arun Sharma
2004-06-20 21:50                   ` Arnd Bergmann
2004-06-22 18:21                     ` Arun Sharma
2004-05-20 18:32 sys_getdents64 " Arun Sharma
2004-05-20 20:58 ` David S. Miller

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=20040605123150.562eda8e.davem@redhat.com \
    --to=davem@redhat.com \
    --cc=akpm@osdl.org \
    --cc=arnd@arndb.de \
    --cc=arun.sharma@intel.com \
    --cc=linux-arch@vger.kernel.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.