Commit 4735037b authored by chenmiao's avatar chenmiao Committed by Stafford Horne
Browse files

openrisc: Add text patching API support

Add text patching api's to use in subsequent jump_label implementation.  We use
a new fixmap FIX_TEXT_POKE0 entry to temporarily override MMU mappings to allow
read only text pages to be written to.

Previously, __set_fix was marked with __init as it was only used during the
EARLYCON stage. Now that TEXT_POKE mappings require post-init usage
(e.g., FIX_TEXT_POKE0), keeping __init would cause runtime bugs whenset_fixmap
accesses invalid memory. Thus, we remove the __init flag to ensure __set_fix
remains valid beyond initialization.

A new function patch_insn_write is exposed to allow single instruction patching.

Link: https://lore.kernel.org/openrisc/aJIC8o1WmVHol9RY@antec/T/#t



Signed-off-by: default avatarchenmiao <chenmiao.ku@gmail.com>
Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
parent 76eeb9b8
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -9,4 +9,3 @@ generic-y += spinlock.h
generic-y += qrwlock_types.h
generic-y += qrwlock.h
generic-y += user.h
generic-y += text-patching.h
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@

enum fixed_addresses {
	FIX_EARLYCON_MEM_BASE,
	FIX_TEXT_POKE0,
	__end_of_fixed_addresses
};

+12 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2025 Chen Miao
 */

#ifndef __ASM_OPENRISC_INSN_DEF_H
#define __ASM_OPENRISC_INSN_DEF_H

/* or1k instructions are always 32 bits. */
#define	OPENRISC_INSN_SIZE		4

#endif /* __ASM_OPENRISC_INSN_DEF_H */
+13 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2025 Chen Miao
 */

#ifndef _ASM_OPENRISC_PATCHING_H
#define _ASM_OPENRISC_PATCHING_H

#include <linux/types.h>

int patch_insn_write(void *addr, u32 insn);

#endif /* _ASM_OPENRISC_PATCHING_H */
+1 −0
Original line number Diff line number Diff line
@@ -13,5 +13,6 @@ obj-$(CONFIG_SMP) += smp.o sync-timer.o
obj-$(CONFIG_STACKTRACE)	+= stacktrace.o
obj-$(CONFIG_MODULES)		+= module.o
obj-$(CONFIG_OF)		+= prom.o
obj-y	+= patching.o

clean:
Loading