1*4882a593SmuzhiyunFrom bee452dfa2a34ba7df7db677e5673cbdcd23f61e Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Petr Vorel <petr.vorel@gmail.com>
3*4882a593SmuzhiyunDate: Thu, 1 Oct 2020 23:28:39 +0200
4*4882a593SmuzhiyunSubject: [PATCH] lapi: Add sysinfo.h to fix build with MUSL libc
5*4882a593SmuzhiyunMIME-Version: 1.0
6*4882a593SmuzhiyunContent-Type: text/plain; charset=UTF-8
7*4882a593SmuzhiyunContent-Transfer-Encoding: 8bit
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunThe reason is to avoid indirect <linux/sysinfo.h> include when using
10*4882a593Smuzhiyunsome network headers: <linux/netlink.h> or others -> <linux/kernel.h>
11*4882a593Smuzhiyun-> <linux/sysinfo.h>
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunThis indirect include causes on MUSL redefinition of struct sysinfo when
14*4882a593Smuzhiyunincluded both <sys/sysinfo.h> and some of UAPI headers:
15*4882a593Smuzhiyun
16*4882a593SmuzhiyunIn file included from x86_64-buildroot-linux-musl/sysroot/usr/include/linux/kernel.h:5,
17*4882a593Smuzhiyun                 from x86_64-buildroot-linux-musl/sysroot/usr/include/linux/netlink.h:5,
18*4882a593Smuzhiyun                 from ../include/tst_netlink.h:14,
19*4882a593Smuzhiyun                 from tst_crypto.c:13:
20*4882a593Smuzhiyunx86_64-buildroot-linux-musl/sysroot/usr/include/linux/sysinfo.h:8:8: error: redefinition of ‘struct sysinfo’
21*4882a593Smuzhiyun struct sysinfo {
22*4882a593Smuzhiyun        ^~~~~~~
23*4882a593SmuzhiyunIn file included from ../include/tst_safe_macros.h:15,
24*4882a593Smuzhiyun                 from ../include/tst_test.h:93,
25*4882a593Smuzhiyun                 from tst_crypto.c:11:
26*4882a593Smuzhiyunx86_64-buildroot-linux-musl/sysroot/usr/include/sys/sysinfo.h:10:8: note: originally defined here
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunSigned-off-by: Petr Vorel <petr.vorel@gmail.com>
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun[ upstream status:
31*4882a593Smuzhiyunhttps://patchwork.ozlabs.org/project/ltp/patch/20201001231256.6930-1-petr.vorel@gmail.com/,
32*4882a593Smuzhiyunrebased for 20210927 ]
33*4882a593Smuzhiyun
34*4882a593SmuzhiyunBut this patch is not going to get upstreamed because it got fixed in Linux kernel:
35*4882a593Smuzhiyuna85cbe6159ff "uapi: move constants from <linux/kernel.h> to <linux/const.h>"
36*4882a593Smuzhiyun
37*4882a593SmuzhiyunThis patch was also backported to stable and LTS versions,
38*4882a593Smuzhiyunwhich we use since buildroot 54584d233b "{linux, linux-headers}: bump
39*4882a593Smuzhiyun5.{4, 10}.x 4.{4, 9, 14, 19} series".
40*4882a593SmuzhiyunWe just wait for all musl based toolchains to be rebuilt. ]
41*4882a593Smuzhiyun
42*4882a593SmuzhiyunSigned-off-by: Petr Vorel <petr.vorel@gmail.com>
43*4882a593Smuzhiyun---
44*4882a593Smuzhiyun include/lapi/sysinfo.h                        | 22 +++++++++++++++++++
45*4882a593Smuzhiyun include/tst_safe_macros.h                     |  2 +-
46*4882a593Smuzhiyun lib/safe_macros.c                             |  2 +-
47*4882a593Smuzhiyun lib/tst_memutils.c                            |  2 +-
48*4882a593Smuzhiyun testcases/kernel/mem/mtest01/mtest01.c        |  2 +-
49*4882a593Smuzhiyun testcases/kernel/syscalls/madvise/madvise06.c |  2 +-
50*4882a593Smuzhiyun testcases/kernel/syscalls/sysinfo/sysinfo01.c |  2 +-
51*4882a593Smuzhiyun testcases/kernel/syscalls/sysinfo/sysinfo02.c |  2 +-
52*4882a593Smuzhiyun testcases/kernel/syscalls/sysinfo/sysinfo03.c |  2 +-
53*4882a593Smuzhiyun .../interfaces/pthread_cond_broadcast/1-2.c   |  2 +-
54*4882a593Smuzhiyun 10 files changed, 31 insertions(+), 9 deletions(-)
55*4882a593Smuzhiyun create mode 100644 include/lapi/sysinfo.h
56*4882a593Smuzhiyun
57*4882a593Smuzhiyundiff --git a/include/lapi/sysinfo.h b/include/lapi/sysinfo.h
58*4882a593Smuzhiyunnew file mode 100644
59*4882a593Smuzhiyunindex 000000000..d0e0e93d7
60*4882a593Smuzhiyun--- /dev/null
61*4882a593Smuzhiyun+++ b/include/lapi/sysinfo.h
62*4882a593Smuzhiyun@@ -0,0 +1,22 @@
63*4882a593Smuzhiyun+// SPDX-License-Identifier: GPL-2.0-or-later
64*4882a593Smuzhiyun+/*
65*4882a593Smuzhiyun+ * Copyright (c) 2020 Petr Vorel <petr.vorel@gmail.com>
66*4882a593Smuzhiyun+ */
67*4882a593Smuzhiyun+
68*4882a593Smuzhiyun+#ifndef SYSINFO_H__
69*4882a593Smuzhiyun+
70*4882a593Smuzhiyun+/*
71*4882a593Smuzhiyun+ * Don't use <sys/sysinfo.h> as it breaks build MUSL toolchain.
72*4882a593Smuzhiyun+ * Use <linux/sysinfo.h> instead.
73*4882a593Smuzhiyun+ *
74*4882a593Smuzhiyun+ * Some kernel UAPI headers do indirect <linux/sysinfo.h> include:
75*4882a593Smuzhiyun+ * <linux/netlink.h> or others -> <linux/kernel.h> -> <linux/sysinfo.h>
76*4882a593Smuzhiyun+ *
77*4882a593Smuzhiyun+ * This indirect include causes on MUSL redefinition of struct sysinfo when
78*4882a593Smuzhiyun+ * included both <sys/sysinfo.h> and some of UAPI headers:
79*4882a593Smuzhiyun+ */
80*4882a593Smuzhiyun+#include <linux/sysinfo.h>
81*4882a593Smuzhiyun+
82*4882a593Smuzhiyun+#define SYSINFO_H__
83*4882a593Smuzhiyun+
84*4882a593Smuzhiyun+#endif /* SYSINFO_H__ */
85*4882a593Smuzhiyundiff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h
86*4882a593Smuzhiyunindex d99441c86..0d26e9d45 100644
87*4882a593Smuzhiyun--- a/include/tst_safe_macros.h
88*4882a593Smuzhiyun+++ b/include/tst_safe_macros.h
89*4882a593Smuzhiyun@@ -12,7 +12,7 @@
90*4882a593Smuzhiyun #include <sys/resource.h>
91*4882a593Smuzhiyun #include <sys/stat.h>
92*4882a593Smuzhiyun #include <sys/vfs.h>
93*4882a593Smuzhiyun-#include <sys/sysinfo.h>
94*4882a593Smuzhiyun+#include <linux/sysinfo.h>
95*4882a593Smuzhiyun #include <fcntl.h>
96*4882a593Smuzhiyun #include <libgen.h>
97*4882a593Smuzhiyun #include <signal.h>
98*4882a593Smuzhiyundiff --git a/lib/safe_macros.c b/lib/safe_macros.c
99*4882a593Smuzhiyunindex a5b6bc504..20d01d304 100644
100*4882a593Smuzhiyun--- a/lib/safe_macros.c
101*4882a593Smuzhiyun+++ b/lib/safe_macros.c
102*4882a593Smuzhiyun@@ -11,7 +11,6 @@
103*4882a593Smuzhiyun #include <sys/wait.h>
104*4882a593Smuzhiyun #include <sys/mount.h>
105*4882a593Smuzhiyun #include <sys/xattr.h>
106*4882a593Smuzhiyun-#include <sys/sysinfo.h>
107*4882a593Smuzhiyun #include <errno.h>
108*4882a593Smuzhiyun #include <fcntl.h>
109*4882a593Smuzhiyun #include <libgen.h>
110*4882a593Smuzhiyun@@ -23,6 +22,7 @@
111*4882a593Smuzhiyun #include <malloc.h>
112*4882a593Smuzhiyun #include "test.h"
113*4882a593Smuzhiyun #include "safe_macros.h"
114*4882a593Smuzhiyun+#include "lapi/sysinfo.h"
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun char *safe_basename(const char *file, const int lineno,
117*4882a593Smuzhiyun 		    void (*cleanup_fn) (void), char *path)
118*4882a593Smuzhiyundiff --git a/lib/tst_memutils.c b/lib/tst_memutils.c
119*4882a593Smuzhiyunindex 69077861f..ae1cad29b 100644
120*4882a593Smuzhiyun--- a/lib/tst_memutils.c
121*4882a593Smuzhiyun+++ b/lib/tst_memutils.c
122*4882a593Smuzhiyun@@ -5,11 +5,11 @@
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun #include <unistd.h>
125*4882a593Smuzhiyun #include <limits.h>
126*4882a593Smuzhiyun-#include <sys/sysinfo.h>
127*4882a593Smuzhiyun #include <stdlib.h>
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun #define TST_NO_DEFAULT_MAIN
130*4882a593Smuzhiyun #include "tst_test.h"
131*4882a593Smuzhiyun+#include "lapi/sysinfo.h"
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun #define BLOCKSIZE (16 * 1024 * 1024)
134*4882a593Smuzhiyun
135*4882a593Smuzhiyundiff --git a/testcases/kernel/mem/mtest01/mtest01.c b/testcases/kernel/mem/mtest01/mtest01.c
136*4882a593Smuzhiyunindex 9676ea4b5..33b2ac822 100644
137*4882a593Smuzhiyun--- a/testcases/kernel/mem/mtest01/mtest01.c
138*4882a593Smuzhiyun+++ b/testcases/kernel/mem/mtest01/mtest01.c
139*4882a593Smuzhiyun@@ -20,7 +20,6 @@
140*4882a593Smuzhiyun  */
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun #include <sys/types.h>
143*4882a593Smuzhiyun-#include <sys/sysinfo.h>
144*4882a593Smuzhiyun #include <sys/wait.h>
145*4882a593Smuzhiyun #include <limits.h>
146*4882a593Smuzhiyun #include <signal.h>
147*4882a593Smuzhiyun@@ -29,6 +28,7 @@
148*4882a593Smuzhiyun #include <unistd.h>
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun #include "lapi/abisize.h"
151*4882a593Smuzhiyun+#include "lapi/sysinfo.h"
152*4882a593Smuzhiyun #include "tst_test.h"
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun #define FIVE_HUNDRED_MB         (500ULL*1024*1024)
155*4882a593Smuzhiyundiff --git a/testcases/kernel/syscalls/madvise/madvise06.c b/testcases/kernel/syscalls/madvise/madvise06.c
156*4882a593Smuzhiyunindex 263b8e78b..4fa52e6ea 100644
157*4882a593Smuzhiyun--- a/testcases/kernel/syscalls/madvise/madvise06.c
158*4882a593Smuzhiyun+++ b/testcases/kernel/syscalls/madvise/madvise06.c
159*4882a593Smuzhiyun@@ -46,7 +46,7 @@
160*4882a593Smuzhiyun #include <errno.h>
161*4882a593Smuzhiyun #include <stdio.h>
162*4882a593Smuzhiyun #include <sys/mount.h>
163*4882a593Smuzhiyun-#include <sys/sysinfo.h>
164*4882a593Smuzhiyun+#include "lapi/sysinfo.h"
165*4882a593Smuzhiyun #include "tst_test.h"
166*4882a593Smuzhiyun #include "tst_cgroup.h"
167*4882a593Smuzhiyun
168*4882a593Smuzhiyundiff --git a/testcases/kernel/syscalls/sysinfo/sysinfo01.c b/testcases/kernel/syscalls/sysinfo/sysinfo01.c
169*4882a593Smuzhiyunindex 2ea44a2be..a237345ef 100644
170*4882a593Smuzhiyun--- a/testcases/kernel/syscalls/sysinfo/sysinfo01.c
171*4882a593Smuzhiyun+++ b/testcases/kernel/syscalls/sysinfo/sysinfo01.c
172*4882a593Smuzhiyun@@ -69,7 +69,7 @@
173*4882a593Smuzhiyun #include <sys/types.h>
174*4882a593Smuzhiyun #include <sys/stat.h>
175*4882a593Smuzhiyun #include <sys/signal.h>
176*4882a593Smuzhiyun-#include <sys/sysinfo.h>
177*4882a593Smuzhiyun+#include "lapi/sysinfo.h"
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun #include "test.h"
180*4882a593Smuzhiyun
181*4882a593Smuzhiyundiff --git a/testcases/kernel/syscalls/sysinfo/sysinfo02.c b/testcases/kernel/syscalls/sysinfo/sysinfo02.c
182*4882a593Smuzhiyunindex 7ad0e8bdc..61fa1ab75 100644
183*4882a593Smuzhiyun--- a/testcases/kernel/syscalls/sysinfo/sysinfo02.c
184*4882a593Smuzhiyun+++ b/testcases/kernel/syscalls/sysinfo/sysinfo02.c
185*4882a593Smuzhiyun@@ -65,7 +65,7 @@
186*4882a593Smuzhiyun #include <sys/types.h>
187*4882a593Smuzhiyun #include <sys/stat.h>
188*4882a593Smuzhiyun #include <sys/signal.h>
189*4882a593Smuzhiyun-#include <sys/sysinfo.h>
190*4882a593Smuzhiyun+#include "lapi/sysinfo.h"
191*4882a593Smuzhiyun #include <stdint.h>
192*4882a593Smuzhiyun
193*4882a593Smuzhiyun #include "test.h"
194*4882a593Smuzhiyundiff --git a/testcases/kernel/syscalls/sysinfo/sysinfo03.c b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
195*4882a593Smuzhiyunindex af7cb6421..dc5ae65e3 100644
196*4882a593Smuzhiyun--- a/testcases/kernel/syscalls/sysinfo/sysinfo03.c
197*4882a593Smuzhiyun+++ b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
198*4882a593Smuzhiyun@@ -13,7 +13,7 @@
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun  */
201*4882a593Smuzhiyun
202*4882a593Smuzhiyun-#include <sys/sysinfo.h>
203*4882a593Smuzhiyun+#include "lapi/sysinfo.h"
204*4882a593Smuzhiyun #include "lapi/namespaces_constants.h"
205*4882a593Smuzhiyun #include "lapi/posix_clocks.h"
206*4882a593Smuzhiyun #include "tst_test.h"
207*4882a593Smuzhiyundiff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c b/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
208*4882a593Smuzhiyunindex 22e7c3638..572701f9f 100644
209*4882a593Smuzhiyun--- a/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
210*4882a593Smuzhiyun+++ b/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
211*4882a593Smuzhiyun@@ -43,7 +43,7 @@
212*4882a593Smuzhiyun #include <sys/wait.h>
213*4882a593Smuzhiyun #include <semaphore.h>
214*4882a593Smuzhiyun #ifdef	__linux__
215*4882a593Smuzhiyun-#include <sys/sysinfo.h>
216*4882a593Smuzhiyun+#include "lapi/sysinfo.h"
217*4882a593Smuzhiyun #endif
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun #include "../testfrmw/testfrmw.h"
220*4882a593Smuzhiyun--
221*4882a593Smuzhiyun2.33.0
222*4882a593Smuzhiyun
223