Why is text_mutex used in jump_label_transform for x86_64

From: chengjian (D)
Date: Thu Mar 19 2020 - 09:49:24 EST


Hiïeveryone

I'm sorry to disturb you. I have a problem about jump_label, and a bit confused about the code

I noticed that text_mutex is used in this function under x86_64 architecture,
but other architectures do not.

in arch/x86/kernel/jump_label.c
ÂÂÂÂÂÂÂ static void __ref jump_label_transform(struct jump_entry *entry,
ÂÂÂÂÂÂÂÂÂÂÂÂ enum jump_label_type type,
ÂÂÂÂÂÂÂÂÂÂÂÂ int init)
ÂÂÂÂÂÂÂ {
ÂÂÂÂÂÂÂÂ mutex_lock(&text_mutex);
ÂÂÂÂÂÂÂÂ __jump_label_transform(entry, type, init);
ÂÂÂÂÂÂÂÂ mutex_unlock(&text_mutex);

in arch/arm64/kernel/jump_label.c

ÂÂÂÂÂÂÂ void arch_jump_label_transform(struct jump_entry *entry,
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ enum jump_label_type type)
ÂÂÂÂÂÂÂ {
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ void *addr = (void *)jump_entry_code(entry);
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 insn;

ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ if (type == JUMP_LABEL_JMP) {
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ insn = aarch64_insn_gen_branch_imm(jump_entry_code(entry),
jump_entry_target(entry),
AARCH64_INSN_BRANCH_NOLINK);
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ } else {
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ insn = aarch64_insn_gen_nop();
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ }

ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ aarch64_insn_patch_text_nosync(addr, insn);
ÂÂÂÂÂÂÂ }


Is there anything wrong with x86

or

is this missing for other architectures?


Thanks

---- Cheng Jian