[PATCH v4 02/21] powerpc/64s: move the last of the page fault handling logic to C
Nicholas Piggin
npiggin at gmail.com
Sun Jan 3 20:17:20 AEDT 2021
Excerpts from Christophe Leroy's message of January 3, 2021 3:56 am:
> Nicholas Piggin <npiggin at gmail.com> a écrit :
>
>> The page fault handling still has some complex logic particularly around
>> hash table handling, in asm. Implement this in C instead.
>
> Hi,
>
> I'm afk at the moment and unable to look at this in details before one
> week but this looks pretty complexe, especially the churn around
> ___do_page_fault
> Do we really need 3 layers of do_page_fault() ?
Actually it doesn't, patch 10 wants it. I can move it to there at least
which should make this a bit less churn.
It's convenient because lots of return paths in __do_page_fault, but I
could try convert that to a `goto out` style.
> I think it would likely be more straight forward to just move
> handle_page_fault() to C.
The hash fault stuff makes things work better this way. Perhaps if I can
get to the bottom of the context tracking in the hash fault (I think we
perhaps should avoid it), then it could go back to a common code path.
> There also seems to be some unrelated changes, like the (msr & MSR_PR)
> changed to user_mode(regs).
That's part of making it callable from asm and the radix vs hash
prototypes the same so there are no added complexity in the asm:
>> @@ -1439,13 +1440,17 @@ EXC_COMMON_BEGIN(data_access_common)
>> GEN_COMMON data_access
>> ld r4,_DAR(r1)
>> ld r5,_DSISR(r1)
>> + addi r3,r1,STACK_FRAME_OVERHEAD
>> BEGIN_MMU_FTR_SECTION
>> - ld r6,_MSR(r1)
>> - li r3,0x300
>> - b do_hash_page /* Try to handle as hpte fault */
>> + bl do_hash_fault
>> MMU_FTR_SECTION_ELSE
>> - b handle_page_fault
>> + bl do_page_fault
>> ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_TYPE_RADIX)
I'll see if anything can be done to move some such changes ahead.
Thanks,
Nick
More information about the Linuxppc-dev
mailing list