s390/jump_label: make use of HAVE_JUMP_LABEL_BATCH
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 4 Oct 2021 10:02:35 +0000 (12:02 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 11 Oct 2021 18:55:58 +0000 (20:55 +0200)
Specify HAVE_JUMP_LABEL_BATCH in header file. This allows to make use
of the arch_jump_label_transform_queue()/arch_jump_label_transform_apply()
mechanism.

However unlike on x86, which currently is the only user of this
mechanism, the to be patched instructions are still directly
modified. The only difference to before is that serialization is only
done after all instructions have been modified. This way the number of
serialization/synchronization events is reduced.

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/jump_label.h
arch/s390/kernel/jump_label.c

index dcb1bba4f40639ee29a2ebdbd6df756d29ef23e6..916cfcb36d8ac91278a3f11b6de0624f0ce911ed 100644 (file)
@@ -2,6 +2,8 @@
 #ifndef _ASM_S390_JUMP_LABEL_H
 #define _ASM_S390_JUMP_LABEL_H
 
+#define HAVE_JUMP_LABEL_BATCH
+
 #ifndef __ASSEMBLY__
 
 #include <linux/types.h>
index 1e245da821977996fd97ab5c513296f966572824..edefb40f172b188ecb29947cd7bc54bb6c782009 100644 (file)
@@ -79,8 +79,21 @@ void arch_jump_label_transform(struct jump_entry *entry,
        text_poke_sync();
 }
 
+bool arch_jump_label_transform_queue(struct jump_entry *entry,
+                                    enum jump_label_type type)
+{
+       __jump_label_transform(entry, type, 0);
+       return true;
+}
+
+void arch_jump_label_transform_apply(void)
+{
+       text_poke_sync();
+}
+
 void arch_jump_label_transform_static(struct jump_entry *entry,
                                      enum jump_label_type type)
 {
        __jump_label_transform(entry, type, 1);
+       text_poke_sync();
 }