Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1704900 > unrolled thread
| Started by | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| First post | 2017-08-06 19:10 +0200 |
| Last post | 2017-08-06 19:30 +0200 |
| Articles | 20 on this page of 55 — 7 participants |
Back to article view | Back to linux.kernel
[PATCH v06 00/36] Userspace compile test and fixes for exported uapi header files Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:10 +0200
[PATCH v06 16/36] uapi linux/dlm_netlink.h: include linux/dlmconstants.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:10 +0200
[PATCH v06 34/36] uapi: break dependency loop between <linux/hdlc/ioctl.h> and <linux/if.h> Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:10 +0200
[PATCH v06 12/36] x86 uapi asm/signal.h: use __kernel_size_t instead of size_t Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:10 +0200
Re: [PATCH v06 12/36] x86 uapi asm/signal.h: use __kernel_size_t instead of size_t Arnd Bergmann <arnd@arndb.de> - 2017-08-07 16:40 +0200
Re: [PATCH v06 12/36] x86 uapi asm/signal.h: use __kernel_size_t instead of size_t "Dmitry V. Levin" <ldv@altlinux.org> - 2017-08-09 01:00 +0200
[PATCH v06 22/36] uapi linux/reiserfs_xattr.h: use __kernel_size_t instead of size_t Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:10 +0200
Re: [PATCH v06 22/36] uapi linux/reiserfs_xattr.h: use __kernel_size_t instead of size_t "Dmitry V. Levin" <ldv@altlinux.org> - 2017-08-09 01:20 +0200
Re: [PATCH v06 05/36] uapi linux/sysctl.h: use __kernel_size_t instead of size_t Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-09 09:30 +0200
[PATCH v06 14/36] arm uapi asm/signal.h: include <stddef.h> for size_t in userspace Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:20 +0200
Re: [PATCH v06 14/36] arm uapi asm/signal.h: include <stddef.h> for size_t in userspace "Dmitry V. Levin" <ldv@altlinux.org> - 2017-08-09 01:00 +0200
Re: [PATCH v06 14/36] arm uapi asm/signal.h: include <stddef.h> for size_t in userspace Arnd Bergmann <arnd@arndb.de> - 2017-08-09 14:50 +0200
Re: [PATCH v06 14/36] arm uapi asm/signal.h: include <stddef.h> for size_t in userspace "Dmitry V. Levin" <ldv@altlinux.org> - 2017-08-09 15:00 +0200
[PATCH v06 33/36] uapi linux/fsmap.h: use __kernel_size_t instead of size_t Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:20 +0200
Re: [PATCH v06 33/36] uapi linux/fsmap.h: use __kernel_size_t instead of size_t "Darrick J. Wong" <darrick.wong@oracle.com> - 2017-08-07 18:00 +0200
Re: [PATCH v06 33/36] uapi linux/fsmap.h: use __kernel_size_t instead of size_t Arnd Bergmann <arnd@arndb.de> - 2017-08-07 18:10 +0200
Re: [PATCH v06 33/36] uapi linux/fsmap.h: use __kernel_size_t instead of size_t "Darrick J. Wong" <darrick.wong@oracle.com> - 2017-08-07 18:50 +0200
Re: [PATCH v06 33/36] uapi linux/fsmap.h: use __kernel_size_t instead of size_t Arnd Bergmann <arnd@arndb.de> - 2017-08-07 22:30 +0200
Re: [PATCH v06 33/36] uapi linux/fsmap.h: use __kernel_size_t instead of size_t "Darrick J. Wong" <darrick.wong@oracle.com> - 2017-08-09 01:10 +0200
Re: [PATCH v06 33/36] uapi linux/fsmap.h: use __kernel_size_t instead of size_t Arnd Bergmann <arnd@arndb.de> - 2017-08-09 10:30 +0200
[PATCH v06 01/36] Add scripts/headers_compile_test.sh: compile test for exported uapi headers Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:20 +0200
[PATCH v06 20/36] uapi linux/scc.h: include linux/sockios.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:20 +0200
[PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Willem de Bruijn <willemdebruijn.kernel@gmail.com> - 2017-08-06 22:30 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 23:00 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Willem de Bruijn <willemdebruijn.kernel@gmail.com> - 2017-08-06 22:30 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 23:00 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Willem de Bruijn <willemdebruijn.kernel@gmail.com> - 2017-08-06 23:30 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 23:40 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Willem de Bruijn <willemdebruijn.kernel@gmail.com> - 2017-08-06 23:50 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-07 00:00 +0200
Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space Willem de Bruijn <willemdebruijn.kernel@gmail.com> - 2017-08-07 00:10 +0200
[PATCH v06 36/36] uapi linux/kfd_ioctl.h: use __u32 and __u64 instead of uint32_t and uint64_t Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
Re: [PATCH v06 36/36] uapi linux/kfd_ioctl.h: use __u32 and __u64 instead of uint32_t and uint64_t Arnd Bergmann <arnd@arndb.de> - 2017-08-07 17:10 +0200
[PATCH v06 06/36] uapi asm-generic/ipcbuf.h: include linux/posix_types.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 17/36] uapi linux/sctp.h: use __u8, __u16 and __u32 from linux/types.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 07/36] uapi asm-generic/msgbuf.h: include asm/ipcbuf.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 25/36] uapi linux/android/binder.h: use __kernel_pid_t and __kernel_uid_t Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 02/36] uapi scsi/scsi_bsg_fc.h: use __u8, __u32 and __u64 from linux/types.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 11/36] uapi asm-generic/ucontext.h: include asm/signal.h and asm/sigcontext.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 10/36] uapi asm-generic/signal.h: use __kernel_size_t instead of size_t Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 24/36] uapi linux/coda_psdev.h: move upc_req definition from uapi to kernel side headers Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 09/36] uapi asm-generic/sembuf.h: include asm/posix_types.h and asm/ipcbuf.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
Re: [PATCH v06 09/36] uapi asm-generic/sembuf.h: include asm/posix_types.h and asm/ipcbuf.h "Dmitry V. Levin" <ldv@altlinux.org> - 2017-08-09 00:50 +0200
[PATCH v06 27/36] uapi xen/gntdev.h: include xen/privcmd.h and define grant_ref_t Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 30/36] uapi rdma/rdma_user_rxe.h: include in.h and in6.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
Re: [PATCH v06 30/36] uapi rdma/rdma_user_rxe.h: include in.h and in6.h Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-08-09 01:20 +0200
Re: [PATCH v06 30/36] uapi rdma/rdma_user_rxe.h: include in.h and in6.h Moni Shoua <monis@mellanox.com> - 2017-08-09 15:50 +0200
Re: [PATCH v06 30/36] uapi rdma/rdma_user_rxe.h: include in.h and in6.h Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-08-09 18:00 +0200
Re: [PATCH v06 30/36] uapi rdma/rdma_user_rxe.h: include in.h and in6.h "Dmitry V. Levin" <ldv@altlinux.org> - 2017-08-10 04:50 +0200
Re: [PATCH v06 30/36] uapi rdma/rdma_user_rxe.h: include in.h and in6.h Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-08-10 18:20 +0200
[PATCH v06 13/36] x86 uapi asm/sembuf.h: include linux/types.h and linux/ipc.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
Re: [PATCH v06 13/36] x86 uapi asm/sembuf.h: include linux/types.h and linux/ipc.h "Dmitry V. Levin" <ldv@altlinux.org> - 2017-08-09 01:00 +0200
[PATCH v06 26/36] uapi xen/privcmd.h: fix compilation in userspace Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
[PATCH v06 28/36] uapi xen/evtchn.h: include xen/privcmd.h Mikko Rapeli <mikko.rapeli@iki.fi> - 2017-08-06 19:30 +0200
Page 2 of 3 — ← Prev page 1 [2] 3 Next page →
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:20 +0200 |
| Subject | [PATCH v06 01/36] Add scripts/headers_compile_test.sh: compile test for exported uapi headers |
| Message-ID | <ubxnz-54r-7@gated-at.bofh.it> |
| In reply to | #1704900 |
Users of kernel uapi header files would be happier if they did not
contain kernel specific parts and would contain #include statements
for all other header files that they depend on, and in general would
compile also in user space. If Linux kernal uapi headers compile in
user space, then they can also be used to do ABI and API compatibility
checks against different kernel versions. ABI checks can also be used
by Linux distribution build systems like yocto/bitbake to avoid
recompiling dependencies if changes are ABI compatible.
For each header file exported to userspace, this script tries to
compile it together with minimal header files from GCC and libc, and
reports results.
In the test execution environment, libc and GCC header file locations
are parsed from gcc compiler configuration.
Some gcc and kernel headers depend on libc headers which are made available
by copying from the compiler default location to a temporary location and
removing possibly existing kernel headers from this directory. This is a bit
of a hack but seems to work in multiple environments so test can be
executed without installing headers to /usr/include and compiling a full
Linux distribution on top.
Tested natively on:
Debian unstable, i586-linux-gnu and gcc 4.9.2
Raspbian Wheezy, arm-linux-gnueabihf and gcc 4.6.3
Ubuntu 12.04 LTS, x86_64-linux-gnu and gcc 4.6.3
Tested cross compilation using standard CROSS_COMPILE=/path/to/gcc with:
arm-linux-gnueabihf-gcc (crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09) 4.9.2 20140904 (prerelease)
Execute the script in the directory where kernel header files are installed.
For example with kernel tree from v4.13-rc3-216-g0a23ea65ce9f on x86 i586:
$ make headers_install
$ cd usr/include
$ ../../scripts/headers_compile_test.sh
...
Kernel header compile test statistics:
42 files failed the kernel header compile test.
821 files passed the kernel header compile test.
Once all these errors have been fixed, this test could be added to
'make headers_check'.
In addition to plain compile test, there is also a glibc header
compatibility test, which compiles all kernel uapi headers against a
non-conflicting set of all GNU libc headers. The test covers
variants where kernel header is included before libc header
and libc header before kernel header.
Tested in Debian unstable with libc6 version 2.24-14.
Example execution with output:
$ make headers_install
$ cd usr/include
$ ../../scripts/headers_compile_test.sh -lk
Testing that /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_include.qd5RuE/libc_headers.h compiles
cc -Wall -c -nostdinc -I /usr/lib/gcc/i686-linux-gnu/6/include -I /usr/lib/gcc/i686-linux-gnu/6/include-fixed -I . -I /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_include.qd5RuE -I /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_include.qd5RuE/i686-linux-gnu -o /dev/null /home/mcfrisk/src/linux-2.6/usr/include/drm/i810_drm.h
PASSED: drm/i810_drm.h
cc -Wall -c -nostdinc -I /usr/lib/gcc/i686-linux-gnu/6/include -I /usr/lib/gcc/i686-linux-gnu/6/include-fixed -I . -I /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_include.qd5RuE -I /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_include.qd5RuE/i686-linux-gnu -o /dev/null /home/mcfrisk/src/linux-2.6/usr/include/drm/i810_drm.h_libc_before_kernel.h
...
In file included from /home/mcfrisk/src/linux-2.6/usr/include/asm/sigcontext.h_l
ibc_before_kernel.h:2:0:
./asm/sigcontext.h:291:8: error: redefinition of ‘struct sigcontext’
struct sigcontext {
^~~~~~~~~~
In file included from /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_inclu
de.qd5RuE/signal.h:306:0,
from /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_inclu
de.qd5RuE/sys/param.h:28,
from /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_inclu
de.qd5RuE/resolv.h:62,
from /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_inclu
de.qd5RuE/libc_headers.h:103,
from /home/mcfrisk/src/linux-2.6/usr/include/asm/sigcontext.h_l
ibc_before_kernel.h:1:
/home/mcfrisk/src/linux-2.6/usr/headers_compile_test_include.qd5RuE/bits/sigcont
ext.h:93:8: note: originally defined here
struct sigcontext
^~~~~~~~~~
FAILED libc before kernel test: asm/sigcontext.h
...
Kernel header compile test statistics:
42 files failed the kernel header compile test.
821 files passed the kernel header compile test.
libc and kernel header compatibility test statistics:
73 files failed libc before kernel include test.
790 files passed libc before kernel include test.
Since I've been stubborn enough to work with this script and fixes to the
test failures for a few years, I added my self to MAINTAINERS.
Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: Alexander Stein <alexander.stein@systec-electronic.com>
Cc: Gabriel Laskar <gabriel@lse.epita.fr>
Cc: Dmitry V. Levin <ldv@altlinux.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: netdev@vger.kernel.org
Cc: linux-api@vger.kernel.org
---
MAINTAINERS | 5 +
scripts/headers_compile_test.sh | 507 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 512 insertions(+)
create mode 100755 scripts/headers_compile_test.sh
diff --git a/MAINTAINERS b/MAINTAINERS
index 567343b8ffaa..f1d6d50932cf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3527,6 +3527,11 @@ S: Maintained
F: mm/memcontrol.c
F: mm/swap_cgroup.c
+COMPILE TEST FOR HEADER FILES EXPORTED TO USERSPACE
+M: Mikko Rapeli <mikko.rapeli@iki.fi>
+S: Maintained
+F: scripts/headers_compile_test.sh
+
CORETEMP HARDWARE MONITORING DRIVER
M: Fenghua Yu <fenghua.yu@intel.com>
L: linux-hwmon@vger.kernel.org
diff --git a/scripts/headers_compile_test.sh b/scripts/headers_compile_test.sh
new file mode 100755
index 000000000000..99de50d32b7b
--- /dev/null
+++ b/scripts/headers_compile_test.sh
@@ -0,0 +1,507 @@
+#!/bin/bash
+
+help() {
+ cat << EOF_HELP
+Userspace compile test for exported kernel headers.
+
+ Copyright (C) 2015 Mikko Rapeli <mikko.rapeli@iki.fi>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2
+ of the License.
+
+Execute in root directory of exported kernel headers in Linux kernel source
+tree. Sets up gcc and libc headers without existing kernel headers to
+a temporary environment and tries to compile all exported header files
+from current directory against them. Return value is zero if all tests pass,
+non-zero if something goes wrong during execution or if any file failed
+the compile tests.
+
+Supported arguments:
+
+ -h|--help print help
+ -k|--keep don't cleanup temporary header files and directories
+ -lk|--libc-kernel test for conflicts between kernel and libc headers
+ when libc headers are included before kernel headers
+ -kl|--kernel-libc test for conflicts between kernel and libc headers
+ when kernel headers are included before libc headers
+ -l|--libc test both -lk and -kl
+ -v|--verbose print more verbose output
+
+Example in Linux kernel source tree:
+
+ \$ make headers_install
+ \$ cd usr/include
+ \$ $( readlink -f "$0" )
+
+EOF_HELP
+}
+
+# bash due to arithmetics and pipefail
+set -euo pipefail
+
+KEEP=0
+HELP=0
+LIBC_TEST=0
+LIBC_KERNEL_TEST=0
+KERNEL_LIBC_TEST=0
+
+# command line arguments
+for p in "$@"; do
+ case "$p" in
+ -k|--keep)
+ KEEP=1
+ ;;
+ -l|--libc)
+ LIBC_TEST=1
+ LIBC_KERNEL_TEST=1
+ KERNEL_LIBC_TEST=1
+ ;;
+ -lk|--libc-kernel)
+ LIBC_TEST=1
+ LIBC_KERNEL_TEST=1
+ ;;
+ -kl|--kernel-libc)
+ LIBC_TEST=1
+ KERNEL_LIBC_TEST=1
+ ;;
+ -h|--help)
+ HELP=1
+ ;;
+ -v|--verbose)
+ set -x
+ ;;
+ *)
+ help
+ echo "Unknown argument: $p"
+ exit 1
+ ;;
+ esac
+done
+
+if [ "$HELP" != "0" ]; then help; exit 0; fi
+
+# sanity test
+if [ ! -d ./linux ]; then
+ echo Sanity check error: ./linux directory not found
+ echo Should be called in usr/include after \'make headers_install\'.
+ echo Returns number of failed files, 0 if none.
+ exit 1
+fi
+
+# Support CC variable for compiler and ccache, and cross compiling.
+# CC is used without quotes to support CC="ccache gcc".
+set +u
+if [ "$CC"foobar == "foobar" ]; then
+ CC=cc
+fi
+
+if [ "$CROSS_COMPILE"foobar != "foobar" ]; then
+ # Using gcc name since some cross compiler tool chains don't provide
+ # the cc symlink. Using eval to expand ~ to $HOME.
+ CC="$( eval echo "$CROSS_COMPILE"gcc )"
+fi
+set -u
+
+# Kernel headers refer to some gcc and libc headers so make them available.
+set +u
+if [ "$ARCH_TRIPLET"foobar == "foobar" ]; then
+ # Taking triplet from gcc/cpp
+ ARCH_TRIPLET="$( $CC -v -x c -E - < /dev/null 2>&1 | \
+ grep Target | sed -e 's/Target: //' )"
+fi
+
+if [ "$LIBC"foobar == "foobar" ]; then
+ # trying to grep libc includes from gcc/cpp defaults
+ _TEMP="$( $CC -v -x c -E - < /dev/null 2>&1 | \
+ sed -n -e '/^#include <...> search starts here:$/,/^End of search list.$/{//!p}' | \
+ sed -e 's/^\ \//\//g' | \
+ grep '/usr/include' )"
+
+ # sanity check and prepare LIBC dirs
+ for d in $_TEMP; do
+ if [ ! -d "$d" ]; then
+ echo "$d not a directory"
+ exit 1
+ fi
+ LIBC="$LIBC $d"
+ done
+fi
+set -u
+
+# Copy libc include files to temp directory for the tests.
+COMPILE_TEST_INC="$( readlink -f \
+ "$( mktemp -d ../headers_compile_test_include.XXXXXX )" )"
+
+# cleanup if keep not set
+if [ "$KEEP" = "0" ]; then
+ trap 'rm -rf "$COMPILE_TEST_INC"' EXIT
+else
+ trap 'printf \
+"Temporary directory not cleaned up! Remove manually:\n${COMPILE_TEST_INC}\n"' \
+ EXIT
+fi
+
+for d in $LIBC; do
+ # check if last part of dir is the arch triplet, cross compile paths
+ # can have it also elsewhere so just the last one counts.
+ if ! ( echo "$d" | egrep "$ARCH_TRIPLET$" > /dev/null ); then
+ # hopefully just main libc dir, e.g. /usr/include,
+ # follow symlinks from e.g. /usr/include/bits
+ cp -aL "$d"/* "$COMPILE_TEST_INC"/
+ elif ( echo "$d" | egrep "$ARCH_TRIPLET$" > /dev/null ); then
+ # hopefully the arch specific dir, e.g. /usr/include/x86_64-linux-gnu
+ cp -ar "$d"/* "$COMPILE_TEST_INC/"
+ else
+ echo "$d unexpected, bailing out"
+ exit 1
+ fi
+done
+
+# A single header with all non-conflicting libc headers to test kernel
+# headers against libc headers for conflicts.
+if [ "$LIBC_TEST" != 0 ]; then
+ # List taken from Debian unstable libc6 version 2.21-9.
+ # Some glibc headers conflict with each other so they
+ # are filtered out. Not perfect but better than nothing.
+ #
+ # $ for f in $( egrep "\.h$" /var/lib/dpkg/info/libc6-dev\:i386.list | sed -e 's|/usr/include/||'| sort | grep -v arpa | grep -v linux-gnu | grep -v rpcsvc | grep -v regexp.h | grep -v rpc | grep -v scsi | grep -v talkd ); do echo "#include <$f>"; done > libc_headers.h
+
+ cat > "$COMPILE_TEST_INC/libc_headers.h" << EOF_LIBC_HEADERS
+#include <aio.h>
+#include <aliases.h>
+#include <alloca.h>
+#include <argp.h>
+#include <argz.h>
+#include <ar.h>
+#include <assert.h>
+#include <byteswap.h>
+#include <complex.h>
+#include <cpio.h>
+#include <crypt.h>
+#include <ctype.h>
+#include <dirent.h>
+#include <dlfcn.h>
+#include <elf.h>
+#include <endian.h>
+#include <envz.h>
+#include <err.h>
+#include <errno.h>
+#include <error.h>
+#include <execinfo.h>
+#include <fcntl.h>
+#include <features.h>
+#include <fenv.h>
+#include <fmtmsg.h>
+#include <fnmatch.h>
+#include <fstab.h>
+#include <fts.h>
+#include <ftw.h>
+#include <_G_config.h>
+#include <gconv.h>
+#include <getopt.h>
+#include <glob.h>
+#include <gnu-versions.h>
+#include <grp.h>
+#include <gshadow.h>
+#include <iconv.h>
+#include <ifaddrs.h>
+#include <inttypes.h>
+#include <langinfo.h>
+#include <lastlog.h>
+#include <libgen.h>
+#include <libintl.h>
+#include <libio.h>
+#include <limits.h>
+#include <link.h>
+#include <locale.h>
+#include <malloc.h>
+#include <math.h>
+#include <mcheck.h>
+#include <memory.h>
+#include <mntent.h>
+#include <monetary.h>
+#include <mqueue.h>
+#include <netash/ash.h>
+#include <netatalk/at.h>
+#include <netax25/ax25.h>
+#include <netdb.h>
+#include <neteconet/ec.h>
+#include <net/ethernet.h>
+#include <net/if_arp.h>
+#include <net/if.h>
+#include <net/if_packet.h>
+#include <net/if_ppp.h>
+#include <net/if_shaper.h>
+#include <net/if_slip.h>
+#include <netinet/ether.h>
+#include <netinet/icmp6.h>
+#include <netinet/if_ether.h>
+#include <netinet/if_fddi.h>
+#include <netinet/if_tr.h>
+#include <netinet/igmp.h>
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip6.h>
+#include <netinet/ip.h>
+#include <netinet/ip_icmp.h>
+#include <netinet/tcp.h>
+#include <netinet/udp.h>
+#include <netipx/ipx.h>
+#include <netiucv/iucv.h>
+#include <netpacket/packet.h>
+#include <net/ppp-comp.h>
+#include <net/ppp_defs.h>
+#include <netrom/netrom.h>
+#include <netrose/rose.h>
+#include <net/route.h>
+#include <nfs/nfs.h>
+#include <nl_types.h>
+#include <nss.h>
+#include <obstack.h>
+#include <paths.h>
+#include <poll.h>
+#include <printf.h>
+#include <protocols/routed.h>
+#include <protocols/rwhod.h>
+#include <protocols/timed.h>
+#include <pthread.h>
+#include <pty.h>
+#include <pwd.h>
+#include <re_comp.h>
+#include <regex.h>
+#include <resolv.h>
+#include <sched.h>
+#include <search.h>
+#include <semaphore.h>
+#include <setjmp.h>
+#include <sgtty.h>
+#include <shadow.h>
+#include <signal.h>
+#include <spawn.h>
+#include <stab.h>
+#include <stdc-predef.h>
+#include <stdint.h>
+#include <stdio_ext.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <stropts.h>
+#include <syscall.h>
+#include <sysexits.h>
+#include <syslog.h>
+#include <tar.h>
+#include <termio.h>
+#include <termios.h>
+#include <tgmath.h>
+#include <thread_db.h>
+#include <time.h>
+#include <ttyent.h>
+#include <uchar.h>
+#include <ucontext.h>
+#include <ulimit.h>
+#include <unistd.h>
+#include <ustat.h>
+#include <utime.h>
+#include <utmp.h>
+#include <utmpx.h>
+#include <values.h>
+#include <wait.h>
+#include <wchar.h>
+#include <wctype.h>
+#include <wordexp.h>
+#include <xlocale.h>
+EOF_LIBC_HEADERS
+
+fi # LIBC_TEST
+
+# Simulate libc headers without kernel headers by removing
+# all known kernel header dirs from the copied libc ones.
+# This seems to magically work.
+_KERNEL_DIRS="$( find . -type d | grep -v '^\.$' )"
+( cd "$COMPILE_TEST_INC" && rm -rf $_KERNEL_DIRS )
+
+# GCC headers
+set +u
+if [ "$GCC_INC"foobar == "foobar" ]; then
+ # Take from $CC default system include paths, filter out
+ # /usr/local/include and /usr/include stuff first, then try to match
+ # for gcc.
+ _TEMP="$( $CC -v -x c -E - < /dev/null 2>&1 | \
+ sed -n -e '/^#include <...> search starts here:$/,/^End of search list.$/{//!p}' | \
+ sed -e 's/^\ \//\//g' | \
+ egrep -v '/usr/local/include' | \
+ egrep -v '/usr/include' | \
+ grep gcc | \
+ xargs )"
+
+ # merge and prepare for use with $CC
+ for d in $_TEMP; do
+ # sanity test
+ if [ ! -d "$d" ]; then
+ echo "$d: is not a directory"
+ exit 1
+ fi
+ GCC_INC="$GCC_INC -I $d"
+ done
+fi
+set -u
+
+# sanity check: test that plain libc headers compile
+if [ "$LIBC_TEST" != 0 ]; then
+ echo "Testing that $COMPILE_TEST_INC/libc_headers.h compiles"
+ $CC -Wall -c -nostdinc $GCC_INC -I . \
+ -I "$COMPILE_TEST_INC" \
+ -I "$COMPILE_TEST_INC/$ARCH_TRIPLET" \
+ -o /dev/null \
+ "$COMPILE_TEST_INC/libc_headers.h"
+fi
+
+# Summary counters:
+_FAILED=0
+_PASSED=0
+_LIBC_FAILED=0
+_LIBC_PASSED=0
+_LIBC_BEFORE_KERNEL_FAILED=0
+_LIBC_BEFORE_KERNEL_PASSED=0
+_KERNEL_BEFORE_LIBC_FAILED=0
+_KERNEL_BEFORE_LIBC_PASSED=0
+
+# For each header file, try to compile it using the headers we prepared.
+for f in $( find . -name "*\.h" -printf "%P\n" ); do
+ _FAIL=0
+ _FAIL_LIBC=0
+ _FAIL_LIBC_BEFORE_KERNEL=0
+ _FAIL_KERNEL_BEFORE_LIBC=0
+
+ # compile test, CC not quoted to support ccache
+ echo $CC -Wall -c -nostdinc $GCC_INC -I . -I "$COMPILE_TEST_INC" -I "$COMPILE_TEST_INC/$ARCH_TRIPLET" -o /dev/null "$PWD/$f"
+ $CC -Wall -c -nostdinc $GCC_INC -I . -I "$COMPILE_TEST_INC" -I "$COMPILE_TEST_INC/$ARCH_TRIPLET" -o /dev/null "$PWD/$f" \
+ || _FAIL=1
+
+ # report errors
+ if [ "$_FAIL" -gt 0 ]; then
+ echo "FAILED: $f"
+ _FAILED="$(( _FAILED + 1 ))"
+ else
+ echo "PASSED: $f"
+ _PASSED="$(( _PASSED + 1))"
+ fi
+
+ # libc header conflict tests
+ if [ "$LIBC_TEST" != 0 ]; then
+ _LIBC_BEFORE_KERNEL="$PWD/$f"_libc_before_kernel.h
+ _KERNEL_BEFORE_LIBC="$PWD/$f"_kernel_before_libc.h
+
+ # libc header included before kernel header
+ if [ "$LIBC_KERNEL_TEST" != 0 ]; then
+ cat > "$_LIBC_BEFORE_KERNEL" << EOF_LIBC_BEFORE_KERNEL
+#include <libc_headers.h>
+#include <$f>
+EOF_LIBC_BEFORE_KERNEL
+ echo \
+ $CC -Wall -c -nostdinc $GCC_INC \
+ -I . -I "$COMPILE_TEST_INC" \
+ -I "$COMPILE_TEST_INC/$ARCH_TRIPLET" \
+ -o /dev/null "$_LIBC_BEFORE_KERNEL"
+ $CC -Wall -c -nostdinc $GCC_INC \
+ -I . -I "$COMPILE_TEST_INC" \
+ -I "$COMPILE_TEST_INC/$ARCH_TRIPLET" \
+ -o /dev/null "$_LIBC_BEFORE_KERNEL" \
+ || _FAIL_LIBC_BEFORE_KERNEL=1
+
+ # report errors
+ if [ "$_FAIL_LIBC_BEFORE_KERNEL" -gt 0 ]; then
+ echo "FAILED libc before kernel test: $f"
+ _LIBC_BEFORE_KERNEL_FAILED="$(( _LIBC_BEFORE_KERNEL_FAILED + 1 ))"
+ else
+ echo "PASSED libc before kernel test: $f"
+ _LIBC_BEFORE_KERNEL_PASSED="$(( _LIBC_BEFORE_KERNEL_PASSED + 1))"
+ fi
+ fi
+
+ # kernel header included before libc
+ if [ "$KERNEL_LIBC_TEST" != 0 ]; then
+ cat > "$_KERNEL_BEFORE_LIBC" << EOF_KERNEL_BEFORE_LIBC
+#include <$f>
+#include <libc_headers.h>
+EOF_KERNEL_BEFORE_LIBC
+ echo \
+ $CC -Wall -c -nostdinc $GCC_INC \
+ -I . -I "$COMPILE_TEST_INC" \
+ -I "$COMPILE_TEST_INC/$ARCH_TRIPLET" \
+ -o /dev/null "$_KERNEL_BEFORE_LIBC"
+ $CC -Wall -c -nostdinc $GCC_INC \
+ -I . -I "$COMPILE_TEST_INC" \
+ -I "$COMPILE_TEST_INC/$ARCH_TRIPLET" \
+ -o /dev/null "$_KERNEL_BEFORE_LIBC" \
+ || _FAIL_KERNEL_BEFORE_LIBC=1
+
+ # report errors
+ if [ "$_FAIL_KERNEL_BEFORE_LIBC" -gt 0 ]; then
+ echo "FAILED kernel before libc test: $f"
+ _KERNEL_BEFORE_LIBC_FAILED="$(( _KERNEL_BEFORE_LIBC_FAILED + 1 ))"
+ else
+ echo "PASSED kernel before libc test: $f"
+ _KERNEL_BEFORE_LIBC_PASSED="$(( _KERNEL_BEFORE_LIBC_PASSED + 1))"
+ fi
+ fi
+
+ # libc summary
+ if [ "$_FAIL_LIBC_BEFORE_KERNEL" -gt 0 -o "$_FAIL_KERNEL_BEFORE_LIBC" -gt 0 ]; then
+ _LIBC_FAILED="$(( _LIBC_FAILED + 1))"
+ else
+ _LIBC_PASSED="$(( _LIBC_PASSED + 1))"
+ fi
+
+ if [ "$KEEP" = "0" ]; then
+ rm -f "$_LIBC_BEFORE_KERNEL" "$_KERNEL_BEFORE_LIBC"
+ fi
+ fi # LIBC_TEST
+done
+
+cat << EOF_STATS
+
+Kernel header compile test statistics:
+
+$_FAILED files failed the kernel header compile test.
+$_PASSED files passed the kernel header compile test.
+
+EOF_STATS
+
+if [ "$LIBC_TEST" != 0 ]; then
+ cat << EOF_LIBC_STATS
+libc and kernel header compatibility test statistics:
+EOF_LIBC_STATS
+
+if [ "$LIBC_KERNEL_TEST" != 0 ] && [ "$KERNEL_LIBC_TEST" != 0 ]; then
+ cat << EOF_LIBC_COMBINED
+$_LIBC_FAILED files failed the libc compatibility test.
+$_LIBC_PASSED files passed the libc compatibility test.
+EOF_LIBC_COMBINED
+fi
+
+if [ "$LIBC_KERNEL_TEST" != 0 ]; then
+ cat << EOF_LIBC_KERNEL
+$_LIBC_BEFORE_KERNEL_FAILED files failed libc before kernel include test.
+$_LIBC_BEFORE_KERNEL_PASSED files passed libc before kernel include test.
+EOF_LIBC_KERNEL
+fi
+
+if [ "$KERNEL_LIBC_TEST" != 0 ]; then
+ cat << EOF_KERNEL_LIBC
+$_KERNEL_BEFORE_LIBC_FAILED files failed kernel before libc include test.
+$_KERNEL_BEFORE_LIBC_PASSED files passed kernel before libc include test.
+EOF_KERNEL_LIBC
+fi
+
+fi # LIBC_TEST
+
+# return value, summary of all failures.
+if [ "$(( $_FAILED + $_LIBC_BEFORE_KERNEL_FAILED + $_KERNEL_BEFORE_LIBC_FAILED ))" != 0 ]; then
+ exit 1
+else
+ exit 0
+fi
--
2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:20 +0200 |
| Subject | [PATCH v06 20/36] uapi linux/scc.h: include linux/sockios.h |
| Message-ID | <ubxnz-54r-15@gated-at.bofh.it> |
| In reply to | #1704900 |
Fixes userspace compilation error: error: ‘SIOCDEVPRIVATE’ undeclared here (not in a function) SIOCSCCRESERVED = SIOCDEVPRIVATE Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi> Cc: netdev@vger.kernel.org Cc: linux-hams@vger.kernel.org Cc: Joerg Reuter <jreuter@yaina.de> --- include/uapi/linux/scc.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/uapi/linux/scc.h b/include/uapi/linux/scc.h index 72b6b8153374..2992b88ca4ce 100644 --- a/include/uapi/linux/scc.h +++ b/include/uapi/linux/scc.h @@ -3,6 +3,7 @@ #ifndef _UAPI_SCC_H #define _UAPI_SCC_H +#include <linux/sockios.h> /* selection of hardware types */ -- 2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:30 +0200 |
| Subject | [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubxxf-59o-1@gated-at.bofh.it> |
| In reply to | #1704900 |
linux/time.h conflicts with user space header time.h. Try to be compatible
with both.
Fixes userspace compilation error:
error: array type has incomplete element type
struct timespec ts[3];
Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: Willem de Bruijn <willemb@google.com>
Cc: Soheil Hassas Yeganeh <soheil@google.com>
Cc: netdev@vger.kernel.org
---
include/uapi/linux/errqueue.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/include/uapi/linux/errqueue.h b/include/uapi/linux/errqueue.h
index 07bdce1f444a..b310b2c6d94f 100644
--- a/include/uapi/linux/errqueue.h
+++ b/include/uapi/linux/errqueue.h
@@ -3,6 +3,12 @@
#include <linux/types.h>
+#ifdef __KERNEL__
+#include <linux/time.h>
+#else
+#include <time.h>
+#endif /* __KERNEL__ */
+
struct sock_extended_err {
__u32 ee_errno;
__u8 ee_origin;
--
2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Willem de Bruijn <willemdebruijn.kernel@gmail.com> |
|---|---|
| Date | 2017-08-06 22:30 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubAls-6Rf-19@gated-at.bofh.it> |
| In reply to | #1704911 |
On Sun, Aug 6, 2017 at 4:23 PM, Willem de Bruijn <willemdebruijn.kernel@gmail.com> wrote: > On Sun, Aug 6, 2017 at 12:44 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: >> linux/time.h conflicts with user space header time.h. Try to be compatible >> with both. >> >> Fixes userspace compilation error: >> >> error: array type has incomplete element type >> struct timespec ts[3]; >> >> Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi> >> Cc: Willem de Bruijn <willemb@google.com> >> Cc: Soheil Hassas Yeganeh <soheil@google.com> >> Cc: netdev@vger.kernel.org >> --- >> include/uapi/linux/errqueue.h | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/include/uapi/linux/errqueue.h b/include/uapi/linux/errqueue.h >> index 07bdce1f444a..b310b2c6d94f 100644 >> --- a/include/uapi/linux/errqueue.h >> +++ b/include/uapi/linux/errqueue.h >> @@ -3,6 +3,12 @@ >> >> #include <linux/types.h> >> >> +#ifdef __KERNEL__ >> +#include <linux/time.h> >> +#else >> +#include <time.h> >> +#endif /* __KERNEL__ */ > > This will break applications that include <linux/time.h> manually. Also, the patch title reads "include <linux/time.h> in user space", but it includes <time.h> in that environment.
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 23:00 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubAOu-72y-5@gated-at.bofh.it> |
| In reply to | #1704965 |
On Sun, Aug 06, 2017 at 04:26:50PM -0400, Willem de Bruijn wrote: > On Sun, Aug 6, 2017 at 4:23 PM, Willem de Bruijn > <willemdebruijn.kernel@gmail.com> wrote: > > On Sun, Aug 6, 2017 at 12:44 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: > >> linux/time.h conflicts with user space header time.h. Try to be compatible > >> with both. > >> > >> Fixes userspace compilation error: > >> > >> error: array type has incomplete element type > >> struct timespec ts[3]; > >> > >> Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi> > >> Cc: Willem de Bruijn <willemb@google.com> > >> Cc: Soheil Hassas Yeganeh <soheil@google.com> > >> Cc: netdev@vger.kernel.org > >> --- > >> include/uapi/linux/errqueue.h | 6 ++++++ > >> 1 file changed, 6 insertions(+) > >> > >> diff --git a/include/uapi/linux/errqueue.h b/include/uapi/linux/errqueue.h > >> index 07bdce1f444a..b310b2c6d94f 100644 > >> --- a/include/uapi/linux/errqueue.h > >> +++ b/include/uapi/linux/errqueue.h > >> @@ -3,6 +3,12 @@ > >> > >> #include <linux/types.h> > >> > >> +#ifdef __KERNEL__ > >> +#include <linux/time.h> > >> +#else > >> +#include <time.h> > >> +#endif /* __KERNEL__ */ > > > > This will break applications that include <linux/time.h> manually. > > Also, the patch title reads "include <linux/time.h> in user space", > but it includes <time.h> in that environment. Oops, missed while squashing some commits. Will fix. Thanks! -Mikko
[toc] | [prev] | [next] | [standalone]
| From | Willem de Bruijn <willemdebruijn.kernel@gmail.com> |
|---|---|
| Date | 2017-08-06 22:30 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubAls-6Rf-21@gated-at.bofh.it> |
| In reply to | #1704911 |
On Sun, Aug 6, 2017 at 12:44 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: > linux/time.h conflicts with user space header time.h. Try to be compatible > with both. > > Fixes userspace compilation error: > > error: array type has incomplete element type > struct timespec ts[3]; > > Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi> > Cc: Willem de Bruijn <willemb@google.com> > Cc: Soheil Hassas Yeganeh <soheil@google.com> > Cc: netdev@vger.kernel.org > --- > include/uapi/linux/errqueue.h | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/include/uapi/linux/errqueue.h b/include/uapi/linux/errqueue.h > index 07bdce1f444a..b310b2c6d94f 100644 > --- a/include/uapi/linux/errqueue.h > +++ b/include/uapi/linux/errqueue.h > @@ -3,6 +3,12 @@ > > #include <linux/types.h> > > +#ifdef __KERNEL__ > +#include <linux/time.h> > +#else > +#include <time.h> > +#endif /* __KERNEL__ */ This will break applications that include <linux/time.h> manually. I previously sent a patch to use libc-compat to make compilation succeed when both are included in the case where <linux/time.h> is included after <time.h>. https://lkml.org/lkml/2016/9/12/872 The inverse will require changes to the libc header to avoid redefining symbols already defined by <linux/time.h> The second patch in that 2-patch set included <linux/time.h> unconditionally after the fix. This broke builds that also included <time.h> in the wrong order. I did not resubmit the first patch as a stand-alone, as it is not sufficient to avoid breakage.
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 23:00 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubAOu-72y-17@gated-at.bofh.it> |
| In reply to | #1704966 |
On Sun, Aug 06, 2017 at 04:23:16PM -0400, Willem de Bruijn wrote: > On Sun, Aug 6, 2017 at 12:44 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: > > linux/time.h conflicts with user space header time.h. Try to be compatible > > with both. > > > > Fixes userspace compilation error: > > > > error: array type has incomplete element type > > struct timespec ts[3]; > > > > Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi> > > Cc: Willem de Bruijn <willemb@google.com> > > Cc: Soheil Hassas Yeganeh <soheil@google.com> > > Cc: netdev@vger.kernel.org > > --- > > include/uapi/linux/errqueue.h | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/include/uapi/linux/errqueue.h b/include/uapi/linux/errqueue.h > > index 07bdce1f444a..b310b2c6d94f 100644 > > --- a/include/uapi/linux/errqueue.h > > +++ b/include/uapi/linux/errqueue.h > > @@ -3,6 +3,12 @@ > > > > #include <linux/types.h> > > > > +#ifdef __KERNEL__ > > +#include <linux/time.h> > > +#else > > +#include <time.h> > > +#endif /* __KERNEL__ */ > > This will break applications that include <linux/time.h> manually. > I previously sent a patch to use libc-compat to make compilation succeed > when both are included in the case where <linux/time.h> is included after > <time.h>. > > https://lkml.org/lkml/2016/9/12/872 > > The inverse will require changes to the libc header to avoid redefining > symbols already defined by <linux/time.h> > > The second patch in that 2-patch set included <linux/time.h> > unconditionally after the fix. This broke builds that also included > <time.h> in the wrong order. I did not resubmit the first patch as a > stand-alone, as it is not sufficient to avoid breakage. I wasn't aware of your change, but I was about to send this to fix the case when glibc <time.h> is included before <linux/time.h>: https://github.com/mcfrisk/linux/commit/f3952a27b8a21c6478d26e6246055383483f6a66 but you also ran into problems where <linux/time.h> is included before <time.h> which need fixes in libc header side. So how to proceed with these? I don't like leaving a few dozen non-compiling header files into uapi. -Mikko
[toc] | [prev] | [next] | [standalone]
| From | Willem de Bruijn <willemdebruijn.kernel@gmail.com> |
|---|---|
| Date | 2017-08-06 23:30 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubBhw-7tc-21@gated-at.bofh.it> |
| In reply to | #1704971 |
>> > +#ifdef __KERNEL__ >> > +#include <linux/time.h> >> > +#else >> > +#include <time.h> >> > +#endif /* __KERNEL__ */ >> >> This will break applications that include <linux/time.h> manually. >> I previously sent a patch to use libc-compat to make compilation succeed >> when both are included in the case where <linux/time.h> is included after >> <time.h>. >> >> https://lkml.org/lkml/2016/9/12/872 >> >> The inverse will require changes to the libc header to avoid redefining >> symbols already defined by <linux/time.h> >> >> The second patch in that 2-patch set included <linux/time.h> >> unconditionally after the fix. This broke builds that also included >> <time.h> in the wrong order. I did not resubmit the first patch as a >> stand-alone, as it is not sufficient to avoid breakage. > > I wasn't aware of your change, but I was about to send this to fix the > case when glibc <time.h> is included before <linux/time.h>: > > https://github.com/mcfrisk/linux/commit/f3952a27b8a21c6478d26e6246055383483f6a66 There are a few differences between the two. Including <time.h> does not unconditionally define all the symbols. Some are conditional on additional state, such as __timespec_defined. > but you also ran into problems where <linux/time.h> is included before > <time.h> which need fixes in libc header side. > > So how to proceed with these? The libc-compat change is a good fix that can be submitted on its own. > I don't like leaving a few dozen non-compiling header files into uapi. I agree, but I do not see a simple solution. Unless libc has the analogous change, including either <time.h> or <linux/time.h> in userspace can unfortunately cause breakage. The added include if __KERNEL__ is defined should be safe, though.
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 23:40 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubBrc-7wm-29@gated-at.bofh.it> |
| In reply to | #1704983 |
On Sun, Aug 06, 2017 at 05:24:20PM -0400, Willem de Bruijn wrote: > >> > +#ifdef __KERNEL__ > >> > +#include <linux/time.h> > >> > +#else > >> > +#include <time.h> > >> > +#endif /* __KERNEL__ */ > >> > >> This will break applications that include <linux/time.h> manually. > >> I previously sent a patch to use libc-compat to make compilation succeed > >> when both are included in the case where <linux/time.h> is included after > >> <time.h>. > >> > >> https://lkml.org/lkml/2016/9/12/872 > >> > >> The inverse will require changes to the libc header to avoid redefining > >> symbols already defined by <linux/time.h> > >> > >> The second patch in that 2-patch set included <linux/time.h> > >> unconditionally after the fix. This broke builds that also included > >> <time.h> in the wrong order. I did not resubmit the first patch as a > >> stand-alone, as it is not sufficient to avoid breakage. > > > > I wasn't aware of your change, but I was about to send this to fix the > > case when glibc <time.h> is included before <linux/time.h>: > > > > https://github.com/mcfrisk/linux/commit/f3952a27b8a21c6478d26e6246055383483f6a66 > > There are a few differences between the two. Including <time.h> does not > unconditionally define all the symbols. Some are conditional on additional > state, such as __timespec_defined. Yep, your patch seems better for libc-compat.h. Could you send it again? > > but you also ran into problems where <linux/time.h> is included before > > <time.h> which need fixes in libc header side. > > > > So how to proceed with these? > > The libc-compat change is a good fix that can be submitted on its own. Yes, please do so. > > I don't like leaving a few dozen non-compiling header files into uapi. > > I agree, but I do not see a simple solution. > > Unless libc has the analogous change, including either <time.h> or > <linux/time.h> in userspace can unfortunately cause breakage. > > The added include if __KERNEL__ is defined should be safe, though. Yes, for the kernel side, but your libc-compat change would nice for userspace, where something will break for sure, but providing source API compatibility is sometimes impossible. To summarize, this change from me, and your libc-compat.c for time.h, or? -Mikko
[toc] | [prev] | [next] | [standalone]
| From | Willem de Bruijn <willemdebruijn.kernel@gmail.com> |
|---|---|
| Date | 2017-08-06 23:50 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubBAR-7zG-17@gated-at.bofh.it> |
| In reply to | #1704998 |
On Sun, Aug 6, 2017 at 5:33 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: > On Sun, Aug 06, 2017 at 05:24:20PM -0400, Willem de Bruijn wrote: >> >> > +#ifdef __KERNEL__ >> >> > +#include <linux/time.h> >> >> > +#else >> >> > +#include <time.h> >> >> > +#endif /* __KERNEL__ */ >> >> >> >> This will break applications that include <linux/time.h> manually. >> >> I previously sent a patch to use libc-compat to make compilation succeed >> >> when both are included in the case where <linux/time.h> is included after >> >> <time.h>. >> >> >> >> https://lkml.org/lkml/2016/9/12/872 >> >> >> >> The inverse will require changes to the libc header to avoid redefining >> >> symbols already defined by <linux/time.h> >> >> >> >> The second patch in that 2-patch set included <linux/time.h> >> >> unconditionally after the fix. This broke builds that also included >> >> <time.h> in the wrong order. I did not resubmit the first patch as a >> >> stand-alone, as it is not sufficient to avoid breakage. >> > >> > I wasn't aware of your change, but I was about to send this to fix the >> > case when glibc <time.h> is included before <linux/time.h>: >> > >> > https://github.com/mcfrisk/linux/commit/f3952a27b8a21c6478d26e6246055383483f6a66 >> >> There are a few differences between the two. Including <time.h> does not >> unconditionally define all the symbols. Some are conditional on additional >> state, such as __timespec_defined. > > Yep, your patch seems better for libc-compat.h. Could you send it again? Okay. Or feel free to include it in the patchset if that helps resolve dependencies. >> > I don't like leaving a few dozen non-compiling header files into uapi. >> >> I agree, but I do not see a simple solution. >> >> Unless libc has the analogous change, including either <time.h> or >> <linux/time.h> in userspace can unfortunately cause breakage. >> >> The added include if __KERNEL__ is defined should be safe, though. > > Yes, for the kernel side, but your libc-compat change would nice for > userspace, where something will break for sure, but providing source > API compatibility is sometimes impossible. > > To summarize, this change from me, and your libc-compat.c for time.h, or? I'm still afraid that this patch as is will break builds that include <linux/time.h> first.
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-07 00:00 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubBKy-7CQ-7@gated-at.bofh.it> |
| In reply to | #1705007 |
On Sun, Aug 06, 2017 at 05:42:13PM -0400, Willem de Bruijn wrote: > On Sun, Aug 6, 2017 at 5:33 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: > > On Sun, Aug 06, 2017 at 05:24:20PM -0400, Willem de Bruijn wrote: > >> >> > +#ifdef __KERNEL__ > >> >> > +#include <linux/time.h> > >> >> > +#else > >> >> > +#include <time.h> > >> >> > +#endif /* __KERNEL__ */ > >> >> > >> >> This will break applications that include <linux/time.h> manually. > >> >> I previously sent a patch to use libc-compat to make compilation succeed > >> >> when both are included in the case where <linux/time.h> is included after > >> >> <time.h>. > >> >> > >> >> https://lkml.org/lkml/2016/9/12/872 > >> >> > >> >> The inverse will require changes to the libc header to avoid redefining > >> >> symbols already defined by <linux/time.h> > >> >> > >> >> The second patch in that 2-patch set included <linux/time.h> > >> >> unconditionally after the fix. This broke builds that also included > >> >> <time.h> in the wrong order. I did not resubmit the first patch as a > >> >> stand-alone, as it is not sufficient to avoid breakage. > >> > > >> > I wasn't aware of your change, but I was about to send this to fix the > >> > case when glibc <time.h> is included before <linux/time.h>: > >> > > >> > https://github.com/mcfrisk/linux/commit/f3952a27b8a21c6478d26e6246055383483f6a66 > >> > >> There are a few differences between the two. Including <time.h> does not > >> unconditionally define all the symbols. Some are conditional on additional > >> state, such as __timespec_defined. > > > > Yep, your patch seems better for libc-compat.h. Could you send it again? > > Okay. Or feel free to include it in the patchset if that helps resolve > dependencies. If you don't have the time, I will send tomorrow a new version of this patch which fixes the commit topic and before that your libc-compat.h change so both could be applied together. Feel free to be faster :) > >> > I don't like leaving a few dozen non-compiling header files into uapi. > >> > >> I agree, but I do not see a simple solution. > >> > >> Unless libc has the analogous change, including either <time.h> or > >> <linux/time.h> in userspace can unfortunately cause breakage. > >> > >> The added include if __KERNEL__ is defined should be safe, though. > > > > Yes, for the kernel side, but your libc-compat change would nice for > > userspace, where something will break for sure, but providing source > > API compatibility is sometimes impossible. > > > > To summarize, this change from me, and your libc-compat.c for time.h, or? > > I'm still afraid that this patch as is will break builds that include > <linux/time.h> first. I agree, but I also want uapi headers to cleanly compile. I know this might break stuff on userspace side which rely on these broken header file dependencies, but if the fix to just re-order include statements I'm fine with it, also when the complaints hit my inbox. If I had the CPU time, memory and disk space, I'd do a full yocto distro build to see how badly userspace could break but I don't at home. -Mikko
[toc] | [prev] | [next] | [standalone]
| From | Willem de Bruijn <willemdebruijn.kernel@gmail.com> |
|---|---|
| Date | 2017-08-07 00:10 +0200 |
| Subject | Re: [PATCH v06 18/36] uapi linux/errqueue.h: include linux/time.h in user space |
| Message-ID | <ubBUd-7Vz-3@gated-at.bofh.it> |
| In reply to | #1705008 |
On Sun, Aug 6, 2017 at 5:52 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: > On Sun, Aug 06, 2017 at 05:42:13PM -0400, Willem de Bruijn wrote: >> On Sun, Aug 6, 2017 at 5:33 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: >> > On Sun, Aug 06, 2017 at 05:24:20PM -0400, Willem de Bruijn wrote: >> >> >> > +#ifdef __KERNEL__ >> >> >> > +#include <linux/time.h> >> >> >> > +#else >> >> >> > +#include <time.h> >> >> >> > +#endif /* __KERNEL__ */ >> >> >> >> >> >> This will break applications that include <linux/time.h> manually. >> >> >> I previously sent a patch to use libc-compat to make compilation succeed >> >> >> when both are included in the case where <linux/time.h> is included after >> >> >> <time.h>. >> >> >> >> >> >> https://lkml.org/lkml/2016/9/12/872 >> >> >> >> >> >> The inverse will require changes to the libc header to avoid redefining >> >> >> symbols already defined by <linux/time.h> >> >> >> >> >> >> The second patch in that 2-patch set included <linux/time.h> >> >> >> unconditionally after the fix. This broke builds that also included >> >> >> <time.h> in the wrong order. I did not resubmit the first patch as a >> >> >> stand-alone, as it is not sufficient to avoid breakage. >> >> > >> >> > I wasn't aware of your change, but I was about to send this to fix the >> >> > case when glibc <time.h> is included before <linux/time.h>: >> >> > >> >> > https://github.com/mcfrisk/linux/commit/f3952a27b8a21c6478d26e6246055383483f6a66 >> >> >> >> There are a few differences between the two. Including <time.h> does not >> >> unconditionally define all the symbols. Some are conditional on additional >> >> state, such as __timespec_defined. >> > >> > Yep, your patch seems better for libc-compat.h. Could you send it again? >> >> Okay. Or feel free to include it in the patchset if that helps resolve >> dependencies. > > If you don't have the time, I will send tomorrow a new version of this > patch which fixes the commit topic and before that your libc-compat.h change > so both could be applied together. Please do. Thanks!
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:30 +0200 |
| Subject | [PATCH v06 36/36] uapi linux/kfd_ioctl.h: use __u32 and __u64 instead of uint32_t and uint64_t |
| Message-ID | <ubxxf-59o-3@gated-at.bofh.it> |
| In reply to | #1704900 |
Include <drm/drm.h> instead of <linux/types.h> which on Linux includes
<linux/types.h> and on non-Linux platforms defines __u32 etc types.
Fixes user space compilation errors like:
linux/kfd_ioctl.h:33:2: error: unknown type name ‘uint32_t’
uint32_t major_version; /* from KFD */
^~~~~~~~
Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: Yair Shachar <yair.shachar@amd.com>
Cc: Oded Gabbay <oded.gabbay@gmail.com>
Cc: Andrew Lewycky <Andrew.Lewycky@amd.com>
---
include/uapi/linux/kfd_ioctl.h | 172 ++++++++++++++++++++---------------------
1 file changed, 86 insertions(+), 86 deletions(-)
diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h
index d6833426fdef..189ebfc2e193 100644
--- a/include/uapi/linux/kfd_ioctl.h
+++ b/include/uapi/linux/kfd_ioctl.h
@@ -23,15 +23,15 @@
#ifndef KFD_IOCTL_H_INCLUDED
#define KFD_IOCTL_H_INCLUDED
-#include <linux/types.h>
+#include <drm/drm.h>
#include <linux/ioctl.h>
#define KFD_IOCTL_MAJOR_VERSION 1
#define KFD_IOCTL_MINOR_VERSION 1
struct kfd_ioctl_get_version_args {
- uint32_t major_version; /* from KFD */
- uint32_t minor_version; /* from KFD */
+ __u32 major_version; /* from KFD */
+ __u32 minor_version; /* from KFD */
};
/* For kfd_ioctl_create_queue_args.queue_type. */
@@ -43,36 +43,36 @@ struct kfd_ioctl_get_version_args {
#define KFD_MAX_QUEUE_PRIORITY 15
struct kfd_ioctl_create_queue_args {
- uint64_t ring_base_address; /* to KFD */
- uint64_t write_pointer_address; /* from KFD */
- uint64_t read_pointer_address; /* from KFD */
- uint64_t doorbell_offset; /* from KFD */
-
- uint32_t ring_size; /* to KFD */
- uint32_t gpu_id; /* to KFD */
- uint32_t queue_type; /* to KFD */
- uint32_t queue_percentage; /* to KFD */
- uint32_t queue_priority; /* to KFD */
- uint32_t queue_id; /* from KFD */
-
- uint64_t eop_buffer_address; /* to KFD */
- uint64_t eop_buffer_size; /* to KFD */
- uint64_t ctx_save_restore_address; /* to KFD */
- uint64_t ctx_save_restore_size; /* to KFD */
+ __u64 ring_base_address; /* to KFD */
+ __u64 write_pointer_address; /* from KFD */
+ __u64 read_pointer_address; /* from KFD */
+ __u64 doorbell_offset; /* from KFD */
+
+ __u32 ring_size; /* to KFD */
+ __u32 gpu_id; /* to KFD */
+ __u32 queue_type; /* to KFD */
+ __u32 queue_percentage; /* to KFD */
+ __u32 queue_priority; /* to KFD */
+ __u32 queue_id; /* from KFD */
+
+ __u64 eop_buffer_address; /* to KFD */
+ __u64 eop_buffer_size; /* to KFD */
+ __u64 ctx_save_restore_address; /* to KFD */
+ __u64 ctx_save_restore_size; /* to KFD */
};
struct kfd_ioctl_destroy_queue_args {
- uint32_t queue_id; /* to KFD */
- uint32_t pad;
+ __u32 queue_id; /* to KFD */
+ __u32 pad;
};
struct kfd_ioctl_update_queue_args {
- uint64_t ring_base_address; /* to KFD */
+ __u64 ring_base_address; /* to KFD */
- uint32_t queue_id; /* to KFD */
- uint32_t ring_size; /* to KFD */
- uint32_t queue_percentage; /* to KFD */
- uint32_t queue_priority; /* to KFD */
+ __u32 queue_id; /* to KFD */
+ __u32 ring_size; /* to KFD */
+ __u32 queue_percentage; /* to KFD */
+ __u32 queue_priority; /* to KFD */
};
/* For kfd_ioctl_set_memory_policy_args.default_policy and alternate_policy */
@@ -80,13 +80,13 @@ struct kfd_ioctl_update_queue_args {
#define KFD_IOC_CACHE_POLICY_NONCOHERENT 1
struct kfd_ioctl_set_memory_policy_args {
- uint64_t alternate_aperture_base; /* to KFD */
- uint64_t alternate_aperture_size; /* to KFD */
+ __u64 alternate_aperture_base; /* to KFD */
+ __u64 alternate_aperture_size; /* to KFD */
- uint32_t gpu_id; /* to KFD */
- uint32_t default_policy; /* to KFD */
- uint32_t alternate_policy; /* to KFD */
- uint32_t pad;
+ __u32 gpu_id; /* to KFD */
+ __u32 default_policy; /* to KFD */
+ __u32 alternate_policy; /* to KFD */
+ __u32 pad;
};
/*
@@ -97,26 +97,26 @@ struct kfd_ioctl_set_memory_policy_args {
*/
struct kfd_ioctl_get_clock_counters_args {
- uint64_t gpu_clock_counter; /* from KFD */
- uint64_t cpu_clock_counter; /* from KFD */
- uint64_t system_clock_counter; /* from KFD */
- uint64_t system_clock_freq; /* from KFD */
+ __u64 gpu_clock_counter; /* from KFD */
+ __u64 cpu_clock_counter; /* from KFD */
+ __u64 system_clock_counter; /* from KFD */
+ __u64 system_clock_freq; /* from KFD */
- uint32_t gpu_id; /* to KFD */
- uint32_t pad;
+ __u32 gpu_id; /* to KFD */
+ __u32 pad;
};
#define NUM_OF_SUPPORTED_GPUS 7
struct kfd_process_device_apertures {
- uint64_t lds_base; /* from KFD */
- uint64_t lds_limit; /* from KFD */
- uint64_t scratch_base; /* from KFD */
- uint64_t scratch_limit; /* from KFD */
- uint64_t gpuvm_base; /* from KFD */
- uint64_t gpuvm_limit; /* from KFD */
- uint32_t gpu_id; /* from KFD */
- uint32_t pad;
+ __u64 lds_base; /* from KFD */
+ __u64 lds_limit; /* from KFD */
+ __u64 scratch_base; /* from KFD */
+ __u64 scratch_limit; /* from KFD */
+ __u64 gpuvm_base; /* from KFD */
+ __u64 gpuvm_limit; /* from KFD */
+ __u32 gpu_id; /* from KFD */
+ __u32 pad;
};
struct kfd_ioctl_get_process_apertures_args {
@@ -124,8 +124,8 @@ struct kfd_ioctl_get_process_apertures_args {
process_apertures[NUM_OF_SUPPORTED_GPUS];/* from KFD */
/* from KFD, should be in the range [1 - NUM_OF_SUPPORTED_GPUS] */
- uint32_t num_of_nodes;
- uint32_t pad;
+ __u32 num_of_nodes;
+ __u32 pad;
};
#define MAX_ALLOWED_NUM_POINTS 100
@@ -133,25 +133,25 @@ struct kfd_ioctl_get_process_apertures_args {
#define MAX_ALLOWED_WAC_BUFF_SIZE 128
struct kfd_ioctl_dbg_register_args {
- uint32_t gpu_id; /* to KFD */
- uint32_t pad;
+ __u32 gpu_id; /* to KFD */
+ __u32 pad;
};
struct kfd_ioctl_dbg_unregister_args {
- uint32_t gpu_id; /* to KFD */
- uint32_t pad;
+ __u32 gpu_id; /* to KFD */
+ __u32 pad;
};
struct kfd_ioctl_dbg_address_watch_args {
- uint64_t content_ptr; /* a pointer to the actual content */
- uint32_t gpu_id; /* to KFD */
- uint32_t buf_size_in_bytes; /*including gpu_id and buf_size */
+ __u64 content_ptr; /* a pointer to the actual content */
+ __u32 gpu_id; /* to KFD */
+ __u32 buf_size_in_bytes; /*including gpu_id and buf_size */
};
struct kfd_ioctl_dbg_wave_control_args {
- uint64_t content_ptr; /* a pointer to the actual content */
- uint32_t gpu_id; /* to KFD */
- uint32_t buf_size_in_bytes; /*including gpu_id and buf_size */
+ __u64 content_ptr; /* a pointer to the actual content */
+ __u32 gpu_id; /* to KFD */
+ __u32 buf_size_in_bytes; /*including gpu_id and buf_size */
};
/* Matching HSA_EVENTTYPE */
@@ -172,44 +172,44 @@ struct kfd_ioctl_dbg_wave_control_args {
#define KFD_SIGNAL_EVENT_LIMIT 256
struct kfd_ioctl_create_event_args {
- uint64_t event_page_offset; /* from KFD */
- uint32_t event_trigger_data; /* from KFD - signal events only */
- uint32_t event_type; /* to KFD */
- uint32_t auto_reset; /* to KFD */
- uint32_t node_id; /* to KFD - only valid for certain
+ __u64 event_page_offset; /* from KFD */
+ __u32 event_trigger_data; /* from KFD - signal events only */
+ __u32 event_type; /* to KFD */
+ __u32 auto_reset; /* to KFD */
+ __u32 node_id; /* to KFD - only valid for certain
event types */
- uint32_t event_id; /* from KFD */
- uint32_t event_slot_index; /* from KFD */
+ __u32 event_id; /* from KFD */
+ __u32 event_slot_index; /* from KFD */
};
struct kfd_ioctl_destroy_event_args {
- uint32_t event_id; /* to KFD */
- uint32_t pad;
+ __u32 event_id; /* to KFD */
+ __u32 pad;
};
struct kfd_ioctl_set_event_args {
- uint32_t event_id; /* to KFD */
- uint32_t pad;
+ __u32 event_id; /* to KFD */
+ __u32 pad;
};
struct kfd_ioctl_reset_event_args {
- uint32_t event_id; /* to KFD */
- uint32_t pad;
+ __u32 event_id; /* to KFD */
+ __u32 pad;
};
struct kfd_memory_exception_failure {
- uint32_t NotPresent; /* Page not present or supervisor privilege */
- uint32_t ReadOnly; /* Write access to a read-only page */
- uint32_t NoExecute; /* Execute access to a page marked NX */
- uint32_t pad;
+ __u32 NotPresent; /* Page not present or supervisor privilege */
+ __u32 ReadOnly; /* Write access to a read-only page */
+ __u32 NoExecute; /* Execute access to a page marked NX */
+ __u32 pad;
};
/* memory exception data*/
struct kfd_hsa_memory_exception_data {
struct kfd_memory_exception_failure failure;
- uint64_t va;
- uint32_t gpu_id;
- uint32_t pad;
+ __u64 va;
+ __u32 gpu_id;
+ __u32 pad;
};
/* Event data*/
@@ -217,19 +217,19 @@ struct kfd_event_data {
union {
struct kfd_hsa_memory_exception_data memory_exception_data;
}; /* From KFD */
- uint64_t kfd_event_data_ext; /* pointer to an extension structure
+ __u64 kfd_event_data_ext; /* pointer to an extension structure
for future exception types */
- uint32_t event_id; /* to KFD */
- uint32_t pad;
+ __u32 event_id; /* to KFD */
+ __u32 pad;
};
struct kfd_ioctl_wait_events_args {
- uint64_t events_ptr; /* pointed to struct
+ __u64 events_ptr; /* pointed to struct
kfd_event_data array, to KFD */
- uint32_t num_events; /* to KFD */
- uint32_t wait_for_all; /* to KFD */
- uint32_t timeout; /* to KFD */
- uint32_t wait_result; /* from KFD */
+ __u32 num_events; /* to KFD */
+ __u32 wait_for_all; /* to KFD */
+ __u32 timeout; /* to KFD */
+ __u32 wait_result; /* from KFD */
};
#define AMDKFD_IOCTL_BASE 'K'
--
2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Arnd Bergmann <arnd@arndb.de> |
|---|---|
| Date | 2017-08-07 17:10 +0200 |
| Subject | Re: [PATCH v06 36/36] uapi linux/kfd_ioctl.h: use __u32 and __u64 instead of uint32_t and uint64_t |
| Message-ID | <ubRPk-1xo-21@gated-at.bofh.it> |
| In reply to | #1704912 |
On Sun, Aug 6, 2017 at 6:44 PM, Mikko Rapeli <mikko.rapeli@iki.fi> wrote: > Include <drm/drm.h> instead of <linux/types.h> which on Linux includes > <linux/types.h> and on non-Linux platforms defines __u32 etc types. > > Fixes user space compilation errors like: > > linux/kfd_ioctl.h:33:2: error: unknown type name ‘uint32_t’ > uint32_t major_version; /* from KFD */ > ^~~~~~~~ > > Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi> > Cc: Yair Shachar <yair.shachar@amd.com> > Cc: Oded Gabbay <oded.gabbay@gmail.com> > Cc: Andrew Lewycky <Andrew.Lewycky@amd.com> Looks good to me, Acked-by: Arnd Bergmann <arnd@arndb.de>
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:30 +0200 |
| Subject | [PATCH v06 06/36] uapi asm-generic/ipcbuf.h: include linux/posix_types.h |
| Message-ID | <ubxxf-59o-5@gated-at.bofh.it> |
| In reply to | #1704900 |
Fixes userspace compilation error: error: unknown type name ‘__kernel_key_t’ Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi> Acked-by: Arnd Bergmann <arnd@arndb.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: H.J. Lu <hjl.tools@gmail.com> --- include/uapi/asm-generic/ipcbuf.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/uapi/asm-generic/ipcbuf.h b/include/uapi/asm-generic/ipcbuf.h index 3dbcc1e771c0..909f825096f4 100644 --- a/include/uapi/asm-generic/ipcbuf.h +++ b/include/uapi/asm-generic/ipcbuf.h @@ -1,6 +1,8 @@ #ifndef __ASM_GENERIC_IPCBUF_H #define __ASM_GENERIC_IPCBUF_H +#include <linux/posix_types.h> + /* * The generic ipc64_perm structure: * Note extra padding because this structure is passed back and forth -- 2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:30 +0200 |
| Subject | [PATCH v06 17/36] uapi linux/sctp.h: use __u8, __u16 and __u32 from linux/types.h |
| Message-ID | <ubxxf-59o-7@gated-at.bofh.it> |
| In reply to | #1704900 |
Fixes userspace compilation errors like:
linux/sctp.h:652:2: error: unknown type name ‘uint32_t’
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Cc: Xin Long <lucien.xin@gmail.com>
Cc: Phil Sutter <phil@nwl.cc>
---
include/uapi/linux/sctp.h | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/include/uapi/linux/sctp.h b/include/uapi/linux/sctp.h
index 6217ff8500a1..d8b83fd56572 100644
--- a/include/uapi/linux/sctp.h
+++ b/include/uapi/linux/sctp.h
@@ -805,13 +805,13 @@ struct sctp_authkeyid {
*/
struct sctp_sack_info {
sctp_assoc_t sack_assoc_id;
- uint32_t sack_delay;
- uint32_t sack_freq;
+ __u32 sack_delay;
+ __u32 sack_freq;
};
struct sctp_assoc_value {
- sctp_assoc_t assoc_id;
- uint32_t assoc_value;
+ sctp_assoc_t assoc_id;
+ __u32 assoc_value;
};
/*
@@ -881,7 +881,7 @@ struct sctp_status {
struct sctp_authchunks {
sctp_assoc_t gauth_assoc_id;
__u32 gauth_number_of_chunks;
- uint8_t gauth_chunks[];
+ __u8 gauth_chunks[];
};
/* The broken spelling has been released already in lksctp-tools header,
@@ -1077,15 +1077,15 @@ struct sctp_info {
struct sctp_reset_streams {
sctp_assoc_t srs_assoc_id;
- uint16_t srs_flags;
- uint16_t srs_number_streams; /* 0 == ALL */
- uint16_t srs_stream_list[]; /* list if srs_num_streams is not 0 */
+ __u16 srs_flags;
+ __u16 srs_number_streams; /* 0 == ALL */
+ __u16 srs_stream_list[]; /* list if srs_num_streams is not 0 */
};
struct sctp_add_streams {
sctp_assoc_t sas_assoc_id;
- uint16_t sas_instrms;
- uint16_t sas_outstrms;
+ __u16 sas_instrms;
+ __u16 sas_outstrms;
};
#endif /* _UAPI_SCTP_H */
--
2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:30 +0200 |
| Subject | [PATCH v06 07/36] uapi asm-generic/msgbuf.h: include asm/ipcbuf.h |
| Message-ID | <ubxxf-59o-9@gated-at.bofh.it> |
| In reply to | #1704900 |
Fixes userspace compilation errors like: error: field ‘msg_perm’ has incomplete type struct ipc64_perm msg_perm Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi> Acked-by: Arnd Bergmann <arnd@arndb.de> Cc: H.J. Lu <hjl.tools@gmail.com> Cc: H. Peter Anvin <hpa@zytor.com> --- include/uapi/asm-generic/msgbuf.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/uapi/asm-generic/msgbuf.h b/include/uapi/asm-generic/msgbuf.h index f55ecc43c60f..f5fbd8e8ab05 100644 --- a/include/uapi/asm-generic/msgbuf.h +++ b/include/uapi/asm-generic/msgbuf.h @@ -2,6 +2,8 @@ #define __ASM_GENERIC_MSGBUF_H #include <asm/bitsperlong.h> +#include <asm/ipcbuf.h> + /* * generic msqid64_ds structure. * -- 2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:30 +0200 |
| Subject | [PATCH v06 25/36] uapi linux/android/binder.h: use __kernel_pid_t and __kernel_uid_t |
| Message-ID | <ubxxf-59o-11@gated-at.bofh.it> |
| In reply to | #1704900 |
Fixes userspace compilation errors:
error: unknown type name ‘pid_t’
pid_t sender_pid
error: unknown type name ‘uid_t’
uid_t sender_euid;
Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Arve Hjønnevåg <arve@android.com>
Cc: Riley Andrews <riandrews@android.com>
Cc: Todd Kjos <tkjos@android.com>
Cc: Martijn Coenen <maco@google.com>
Cc: devel@driverdev.osuosl.org
---
include/uapi/linux/android/binder.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/uapi/linux/android/binder.h b/include/uapi/linux/android/binder.h
index 51f891fb1b18..4f7247722ad6 100644
--- a/include/uapi/linux/android/binder.h
+++ b/include/uapi/linux/android/binder.h
@@ -229,8 +229,8 @@ struct binder_transaction_data {
/* General information about the transaction. */
__u32 flags;
- pid_t sender_pid;
- uid_t sender_euid;
+ __kernel_pid_t sender_pid;
+ __kernel_uid_t sender_euid;
binder_size_t data_size; /* number of bytes of data */
binder_size_t offsets_size; /* number of bytes of offsets */
--
2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:30 +0200 |
| Subject | [PATCH v06 02/36] uapi scsi/scsi_bsg_fc.h: use __u8, __u32 and __u64 from linux/types.h |
| Message-ID | <ubxxg-59o-19@gated-at.bofh.it> |
| In reply to | #1704900 |
Fixes userspace compilation errors like:
scsi/scsi_bsg_fc.h:83:2: error: unknown type name ‘uint8_t’
Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: linux-scsi@vger.kernel.org
---
include/uapi/scsi/scsi_bsg_fc.h | 54 +++++++++++++++++++++--------------------
1 file changed, 28 insertions(+), 26 deletions(-)
diff --git a/include/uapi/scsi/scsi_bsg_fc.h b/include/uapi/scsi/scsi_bsg_fc.h
index 3031b900b087..1a2044755636 100644
--- a/include/uapi/scsi/scsi_bsg_fc.h
+++ b/include/uapi/scsi/scsi_bsg_fc.h
@@ -22,6 +22,8 @@
#ifndef SCSI_BSG_FC_H
#define SCSI_BSG_FC_H
+#include <linux/types.h>
+
/*
* This file intended to be included by both kernel and user space
*/
@@ -80,10 +82,10 @@
* with the transport upon completion of the login.
*/
struct fc_bsg_host_add_rport {
- uint8_t reserved;
+ __u8 reserved;
/* FC Address Identier of the remote port to login to */
- uint8_t port_id[3];
+ __u8 port_id[3];
};
/* Response:
@@ -101,10 +103,10 @@ struct fc_bsg_host_add_rport {
* remain logged in with the remote port.
*/
struct fc_bsg_host_del_rport {
- uint8_t reserved;
+ __u8 reserved;
/* FC Address Identier of the remote port to logout of */
- uint8_t port_id[3];
+ __u8 port_id[3];
};
/* Response:
@@ -125,10 +127,10 @@ struct fc_bsg_host_els {
* ELS Command Code being sent (must be the same as byte 0
* of the payload)
*/
- uint8_t command_code;
+ __u8 command_code;
/* FC Address Identier of the remote port to send the ELS to */
- uint8_t port_id[3];
+ __u8 port_id[3];
};
/* Response:
@@ -165,14 +167,14 @@ struct fc_bsg_ctels_reply {
* Note: x_RJT/BSY status will indicae that the rjt_data field
* is valid and contains the reason/explanation values.
*/
- uint32_t status; /* See FC_CTELS_STATUS_xxx */
+ __u32 status; /* See FC_CTELS_STATUS_xxx */
/* valid if status is not FC_CTELS_STATUS_OK */
struct {
- uint8_t action; /* fragment_id for CT REJECT */
- uint8_t reason_code;
- uint8_t reason_explanation;
- uint8_t vendor_unique;
+ __u8 action; /* fragment_id for CT REJECT */
+ __u8 reason_code;
+ __u8 reason_explanation;
+ __u8 vendor_unique;
} rjt_data;
};
@@ -188,17 +190,17 @@ struct fc_bsg_ctels_reply {
* and whether to tear it down after the request.
*/
struct fc_bsg_host_ct {
- uint8_t reserved;
+ __u8 reserved;
/* FC Address Identier of the remote port to send the ELS to */
- uint8_t port_id[3];
+ __u8 port_id[3];
/*
* We need words 0-2 of the generic preamble for the LLD's
*/
- uint32_t preamble_word0; /* revision & IN_ID */
- uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */
- uint32_t preamble_word2; /* Cmd Code, Max Size */
+ __u32 preamble_word0; /* revision & IN_ID */
+ __u32 preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */
+ __u32 preamble_word2; /* Cmd Code, Max Size */
};
/* Response:
@@ -218,17 +220,17 @@ struct fc_bsg_host_vendor {
* Identifies the vendor that the message is formatted for. This
* should be the recipient of the message.
*/
- uint64_t vendor_id;
+ __u64 vendor_id;
/* start of vendor command area */
- uint32_t vendor_cmd[0];
+ __u32 vendor_cmd[0];
};
/* Response:
*/
struct fc_bsg_host_vendor_reply {
/* start of vendor response area */
- uint32_t vendor_rsp[0];
+ __u32 vendor_rsp[0];
};
@@ -247,7 +249,7 @@ struct fc_bsg_rport_els {
* ELS Command Code being sent (must be the same as
* byte 0 of the payload)
*/
- uint8_t els_code;
+ __u8 els_code;
};
/* Response:
@@ -265,9 +267,9 @@ struct fc_bsg_rport_ct {
/*
* We need words 0-2 of the generic preamble for the LLD's
*/
- uint32_t preamble_word0; /* revision & IN_ID */
- uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */
- uint32_t preamble_word2; /* Cmd Code, Max Size */
+ __u32 preamble_word0; /* revision & IN_ID */
+ __u32 preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */
+ __u32 preamble_word2; /* Cmd Code, Max Size */
};
/* Response:
*
@@ -279,7 +281,7 @@ struct fc_bsg_rport_ct {
/* request (CDB) structure of the sg_io_v4 */
struct fc_bsg_request {
- uint32_t msgcode;
+ __u32 msgcode;
union {
struct fc_bsg_host_add_rport h_addrport;
struct fc_bsg_host_del_rport h_delrport;
@@ -303,10 +305,10 @@ struct fc_bsg_reply {
* msg and status fields. The per-msgcode reply structure
* will contain valid data.
*/
- uint32_t result;
+ __u32 result;
/* If there was reply_payload, how much was recevied ? */
- uint32_t reply_payload_rcv_len;
+ __u32 reply_payload_rcv_len;
union {
struct fc_bsg_host_vendor_reply vendor_reply;
--
2.13.3
[toc] | [prev] | [next] | [standalone]
| From | Mikko Rapeli <mikko.rapeli@iki.fi> |
|---|---|
| Date | 2017-08-06 19:30 +0200 |
| Subject | [PATCH v06 11/36] uapi asm-generic/ucontext.h: include asm/signal.h and asm/sigcontext.h |
| Message-ID | <ubxxg-59o-31@gated-at.bofh.it> |
| In reply to | #1704900 |
Fixes userspace compiler errors:
error: unknown type name ‘stack_t’
error: field ‘uc_mcontext’ has incomplete type
struct sigcontext uc_mcontext;
error: unknown type name ‘sigset_t’
Signed-off-by: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
---
include/uapi/asm-generic/ucontext.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/include/uapi/asm-generic/ucontext.h b/include/uapi/asm-generic/ucontext.h
index ad77343e8a9a..448152801c4f 100644
--- a/include/uapi/asm-generic/ucontext.h
+++ b/include/uapi/asm-generic/ucontext.h
@@ -1,6 +1,9 @@
#ifndef __ASM_GENERIC_UCONTEXT_H
#define __ASM_GENERIC_UCONTEXT_H
+#include <asm/signal.h>
+#include <asm/sigcontext.h>
+
struct ucontext {
unsigned long uc_flags;
struct ucontext *uc_link;
--
2.13.3
[toc] | [prev] | [next] | [standalone]
Page 2 of 3 — ← Prev page 1 [2] 3 Next page →
Back to top | Article view | linux.kernel
csiph-web