Files
android_kernel_xiaomi_sm8450/arch/powerpc/include/asm
Kevin Hao 4db7327194 powerpc: Add option to use jump label for cpu_has_feature()
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: Kevin Hao <haokexin@gmail.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2016-08-01 11:15:05 +10:00
..
2016-01-12 20:46:53 +02:00
2015-07-13 10:10:54 +10:00
2013-04-18 13:03:53 +10:00
2015-05-28 15:31:53 +02:00
2016-06-21 15:30:56 +10:00
2014-04-09 12:53:28 +10:00
2012-03-28 18:30:02 +01:00
2011-11-08 14:51:46 +11:00
2014-06-25 18:49:40 -05:00
2015-01-12 05:04:13 -08:00
2015-02-03 18:47:18 +01:00
2016-03-04 23:50:27 -06:00
2014-11-03 12:12:32 +11:00
2016-03-01 19:27:20 +11:00
2016-03-01 19:27:20 +11:00
2016-07-21 18:55:54 +10:00
2015-02-23 14:52:04 +11:00
2015-10-06 14:52:48 -04:00
2016-01-15 17:56:32 -08:00
2013-12-09 11:40:25 +11:00
2016-07-09 01:43:50 -05:00
2016-07-19 20:17:07 +10:00
2016-05-11 21:53:49 +10:00
2016-06-14 13:58:26 +10:00
2016-06-21 15:30:56 +10:00
2016-06-14 13:58:26 +10:00
2016-06-14 13:58:26 +10:00
2016-08-01 11:15:03 +10:00
2013-11-06 14:13:49 +11:00
2012-09-17 16:31:51 +10:00
2016-07-21 18:51:42 +10:00
2016-06-14 13:58:26 +10:00
2014-02-17 11:19:37 +11:00
2015-05-05 13:35:39 -06:00
2016-07-17 16:42:45 +10:00