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