* [uml-devel] Removing call to function pointer in inner loop of copy_from_user()
@ 2005-05-15 18:44 Blaisorblade
2005-05-16 15:00 ` Jeff Dike
0 siblings, 1 reply; 5+ messages in thread
From: Blaisorblade @ 2005-05-15 18:44 UTC (permalink / raw)
To: Jeff Dike, Bodo Stroesser; +Cc: user-mode-linux-devel
copy_from_user() loops, in SKAS mode, calls do_op inside the inner loop; do_op
acts on 4k at once, so with modern pipelines, the potential cost of the
function call can be very big.
Beyond that, we also call setjmp_wrapper, which simply puts a sigjmp_buf on
the stack.
Wouldn't the code be cleaner if we rip that out, together with the va_arg()
calls, and do everything inside do_buffer_op? Doh, those are from userspace
headers. However it looks they would be includable from kernel code (no
reference to kernel headers), by adding them at the end of the include search
path.
Also, could I then turn it into a macro taking a param, and then inline the
do_op calls (which are very little ones), or at least turn them into normal
calls (i.e. faster ones). I feel like the resulting code could even be
cleaner to read. Yes, more wasted space, but I think we win in the trade-off.
What's your opinion? I'm ready to work on this.
--
Paolo Giarrusso, aka Blaisorblade
Skype user "PaoloGiarrusso"
Linux registered user n. 292729
http://www.user-mode-linux.org/~blaisorblade
-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [uml-devel] Removing call to function pointer in inner loop of copy_from_user()
2005-05-15 18:44 [uml-devel] Removing call to function pointer in inner loop of copy_from_user() Blaisorblade
@ 2005-05-16 15:00 ` Jeff Dike
2005-05-16 17:04 ` Blaisorblade
0 siblings, 1 reply; 5+ messages in thread
From: Jeff Dike @ 2005-05-16 15:00 UTC (permalink / raw)
To: Blaisorblade; +Cc: Bodo Stroesser, user-mode-linux-devel
On Sun, May 15, 2005 at 08:44:44PM +0200, Blaisorblade wrote:
> copy_from_user() loops, in SKAS mode, calls do_op inside the inner loop; do_op
> acts on 4k at once, so with modern pipelines, the potential cost of the
> function call can be very big.
>
> Beyond that, we also call setjmp_wrapper, which simply puts a sigjmp_buf on
> the stack.
>
> Wouldn't the code be cleaner if we rip that out, together with the va_arg()
> calls, and do everything inside do_buffer_op? Doh, those are from userspace
> headers. However it looks they would be includable from kernel code (no
> reference to kernel headers), by adding them at the end of the include search
> path.
> What's your opinion? I'm ready to work on this.
I was unhappy about adding the setjmp there, but it turns out that the
kernel data might not be present and so can segfault. So, when that happens,
we need to get out of there and return an error, and the way that's done is
by the page fault handler longjmping back out.
If you can think of a better way to do it, go ahead.
Jeff
-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [uml-devel] Removing call to function pointer in inner loop of copy_from_user()
2005-05-16 15:00 ` Jeff Dike
@ 2005-05-16 17:04 ` Blaisorblade
2005-05-16 18:48 ` Jeff Dike
0 siblings, 1 reply; 5+ messages in thread
From: Blaisorblade @ 2005-05-16 17:04 UTC (permalink / raw)
To: user-mode-linux-devel; +Cc: Jeff Dike, Bodo Stroesser
On Monday 16 May 2005 17:00, Jeff Dike wrote:
> On Sun, May 15, 2005 at 08:44:44PM +0200, Blaisorblade wrote:
> > copy_from_user() loops, in SKAS mode, calls do_op inside the inner loop;
> > do_op acts on 4k at once, so with modern pipelines, the potential cost of
> > the function call can be very big.
> > Beyond that, we also call setjmp_wrapper, which simply puts a sigjmp_buf
> > on the stack.
> > Wouldn't the code be cleaner if we rip that out, together with the
> > va_arg() calls, and do everything inside do_buffer_op? Doh, those are
> > from userspace headers. However it looks they would be includable from
> > kernel code (no reference to kernel headers), by adding them at the end
> > of the include search path.
> > What's your opinion? I'm ready to work on this.
> I was unhappy about adding the setjmp there, but it turns out that the
> kernel data might not be present and so can segfault. So, when that
> happens, we need to get out of there and return an error, and the way
> that's done is by the page fault handler longjmping back out.
Yes, I remember it, I worked with you on diagnosing the /dev/kmem crash.
> If you can think of a better way to do it, go ahead.
I could move maybe move sigsetjmp to kernelspace code; however, another
possibility would be to use the exception handler tables we've always
supported without using them (only drawback is that the code *must* be
inlined, and possibly the need for some assembler code, which however is
probably avoidable).
--
Paolo Giarrusso, aka Blaisorblade
Skype user "PaoloGiarrusso"
Linux registered user n. 292729
http://www.user-mode-linux.org/~blaisorblade
-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [uml-devel] Removing call to function pointer in inner loop of copy_from_user()
2005-05-16 17:04 ` Blaisorblade
@ 2005-05-16 18:48 ` Jeff Dike
2005-05-16 21:27 ` Blaisorblade
0 siblings, 1 reply; 5+ messages in thread
From: Jeff Dike @ 2005-05-16 18:48 UTC (permalink / raw)
To: Blaisorblade; +Cc: user-mode-linux-devel, Bodo Stroesser
On Mon, May 16, 2005 at 07:04:13PM +0200, Blaisorblade wrote:
> I could move maybe move sigsetjmp to kernelspace code;
How are you going to get a definition of jmp_buf in there?
> however, another
> possibility would be to use the exception handler tables we've always
> supported without using them (only drawback is that the code *must* be
> inlined, and possibly the need for some assembler code, which however is
> probably avoidable).
Maybe. That's worth looking in to. I've used the setjmp scheme in preference
to that because it's portable, but maybe we should switch back in some places.
Jeff
-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [uml-devel] Removing call to function pointer in inner loop of copy_from_user()
2005-05-16 18:48 ` Jeff Dike
@ 2005-05-16 21:27 ` Blaisorblade
0 siblings, 0 replies; 5+ messages in thread
From: Blaisorblade @ 2005-05-16 21:27 UTC (permalink / raw)
To: user-mode-linux-devel; +Cc: Jeff Dike, Bodo Stroesser
On Monday 16 May 2005 20:48, Jeff Dike wrote:
> On Mon, May 16, 2005 at 07:04:13PM +0200, Blaisorblade wrote:
> > I could move maybe move sigsetjmp to kernelspace code;
>
> How are you going to get a definition of jmp_buf in there?
I actually want to include the headers. Not that I would refuse to copy
verbatim from headers (binary compatibility allows that to work as long we
use the same host OS / libc combination).
> > however, another
> > possibility would be to use the exception handler tables we've always
> > supported without using them (only drawback is that the code *must* be
> > inlined, and possibly the need for some assembler code, which however is
> > probably avoidable).
> Maybe. That's worth looking in to. I've used the setjmp scheme in
> preference to that because it's portable, but maybe we should switch back
> in some places.
Yes, more portable but slightly slower. Also, if you get the compiler to
inline the code anyway, you only write pseudo-ops in assembler, so that's no
problem.
--
Paolo Giarrusso, aka Blaisorblade
Skype user "PaoloGiarrusso"
Linux registered user n. 292729
http://www.user-mode-linux.org/~blaisorblade
-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-05-16 22:04 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-15 18:44 [uml-devel] Removing call to function pointer in inner loop of copy_from_user() Blaisorblade
2005-05-16 15:00 ` Jeff Dike
2005-05-16 17:04 ` Blaisorblade
2005-05-16 18:48 ` Jeff Dike
2005-05-16 21:27 ` Blaisorblade
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.