summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChangqing Li <changqing.li@windriver.com>2024-09-03 12:52:47 +0800
committerArmin Kuster <akuster808@gmail.com>2024-09-09 15:15:27 -0400
commite5c0a0be96eb549858a987b353263c877eae275e (patch)
tree8b390bf8c1f8675ba46773370a5f76f4b5079089
parent1d85f631925812cc146b5e9aa5a49bd2d4080539 (diff)
downloadmeta-openembedded-e5c0a0be96eb549858a987b353263c877eae275e.tar.gz
mariadb: fix runtime failure on riscv
Starting with Linux 6.6, RDCYCLE is a privileged instruction on RISC-V and can't be used directly from userland. This causes 'systemctl start mysqld.service' failed with error: [ 1456.918172] mariadbd[12115]: unhandled signal 4 code 0x1 at 0x000055558689d134 in mariadbd[555585bfa000+14a7000] [ 1456.921772] CPU: 1 PID: 12115 Comm: mariadbd Not tainted 6.6.43-yocto-standard #1 [ 1456.922327] Hardware name: riscv-virtio,qemu (DT) [ 1456.923045] epc : 000055558689d134 ra : 000055558620ea48 sp : 00007fffdc487770 [ 1456.923525] gp : 00005555872ec400 tp : 00007fff89560780 t0 : 0000555587be32e8 [ 1456.923951] t1 : 0000555586886042 t2 : 000000002d6a89f0 s0 : 00007fffdc4877b0 Signed-off-by: Changqing Li <changqing.li@windriver.com> Signed-off-by: Armin Kuster <akuster808@gmail.com>
-rw-r--r--meta-oe/recipes-dbs/mysql/mariadb.inc1
-rw-r--r--meta-oe/recipes-dbs/mysql/mariadb/0001-RISC-V-use-RDTIME-instead-of-RDCYCLE.patch66
2 files changed, 67 insertions, 0 deletions
diff --git a/meta-oe/recipes-dbs/mysql/mariadb.inc b/meta-oe/recipes-dbs/mysql/mariadb.inc
index 33da32fb28..124a49ff96 100644
--- a/meta-oe/recipes-dbs/mysql/mariadb.inc
+++ b/meta-oe/recipes-dbs/mysql/mariadb.inc
@@ -25,6 +25,7 @@ SRC_URI = "https://archive.mariadb.org/${BP}/source/${BP}.tar.gz \
25 file://0001-Add-missing-includes-cstdint-and-cstdio.patch \ 25 file://0001-Add-missing-includes-cstdint-and-cstdio.patch \
26 file://0001-Remove-the-compile_time_assert-lines.patch \ 26 file://0001-Remove-the-compile_time_assert-lines.patch \
27 file://0001-MDEV-33439-Fix-build-with-libxml2-2.12.patch \ 27 file://0001-MDEV-33439-Fix-build-with-libxml2-2.12.patch \
28 file://0001-RISC-V-use-RDTIME-instead-of-RDCYCLE.patch \
28 " 29 "
29SRC_URI:append:libc-musl = " file://ppc-remove-glibc-dep.patch" 30SRC_URI:append:libc-musl = " file://ppc-remove-glibc-dep.patch"
30SRC_URI[sha256sum] = "5239a245ed90517e96396605cd01ccd8f73cd7442d1b3076b6ffe258110e5157" 31SRC_URI[sha256sum] = "5239a245ed90517e96396605cd01ccd8f73cd7442d1b3076b6ffe258110e5157"
diff --git a/meta-oe/recipes-dbs/mysql/mariadb/0001-RISC-V-use-RDTIME-instead-of-RDCYCLE.patch b/meta-oe/recipes-dbs/mysql/mariadb/0001-RISC-V-use-RDTIME-instead-of-RDCYCLE.patch
new file mode 100644
index 0000000000..25a2c399cc
--- /dev/null
+++ b/meta-oe/recipes-dbs/mysql/mariadb/0001-RISC-V-use-RDTIME-instead-of-RDCYCLE.patch
@@ -0,0 +1,66 @@
1From 342f0dd9b4f9fc49dcb589cd98933ea330de55d8 Mon Sep 17 00:00:00 2001
2From: Aurelien Jarno <aurelien@aurel32.net>
3Date: Thu, 4 Jan 2024 11:30:34 +0100
4Subject: [PATCH] RISC-V: use RDTIME instead of RDCYCLE
5
6Starting with Linux 6.6 [1], RDCYCLE is a privileged instruction on
7RISC-V and can't be used directly from userland. There is a sysctl
8option to change that as a transition period, but it will eventually
9disappear.
10
11Use RDTIME instead, which while less accurate has the advantage of being
12synchronized between CPU (and thus monotonic) and of constant frequency.
13
14[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc4c07c89aada16229084eeb93895c95b7eabaa3
15
16Upstream-Status: Backport [https://github.com/MariaDB/server/commit/656f8867720efc1b4dd0969319f35a3e1a2a005e]
17Signed-off-by: Changqing Li <changqing.li@windriver.com>
18---
19 include/my_rdtsc.h | 12 ++++++------
20 1 file changed, 6 insertions(+), 6 deletions(-)
21
22diff --git a/include/my_rdtsc.h b/include/my_rdtsc.h
23index 8b9b0046bc0..21e44847d9a 100644
24--- a/include/my_rdtsc.h
25+++ b/include/my_rdtsc.h
26@@ -111,7 +111,7 @@ C_MODE_START
27 On AARCH64, we use the generic timer base register. We override clang
28 implementation for aarch64 as it access a PMU register which is not
29 guaranteed to be active.
30- On RISC-V, we use the rdcycle instruction to read from mcycle register.
31+ On RISC-V, we use the rdtime instruction to read from mtime register.
32
33 Sadly, we have nothing for the Digital Alpha, MIPS, Motorola m68k,
34 HP PA-RISC or other non-mainstream (or obsolete) processors.
35@@ -211,15 +211,15 @@ static inline ulonglong my_timer_cycles(void)
36 }
37 #elif defined(__riscv)
38 #define MY_TIMER_ROUTINE_CYCLES MY_TIMER_ROUTINE_RISCV
39- /* Use RDCYCLE (and RDCYCLEH on riscv32) */
40+ /* Use RDTIME (and RDTIMEH on riscv32) */
41 {
42 # if __riscv_xlen == 32
43 ulong result_lo, result_hi0, result_hi1;
44 /* Implemented in assembly because Clang insisted on branching. */
45 __asm __volatile__(
46- "rdcycleh %0\n"
47- "rdcycle %1\n"
48- "rdcycleh %2\n"
49+ "rdtimeh %0\n"
50+ "rdtime %1\n"
51+ "rdtimeh %2\n"
52 "sub %0, %0, %2\n"
53 "seqz %0, %0\n"
54 "sub %0, zero, %0\n"
55@@ -228,7 +228,7 @@ static inline ulonglong my_timer_cycles(void)
56 return (static_cast<ulonglong>(result_hi1) << 32) | result_lo;
57 # else
58 ulonglong result;
59- __asm __volatile__("rdcycle %0" : "=r"(result));
60+ __asm __volatile__("rdtime %0" : "=r"(result));
61 return result;
62 }
63 # endif
64--
652.25.1
66