Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/kernel/jump_label.c
26451 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Copyright (C) 2013 Huawei Ltd.
4
* Author: Jiang Liu <[email protected]>
5
*
6
* Based on arch/arm/kernel/jump_label.c
7
*/
8
#include <linux/kernel.h>
9
#include <linux/jump_label.h>
10
#include <linux/smp.h>
11
#include <asm/insn.h>
12
#include <asm/text-patching.h>
13
14
bool arch_jump_label_transform_queue(struct jump_entry *entry,
15
enum jump_label_type type)
16
{
17
void *addr = (void *)jump_entry_code(entry);
18
u32 insn;
19
20
if (type == JUMP_LABEL_JMP) {
21
insn = aarch64_insn_gen_branch_imm(jump_entry_code(entry),
22
jump_entry_target(entry),
23
AARCH64_INSN_BRANCH_NOLINK);
24
} else {
25
insn = aarch64_insn_gen_nop();
26
}
27
28
aarch64_insn_patch_text_nosync(addr, insn);
29
return true;
30
}
31
32
void arch_jump_label_transform_apply(void)
33
{
34
kick_all_cpus_sync();
35
}
36
37