Linux Audio

Check our new training course

Loading...
v5.14.15
 1// SPDX-License-Identifier: GPL-2.0-only
 2/*
 3 * Copyright (C) 2013 Huawei Ltd.
 4 * Author: Jiang Liu <liuj97@gmail.com>
 5 *
 6 * Based on arch/arm/kernel/jump_label.c
 7 */
 8#include <linux/kernel.h>
 9#include <linux/jump_label.h>
10#include <asm/insn.h>
11#include <asm/patching.h>
12
13void arch_jump_label_transform(struct jump_entry *entry,
14			       enum jump_label_type type)
15{
16	void *addr = (void *)jump_entry_code(entry);
17	u32 insn;
18
19	if (type == JUMP_LABEL_JMP) {
20		insn = aarch64_insn_gen_branch_imm(jump_entry_code(entry),
21						   jump_entry_target(entry),
22						   AARCH64_INSN_BRANCH_NOLINK);
23	} else {
24		insn = aarch64_insn_gen_nop();
25	}
26
27	aarch64_insn_patch_text_nosync(addr, insn);
28}
29
30void arch_jump_label_transform_static(struct jump_entry *entry,
31				      enum jump_label_type type)
32{
33	/*
34	 * We use the architected A64 NOP in arch_static_branch, so there's no
35	 * need to patch an identical A64 NOP over the top of it here. The core
36	 * will call arch_jump_label_transform from a module notifier if the
37	 * NOP needs to be replaced by a branch.
38	 */
39}
v5.4
 1// SPDX-License-Identifier: GPL-2.0-only
 2/*
 3 * Copyright (C) 2013 Huawei Ltd.
 4 * Author: Jiang Liu <liuj97@gmail.com>
 5 *
 6 * Based on arch/arm/kernel/jump_label.c
 7 */
 8#include <linux/kernel.h>
 9#include <linux/jump_label.h>
10#include <asm/insn.h>
 
11
12void arch_jump_label_transform(struct jump_entry *entry,
13			       enum jump_label_type type)
14{
15	void *addr = (void *)jump_entry_code(entry);
16	u32 insn;
17
18	if (type == JUMP_LABEL_JMP) {
19		insn = aarch64_insn_gen_branch_imm(jump_entry_code(entry),
20						   jump_entry_target(entry),
21						   AARCH64_INSN_BRANCH_NOLINK);
22	} else {
23		insn = aarch64_insn_gen_nop();
24	}
25
26	aarch64_insn_patch_text_nosync(addr, insn);
27}
28
29void arch_jump_label_transform_static(struct jump_entry *entry,
30				      enum jump_label_type type)
31{
32	/*
33	 * We use the architected A64 NOP in arch_static_branch, so there's no
34	 * need to patch an identical A64 NOP over the top of it here. The core
35	 * will call arch_jump_label_transform from a module notifier if the
36	 * NOP needs to be replaced by a branch.
37	 */
38}