linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* Making __copy_tofrom_user more readable for powerpc (arch/powerpc/lib/copy_32.S)
@ 2008-07-10 23:44 prodyut hazarika
  2008-07-11  6:50 ` Michael Neuling
  2008-07-11  7:02 ` Arnd Bergmann
  0 siblings, 2 replies; 4+ messages in thread
From: prodyut hazarika @ 2008-07-10 23:44 UTC (permalink / raw)
  To: linuxppc-dev

Hi all,
I am trying to optimize the __copy_tofrom_user function for PPC4xx,
and I would want to know why the exception handling code has been made
so complicated. All the fixup code should do is to store the number of
bytes that failed in copy in r3 and return back.

The current code tries to copy one byte at a time after read fault. I
don't understand why that is necessary. It then clears out the
destination. All these logic has made the code very unfriendly to
read.

I have a version which just keeps a count of bytes copied till any
fault happened. Then for any exception, I just substract this value
from the total number of bytes to be copied, and store in r3 and
return back. This is the common fixup code for all paths. It makes the
fixup code much more readable like other architectures (eg. x86).

My questions are:
1) Why do we need to distinguish between load and store failure? If
either load or store fails, the copy did not go thru. But the code
sets r9 to 0 for load failure, and r9 to 1 for write failure. Why do
we need to care for that?

2) For read failure, why do we clear out the destination (lines 509 to
529 in arch/powerpc/lib/copy_32.S)? Other architecture don't do that.

I would appreciate any comments.

Thanks,
Prodyut

^ permalink raw reply	[flat|nested] 4+ messages in thread
* Making __copy_tofrom_user more readable for powerpc (arch/powerpc/lib/copy_32.S)
@ 2008-07-10 18:06 prodyut hazarika
  0 siblings, 0 replies; 4+ messages in thread
From: prodyut hazarika @ 2008-07-10 18:06 UTC (permalink / raw)
  To: linuxppc-dev

Hi all,
I am trying to optimize the __copy_tofrom_user function for PPC4xx,
and I would want to know why the exception handling code has been made
so complicated. All the fixup code should do is to store the number of
bytes that failed in copy in r3 and return back.

The current code tries to copy one byte at a time after read fault. I
don't understand why that is necessary. It then clears out the
destination. All these logic has made the code very unfriendly to
read.

I have a version which just keeps a count of bytes copied till any
fault happened. Then for any exception, I just substract this value
from the total number of bytes to be copied, and store in r3 and
return back. This is the common fixup code for all paths. It makes the
code much more readable like other architectures (eg. x86).

My questions are:
1) Why do we need to distinguish between load and store failure? If
either load or store fails, the copy did not go thru. But the code
sets r9 to 0 for load failure, and r9 to 1 for write failure. Why do
we need to care for that?

2) For read failure, why do we clear out the destination? Other
architecture don't do that.

I would appreciate any comments. I will submit my patch later.

Thanks,
Prodyut

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2008-07-11  7:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-10 23:44 Making __copy_tofrom_user more readable for powerpc (arch/powerpc/lib/copy_32.S) prodyut hazarika
2008-07-11  6:50 ` Michael Neuling
2008-07-11  7:02 ` Arnd Bergmann
  -- strict thread matches above, loose matches on Subject: below --
2008-07-10 18:06 prodyut hazarika

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).