These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / s390 / include / asm / jump_label.h
index 69972b7..7f9fd5e 100644 (file)
  * We use a brcl 0,2 instruction for jump labels at compile time so it
  * can be easily distinguished from a hotpatch generated instruction.
  */
-static __always_inline bool arch_static_branch(struct static_key *key)
+static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
 {
        asm_volatile_goto("0:   brcl 0,"__stringify(JUMP_LABEL_NOP_OFFSET)"\n"
                ".pushsection __jump_table, \"aw\"\n"
                ".balign 8\n"
                ".quad 0b, %l[label], %0\n"
                ".popsection\n"
-               : : "X" (key) : : label);
+               : : "X" (&((char *)key)[branch]) : : label);
+
+       return false;
+label:
+       return true;
+}
+
+static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
+{
+       asm_volatile_goto("0:   brcl 15, %l[label]\n"
+               ".pushsection __jump_table, \"aw\"\n"
+               ".balign 8\n"
+               ".quad 0b, %l[label], %0\n"
+               ".popsection\n"
+               : : "X" (&((char *)key)[branch]) : : label);
+
        return false;
 label:
        return true;