• Christophe Leroy's avatar
    powerpc/kuap: Simplify KUAP lock/unlock on BOOK3S/32 · 5222a1d5
    Christophe Leroy authored
    On book3s/32 KUAP is performed at segment level. At the moment,
    when enabling userspace access, only current segment is modified.
    Then if a write is performed on another user segment, a fault is
    taken and all other user segments get enabled for userspace
    access. This then require special attention when disabling
    userspace access.
    
    Having a userspace write access crossing a segment boundary is
    unlikely. Having a userspace write access crossing a segment boundary
    back and forth is even more unlikely. So, instead of enabling
    userspace access on all segments when a write fault occurs, just
    change which segment has userspace access enabled in order to
    eliminate the case when more than one segment has userspace access
    enabled. That simplifies userspace access deactivation.
    
    There is however a corner case which is even more unlikely but has
    to be handled anyway: an unaligned access which is crossing a
    segment boundary. That would definitely require at least having
    userspace access enabled on the two segments. To avoid complicating
    the likely case for a so unlikely happening, handle such situation
    like an alignment exception and emulate the store.
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/8de8580513c1a6e880bad1ba9a69d3efad3d4fa5.1689091022.git.christophe.leroy@csgroup.eu
    5222a1d5
bug.h 3.23 KB