mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 21:26:49 +00:00
RPi: add proposed upstream linux patch to fix ftrace on boot
see http://lists.infradead.org/pipermail/linux-rpi-kernel/2017-August/006884.html Signed-off-by: Matthias Reichl <hias@horus.com>
This commit is contained in:
parent
f5c0594957
commit
b15ebbc9ea
57
projects/RPi/patches/linux/linux-06-fix-ftrace-on-boot.patch
Normal file
57
projects/RPi/patches/linux/linux-06-fix-ftrace-on-boot.patch
Normal file
@ -0,0 +1,57 @@
|
||||
On Wed, 23 Aug 2017 17:42:14 +0200
|
||||
Matthias Reichl <hias@horus.com> wrote:
|
||||
|
||||
> I haven't verified it myself but Phil Elwells first analysis here
|
||||
> sounds plausible
|
||||
>
|
||||
> https://github.com/raspberrypi/linux/issues/2166#issuecomment-323355145
|
||||
|
||||
I noticed this comment:
|
||||
|
||||
"What makes this interesting (and is the reason this doesn't fail
|
||||
normally) is that these functions are all called within kernel_init, so
|
||||
the __ro_after_init attribute shouldn't have caused the variable to be
|
||||
read-only yet."
|
||||
|
||||
When ftrace starts, it needs to set the kernel text to write, and when
|
||||
it finishes it sets it back to readonly. But the kernel is not set to
|
||||
readonly at boot up.
|
||||
|
||||
Can you test this patch? (Warning, I didn't even compile test it)
|
||||
|
||||
-- Steve
|
||||
|
||||
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
|
||||
index ad80548..fd75f38 100644
|
||||
--- a/arch/arm/mm/init.c
|
||||
+++ b/arch/arm/mm/init.c
|
||||
@@ -745,19 +745,29 @@ static int __mark_rodata_ro(void *unused)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int kernel_set_to_readonly;
|
||||
+
|
||||
void mark_rodata_ro(void)
|
||||
{
|
||||
+ kernel_set_to_readonly = 1;
|
||||
+
|
||||
stop_machine(__mark_rodata_ro, NULL, NULL);
|
||||
}
|
||||
|
||||
void set_kernel_text_rw(void)
|
||||
{
|
||||
+ if (!kernel_set_to_readonly)
|
||||
+ return;
|
||||
+
|
||||
set_section_perms(ro_perms, ARRAY_SIZE(ro_perms), false,
|
||||
current->active_mm);
|
||||
}
|
||||
|
||||
void set_kernel_text_ro(void)
|
||||
{
|
||||
+ if (!kernel_set_to_readonly)
|
||||
+ return;
|
||||
+
|
||||
set_section_perms(ro_perms, ARRAY_SIZE(ro_perms), true,
|
||||
current->active_mm);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user