Skip to content
  • Kevin Hao's avatar
    powerpc: Add option to use jump label for cpu_has_feature() · 4db73271
    Kevin Hao authored
    
    
    We do binary patching of asm code using CPU features, which is a
    one-time operation, done during early boot. However checks of CPU
    features in C code are currently done at run time, even though the set
    of CPU features can never change after boot.
    
    We can optimise this by using jump labels to implement cpu_has_feature(),
    meaning checks in C code are binary patched into a single nop or branch.
    
    For a C sequence along the lines of:
    
        if (cpu_has_feature(FOO))
             return 2;
    
    The generated code before is roughly:
    
        ld      r9,-27640(r2)
        ld      r9,0(r9)
        lwz     r9,32(r9)
        cmpwi   cr7,r9,0
        bge     cr7, 1f
        li      r3,2
        blr
    1:  ...
    
    After (true):
        nop
        li      r3,2
        blr
    
    After (false):
        b	1f
        li      r3,2
        blr
    1:  ...
    
    mpe: Rename MAX_CPU_FEATURES as we already have a #define with that
    name, and define it simply as a constant, rather than doing tricks with
    sizeof and NULL pointers. Rename the array to cpu_feature_keys. Use the
    kconfig we added to guard it. Add BUILD_BUG_ON() if the feature is not a
    compile time constant. Rewrite the change log.
    
    Signed-off-by: default avatarKevin Hao <haokexin@gmail.com>
    Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    4db73271