Messages in this thread | | | From | "Moffett, Kyle D" <> | Date | Tue, 15 Nov 2011 16:45:18 -0600 | Subject | Re: [RFC PATCH 0/2] powerpc: CPU cache op cleanup |
| |
On Nov 15, 2011, at 17:29, Benjamin Herrenschmidt wrote: > On Mon, 2011-11-14 at 21:32 -0500, Kyle Moffett wrote: >> Unfortunately, I've been staring at PPC asm for long enough that I >> have a migraine headache and I'm going to have to stop here for now. >> If somebody else wants to tackle fixing up the 32-bit copy_page() and >> __copy_tofrom_user() routines it would be highly appreciated. > > Yeah that's the one everybody's avoiding :-) > > What about my idea of instead compiling it multiple times with a > different size and fixing up the branch to call the right one ?
I guess that's doable, although I have to admit that idea almost gives me more of a headache than trying to fix up the 32-bit ASM.
One thing that bothers me in particular is that both 32/64 versions of __copy_tofrom_user() are dramatically overcomplicated for what they ought to be doing.
It would seem that if we get a page fault during an unaligned copy, we ought to just give up and fall back to a simple byte-by-byte copy loop from wherever we left off. That would eliminate 90% of the ugly special cases without actually hurting performance, right?
For a page-fault during a cacheline-aligned copy, we should be able to handle the exception and retry from the last cacheline without much logic, again with good performance.
With that said, I'm curious about the origin of the PPC32 ASM. In particular, it looks like it was generated by GCC at some point in the distant past, and I'm wondering if there's a good way to rewrite that file in C and trick GCC into generating the relevant exception tables for it?
Cheers, Kyle Moffett
-- Curious about my work on the Debian powerpcspe port? I'm keeping a blog here: http://pureperl.blogspot.com/
| |