2021-08-01 20:14:44

by Alexey Dobriyan

[permalink] [raw]
Subject: [PATCH 1/3] isystem: trim/fixup stdarg.h and other headers

Delete/fixup few includes in anticipation of global -isystem compile
option removal.

Cc: Jeff Dike <[email protected]>
Cc: Richard Weinberger <[email protected]>
Cc: Anton Ivanov <[email protected]>
Cc: [email protected]
Signed-off-by: Alexey Dobriyan <[email protected]>
---
arch/arm/kernel/process.c | 2 --
arch/arm/mach-bcm/bcm_kona_smc.c | 2 --
arch/arm64/kernel/process.c | 3 ---
arch/openrisc/kernel/process.c | 2 --
arch/parisc/kernel/process.c | 3 ---
arch/powerpc/kernel/prom.c | 1 -
arch/sparc/kernel/process_32.c | 3 ---
arch/sparc/kernel/process_64.c | 3 ---
arch/um/drivers/rtc_user.c | 1 +
arch/um/drivers/vector_user.c | 1 +
arch/um/include/shared/irq_user.h | 1 -
arch/um/include/shared/os.h | 1 -
arch/um/os-Linux/signal.c | 2 +-
arch/um/os-Linux/util.c | 1 +
crypto/aegis128-neon-inner.c | 2 +-
drivers/block/xen-blkback/xenbus.c | 1 -
drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h | 1 -
drivers/gpu/drm/msm/disp/msm_disp_snapshot.h | 1 -
drivers/macintosh/macio-adb.c | 1 -
drivers/macintosh/via-macii.c | 2 --
drivers/net/wireless/intersil/orinoco/hermes.c | 1 -
drivers/net/wwan/iosm/iosm_ipc_imem.h | 1 -
drivers/pinctrl/aspeed/pinmux-aspeed.h | 1 -
drivers/scsi/elx/efct/efct_driver.h | 1 -
.../media/atomisp/pci/hive_isp_css_common/host/isp_local.h | 2 --
drivers/xen/xen-scsiback.c | 2 --
include/linux/filter.h | 2 --
include/linux/mISDNif.h | 1 -
kernel/debug/kdb/kdb_support.c | 1 -
sound/aoa/codecs/onyx.h | 1 -
sound/aoa/codecs/tas.c | 1 -
sound/core/info.c | 1 -
32 files changed, 5 insertions(+), 44 deletions(-)

diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index fc9e8b37eaa8..bb5ad8a6a4c3 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -5,8 +5,6 @@
* Copyright (C) 1996-2000 Russell King - Converted to ARM.
* Original Copyright (C) 1995 Linus Torvalds
*/
-#include <stdarg.h>
-
#include <linux/export.h>
#include <linux/sched.h>
#include <linux/sched/debug.h>
diff --git a/arch/arm/mach-bcm/bcm_kona_smc.c b/arch/arm/mach-bcm/bcm_kona_smc.c
index 43a16f922b53..43829e49ad93 100644
--- a/arch/arm/mach-bcm/bcm_kona_smc.c
+++ b/arch/arm/mach-bcm/bcm_kona_smc.c
@@ -10,8 +10,6 @@
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
-
-#include <stdarg.h>
#include <linux/smp.h>
#include <linux/io.h>
#include <linux/ioport.h>
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index c8989b999250..5f7ac9a0f9a3 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -6,9 +6,6 @@
* Copyright (C) 1996-2000 Russell King - Converted to ARM.
* Copyright (C) 2012 ARM Ltd.
*/
-
-#include <stdarg.h>
-
#include <linux/compat.h>
#include <linux/efi.h>
#include <linux/elf.h>
diff --git a/arch/openrisc/kernel/process.c b/arch/openrisc/kernel/process.c
index eb62429681fc..b0698d9ce14f 100644
--- a/arch/openrisc/kernel/process.c
+++ b/arch/openrisc/kernel/process.c
@@ -14,8 +14,6 @@
*/

#define __KERNEL_SYSCALLS__
-#include <stdarg.h>
-
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/sched/debug.h>
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c
index 184ec3c1eae4..38ec4ae81239 100644
--- a/arch/parisc/kernel/process.c
+++ b/arch/parisc/kernel/process.c
@@ -17,9 +17,6 @@
* Copyright (C) 2001-2014 Helge Deller <[email protected]>
* Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org>
*/
-
-#include <stdarg.h>
-
#include <linux/elf.h>
#include <linux/errno.h>
#include <linux/kernel.h>
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index f620e04dc9bf..a1e7ba0fad09 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -11,7 +11,6 @@

#undef DEBUG

-#include <stdarg.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/init.h>
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c
index 93983d6d431d..bbbe0cfef746 100644
--- a/arch/sparc/kernel/process_32.c
+++ b/arch/sparc/kernel/process_32.c
@@ -8,9 +8,6 @@
/*
* This file handles the architecture-dependent parts of process handling..
*/
-
-#include <stdarg.h>
-
#include <linux/elfcore.h>
#include <linux/errno.h>
#include <linux/module.h>
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index d33c58a58d4f..0cabcdfb23fd 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -9,9 +9,6 @@
/*
* This file handles the architecture-dependent parts of process handling..
*/
-
-#include <stdarg.h>
-
#include <linux/errno.h>
#include <linux/export.h>
#include <linux/sched.h>
diff --git a/arch/um/drivers/rtc_user.c b/arch/um/drivers/rtc_user.c
index 4016bc1d577e..7c3cec4c68cf 100644
--- a/arch/um/drivers/rtc_user.c
+++ b/arch/um/drivers/rtc_user.c
@@ -3,6 +3,7 @@
* Copyright (C) 2020 Intel Corporation
* Author: Johannes Berg <[email protected]>
*/
+#include <stdbool.h>
#include <os.h>
#include <errno.h>
#include <sched.h>
diff --git a/arch/um/drivers/vector_user.c b/arch/um/drivers/vector_user.c
index bae53220ce26..e4ffeb9a1fa4 100644
--- a/arch/um/drivers/vector_user.c
+++ b/arch/um/drivers/vector_user.c
@@ -3,6 +3,7 @@
* Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
*/

+#include <stdbool.h>
#include <stdio.h>
#include <unistd.h>
#include <stdarg.h>
diff --git a/arch/um/include/shared/irq_user.h b/arch/um/include/shared/irq_user.h
index 065829f443ae..86a8a573b65c 100644
--- a/arch/um/include/shared/irq_user.h
+++ b/arch/um/include/shared/irq_user.h
@@ -7,7 +7,6 @@
#define __IRQ_USER_H__

#include <sysdep/ptrace.h>
-#include <stdbool.h>

enum um_irq_type {
IRQ_READ,
diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h
index 60b84edc8a68..96d400387c93 100644
--- a/arch/um/include/shared/os.h
+++ b/arch/um/include/shared/os.h
@@ -8,7 +8,6 @@
#ifndef __OS_H__
#define __OS_H__

-#include <stdarg.h>
#include <irq_user.h>
#include <longjmp.h>
#include <mm_id.h>
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c
index 6de99bb16113..6cf098c23a39 100644
--- a/arch/um/os-Linux/signal.c
+++ b/arch/um/os-Linux/signal.c
@@ -67,7 +67,7 @@ int signals_enabled;
#ifdef UML_CONFIG_UML_TIME_TRAVEL_SUPPORT
static int signals_blocked;
#else
-#define signals_blocked false
+#define signals_blocked 0
#endif
static unsigned int signals_pending;
static unsigned int signals_active = 0;
diff --git a/arch/um/os-Linux/util.c b/arch/um/os-Linux/util.c
index 07327425d06e..41297ec404bf 100644
--- a/arch/um/os-Linux/util.c
+++ b/arch/um/os-Linux/util.c
@@ -3,6 +3,7 @@
* Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
*/

+#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/crypto/aegis128-neon-inner.c b/crypto/aegis128-neon-inner.c
index 7de485907d81..371caf295eb5 100644
--- a/crypto/aegis128-neon-inner.c
+++ b/crypto/aegis128-neon-inner.c
@@ -15,7 +15,7 @@

#define AEGIS_BLOCK_SIZE 16

-#include <stddef.h>
+#include <linux/types.h>

extern int aegis128_have_aes_insn;

diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
index 125b22205d38..33eba3df4dd9 100644
--- a/drivers/block/xen-blkback/xenbus.c
+++ b/drivers/block/xen-blkback/xenbus.c
@@ -8,7 +8,6 @@

#define pr_fmt(fmt) "xen-blkback: " fmt

-#include <stdarg.h>
#include <linux/module.h>
#include <linux/kthread.h>
#include <xen/events.h>
diff --git a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
index 7c4734f905d9..68fd451aca23 100644
--- a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
+++ b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
@@ -39,7 +39,6 @@
#include <linux/types.h>
#include <linux/string.h>
#include <linux/delay.h>
-#include <stdarg.h>

#include "atomfirmware.h"

diff --git a/drivers/gpu/drm/msm/disp/msm_disp_snapshot.h b/drivers/gpu/drm/msm/disp/msm_disp_snapshot.h
index c92a9508c8d3..0f9a5364cd86 100644
--- a/drivers/gpu/drm/msm/disp/msm_disp_snapshot.h
+++ b/drivers/gpu/drm/msm/disp/msm_disp_snapshot.h
@@ -25,7 +25,6 @@
#include <linux/pm_runtime.h>
#include <linux/kthread.h>
#include <linux/devcoredump.h>
-#include <stdarg.h>
#include "msm_kms.h"

#define MSM_DISP_SNAPSHOT_MAX_BLKS 10
diff --git a/drivers/macintosh/macio-adb.c b/drivers/macintosh/macio-adb.c
index d4759db002c6..dc634c2932fd 100644
--- a/drivers/macintosh/macio-adb.c
+++ b/drivers/macintosh/macio-adb.c
@@ -2,7 +2,6 @@
/*
* Driver for the ADB controller in the Mac I/O (Hydra) chip.
*/
-#include <stdarg.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/kernel.h>
diff --git a/drivers/macintosh/via-macii.c b/drivers/macintosh/via-macii.c
index 060e03f2264b..db9270da5b8e 100644
--- a/drivers/macintosh/via-macii.c
+++ b/drivers/macintosh/via-macii.c
@@ -23,8 +23,6 @@
* Apple's "ADB Analyzer" bus sniffer is invaluable:
* ftp://ftp.apple.com/developer/Tool_Chest/Devices_-_Hardware/Apple_Desktop_Bus/
*/
-
-#include <stdarg.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/kernel.h>
diff --git a/drivers/net/wireless/intersil/orinoco/hermes.c b/drivers/net/wireless/intersil/orinoco/hermes.c
index 6d4b7f64efcf..256946552742 100644
--- a/drivers/net/wireless/intersil/orinoco/hermes.c
+++ b/drivers/net/wireless/intersil/orinoco/hermes.c
@@ -79,7 +79,6 @@

#undef HERMES_DEBUG
#ifdef HERMES_DEBUG
-#include <stdarg.h>

#define DEBUG(lvl, stuff...) if ((lvl) <= HERMES_DEBUG) DMSG(stuff)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.h b/drivers/net/wwan/iosm/iosm_ipc_imem.h
index 0d2f10e4cbc8..dc65b0712261 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem.h
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.h
@@ -7,7 +7,6 @@
#define IOSM_IPC_IMEM_H

#include <linux/skbuff.h>
-#include <stdbool.h>

#include "iosm_ipc_mmio.h"
#include "iosm_ipc_pcie.h"
diff --git a/drivers/pinctrl/aspeed/pinmux-aspeed.h b/drivers/pinctrl/aspeed/pinmux-aspeed.h
index b69ba6b360a2..4d7548686f39 100644
--- a/drivers/pinctrl/aspeed/pinmux-aspeed.h
+++ b/drivers/pinctrl/aspeed/pinmux-aspeed.h
@@ -5,7 +5,6 @@
#define ASPEED_PINMUX_H

#include <linux/regmap.h>
-#include <stdbool.h>

/*
* The ASPEED SoCs provide typically more than 200 pins for GPIO and other
diff --git a/drivers/scsi/elx/efct/efct_driver.h b/drivers/scsi/elx/efct/efct_driver.h
index dab8eac4f243..0e3c931db7c2 100644
--- a/drivers/scsi/elx/efct/efct_driver.h
+++ b/drivers/scsi/elx/efct/efct_driver.h
@@ -10,7 +10,6 @@
/***************************************************************************
* OS specific includes
*/
-#include <stdarg.h>
#include <linux/module.h>
#include <linux/debugfs.h>
#include <linux/firmware.h>
diff --git a/drivers/staging/media/atomisp/pci/hive_isp_css_common/host/isp_local.h b/drivers/staging/media/atomisp/pci/hive_isp_css_common/host/isp_local.h
index eceeb5d160ad..4dbec4063b3d 100644
--- a/drivers/staging/media/atomisp/pci/hive_isp_css_common/host/isp_local.h
+++ b/drivers/staging/media/atomisp/pci/hive_isp_css_common/host/isp_local.h
@@ -16,8 +16,6 @@
#ifndef __ISP_LOCAL_H_INCLUDED__
#define __ISP_LOCAL_H_INCLUDED__

-#include <stdbool.h>
-
#include "isp_global.h"

#include <isp2400_support.h>
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
index 61ce0d142eea..0c5e565aa8cf 100644
--- a/drivers/xen/xen-scsiback.c
+++ b/drivers/xen/xen-scsiback.c
@@ -33,8 +33,6 @@

#define pr_fmt(fmt) "xen-pvscsi: " fmt

-#include <stdarg.h>
-
#include <linux/module.h>
#include <linux/utsname.h>
#include <linux/interrupt.h>
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 472f97074da0..45785fc231a8 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -5,8 +5,6 @@
#ifndef __LINUX_FILTER_H__
#define __LINUX_FILTER_H__

-#include <stdarg.h>
-
#include <linux/atomic.h>
#include <linux/refcount.h>
#include <linux/compat.h>
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h
index a7330eb3ec64..7dd1f01ec4f9 100644
--- a/include/linux/mISDNif.h
+++ b/include/linux/mISDNif.h
@@ -18,7 +18,6 @@
#ifndef mISDNIF_H
#define mISDNIF_H

-#include <stdarg.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/socket.h>
diff --git a/kernel/debug/kdb/kdb_support.c b/kernel/debug/kdb/kdb_support.c
index 9f50d22d68e6..4f9950678e7b 100644
--- a/kernel/debug/kdb/kdb_support.c
+++ b/kernel/debug/kdb/kdb_support.c
@@ -10,7 +10,6 @@
* 03/02/13 added new 2.5 kallsyms <[email protected]>
*/

-#include <stdarg.h>
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/mm.h>
diff --git a/sound/aoa/codecs/onyx.h b/sound/aoa/codecs/onyx.h
index 8a32c3c3d716..6c31b7373b78 100644
--- a/sound/aoa/codecs/onyx.h
+++ b/sound/aoa/codecs/onyx.h
@@ -6,7 +6,6 @@
*/
#ifndef __SND_AOA_CODEC_ONYX_H
#define __SND_AOA_CODEC_ONYX_H
-#include <stddef.h>
#include <linux/i2c.h>
#include <asm/pmac_low_i2c.h>
#include <asm/prom.h>
diff --git a/sound/aoa/codecs/tas.c b/sound/aoa/codecs/tas.c
index ac246dd3ab49..ab19a37e2a68 100644
--- a/sound/aoa/codecs/tas.c
+++ b/sound/aoa/codecs/tas.c
@@ -58,7 +58,6 @@
* and up to the hardware designer to not wire
* them up in some weird unusable way.
*/
-#include <stddef.h>
#include <linux/i2c.h>
#include <asm/pmac_low_i2c.h>
#include <asm/prom.h>
diff --git a/sound/core/info.c b/sound/core/info.c
index 9fec3070f8ba..a451b24199c3 100644
--- a/sound/core/info.c
+++ b/sound/core/info.c
@@ -16,7 +16,6 @@
#include <linux/utsname.h>
#include <linux/proc_fs.h>
#include <linux/mutex.h>
-#include <stdarg.h>

int snd_info_check_reserved_words(const char *str)
{
--
2.31.1



2021-08-01 20:15:04

by Alexey Dobriyan

[permalink] [raw]
Subject: [PATCH 2/3] isystem: ship and use stdarg.h

Ship minimal stdarg.h (1 type, 4 macros) as <linux/stdarg.h>.
stdarg.h is the only userspace header commonly used in the kernel.

GPL 2 version of <stdarg.h> can be extracted from
http://archive.debian.org/debian/pool/main/g/gcc-4.2/gcc-4.2_4.2.4.orig.tar.gz

Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Len Brown <[email protected]>
Cc: [email protected]
Cc: Ard Biesheuvel <[email protected]>
Cc: [email protected]
Signed-off-by: Alexey Dobriyan <[email protected]>
---
arch/parisc/kernel/firmware.c | 2 +-
arch/powerpc/kernel/prom_init.c | 2 +-
arch/powerpc/kernel/rtas.c | 2 +-
arch/powerpc/kernel/udbg.c | 2 +-
arch/s390/boot/pgm_check_info.c | 2 +-
arch/x86/boot/boot.h | 2 +-
drivers/firmware/efi/libstub/efi-stub-helper.c | 2 +-
drivers/firmware/efi/libstub/vsprintf.c | 2 +-
drivers/gpu/drm/amd/display/dc/dc_helper.c | 2 +-
drivers/gpu/drm/drm_print.c | 2 +-
drivers/isdn/capi/capiutil.c | 2 +-
drivers/macintosh/via-cuda.c | 2 +-
drivers/macintosh/via-pmu.c | 2 +-
.../atomisp/pci/hive_isp_css_include/print_support.h | 2 +-
drivers/staging/media/atomisp/pci/ia_css_env.h | 2 +-
.../pci/runtime/debug/interface/ia_css_debug.h | 2 +-
drivers/staging/media/atomisp/pci/sh_css_internal.h | 2 +-
fs/befs/debug.c | 2 +-
fs/reiserfs/prints.c | 2 +-
fs/ufs/super.c | 2 +-
include/acpi/platform/acgcc.h | 2 +-
include/linux/kernel.h | 2 +-
include/linux/printk.h | 2 +-
include/linux/stdarg.h | 11 +++++++++++
include/linux/string.h | 2 +-
lib/debug_info.c | 3 +--
lib/kasprintf.c | 2 +-
lib/kunit/string-stream.h | 2 +-
lib/vsprintf.c | 2 +-
mm/kfence/report.c | 2 +-
net/batman-adv/log.c | 2 +-
31 files changed, 41 insertions(+), 31 deletions(-)
create mode 100644 include/linux/stdarg.h

diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c
index 665b70086685..7034227dbdf3 100644
--- a/arch/parisc/kernel/firmware.c
+++ b/arch/parisc/kernel/firmware.c
@@ -51,7 +51,7 @@
* prumpf 991016
*/

-#include <stdarg.h>
+#include <linux/stdarg.h>

#include <linux/delay.h>
#include <linux/init.h>
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index a5bf355ce1d6..10664633f7e3 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -14,7 +14,7 @@
/* we cannot use FORTIFY as it brings in new symbols */
#define __NO_FORTIFY

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/init.h>
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index 99f2cce635fb..ff80bbad22a5 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -7,7 +7,7 @@
* Copyright (C) 2001 IBM.
*/

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/spinlock.h>
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
index 01595e8cafe7..b1544b2f6321 100644
--- a/arch/powerpc/kernel/udbg.c
+++ b/arch/powerpc/kernel/udbg.c
@@ -5,7 +5,7 @@
* c 2001 PPC 64 Team, IBM Corp
*/

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/console.h>
diff --git a/arch/s390/boot/pgm_check_info.c b/arch/s390/boot/pgm_check_info.c
index 3a46abed2549..b7d8dd88bbf2 100644
--- a/arch/s390/boot/pgm_check_info.c
+++ b/arch/s390/boot/pgm_check_info.c
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
#include <linux/kernel.h>
+#include <linux/stdarg.h>
#include <linux/string.h>
#include <linux/ctype.h>
#include <asm/stacktrace.h>
@@ -8,7 +9,6 @@
#include <asm/setup.h>
#include <asm/sclp.h>
#include <asm/uv.h>
-#include <stdarg.h>
#include "boot.h"

const char hex_asc[] = "0123456789abcdef";
diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h
index ca866f1cca2e..34c9dbb6a47d 100644
--- a/arch/x86/boot/boot.h
+++ b/arch/x86/boot/boot.h
@@ -18,7 +18,7 @@

#ifndef __ASSEMBLY__

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/types.h>
#include <linux/edd.h>
#include <asm/setup.h>
diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
index ae87dded989d..d489bdc645fe 100644
--- a/drivers/firmware/efi/libstub/efi-stub-helper.c
+++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
@@ -7,7 +7,7 @@
* Copyright 2011 Intel Corporation; author Matt Fleming
*/

-#include <stdarg.h>
+#include <linux/stdarg.h>

#include <linux/ctype.h>
#include <linux/efi.h>
diff --git a/drivers/firmware/efi/libstub/vsprintf.c b/drivers/firmware/efi/libstub/vsprintf.c
index 1088e288c04d..71c71c222346 100644
--- a/drivers/firmware/efi/libstub/vsprintf.c
+++ b/drivers/firmware/efi/libstub/vsprintf.c
@@ -10,7 +10,7 @@
* Oh, it's a waste of space, but oh-so-yummy for debugging.
*/

-#include <stdarg.h>
+#include <linux/stdarg.h>

#include <linux/compiler.h>
#include <linux/ctype.h>
diff --git a/drivers/gpu/drm/amd/display/dc/dc_helper.c b/drivers/gpu/drm/amd/display/dc/dc_helper.c
index a612ba6dc389..ab6bc5d79012 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_helper.c
+++ b/drivers/gpu/drm/amd/display/dc/dc_helper.c
@@ -28,9 +28,9 @@
*/

#include <linux/delay.h>
+#include <linux/stdarg.h>

#include "dm_services.h"
-#include <stdarg.h>

#include "dc.h"
#include "dc_dmub_srv.h"
diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
index 111b932cf2a9..f783d4963d4b 100644
--- a/drivers/gpu/drm/drm_print.c
+++ b/drivers/gpu/drm/drm_print.c
@@ -25,7 +25,7 @@

#define DEBUG /* for pr_debug() */

-#include <stdarg.h>
+#include <linux/stdarg.h>

#include <linux/io.h>
#include <linux/moduleparam.h>
diff --git a/drivers/isdn/capi/capiutil.c b/drivers/isdn/capi/capiutil.c
index f26bf3c66d7e..d7ae42edc4a8 100644
--- a/drivers/isdn/capi/capiutil.c
+++ b/drivers/isdn/capi/capiutil.c
@@ -379,7 +379,7 @@ static char *pnames[] =
/*2f */ "Useruserdata"
};

-#include <stdarg.h>
+#include <linux/stdarg.h>

/*-------------------------------------------------------*/
static _cdebbuf *bufprint(_cdebbuf *cdb, char *fmt, ...)
diff --git a/drivers/macintosh/via-cuda.c b/drivers/macintosh/via-cuda.c
index 3581abfb0c6a..cd267392289c 100644
--- a/drivers/macintosh/via-cuda.c
+++ b/drivers/macintosh/via-cuda.c
@@ -9,7 +9,7 @@
*
* Copyright (C) 1996 Paul Mackerras.
*/
-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/kernel.h>
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
index 4bdd4c45e7a7..4b98bc26a94b 100644
--- a/drivers/macintosh/via-pmu.c
+++ b/drivers/macintosh/via-pmu.c
@@ -18,7 +18,7 @@
* a sleep or a freq. switch
*
*/
-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/mutex.h>
#include <linux/types.h>
#include <linux/errno.h>
diff --git a/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h b/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
index 540b405cc0f7..a3c7f3de6d17 100644
--- a/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
+++ b/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
@@ -16,7 +16,7 @@
#ifndef __PRINT_SUPPORT_H_INCLUDED__
#define __PRINT_SUPPORT_H_INCLUDED__

-#include <stdarg.h>
+#include <linux/stdarg.h>

extern int (*sh_css_printf)(const char *fmt, va_list args);
/* depends on host supplied print function in ia_css_init() */
diff --git a/drivers/staging/media/atomisp/pci/ia_css_env.h b/drivers/staging/media/atomisp/pci/ia_css_env.h
index 6b38723b27cd..3b89bbd837a0 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_env.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_env.h
@@ -17,7 +17,7 @@
#define __IA_CSS_ENV_H

#include <type_support.h>
-#include <stdarg.h> /* va_list */
+#include <linux/stdarg.h> /* va_list */
#include "ia_css_types.h"
#include "ia_css_acc_types.h"

diff --git a/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h b/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
index 5e6e7447ae00..e37ef4232c55 100644
--- a/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
+++ b/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
@@ -19,7 +19,7 @@
/*! \file */

#include <type_support.h>
-#include <stdarg.h>
+#include <linux/stdarg.h>
#include "ia_css_types.h"
#include "ia_css_binary.h"
#include "ia_css_frame_public.h"
diff --git a/drivers/staging/media/atomisp/pci/sh_css_internal.h b/drivers/staging/media/atomisp/pci/sh_css_internal.h
index 3c669ec79b68..496faa7297a5 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_internal.h
+++ b/drivers/staging/media/atomisp/pci/sh_css_internal.h
@@ -20,7 +20,7 @@
#include <math_support.h>
#include <type_support.h>
#include <platform_support.h>
-#include <stdarg.h>
+#include <linux/stdarg.h>

#if !defined(ISP2401)
#include "input_formatter.h"
diff --git a/fs/befs/debug.c b/fs/befs/debug.c
index eb7bd6c692c7..02fa66fb82c2 100644
--- a/fs/befs/debug.c
+++ b/fs/befs/debug.c
@@ -14,7 +14,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#ifdef __KERNEL__

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/string.h>
#include <linux/spinlock.h>
#include <linux/kernel.h>
diff --git a/fs/reiserfs/prints.c b/fs/reiserfs/prints.c
index 500f2000eb41..30319dc33c18 100644
--- a/fs/reiserfs/prints.c
+++ b/fs/reiserfs/prints.c
@@ -8,7 +8,7 @@
#include <linux/string.h>
#include <linux/buffer_head.h>

-#include <stdarg.h>
+#include <linux/stdarg.h>

static char error_buf[1024];
static char fmt_buf[1024];
diff --git a/fs/ufs/super.c b/fs/ufs/super.c
index 74028b5a7b0a..00a01471ea05 100644
--- a/fs/ufs/super.c
+++ b/fs/ufs/super.c
@@ -70,7 +70,7 @@
#include <linux/module.h>
#include <linux/bitops.h>

-#include <stdarg.h>
+#include <linux/stdarg.h>

#include <linux/uaccess.h>

diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h
index f6656be81760..fb172a03a753 100644
--- a/include/acpi/platform/acgcc.h
+++ b/include/acpi/platform/acgcc.h
@@ -22,7 +22,7 @@ typedef __builtin_va_list va_list;
#define va_arg(v, l) __builtin_va_arg(v, l)
#define va_copy(d, s) __builtin_va_copy(d, s)
#else
-#include <stdarg.h>
+#include <linux/stdarg.h>
#endif
#endif

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 1b2f0a7e00d6..2776423a587e 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -2,7 +2,7 @@
#ifndef _LINUX_KERNEL_H
#define _LINUX_KERNEL_H

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/align.h>
#include <linux/limits.h>
#include <linux/linkage.h>
diff --git a/include/linux/printk.h b/include/linux/printk.h
index e834d78f0478..9f3f29ea348e 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -2,7 +2,7 @@
#ifndef __KERNEL_PRINTK__
#define __KERNEL_PRINTK__

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/init.h>
#include <linux/kern_levels.h>
#include <linux/linkage.h>
diff --git a/include/linux/stdarg.h b/include/linux/stdarg.h
new file mode 100644
index 000000000000..c8dc7f4f390c
--- /dev/null
+++ b/include/linux/stdarg.h
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+#ifndef _LINUX_STDARG_H
+#define _LINUX_STDARG_H
+
+typedef __builtin_va_list va_list;
+#define va_start(v, l) __builtin_va_start(v, l)
+#define va_end(v) __builtin_va_end(v)
+#define va_arg(v, T) __builtin_va_arg(v, T)
+#define va_copy(d, s) __builtin_va_copy(d, s)
+
+#endif
diff --git a/include/linux/string.h b/include/linux/string.h
index b48d2d28e0b1..5e96d656be7a 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -6,7 +6,7 @@
#include <linux/types.h> /* for size_t */
#include <linux/stddef.h> /* for NULL */
#include <linux/errno.h> /* for E2BIG */
-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <uapi/linux/string.h>

extern char *strndup_user(const char __user *, long);
diff --git a/lib/debug_info.c b/lib/debug_info.c
index 36daf753293c..cc4723c74af5 100644
--- a/lib/debug_info.c
+++ b/lib/debug_info.c
@@ -5,8 +5,6 @@
* CONFIG_DEBUG_INFO_REDUCED. Please do not add actual code. However,
* adding appropriate #includes is fine.
*/
-#include <stdarg.h>
-
#include <linux/cred.h>
#include <linux/crypto.h>
#include <linux/dcache.h>
@@ -22,6 +20,7 @@
#include <linux/net.h>
#include <linux/sched.h>
#include <linux/slab.h>
+#include <linux/stdarg.h>
#include <linux/types.h>
#include <net/addrconf.h>
#include <net/sock.h>
diff --git a/lib/kasprintf.c b/lib/kasprintf.c
index bacf7b83ccf0..cd2f5974ed98 100644
--- a/lib/kasprintf.c
+++ b/lib/kasprintf.c
@@ -5,7 +5,7 @@
* Copyright (C) 1991, 1992 Linus Torvalds
*/

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/export.h>
#include <linux/slab.h>
#include <linux/types.h>
diff --git a/lib/kunit/string-stream.h b/lib/kunit/string-stream.h
index 5e94b623454f..43f9508a55b4 100644
--- a/lib/kunit/string-stream.h
+++ b/lib/kunit/string-stream.h
@@ -11,7 +11,7 @@

#include <linux/spinlock.h>
#include <linux/types.h>
-#include <stdarg.h>
+#include <linux/stdarg.h>

struct string_stream_fragment {
struct kunit *test;
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 26c83943748a..3bcb7be03f93 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -17,7 +17,7 @@
* - scnprintf and vscnprintf
*/

-#include <stdarg.h>
+#include <linux/stdarg.h>
#include <linux/build_bug.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
diff --git a/mm/kfence/report.c b/mm/kfence/report.c
index 2a319c21c939..4b891dd75650 100644
--- a/mm/kfence/report.c
+++ b/mm/kfence/report.c
@@ -5,7 +5,7 @@
* Copyright (C) 2020, Google LLC.
*/

-#include <stdarg.h>
+#include <linux/stdarg.h>

#include <linux/kernel.h>
#include <linux/lockdep.h>
diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c
index f0e5d1429662..7a93a1e94c40 100644
--- a/net/batman-adv/log.c
+++ b/net/batman-adv/log.c
@@ -7,7 +7,7 @@
#include "log.h"
#include "main.h"

-#include <stdarg.h>
+#include <linux/stdarg.h>

#include "trace.h"

--
2.31.1


2021-08-01 20:16:00

by Alexey Dobriyan

[permalink] [raw]
Subject: [PATCH 3/3] isystem: delete global -isystem compile option

In theory, it enables "leakage" of userspace headers into kernel which
may present licensing problem.

In practice, only stdarg.h was used, stdbool.h is trivial and SIMD
intrinsics are contained to a few architectures and aren't global
problem.

In general, kernel is very self contained code and -isystem removal
will further isolate it from Ring Threeland influence.

nds32 keeps -isystem globally due to intrisics used in entrenched header.

-isystem is selectively reenabled for some files.

Not compile tested on hexagon.

Compile tested on:

alpha-allmodconfig alpha-allnoconfig alpha-defconfig arm64-allmodconfig
arm64-allnoconfig arm64-defconfig arm-am200epdkit arm-aspeed_g4
arm-aspeed_g5 arm-assabet arm-at91_dt arm-axm55xx arm-badge4 arm-bcm2835
arm-cerfcube arm-clps711x arm-cm_x300 arm-cns3420vb arm-colibri_pxa270
arm-colibri_pxa300 arm-collie arm-corgi arm-davinci_all arm-dove
arm-ep93xx arm-eseries_pxa arm-exynos arm-ezx arm-footbridge arm-gemini
arm-h3600 arm-h5000 arm-hackkit arm-hisi arm-imote2 arm-imx_v4_v5
arm-imx_v6_v7 arm-integrator arm-iop32x arm-ixp4xx arm-jornada720
arm-keystone arm-lart arm-lpc18xx arm-lpc32xx arm-lpd270 arm-lubbock
arm-magician arm-mainstone arm-milbeaut_m10v arm-mini2440 arm-mmp2
arm-moxart arm-mps2 arm-multi_v4t arm-multi_v5 arm-multi_v7 arm-mv78xx0
arm-mvebu_v5 arm-mvebu_v7 arm-mxs arm-neponset arm-netwinder arm-nhk8815
arm-omap1 arm-omap2plus arm-orion5x arm-oxnas_v6 arm-palmz72 arm-pcm027
arm-pleb arm-pxa arm-pxa168 arm-pxa255-idp arm-pxa3xx arm-pxa910
arm-qcom arm-realview arm-rpc arm-s3c2410 arm-s3c6400 arm-s5pv210
arm-sama5 arm-shannon arm-shmobile arm-simpad arm-socfpga arm-spear13xx
arm-spear3xx arm-spear6xx arm-spitz arm-stm32 arm-sunxi arm-tct_hammer
arm-tegra arm-trizeps4 arm-u8500 arm-versatile arm-vexpress arm-vf610m4
arm-viper arm-vt8500_v6_v7 arm-xcep arm-zeus csky-allmodconfig
csky-allnoconfig csky-defconfig h8300-edosk2674 h8300-h8300h-sim
h8300-h8s-sim i386-allmodconfig i386-allnoconfig i386-defconfig
ia64-allmodconfig ia64-allnoconfig ia64-bigsur ia64-generic ia64-gensparse
ia64-tiger ia64-zx1 m68k-amcore m68k-amiga m68k-apollo m68k-atari
m68k-bvme6000 m68k-hp300 m68k-m5208evb m68k-m5249evb m68k-m5272c3
m68k-m5275evb m68k-m5307c3 m68k-m5407c3 m68k-m5475evb m68k-mac
m68k-multi m68k-mvme147 m68k-mvme16x m68k-q40 m68k-stmark2 m68k-sun3
m68k-sun3x microblaze-allmodconfig microblaze-allnoconfig microblaze-mmu
mips-ar7 mips-ath25 mips-ath79 mips-bcm47xx mips-bcm63xx mips-bigsur
mips-bmips_be mips-bmips_stb mips-capcella mips-cavium_octeon mips-ci20
mips-cobalt mips-cu1000-neo mips-cu1830-neo mips-db1xxx mips-decstation
mips-decstation_64 mips-decstation_r4k mips-e55 mips-fuloong2e
mips-gcw0 mips-generic mips-gpr mips-ip22 mips-ip27 mips-ip28 mips-ip32
mips-jazz mips-jmr3927 mips-lemote2f mips-loongson1b mips-loongson1c
mips-loongson2k mips-loongson3 mips-malta mips-maltaaprp mips-malta_kvm
mips-malta_qemu_32r6 mips-maltasmvp mips-maltasmvp_eva mips-maltaup
mips-maltaup_xpa mips-mpc30x mips-mtx1 mips-nlm_xlp mips-nlm_xlr
mips-omega2p mips-pic32mzda mips-pistachio mips-qi_lb60 mips-rb532
mips-rbtx49xx mips-rm200 mips-rs90 mips-rt305x mips-sb1250_swarm
mips-tb0219 mips-tb0226 mips-tb0287 mips-vocore2 mips-workpad mips-xway
nds32-allmodconfig nds32-allnoconfig nds32-defconfig nios2-10m50
nios2-3c120 nios2-allmodconfig nios2-allnoconfig openrisc-allmodconfig
openrisc-allnoconfig openrisc-or1klitex openrisc-or1ksim
openrisc-simple_smp parisc-allnoconfig parisc-generic-32bit
parisc-generic-64bit powerpc-acadia powerpc-adder875 powerpc-akebono
powerpc-amigaone powerpc-arches powerpc-asp8347 powerpc-bamboo
powerpc-bluestone powerpc-canyonlands powerpc-cell powerpc-chrp32
powerpc-cm5200 powerpc-currituck powerpc-ebony powerpc-eiger
powerpc-ep8248e powerpc-ep88xc powerpc-fsp2 powerpc-g5 powerpc-gamecube
powerpc-ge_imp3a powerpc-holly powerpc-icon powerpc-iss476-smp
powerpc-katmai powerpc-kilauea powerpc-klondike powerpc-kmeter1
powerpc-ksi8560 powerpc-linkstation powerpc-lite5200b powerpc-makalu
powerpc-maple powerpc-mgcoge powerpc-microwatt powerpc-motionpro
powerpc-mpc512x powerpc-mpc5200 powerpc-mpc7448_hpc2 powerpc-mpc8272_ads
powerpc-mpc8313_rdb powerpc-mpc8315_rdb powerpc-mpc832x_mds
powerpc-mpc832x_rdb powerpc-mpc834x_itx powerpc-mpc834x_itxgp
powerpc-mpc834x_mds powerpc-mpc836x_mds powerpc-mpc836x_rdk
powerpc-mpc837x_mds powerpc-mpc837x_rdb powerpc-mpc83xx
powerpc-mpc8540_ads powerpc-mpc8560_ads powerpc-mpc85xx_cds
powerpc-mpc866_ads powerpc-mpc885_ads powerpc-mvme5100 powerpc-obs600
powerpc-pasemi powerpc-pcm030 powerpc-pmac32 powerpc-powernv
powerpc-ppa8548 powerpc-ppc40x powerpc-ppc44x powerpc-ppc64
powerpc-ppc64e powerpc-ppc6xx powerpc-pq2fads powerpc-ps3
powerpc-pseries powerpc-rainier powerpc-redwood powerpc-sam440ep
powerpc-sbc8548 powerpc-sequoia powerpc-skiroot powerpc-socrates
powerpc-storcenter powerpc-stx_gp3 powerpc-taishan powerpc-tqm5200
powerpc-tqm8540 powerpc-tqm8541 powerpc-tqm8548 powerpc-tqm8555
powerpc-tqm8560 powerpc-tqm8xx powerpc-walnut powerpc-warp powerpc-wii
powerpc-xes_mpc85xx riscv-allmodconfig riscv-allnoconfig riscv-nommu_k210
riscv-nommu_k210_sdcard riscv-nommu_virt riscv-rv32 s390-allmodconfig
s390-allnoconfig s390-debug s390-zfcpdump sh-ap325rxa sh-apsh4a3a
sh-apsh4ad0a sh-dreamcast sh-ecovec24 sh-ecovec24-romimage sh-edosk7705
sh-edosk7760 sh-espt sh-hp6xx sh-j2 sh-kfr2r09 sh-kfr2r09-romimage
sh-landisk sh-lboxre2 sh-magicpanelr2 sh-microdev sh-migor sh-polaris
sh-r7780mp sh-r7785rp sh-rsk7201 sh-rsk7203 sh-rsk7264 sh-rsk7269
sh-rts7751r2d1 sh-rts7751r2dplus sh-sdk7780 sh-sdk7786 sh-se7206 sh-se7343
sh-se7619 sh-se7705 sh-se7712 sh-se7721 sh-se7722 sh-se7724 sh-se7750
sh-se7751 sh-se7780 sh-secureedge5410 sh-sh03 sh-sh2007 sh-sh7710voipgw
sh-sh7724_generic sh-sh7757lcr sh-sh7763rdp sh-sh7770_generic sh-sh7785lcr
sh-sh7785lcr_32bit sh-shmin sh-shx3 sh-titan sh-ul2 sh-urquell
sparc-allmodconfig sparc-allnoconfig sparc-sparc32 sparc-sparc64
um-i386-allmodconfig um-i386-allnoconfig um-i386-defconfig
um-x86_64-allmodconfig um-x86_64-allnoconfig x86_64-allmodconfig
x86_64-allnoconfig x86_64-defconfig xtensa-allmodconfig xtensa-allnoconfig
xtensa-audio_kc705 xtensa-cadence_csp xtensa-common xtensa-generic_kc705
xtensa-iss xtensa-nommu_kc705 xtensa-smp_lx200 xtensa-virt
xtensa-xip_kc705

Cc: Catalin Marinas <[email protected]>
Cc: Will Deacon <[email protected]>
Cc: [email protected]
Cc: Michael Ellerman <[email protected]>
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: [email protected]
Signed-off-by: Alexey Dobriyan <[email protected]>
---
Makefile | 2 +-
arch/arm64/lib/Makefile | 2 ++
arch/nds32/Makefile | 2 ++
arch/powerpc/lib/Makefile | 2 ++
crypto/Makefile | 2 ++
lib/raid6/Makefile | 4 ++++
6 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 6b555f64df06..b59053ec457a 100644
--- a/Makefile
+++ b/Makefile
@@ -979,7 +979,7 @@ KBUILD_CFLAGS += -falign-functions=64
endif

# arch Makefile may override CC so keep this after arch Makefile is included
-NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
+NOSTDINC_FLAGS += -nostdinc

# warn about C99 declaration after statement
KBUILD_CFLAGS += -Wdeclaration-after-statement
diff --git a/arch/arm64/lib/Makefile b/arch/arm64/lib/Makefile
index 6dd56a49790a..dcad998f12d7 100644
--- a/arch/arm64/lib/Makefile
+++ b/arch/arm64/lib/Makefile
@@ -9,6 +9,8 @@ ifeq ($(CONFIG_KERNEL_MODE_NEON), y)
obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o
CFLAGS_REMOVE_xor-neon.o += -mgeneral-regs-only
CFLAGS_xor-neon.o += -ffreestanding
+# Enable <arm_neon.h>
+CFLAGS_xor-neon.o += -isystem $(shell $(CC) -print-file-name=include)
endif

lib-$(CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE) += uaccess_flushcache.o
diff --git a/arch/nds32/Makefile b/arch/nds32/Makefile
index ccdca7142020..c17fc3a755c3 100644
--- a/arch/nds32/Makefile
+++ b/arch/nds32/Makefile
@@ -9,6 +9,8 @@ endif
# Avoid generating FPU instructions
arch-y += -mno-ext-fpu-sp -mno-ext-fpu-dp -mfloat-abi=soft

+# Enable <nds32_intrinsic.h>
+KBUILD_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
KBUILD_CFLAGS += $(call cc-option, -mno-sched-prolog-epilog)
KBUILD_CFLAGS += -mcmodel=large

diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 99a7c9132422..9e5d0f413b71 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -65,5 +65,7 @@ obj-$(CONFIG_FTR_FIXUP_SELFTEST) += feature-fixups-test.o

obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o
CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec)
+# Enable <altivec.h>
+CFLAGS_xor_vmx.o += -isystem $(shell $(CC) -print-file-name=include)

obj-$(CONFIG_PPC64) += $(obj64-y)
diff --git a/crypto/Makefile b/crypto/Makefile
index 10526d4559b8..75ad9b040506 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -117,6 +117,8 @@ aegis128-cflags-$(CONFIG_CC_IS_GCC) += -ffixed-q16 -ffixed-q17 -ffixed-q18 \
-ffixed-q28 -ffixed-q29 -ffixed-q30 \
-ffixed-q31
CFLAGS_aegis128-neon-inner.o += $(aegis128-cflags-y)
+# Enable <arm_neon.h>
+CFLAGS_aegis128-neon-inner.o += -isystem $(shell $(CC) -print-file-name=include)
CFLAGS_REMOVE_aegis128-neon-inner.o += -mgeneral-regs-only
aegis128-$(CONFIG_CRYPTO_AEGIS128_SIMD) += aegis128-neon.o aegis128-neon-inner.o
endif
diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile
index c770570bfe4f..45e17619422b 100644
--- a/lib/raid6/Makefile
+++ b/lib/raid6/Makefile
@@ -14,6 +14,8 @@ hostprogs += mktables

ifeq ($(CONFIG_ALTIVEC),y)
altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
+# Enable <altivec.h>
+altivec_flags += -isystem $(shell $(CC) -print-file-name=include)

ifdef CONFIG_CC_IS_CLANG
# clang ppc port does not yet support -maltivec when -msoft-float is
@@ -34,6 +36,8 @@ endif
# ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel)
ifeq ($(CONFIG_KERNEL_MODE_NEON),y)
NEON_FLAGS := -ffreestanding
+# Enable <arm_neon.h>
+NEON_FLAGS += -isystem $(shell $(CC) -print-file-name=include)
ifeq ($(ARCH),arm)
NEON_FLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon
endif
--
2.31.1


2021-08-01 21:47:54

by Segher Boessenkool

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

On Sun, Aug 01, 2021 at 11:13:36PM +0300, Alexey Dobriyan wrote:
> In theory, it enables "leakage" of userspace headers into kernel which
> may present licensing problem.

> -NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
> +NOSTDINC_FLAGS += -nostdinc

This is removing the compiler's own include files. These are required
for all kinds of basic features, and required to be compliant to the C
standard at all. These are not "userspace headers", that is what
-nostdinc takes care of already.

In the case of GCC all these headers are GPL-with-runtime-exception, so
claiming this can cause licensing problems is fearmongering.

I strongly advise against doing this.


Segher

2021-08-02 00:23:35

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 1/3] isystem: trim/fixup stdarg.h and other headers

Hi Alexey,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on linuxtv-media/master linus/master v5.14-rc3 next-20210730]
[cannot apply to uml/linux-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Alexey-Dobriyan/isystem-trim-fixup-stdarg-h-and-other-headers/20210802-041553
base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: arm-allyesconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 10.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/f3863b25ccfb7c85602695bb13517c7f4e75cd23
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Alexey-Dobriyan/isystem-trim-fixup-stdarg-h-and-other-headers/20210802-041553
git checkout f3863b25ccfb7c85602695bb13517c7f4e75cd23
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-10.3.0 make.cross O=build_dir ARCH=arm SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

Note: the linux-review/Alexey-Dobriyan/isystem-trim-fixup-stdarg-h-and-other-headers/20210802-041553 HEAD 68fed7fc2569ffbc882f0a36ecb4095d953de63c builds fine.
It only hurts bisectibility.

All errors (new ones prefixed by >>):

In file included from crypto/aegis128-neon-inner.c:18:
>> include/linux/types.h:37:24: error: conflicting types for 'uintptr_t'
37 | typedef unsigned long uintptr_t;
| ^~~~~~~~~
In file included from /opt/cross/gcc-10.3.0-nolibc/arm-linux-gnueabi/lib/gcc/arm-linux-gnueabi/10.3.0/include/stdint.h:11,
from /opt/cross/gcc-10.3.0-nolibc/arm-linux-gnueabi/lib/gcc/arm-linux-gnueabi/10.3.0/include/arm_fp16.h:34,
from /opt/cross/gcc-10.3.0-nolibc/arm-linux-gnueabi/lib/gcc/arm-linux-gnueabi/10.3.0/include/arm_neon.h:41,
from crypto/aegis128-neon-inner.c:11:
/opt/cross/gcc-10.3.0-nolibc/arm-linux-gnueabi/lib/gcc/arm-linux-gnueabi/10.3.0/include/stdint-gcc.h:86:26: note: previous declaration of 'uintptr_t' was here
86 | typedef __UINTPTR_TYPE__ uintptr_t;
| ^~~~~~~~~
crypto/aegis128-neon-inner.c:134:6: warning: no previous prototype for 'crypto_aegis128_init_neon' [-Wmissing-prototypes]
134 | void crypto_aegis128_init_neon(void *state, const void *key, const void *iv)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
crypto/aegis128-neon-inner.c:164:6: warning: no previous prototype for 'crypto_aegis128_update_neon' [-Wmissing-prototypes]
164 | void crypto_aegis128_update_neon(void *state, const void *msg)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
crypto/aegis128-neon-inner.c:221:6: warning: no previous prototype for 'crypto_aegis128_encrypt_chunk_neon' [-Wmissing-prototypes]
221 | void crypto_aegis128_encrypt_chunk_neon(void *state, void *dst, const void *src,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
crypto/aegis128-neon-inner.c:270:6: warning: no previous prototype for 'crypto_aegis128_decrypt_chunk_neon' [-Wmissing-prototypes]
270 | void crypto_aegis128_decrypt_chunk_neon(void *state, void *dst, const void *src,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
crypto/aegis128-neon-inner.c:316:5: warning: no previous prototype for 'crypto_aegis128_final_neon' [-Wmissing-prototypes]
316 | int crypto_aegis128_final_neon(void *state, void *tag_xor,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~


vim +/uintptr_t +37 include/linux/types.h

^1da177e4c3f41 Linus Torvalds 2005-04-16 36
142956af525002 Al Viro 2007-10-29 @37 typedef unsigned long uintptr_t;
142956af525002 Al Viro 2007-10-29 38

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (4.26 kB)
.config.gz (76.60 kB)
Download all attachments

2021-08-02 01:35:04

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

Hi Alexey,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on linuxtv-media/master linus/master v5.14-rc3 next-20210730]
[cannot apply to uml/linux-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Alexey-Dobriyan/isystem-trim-fixup-stdarg-h-and-other-headers/20210802-041553
base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: arm-allyesconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 10.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/68fed7fc2569ffbc882f0a36ecb4095d953de63c
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Alexey-Dobriyan/isystem-trim-fixup-stdarg-h-and-other-headers/20210802-041553
git checkout 68fed7fc2569ffbc882f0a36ecb4095d953de63c
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-10.3.0 make.cross O=build_dir ARCH=arm SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

>> crypto/aegis128-neon-inner.c:11:10: fatal error: arm_neon.h: No such file or directory
11 | #include <arm_neon.h>
| ^~~~~~~~~~~~
compilation terminated.


vim +11 crypto/aegis128-neon-inner.c

a4397635afea5d Ard Biesheuvel 2019-08-12 8
a4397635afea5d Ard Biesheuvel 2019-08-12 9 #define AES_ROUND "aese %0.16b, %1.16b \n\t aesmc %0.16b, %0.16b"
a4397635afea5d Ard Biesheuvel 2019-08-12 10 #else
a4397635afea5d Ard Biesheuvel 2019-08-12 @11 #include <arm_neon.h>
a4397635afea5d Ard Biesheuvel 2019-08-12 12

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (2.22 kB)
.config.gz (76.60 kB)
Download all attachments

2021-08-02 06:44:33

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

On Sun, Aug 01, 2021 at 04:32:47PM -0500, Segher Boessenkool wrote:
> On Sun, Aug 01, 2021 at 11:13:36PM +0300, Alexey Dobriyan wrote:
> > In theory, it enables "leakage" of userspace headers into kernel which
> > may present licensing problem.
>
> > -NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
> > +NOSTDINC_FLAGS += -nostdinc
>
> This is removing the compiler's own include files. These are required
> for all kinds of basic features, and required to be compliant to the C
> standard at all.

No they are not required. Kernel uses its own bool, uintptr_t and
static_assert, memset(), CHAR_BIT. noreturn, alignas newest C standard
are next.

This version changelog didn't mention but kernel would use
-ffreestanding too if not other problems with the flag.

> These are not "userspace headers", that is what
> -nostdinc takes care of already.

They are userspace headers in the sense they are external to the project
just like userspace programs are external to the kernel.

> In the case of GCC all these headers are GPL-with-runtime-exception, so
> claiming this can cause licensing problems is fearmongering.

I agree licensing problem doesn't really exist.
It would take gcc drop-in replacement with authors insane enough to not
license standard headers properly.

> I strongly advise against doing this.

Kernel chose to be self-contained. -isystem removal makes sense then.
It will be used for intrinsics where necessary.

2021-08-02 16:57:03

by Segher Boessenkool

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

On Mon, Aug 02, 2021 at 09:42:45AM +0300, Alexey Dobriyan wrote:
> On Sun, Aug 01, 2021 at 04:32:47PM -0500, Segher Boessenkool wrote:
> > On Sun, Aug 01, 2021 at 11:13:36PM +0300, Alexey Dobriyan wrote:
> > > In theory, it enables "leakage" of userspace headers into kernel which
> > > may present licensing problem.
> >
> > > -NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
> > > +NOSTDINC_FLAGS += -nostdinc
> >
> > This is removing the compiler's own include files. These are required
> > for all kinds of basic features, and required to be compliant to the C
> > standard at all.
>
> No they are not required.

This is false, they *are* required, whenever you want to use these
features. If you do not include the required headers you get undefined
behaviour.

> Kernel uses its own bool, uintptr_t and
> static_assert, memset(), CHAR_BIT.

Yes, and it occasionally gets it wrong. Great fun. See c46bbf5d2def
for the latest episode in this saga. (Yes I know this is uapi so maybe
not the best example here, but it isn't like the kernel gets such things
wrong so often these days ;-) )

The kernel *cannot* make up its own types for this. It has to use the
types it is required to use (by C, by the ABIs, etc.) So why
reimplement this?

> noreturn, alignas newest C standard
> are next.

What is wrong with <stdalign.h> and <stdnoreturn.h>?

> This version changelog didn't mention but kernel would use
> -ffreestanding too if not other problems with the flag.

It is still true for freestanding C implementations, you just get a
severely reduced standard library,

> > These are not "userspace headers", that is what
> > -nostdinc takes care of already.
>
> They are userspace headers in the sense they are external to the project
> just like userspace programs are external to the kernel.

So you are going to rewrite all of the rest of GCC inside the kernel
project as well?

> > In the case of GCC all these headers are GPL-with-runtime-exception, so
> > claiming this can cause licensing problems is fearmongering.
>
> I agree licensing problem doesn't really exist.
> It would take gcc drop-in replacement with authors insane enough to not
> license standard headers properly.

There does still not exist a drop-in replacement for GCC, not if you
look closely and/or rely on details (like the kernel does). Some of the
differences are hidden by "linux/compiler-*.h", but hardly all.

> > I strongly advise against doing this.
>
> Kernel chose to be self-contained.

That is largely historical, imo. Nowadays this is less necessary.

Also, the kernel chose to *do* use the compiler include files. It is
you who wants to abolish that here.

> -isystem removal makes sense then.

-nostdinc -isystem $(shell $(CC) -print-file-name=include) makes sense
for that: you do indeed not want the userspace headers. Maiming the
compiler (by removing some of its functional parts, namely, its generic
headers) does not make sense.

> It will be used for intrinsics where necessary.

Like, everywhere.


Segher

2021-08-02 18:21:44

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

On Sun, Aug 01, 2021 at 11:13:36PM +0300, Alexey Dobriyan wrote:
> In theory, it enables "leakage" of userspace headers into kernel which
> may present licensing problem.
>
> In practice, only stdarg.h was used, stdbool.h is trivial and SIMD
> intrinsics are contained to a few architectures and aren't global
> problem.
>
> In general, kernel is very self contained code and -isystem removal
> will further isolate it from Ring Threeland influence.
>
> nds32 keeps -isystem globally due to intrisics used in entrenched header.
>
> -isystem is selectively reenabled for some files.
>
> Not compile tested on hexagon.

With this series on top of v5.14-rc4 and a tangential patch to fix
another issue, ARCH=hexagon defconfig and allmodconfig show no issues.

Tested-by: Nathan Chancellor <nathan@kernel> # build (hexagon)

> Compile tested on:
>
> alpha-allmodconfig alpha-allnoconfig alpha-defconfig arm64-allmodconfig
> arm64-allnoconfig arm64-defconfig arm-am200epdkit arm-aspeed_g4
> arm-aspeed_g5 arm-assabet arm-at91_dt arm-axm55xx arm-badge4 arm-bcm2835
> arm-cerfcube arm-clps711x arm-cm_x300 arm-cns3420vb arm-colibri_pxa270
> arm-colibri_pxa300 arm-collie arm-corgi arm-davinci_all arm-dove
> arm-ep93xx arm-eseries_pxa arm-exynos arm-ezx arm-footbridge arm-gemini
> arm-h3600 arm-h5000 arm-hackkit arm-hisi arm-imote2 arm-imx_v4_v5
> arm-imx_v6_v7 arm-integrator arm-iop32x arm-ixp4xx arm-jornada720
> arm-keystone arm-lart arm-lpc18xx arm-lpc32xx arm-lpd270 arm-lubbock
> arm-magician arm-mainstone arm-milbeaut_m10v arm-mini2440 arm-mmp2
> arm-moxart arm-mps2 arm-multi_v4t arm-multi_v5 arm-multi_v7 arm-mv78xx0
> arm-mvebu_v5 arm-mvebu_v7 arm-mxs arm-neponset arm-netwinder arm-nhk8815
> arm-omap1 arm-omap2plus arm-orion5x arm-oxnas_v6 arm-palmz72 arm-pcm027
> arm-pleb arm-pxa arm-pxa168 arm-pxa255-idp arm-pxa3xx arm-pxa910
> arm-qcom arm-realview arm-rpc arm-s3c2410 arm-s3c6400 arm-s5pv210
> arm-sama5 arm-shannon arm-shmobile arm-simpad arm-socfpga arm-spear13xx
> arm-spear3xx arm-spear6xx arm-spitz arm-stm32 arm-sunxi arm-tct_hammer
> arm-tegra arm-trizeps4 arm-u8500 arm-versatile arm-vexpress arm-vf610m4
> arm-viper arm-vt8500_v6_v7 arm-xcep arm-zeus csky-allmodconfig
> csky-allnoconfig csky-defconfig h8300-edosk2674 h8300-h8300h-sim
> h8300-h8s-sim i386-allmodconfig i386-allnoconfig i386-defconfig
> ia64-allmodconfig ia64-allnoconfig ia64-bigsur ia64-generic ia64-gensparse
> ia64-tiger ia64-zx1 m68k-amcore m68k-amiga m68k-apollo m68k-atari
> m68k-bvme6000 m68k-hp300 m68k-m5208evb m68k-m5249evb m68k-m5272c3
> m68k-m5275evb m68k-m5307c3 m68k-m5407c3 m68k-m5475evb m68k-mac
> m68k-multi m68k-mvme147 m68k-mvme16x m68k-q40 m68k-stmark2 m68k-sun3
> m68k-sun3x microblaze-allmodconfig microblaze-allnoconfig microblaze-mmu
> mips-ar7 mips-ath25 mips-ath79 mips-bcm47xx mips-bcm63xx mips-bigsur
> mips-bmips_be mips-bmips_stb mips-capcella mips-cavium_octeon mips-ci20
> mips-cobalt mips-cu1000-neo mips-cu1830-neo mips-db1xxx mips-decstation
> mips-decstation_64 mips-decstation_r4k mips-e55 mips-fuloong2e
> mips-gcw0 mips-generic mips-gpr mips-ip22 mips-ip27 mips-ip28 mips-ip32
> mips-jazz mips-jmr3927 mips-lemote2f mips-loongson1b mips-loongson1c
> mips-loongson2k mips-loongson3 mips-malta mips-maltaaprp mips-malta_kvm
> mips-malta_qemu_32r6 mips-maltasmvp mips-maltasmvp_eva mips-maltaup
> mips-maltaup_xpa mips-mpc30x mips-mtx1 mips-nlm_xlp mips-nlm_xlr
> mips-omega2p mips-pic32mzda mips-pistachio mips-qi_lb60 mips-rb532
> mips-rbtx49xx mips-rm200 mips-rs90 mips-rt305x mips-sb1250_swarm
> mips-tb0219 mips-tb0226 mips-tb0287 mips-vocore2 mips-workpad mips-xway
> nds32-allmodconfig nds32-allnoconfig nds32-defconfig nios2-10m50
> nios2-3c120 nios2-allmodconfig nios2-allnoconfig openrisc-allmodconfig
> openrisc-allnoconfig openrisc-or1klitex openrisc-or1ksim
> openrisc-simple_smp parisc-allnoconfig parisc-generic-32bit
> parisc-generic-64bit powerpc-acadia powerpc-adder875 powerpc-akebono
> powerpc-amigaone powerpc-arches powerpc-asp8347 powerpc-bamboo
> powerpc-bluestone powerpc-canyonlands powerpc-cell powerpc-chrp32
> powerpc-cm5200 powerpc-currituck powerpc-ebony powerpc-eiger
> powerpc-ep8248e powerpc-ep88xc powerpc-fsp2 powerpc-g5 powerpc-gamecube
> powerpc-ge_imp3a powerpc-holly powerpc-icon powerpc-iss476-smp
> powerpc-katmai powerpc-kilauea powerpc-klondike powerpc-kmeter1
> powerpc-ksi8560 powerpc-linkstation powerpc-lite5200b powerpc-makalu
> powerpc-maple powerpc-mgcoge powerpc-microwatt powerpc-motionpro
> powerpc-mpc512x powerpc-mpc5200 powerpc-mpc7448_hpc2 powerpc-mpc8272_ads
> powerpc-mpc8313_rdb powerpc-mpc8315_rdb powerpc-mpc832x_mds
> powerpc-mpc832x_rdb powerpc-mpc834x_itx powerpc-mpc834x_itxgp
> powerpc-mpc834x_mds powerpc-mpc836x_mds powerpc-mpc836x_rdk
> powerpc-mpc837x_mds powerpc-mpc837x_rdb powerpc-mpc83xx
> powerpc-mpc8540_ads powerpc-mpc8560_ads powerpc-mpc85xx_cds
> powerpc-mpc866_ads powerpc-mpc885_ads powerpc-mvme5100 powerpc-obs600
> powerpc-pasemi powerpc-pcm030 powerpc-pmac32 powerpc-powernv
> powerpc-ppa8548 powerpc-ppc40x powerpc-ppc44x powerpc-ppc64
> powerpc-ppc64e powerpc-ppc6xx powerpc-pq2fads powerpc-ps3
> powerpc-pseries powerpc-rainier powerpc-redwood powerpc-sam440ep
> powerpc-sbc8548 powerpc-sequoia powerpc-skiroot powerpc-socrates
> powerpc-storcenter powerpc-stx_gp3 powerpc-taishan powerpc-tqm5200
> powerpc-tqm8540 powerpc-tqm8541 powerpc-tqm8548 powerpc-tqm8555
> powerpc-tqm8560 powerpc-tqm8xx powerpc-walnut powerpc-warp powerpc-wii
> powerpc-xes_mpc85xx riscv-allmodconfig riscv-allnoconfig riscv-nommu_k210
> riscv-nommu_k210_sdcard riscv-nommu_virt riscv-rv32 s390-allmodconfig
> s390-allnoconfig s390-debug s390-zfcpdump sh-ap325rxa sh-apsh4a3a
> sh-apsh4ad0a sh-dreamcast sh-ecovec24 sh-ecovec24-romimage sh-edosk7705
> sh-edosk7760 sh-espt sh-hp6xx sh-j2 sh-kfr2r09 sh-kfr2r09-romimage
> sh-landisk sh-lboxre2 sh-magicpanelr2 sh-microdev sh-migor sh-polaris
> sh-r7780mp sh-r7785rp sh-rsk7201 sh-rsk7203 sh-rsk7264 sh-rsk7269
> sh-rts7751r2d1 sh-rts7751r2dplus sh-sdk7780 sh-sdk7786 sh-se7206 sh-se7343
> sh-se7619 sh-se7705 sh-se7712 sh-se7721 sh-se7722 sh-se7724 sh-se7750
> sh-se7751 sh-se7780 sh-secureedge5410 sh-sh03 sh-sh2007 sh-sh7710voipgw
> sh-sh7724_generic sh-sh7757lcr sh-sh7763rdp sh-sh7770_generic sh-sh7785lcr
> sh-sh7785lcr_32bit sh-shmin sh-shx3 sh-titan sh-ul2 sh-urquell
> sparc-allmodconfig sparc-allnoconfig sparc-sparc32 sparc-sparc64
> um-i386-allmodconfig um-i386-allnoconfig um-i386-defconfig
> um-x86_64-allmodconfig um-x86_64-allnoconfig x86_64-allmodconfig
> x86_64-allnoconfig x86_64-defconfig xtensa-allmodconfig xtensa-allnoconfig
> xtensa-audio_kc705 xtensa-cadence_csp xtensa-common xtensa-generic_kc705
> xtensa-iss xtensa-nommu_kc705 xtensa-smp_lx200 xtensa-virt
> xtensa-xip_kc705
>
> Cc: Catalin Marinas <[email protected]>
> Cc: Will Deacon <[email protected]>
> Cc: [email protected]
> Cc: Michael Ellerman <[email protected]>
> Cc: Benjamin Herrenschmidt <[email protected]>
> Cc: Paul Mackerras <[email protected]>
> Cc: [email protected]
> Signed-off-by: Alexey Dobriyan <[email protected]>
> ---
> Makefile | 2 +-
> arch/arm64/lib/Makefile | 2 ++
> arch/nds32/Makefile | 2 ++
> arch/powerpc/lib/Makefile | 2 ++
> crypto/Makefile | 2 ++
> lib/raid6/Makefile | 4 ++++
> 6 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index 6b555f64df06..b59053ec457a 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -979,7 +979,7 @@ KBUILD_CFLAGS += -falign-functions=64
> endif
>
> # arch Makefile may override CC so keep this after arch Makefile is included
> -NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
> +NOSTDINC_FLAGS += -nostdinc
>
> # warn about C99 declaration after statement
> KBUILD_CFLAGS += -Wdeclaration-after-statement
> diff --git a/arch/arm64/lib/Makefile b/arch/arm64/lib/Makefile
> index 6dd56a49790a..dcad998f12d7 100644
> --- a/arch/arm64/lib/Makefile
> +++ b/arch/arm64/lib/Makefile
> @@ -9,6 +9,8 @@ ifeq ($(CONFIG_KERNEL_MODE_NEON), y)
> obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o
> CFLAGS_REMOVE_xor-neon.o += -mgeneral-regs-only
> CFLAGS_xor-neon.o += -ffreestanding
> +# Enable <arm_neon.h>
> +CFLAGS_xor-neon.o += -isystem $(shell $(CC) -print-file-name=include)
> endif
>
> lib-$(CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE) += uaccess_flushcache.o
> diff --git a/arch/nds32/Makefile b/arch/nds32/Makefile
> index ccdca7142020..c17fc3a755c3 100644
> --- a/arch/nds32/Makefile
> +++ b/arch/nds32/Makefile
> @@ -9,6 +9,8 @@ endif
> # Avoid generating FPU instructions
> arch-y += -mno-ext-fpu-sp -mno-ext-fpu-dp -mfloat-abi=soft
>
> +# Enable <nds32_intrinsic.h>
> +KBUILD_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
> KBUILD_CFLAGS += $(call cc-option, -mno-sched-prolog-epilog)
> KBUILD_CFLAGS += -mcmodel=large
>
> diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
> index 99a7c9132422..9e5d0f413b71 100644
> --- a/arch/powerpc/lib/Makefile
> +++ b/arch/powerpc/lib/Makefile
> @@ -65,5 +65,7 @@ obj-$(CONFIG_FTR_FIXUP_SELFTEST) += feature-fixups-test.o
>
> obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o
> CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec)
> +# Enable <altivec.h>
> +CFLAGS_xor_vmx.o += -isystem $(shell $(CC) -print-file-name=include)
>
> obj-$(CONFIG_PPC64) += $(obj64-y)
> diff --git a/crypto/Makefile b/crypto/Makefile
> index 10526d4559b8..75ad9b040506 100644
> --- a/crypto/Makefile
> +++ b/crypto/Makefile
> @@ -117,6 +117,8 @@ aegis128-cflags-$(CONFIG_CC_IS_GCC) += -ffixed-q16 -ffixed-q17 -ffixed-q18 \
> -ffixed-q28 -ffixed-q29 -ffixed-q30 \
> -ffixed-q31
> CFLAGS_aegis128-neon-inner.o += $(aegis128-cflags-y)
> +# Enable <arm_neon.h>
> +CFLAGS_aegis128-neon-inner.o += -isystem $(shell $(CC) -print-file-name=include)
> CFLAGS_REMOVE_aegis128-neon-inner.o += -mgeneral-regs-only
> aegis128-$(CONFIG_CRYPTO_AEGIS128_SIMD) += aegis128-neon.o aegis128-neon-inner.o
> endif
> diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile
> index c770570bfe4f..45e17619422b 100644
> --- a/lib/raid6/Makefile
> +++ b/lib/raid6/Makefile
> @@ -14,6 +14,8 @@ hostprogs += mktables
>
> ifeq ($(CONFIG_ALTIVEC),y)
> altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
> +# Enable <altivec.h>
> +altivec_flags += -isystem $(shell $(CC) -print-file-name=include)
>
> ifdef CONFIG_CC_IS_CLANG
> # clang ppc port does not yet support -maltivec when -msoft-float is
> @@ -34,6 +36,8 @@ endif
> # ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel)
> ifeq ($(CONFIG_KERNEL_MODE_NEON),y)
> NEON_FLAGS := -ffreestanding
> +# Enable <arm_neon.h>
> +NEON_FLAGS += -isystem $(shell $(CC) -print-file-name=include)
> ifeq ($(ARCH),arm)
> NEON_FLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon
> endif
> --
> 2.31.1
>

2021-08-02 20:31:24

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

On Mon, Aug 02, 2021 at 11:47:47AM -0500, Segher Boessenkool wrote:
> On Mon, Aug 02, 2021 at 09:42:45AM +0300, Alexey Dobriyan wrote:
> > On Sun, Aug 01, 2021 at 04:32:47PM -0500, Segher Boessenkool wrote:
> > > On Sun, Aug 01, 2021 at 11:13:36PM +0300, Alexey Dobriyan wrote:
> > > > In theory, it enables "leakage" of userspace headers into kernel which
> > > > may present licensing problem.
> > >
> > > > -NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
> > > > +NOSTDINC_FLAGS += -nostdinc
> > >
> > > This is removing the compiler's own include files. These are required
> > > for all kinds of basic features, and required to be compliant to the C
> > > standard at all.
> >
> > No they are not required.
>
> This is false, they *are* required, whenever you want to use these
> features. If you do not include the required headers you get undefined
> behaviour.
>
> > Kernel uses its own bool, uintptr_t and
> > static_assert, memset(), CHAR_BIT.
>
> Yes, and it occasionally gets it wrong. Great fun. See c46bbf5d2def
> for the latest episode in this saga. (Yes I know this is uapi so maybe
> not the best example here, but it isn't like the kernel gets such things
> wrong so often these days ;-) )
>
> The kernel *cannot* make up its own types for this. It has to use the
> types it is required to use (by C, by the ABIs, etc.) So why
> reimplement this?

Yes, it can. gcc headers have stuff like this:

#define __PTRDIFF_TYPE__ long int
#define __SIZE_TYPE__ long unsigned int

If gcc can defined standard types, kernel can too.

> > noreturn, alignas newest C standard
> > are next.
>
> What is wrong with <stdalign.h> and <stdnoreturn.h>?

These two are actually quite nice.

Have you seen <stddef.h>? Loads of macrology crap.
Kernel can ship nicer one.

> > This version changelog didn't mention but kernel would use
> > -ffreestanding too if not other problems with the flag.
>
> It is still true for freestanding C implementations, you just get a
> severely reduced standard library,
>
> > > These are not "userspace headers", that is what
> > > -nostdinc takes care of already.
> >
> > They are userspace headers in the sense they are external to the project
> > just like userspace programs are external to the kernel.
>
> So you are going to rewrite all of the rest of GCC inside the kernel
> project as well?

What an argument. "the rest of GCC" is already there except for stdarg.h.

> > > In the case of GCC all these headers are GPL-with-runtime-exception, so
> > > claiming this can cause licensing problems is fearmongering.
> >
> > I agree licensing problem doesn't really exist.
> > It would take gcc drop-in replacement with authors insane enough to not
> > license standard headers properly.
>
> There does still not exist a drop-in replacement for GCC, not if you
> look closely and/or rely on details (like the kernel does). Some of the
> differences are hidden by "linux/compiler-*.h", but hardly all.
>
> > > I strongly advise against doing this.
> >
> > Kernel chose to be self-contained.
>
> That is largely historical, imo. Nowadays this is less necessary.

I kind of agree as in kernel should use int8_t and stuff because they
are standard.

Also, -isystem removal disables <float.h> and <stdatomic.h> which is
desireable.

> Also, the kernel chose to *do* use the compiler include files. It is
> you who wants to abolish that here.
>
> > -isystem removal makes sense then.
>
> -nostdinc -isystem $(shell $(CC) -print-file-name=include) makes sense
> for that: you do indeed not want the userspace headers. Maiming the
> compiler (by removing some of its functional parts, namely, its generic
> headers) does not make sense.
>
> > It will be used for intrinsics where necessary.
>
> Like, everywhere.

No, where necessary. Patch demostrates there are only a few places which
want -isystem back.

2021-08-02 20:34:17

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

On Mon, Aug 02, 2021 at 11:18:32AM -0700, Nathan Chancellor wrote:
> On Sun, Aug 01, 2021 at 11:13:36PM +0300, Alexey Dobriyan wrote:
> > In theory, it enables "leakage" of userspace headers into kernel which
> > may present licensing problem.
> >
> > In practice, only stdarg.h was used, stdbool.h is trivial and SIMD
> > intrinsics are contained to a few architectures and aren't global
> > problem.
> >
> > In general, kernel is very self contained code and -isystem removal
> > will further isolate it from Ring Threeland influence.
> >
> > nds32 keeps -isystem globally due to intrisics used in entrenched header.
> >
> > -isystem is selectively reenabled for some files.
> >
> > Not compile tested on hexagon.
>
> With this series on top of v5.14-rc4 and a tangential patch to fix
> another issue, ARCH=hexagon defconfig and allmodconfig show no issues.
>
> Tested-by: Nathan Chancellor <nathan@kernel> # build (hexagon)

Oh wow, small miracle. Thank you!

Where can I find a cross-compiler? This link doesn't seem to have one
https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/11.1.0/

2021-08-02 20:39:27

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

On 8/2/2021 1:32 PM, Alexey Dobriyan wrote:
> On Mon, Aug 02, 2021 at 11:18:32AM -0700, Nathan Chancellor wrote:
>> On Sun, Aug 01, 2021 at 11:13:36PM +0300, Alexey Dobriyan wrote:
>>> In theory, it enables "leakage" of userspace headers into kernel which
>>> may present licensing problem.
>>>
>>> In practice, only stdarg.h was used, stdbool.h is trivial and SIMD
>>> intrinsics are contained to a few architectures and aren't global
>>> problem.
>>>
>>> In general, kernel is very self contained code and -isystem removal
>>> will further isolate it from Ring Threeland influence.
>>>
>>> nds32 keeps -isystem globally due to intrisics used in entrenched header.
>>>
>>> -isystem is selectively reenabled for some files.
>>>
>>> Not compile tested on hexagon.
>>
>> With this series on top of v5.14-rc4 and a tangential patch to fix
>> another issue, ARCH=hexagon defconfig and allmodconfig show no issues.
>>
>> Tested-by: Nathan Chancellor <nathan@kernel> # build (hexagon)
>
> Oh wow, small miracle. Thank you!
>
> Where can I find a cross-compiler? This link doesn't seem to have one
> https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/11.1.0/

Hexagon only builds with LLVM now because of the bump to require gcc
4.9: https://lore.kernel.org/r/[email protected]/

Brian Cain has a link in that thread to an LLVM toolchain that works
well for defconfig (allmodconfig requires LLVM 13/14 from git).
Otherwise, https://apt.llvm.org or LLVM from your package manager should
be sufficient for the same targets.

$ make -skj"$(nproc)" ARCH=hexagon CROSS_COMPILE=hexagon-linux-musl-
LLVM=1 LLVM_IAS=1 defconfig all

should work fine as long as the bin folder for whatever toolchain you
download is in your PATH.

Cheers,
Nathan

2021-08-02 21:52:42

by Segher Boessenkool

[permalink] [raw]
Subject: Re: [PATCH 3/3] isystem: delete global -isystem compile option

On Mon, Aug 02, 2021 at 11:30:00PM +0300, Alexey Dobriyan wrote:
> On Mon, Aug 02, 2021 at 11:47:47AM -0500, Segher Boessenkool wrote:
> > The kernel *cannot* make up its own types for this. It has to use the
> > types it is required to use (by C, by the ABIs, etc.) So why
> > reimplement this?
>
> Yes, it can. gcc headers have stuff like this:
>
> #define __PTRDIFF_TYPE__ long int
> #define __SIZE_TYPE__ long unsigned int
>
> If gcc can defined standard types, kernel can too.

The kernel *has to* use those exact same types. So why on earth do you
feel you should reimplement this?

> > > noreturn, alignas newest C standard
> > > are next.
> >
> > What is wrong with <stdalign.h> and <stdnoreturn.h>?
>
> These two are actually quite nice.
>
> Have you seen <stddef.h>? Loads of macrology crap.
> Kernel can ship nicer one.

It is a pretty tame file. And it works correctly for *all* targets,
including all Linux targets. Why reimplement this? No, it takes
virtually no resources to compile this. And you do not have to maintain
it *at all*, the compiler will take care of it. It is standard.

> > > They are userspace headers in the sense they are external to the project
> > > just like userspace programs are external to the kernel.
> >
> > So you are going to rewrite all of the rest of GCC inside the kernel
> > project as well?
>
> What an argument. "the rest of GCC" is already there except for stdarg.h.

???

That is there as well. But you want to remove it.

"The rest of GCC" is everything in cc1 (the compiler binary), in libgcc
(not that the kernel wants that either on most targets, although it is
required), etc. A few GB of binary goodness.

> > > Kernel chose to be self-contained.
> >
> > That is largely historical, imo. Nowadays this is less necessary.
>
> I kind of agree as in kernel should use int8_t and stuff because they
> are standard.

s8 is a much nicer name, heh. But it could
#define s8 int8_t
certainly.

What I meant was the kernel wanted to avoid standard headers because
those traditionally have been a bit problematic. But decades have gone
by, and nowadays the kernel's own headers are at least as bad.

> Also, -isystem removal disables <float.h> and <stdatomic.h> which is
> desireable.

Why? Do you think #include <float.h> will ever make it past code
review? Do you need to throw up extra barriers so people will have a
harder time changing that policy, if ever they think that a good idea?

> > > It will be used for intrinsics where necessary.
> >
> > Like, everywhere.
>
> No, where necessary. Patch demostrates there are only a few places which
> want -isystem back.

Yes, where necessary, that is what I said. So, potentially everywhere.
An arch can decide to use some builtin in a generic header, for example.

Your patch makes for more work in the future, that is the best it does.


Segher

2021-08-03 07:17:44

by Ard Biesheuvel

[permalink] [raw]
Subject: Re: [PATCH 2/3] isystem: ship and use stdarg.h

On Sun, 1 Aug 2021 at 22:13, Alexey Dobriyan <[email protected]> wrote:
>
> Ship minimal stdarg.h (1 type, 4 macros) as <linux/stdarg.h>.
> stdarg.h is the only userspace header commonly used in the kernel.
>

I /think/ I know why this is a good thing, but it is always better to
spell it out.

So with a better explanation in the commit log:

Acked-by: Ard Biesheuvel <[email protected]>


> GPL 2 version of <stdarg.h> can be extracted from
> http://archive.debian.org/debian/pool/main/g/gcc-4.2/gcc-4.2_4.2.4.orig.tar.gz
>
> Cc: "Rafael J. Wysocki" <[email protected]>
> Cc: Len Brown <[email protected]>
> Cc: [email protected]
> Cc: Ard Biesheuvel <[email protected]>
> Cc: [email protected]
> Signed-off-by: Alexey Dobriyan <[email protected]>
> ---
> arch/parisc/kernel/firmware.c | 2 +-
> arch/powerpc/kernel/prom_init.c | 2 +-
> arch/powerpc/kernel/rtas.c | 2 +-
> arch/powerpc/kernel/udbg.c | 2 +-
> arch/s390/boot/pgm_check_info.c | 2 +-
> arch/x86/boot/boot.h | 2 +-
> drivers/firmware/efi/libstub/efi-stub-helper.c | 2 +-
> drivers/firmware/efi/libstub/vsprintf.c | 2 +-
> drivers/gpu/drm/amd/display/dc/dc_helper.c | 2 +-
> drivers/gpu/drm/drm_print.c | 2 +-
> drivers/isdn/capi/capiutil.c | 2 +-
> drivers/macintosh/via-cuda.c | 2 +-
> drivers/macintosh/via-pmu.c | 2 +-
> .../atomisp/pci/hive_isp_css_include/print_support.h | 2 +-
> drivers/staging/media/atomisp/pci/ia_css_env.h | 2 +-
> .../pci/runtime/debug/interface/ia_css_debug.h | 2 +-
> drivers/staging/media/atomisp/pci/sh_css_internal.h | 2 +-
> fs/befs/debug.c | 2 +-
> fs/reiserfs/prints.c | 2 +-
> fs/ufs/super.c | 2 +-
> include/acpi/platform/acgcc.h | 2 +-
> include/linux/kernel.h | 2 +-
> include/linux/printk.h | 2 +-
> include/linux/stdarg.h | 11 +++++++++++
> include/linux/string.h | 2 +-
> lib/debug_info.c | 3 +--
> lib/kasprintf.c | 2 +-
> lib/kunit/string-stream.h | 2 +-
> lib/vsprintf.c | 2 +-
> mm/kfence/report.c | 2 +-
> net/batman-adv/log.c | 2 +-
> 31 files changed, 41 insertions(+), 31 deletions(-)
> create mode 100644 include/linux/stdarg.h
>
> diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c
> index 665b70086685..7034227dbdf3 100644
> --- a/arch/parisc/kernel/firmware.c
> +++ b/arch/parisc/kernel/firmware.c
> @@ -51,7 +51,7 @@
> * prumpf 991016
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/delay.h>
> #include <linux/init.h>
> diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
> index a5bf355ce1d6..10664633f7e3 100644
> --- a/arch/powerpc/kernel/prom_init.c
> +++ b/arch/powerpc/kernel/prom_init.c
> @@ -14,7 +14,7 @@
> /* we cannot use FORTIFY as it brings in new symbols */
> #define __NO_FORTIFY
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/kernel.h>
> #include <linux/string.h>
> #include <linux/init.h>
> diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
> index 99f2cce635fb..ff80bbad22a5 100644
> --- a/arch/powerpc/kernel/rtas.c
> +++ b/arch/powerpc/kernel/rtas.c
> @@ -7,7 +7,7 @@
> * Copyright (C) 2001 IBM.
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/kernel.h>
> #include <linux/types.h>
> #include <linux/spinlock.h>
> diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
> index 01595e8cafe7..b1544b2f6321 100644
> --- a/arch/powerpc/kernel/udbg.c
> +++ b/arch/powerpc/kernel/udbg.c
> @@ -5,7 +5,7 @@
> * c 2001 PPC 64 Team, IBM Corp
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
> #include <linux/sched.h>
> #include <linux/console.h>
> diff --git a/arch/s390/boot/pgm_check_info.c b/arch/s390/boot/pgm_check_info.c
> index 3a46abed2549..b7d8dd88bbf2 100644
> --- a/arch/s390/boot/pgm_check_info.c
> +++ b/arch/s390/boot/pgm_check_info.c
> @@ -1,5 +1,6 @@
> // SPDX-License-Identifier: GPL-2.0
> #include <linux/kernel.h>
> +#include <linux/stdarg.h>
> #include <linux/string.h>
> #include <linux/ctype.h>
> #include <asm/stacktrace.h>
> @@ -8,7 +9,6 @@
> #include <asm/setup.h>
> #include <asm/sclp.h>
> #include <asm/uv.h>
> -#include <stdarg.h>
> #include "boot.h"
>
> const char hex_asc[] = "0123456789abcdef";
> diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h
> index ca866f1cca2e..34c9dbb6a47d 100644
> --- a/arch/x86/boot/boot.h
> +++ b/arch/x86/boot/boot.h
> @@ -18,7 +18,7 @@
>
> #ifndef __ASSEMBLY__
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
> #include <linux/edd.h>
> #include <asm/setup.h>
> diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
> index ae87dded989d..d489bdc645fe 100644
> --- a/drivers/firmware/efi/libstub/efi-stub-helper.c
> +++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
> @@ -7,7 +7,7 @@
> * Copyright 2011 Intel Corporation; author Matt Fleming
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/ctype.h>
> #include <linux/efi.h>
> diff --git a/drivers/firmware/efi/libstub/vsprintf.c b/drivers/firmware/efi/libstub/vsprintf.c
> index 1088e288c04d..71c71c222346 100644
> --- a/drivers/firmware/efi/libstub/vsprintf.c
> +++ b/drivers/firmware/efi/libstub/vsprintf.c
> @@ -10,7 +10,7 @@
> * Oh, it's a waste of space, but oh-so-yummy for debugging.
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/compiler.h>
> #include <linux/ctype.h>
> diff --git a/drivers/gpu/drm/amd/display/dc/dc_helper.c b/drivers/gpu/drm/amd/display/dc/dc_helper.c
> index a612ba6dc389..ab6bc5d79012 100644
> --- a/drivers/gpu/drm/amd/display/dc/dc_helper.c
> +++ b/drivers/gpu/drm/amd/display/dc/dc_helper.c
> @@ -28,9 +28,9 @@
> */
>
> #include <linux/delay.h>
> +#include <linux/stdarg.h>
>
> #include "dm_services.h"
> -#include <stdarg.h>
>
> #include "dc.h"
> #include "dc_dmub_srv.h"
> diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
> index 111b932cf2a9..f783d4963d4b 100644
> --- a/drivers/gpu/drm/drm_print.c
> +++ b/drivers/gpu/drm/drm_print.c
> @@ -25,7 +25,7 @@
>
> #define DEBUG /* for pr_debug() */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/io.h>
> #include <linux/moduleparam.h>
> diff --git a/drivers/isdn/capi/capiutil.c b/drivers/isdn/capi/capiutil.c
> index f26bf3c66d7e..d7ae42edc4a8 100644
> --- a/drivers/isdn/capi/capiutil.c
> +++ b/drivers/isdn/capi/capiutil.c
> @@ -379,7 +379,7 @@ static char *pnames[] =
> /*2f */ "Useruserdata"
> };
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> /*-------------------------------------------------------*/
> static _cdebbuf *bufprint(_cdebbuf *cdb, char *fmt, ...)
> diff --git a/drivers/macintosh/via-cuda.c b/drivers/macintosh/via-cuda.c
> index 3581abfb0c6a..cd267392289c 100644
> --- a/drivers/macintosh/via-cuda.c
> +++ b/drivers/macintosh/via-cuda.c
> @@ -9,7 +9,7 @@
> *
> * Copyright (C) 1996 Paul Mackerras.
> */
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
> #include <linux/errno.h>
> #include <linux/kernel.h>
> diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
> index 4bdd4c45e7a7..4b98bc26a94b 100644
> --- a/drivers/macintosh/via-pmu.c
> +++ b/drivers/macintosh/via-pmu.c
> @@ -18,7 +18,7 @@
> * a sleep or a freq. switch
> *
> */
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/mutex.h>
> #include <linux/types.h>
> #include <linux/errno.h>
> diff --git a/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h b/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
> index 540b405cc0f7..a3c7f3de6d17 100644
> --- a/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
> +++ b/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
> @@ -16,7 +16,7 @@
> #ifndef __PRINT_SUPPORT_H_INCLUDED__
> #define __PRINT_SUPPORT_H_INCLUDED__
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> extern int (*sh_css_printf)(const char *fmt, va_list args);
> /* depends on host supplied print function in ia_css_init() */
> diff --git a/drivers/staging/media/atomisp/pci/ia_css_env.h b/drivers/staging/media/atomisp/pci/ia_css_env.h
> index 6b38723b27cd..3b89bbd837a0 100644
> --- a/drivers/staging/media/atomisp/pci/ia_css_env.h
> +++ b/drivers/staging/media/atomisp/pci/ia_css_env.h
> @@ -17,7 +17,7 @@
> #define __IA_CSS_ENV_H
>
> #include <type_support.h>
> -#include <stdarg.h> /* va_list */
> +#include <linux/stdarg.h> /* va_list */
> #include "ia_css_types.h"
> #include "ia_css_acc_types.h"
>
> diff --git a/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h b/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
> index 5e6e7447ae00..e37ef4232c55 100644
> --- a/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
> +++ b/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
> @@ -19,7 +19,7 @@
> /*! \file */
>
> #include <type_support.h>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include "ia_css_types.h"
> #include "ia_css_binary.h"
> #include "ia_css_frame_public.h"
> diff --git a/drivers/staging/media/atomisp/pci/sh_css_internal.h b/drivers/staging/media/atomisp/pci/sh_css_internal.h
> index 3c669ec79b68..496faa7297a5 100644
> --- a/drivers/staging/media/atomisp/pci/sh_css_internal.h
> +++ b/drivers/staging/media/atomisp/pci/sh_css_internal.h
> @@ -20,7 +20,7 @@
> #include <math_support.h>
> #include <type_support.h>
> #include <platform_support.h>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #if !defined(ISP2401)
> #include "input_formatter.h"
> diff --git a/fs/befs/debug.c b/fs/befs/debug.c
> index eb7bd6c692c7..02fa66fb82c2 100644
> --- a/fs/befs/debug.c
> +++ b/fs/befs/debug.c
> @@ -14,7 +14,7 @@
> #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> #ifdef __KERNEL__
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/string.h>
> #include <linux/spinlock.h>
> #include <linux/kernel.h>
> diff --git a/fs/reiserfs/prints.c b/fs/reiserfs/prints.c
> index 500f2000eb41..30319dc33c18 100644
> --- a/fs/reiserfs/prints.c
> +++ b/fs/reiserfs/prints.c
> @@ -8,7 +8,7 @@
> #include <linux/string.h>
> #include <linux/buffer_head.h>
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> static char error_buf[1024];
> static char fmt_buf[1024];
> diff --git a/fs/ufs/super.c b/fs/ufs/super.c
> index 74028b5a7b0a..00a01471ea05 100644
> --- a/fs/ufs/super.c
> +++ b/fs/ufs/super.c
> @@ -70,7 +70,7 @@
> #include <linux/module.h>
> #include <linux/bitops.h>
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/uaccess.h>
>
> diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h
> index f6656be81760..fb172a03a753 100644
> --- a/include/acpi/platform/acgcc.h
> +++ b/include/acpi/platform/acgcc.h
> @@ -22,7 +22,7 @@ typedef __builtin_va_list va_list;
> #define va_arg(v, l) __builtin_va_arg(v, l)
> #define va_copy(d, s) __builtin_va_copy(d, s)
> #else
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #endif
> #endif
>
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index 1b2f0a7e00d6..2776423a587e 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -2,7 +2,7 @@
> #ifndef _LINUX_KERNEL_H
> #define _LINUX_KERNEL_H
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/align.h>
> #include <linux/limits.h>
> #include <linux/linkage.h>
> diff --git a/include/linux/printk.h b/include/linux/printk.h
> index e834d78f0478..9f3f29ea348e 100644
> --- a/include/linux/printk.h
> +++ b/include/linux/printk.h
> @@ -2,7 +2,7 @@
> #ifndef __KERNEL_PRINTK__
> #define __KERNEL_PRINTK__
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/init.h>
> #include <linux/kern_levels.h>
> #include <linux/linkage.h>
> diff --git a/include/linux/stdarg.h b/include/linux/stdarg.h
> new file mode 100644
> index 000000000000..c8dc7f4f390c
> --- /dev/null
> +++ b/include/linux/stdarg.h
> @@ -0,0 +1,11 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +#ifndef _LINUX_STDARG_H
> +#define _LINUX_STDARG_H
> +
> +typedef __builtin_va_list va_list;
> +#define va_start(v, l) __builtin_va_start(v, l)
> +#define va_end(v) __builtin_va_end(v)
> +#define va_arg(v, T) __builtin_va_arg(v, T)
> +#define va_copy(d, s) __builtin_va_copy(d, s)
> +
> +#endif
> diff --git a/include/linux/string.h b/include/linux/string.h
> index b48d2d28e0b1..5e96d656be7a 100644
> --- a/include/linux/string.h
> +++ b/include/linux/string.h
> @@ -6,7 +6,7 @@
> #include <linux/types.h> /* for size_t */
> #include <linux/stddef.h> /* for NULL */
> #include <linux/errno.h> /* for E2BIG */
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <uapi/linux/string.h>
>
> extern char *strndup_user(const char __user *, long);
> diff --git a/lib/debug_info.c b/lib/debug_info.c
> index 36daf753293c..cc4723c74af5 100644
> --- a/lib/debug_info.c
> +++ b/lib/debug_info.c
> @@ -5,8 +5,6 @@
> * CONFIG_DEBUG_INFO_REDUCED. Please do not add actual code. However,
> * adding appropriate #includes is fine.
> */
> -#include <stdarg.h>
> -
> #include <linux/cred.h>
> #include <linux/crypto.h>
> #include <linux/dcache.h>
> @@ -22,6 +20,7 @@
> #include <linux/net.h>
> #include <linux/sched.h>
> #include <linux/slab.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
> #include <net/addrconf.h>
> #include <net/sock.h>
> diff --git a/lib/kasprintf.c b/lib/kasprintf.c
> index bacf7b83ccf0..cd2f5974ed98 100644
> --- a/lib/kasprintf.c
> +++ b/lib/kasprintf.c
> @@ -5,7 +5,7 @@
> * Copyright (C) 1991, 1992 Linus Torvalds
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/export.h>
> #include <linux/slab.h>
> #include <linux/types.h>
> diff --git a/lib/kunit/string-stream.h b/lib/kunit/string-stream.h
> index 5e94b623454f..43f9508a55b4 100644
> --- a/lib/kunit/string-stream.h
> +++ b/lib/kunit/string-stream.h
> @@ -11,7 +11,7 @@
>
> #include <linux/spinlock.h>
> #include <linux/types.h>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> struct string_stream_fragment {
> struct kunit *test;
> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> index 26c83943748a..3bcb7be03f93 100644
> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -17,7 +17,7 @@
> * - scnprintf and vscnprintf
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/build_bug.h>
> #include <linux/clk.h>
> #include <linux/clk-provider.h>
> diff --git a/mm/kfence/report.c b/mm/kfence/report.c
> index 2a319c21c939..4b891dd75650 100644
> --- a/mm/kfence/report.c
> +++ b/mm/kfence/report.c
> @@ -5,7 +5,7 @@
> * Copyright (C) 2020, Google LLC.
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/kernel.h>
> #include <linux/lockdep.h>
> diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c
> index f0e5d1429662..7a93a1e94c40 100644
> --- a/net/batman-adv/log.c
> +++ b/net/batman-adv/log.c
> @@ -7,7 +7,7 @@
> #include "log.h"
> #include "main.h"
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include "trace.h"
>
> --
> 2.31.1
>

2021-08-06 18:29:02

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH 2/3] isystem: ship and use stdarg.h

On Sun, Aug 1, 2021 at 10:13 PM Alexey Dobriyan <[email protected]> wrote:
>
> Ship minimal stdarg.h (1 type, 4 macros) as <linux/stdarg.h>.
> stdarg.h is the only userspace header commonly used in the kernel.
>
> GPL 2 version of <stdarg.h> can be extracted from
> http://archive.debian.org/debian/pool/main/g/gcc-4.2/gcc-4.2_4.2.4.orig.tar.gz
>
> Cc: "Rafael J. Wysocki" <[email protected]>
> Cc: Len Brown <[email protected]>
> Cc: [email protected]
> Cc: Ard Biesheuvel <[email protected]>
> Cc: [email protected]
> Signed-off-by: Alexey Dobriyan <[email protected]>

For the ACPI part:

Acked-by: Rafael J. Wysocki <[email protected]>

> ---
> arch/parisc/kernel/firmware.c | 2 +-
> arch/powerpc/kernel/prom_init.c | 2 +-
> arch/powerpc/kernel/rtas.c | 2 +-
> arch/powerpc/kernel/udbg.c | 2 +-
> arch/s390/boot/pgm_check_info.c | 2 +-
> arch/x86/boot/boot.h | 2 +-
> drivers/firmware/efi/libstub/efi-stub-helper.c | 2 +-
> drivers/firmware/efi/libstub/vsprintf.c | 2 +-
> drivers/gpu/drm/amd/display/dc/dc_helper.c | 2 +-
> drivers/gpu/drm/drm_print.c | 2 +-
> drivers/isdn/capi/capiutil.c | 2 +-
> drivers/macintosh/via-cuda.c | 2 +-
> drivers/macintosh/via-pmu.c | 2 +-
> .../atomisp/pci/hive_isp_css_include/print_support.h | 2 +-
> drivers/staging/media/atomisp/pci/ia_css_env.h | 2 +-
> .../pci/runtime/debug/interface/ia_css_debug.h | 2 +-
> drivers/staging/media/atomisp/pci/sh_css_internal.h | 2 +-
> fs/befs/debug.c | 2 +-
> fs/reiserfs/prints.c | 2 +-
> fs/ufs/super.c | 2 +-
> include/acpi/platform/acgcc.h | 2 +-
> include/linux/kernel.h | 2 +-
> include/linux/printk.h | 2 +-
> include/linux/stdarg.h | 11 +++++++++++
> include/linux/string.h | 2 +-
> lib/debug_info.c | 3 +--
> lib/kasprintf.c | 2 +-
> lib/kunit/string-stream.h | 2 +-
> lib/vsprintf.c | 2 +-
> mm/kfence/report.c | 2 +-
> net/batman-adv/log.c | 2 +-
> 31 files changed, 41 insertions(+), 31 deletions(-)
> create mode 100644 include/linux/stdarg.h
>
> diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c
> index 665b70086685..7034227dbdf3 100644
> --- a/arch/parisc/kernel/firmware.c
> +++ b/arch/parisc/kernel/firmware.c
> @@ -51,7 +51,7 @@
> * prumpf 991016
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/delay.h>
> #include <linux/init.h>
> diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
> index a5bf355ce1d6..10664633f7e3 100644
> --- a/arch/powerpc/kernel/prom_init.c
> +++ b/arch/powerpc/kernel/prom_init.c
> @@ -14,7 +14,7 @@
> /* we cannot use FORTIFY as it brings in new symbols */
> #define __NO_FORTIFY
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/kernel.h>
> #include <linux/string.h>
> #include <linux/init.h>
> diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
> index 99f2cce635fb..ff80bbad22a5 100644
> --- a/arch/powerpc/kernel/rtas.c
> +++ b/arch/powerpc/kernel/rtas.c
> @@ -7,7 +7,7 @@
> * Copyright (C) 2001 IBM.
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/kernel.h>
> #include <linux/types.h>
> #include <linux/spinlock.h>
> diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
> index 01595e8cafe7..b1544b2f6321 100644
> --- a/arch/powerpc/kernel/udbg.c
> +++ b/arch/powerpc/kernel/udbg.c
> @@ -5,7 +5,7 @@
> * c 2001 PPC 64 Team, IBM Corp
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
> #include <linux/sched.h>
> #include <linux/console.h>
> diff --git a/arch/s390/boot/pgm_check_info.c b/arch/s390/boot/pgm_check_info.c
> index 3a46abed2549..b7d8dd88bbf2 100644
> --- a/arch/s390/boot/pgm_check_info.c
> +++ b/arch/s390/boot/pgm_check_info.c
> @@ -1,5 +1,6 @@
> // SPDX-License-Identifier: GPL-2.0
> #include <linux/kernel.h>
> +#include <linux/stdarg.h>
> #include <linux/string.h>
> #include <linux/ctype.h>
> #include <asm/stacktrace.h>
> @@ -8,7 +9,6 @@
> #include <asm/setup.h>
> #include <asm/sclp.h>
> #include <asm/uv.h>
> -#include <stdarg.h>
> #include "boot.h"
>
> const char hex_asc[] = "0123456789abcdef";
> diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h
> index ca866f1cca2e..34c9dbb6a47d 100644
> --- a/arch/x86/boot/boot.h
> +++ b/arch/x86/boot/boot.h
> @@ -18,7 +18,7 @@
>
> #ifndef __ASSEMBLY__
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
> #include <linux/edd.h>
> #include <asm/setup.h>
> diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
> index ae87dded989d..d489bdc645fe 100644
> --- a/drivers/firmware/efi/libstub/efi-stub-helper.c
> +++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
> @@ -7,7 +7,7 @@
> * Copyright 2011 Intel Corporation; author Matt Fleming
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/ctype.h>
> #include <linux/efi.h>
> diff --git a/drivers/firmware/efi/libstub/vsprintf.c b/drivers/firmware/efi/libstub/vsprintf.c
> index 1088e288c04d..71c71c222346 100644
> --- a/drivers/firmware/efi/libstub/vsprintf.c
> +++ b/drivers/firmware/efi/libstub/vsprintf.c
> @@ -10,7 +10,7 @@
> * Oh, it's a waste of space, but oh-so-yummy for debugging.
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/compiler.h>
> #include <linux/ctype.h>
> diff --git a/drivers/gpu/drm/amd/display/dc/dc_helper.c b/drivers/gpu/drm/amd/display/dc/dc_helper.c
> index a612ba6dc389..ab6bc5d79012 100644
> --- a/drivers/gpu/drm/amd/display/dc/dc_helper.c
> +++ b/drivers/gpu/drm/amd/display/dc/dc_helper.c
> @@ -28,9 +28,9 @@
> */
>
> #include <linux/delay.h>
> +#include <linux/stdarg.h>
>
> #include "dm_services.h"
> -#include <stdarg.h>
>
> #include "dc.h"
> #include "dc_dmub_srv.h"
> diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
> index 111b932cf2a9..f783d4963d4b 100644
> --- a/drivers/gpu/drm/drm_print.c
> +++ b/drivers/gpu/drm/drm_print.c
> @@ -25,7 +25,7 @@
>
> #define DEBUG /* for pr_debug() */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/io.h>
> #include <linux/moduleparam.h>
> diff --git a/drivers/isdn/capi/capiutil.c b/drivers/isdn/capi/capiutil.c
> index f26bf3c66d7e..d7ae42edc4a8 100644
> --- a/drivers/isdn/capi/capiutil.c
> +++ b/drivers/isdn/capi/capiutil.c
> @@ -379,7 +379,7 @@ static char *pnames[] =
> /*2f */ "Useruserdata"
> };
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> /*-------------------------------------------------------*/
> static _cdebbuf *bufprint(_cdebbuf *cdb, char *fmt, ...)
> diff --git a/drivers/macintosh/via-cuda.c b/drivers/macintosh/via-cuda.c
> index 3581abfb0c6a..cd267392289c 100644
> --- a/drivers/macintosh/via-cuda.c
> +++ b/drivers/macintosh/via-cuda.c
> @@ -9,7 +9,7 @@
> *
> * Copyright (C) 1996 Paul Mackerras.
> */
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
> #include <linux/errno.h>
> #include <linux/kernel.h>
> diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
> index 4bdd4c45e7a7..4b98bc26a94b 100644
> --- a/drivers/macintosh/via-pmu.c
> +++ b/drivers/macintosh/via-pmu.c
> @@ -18,7 +18,7 @@
> * a sleep or a freq. switch
> *
> */
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/mutex.h>
> #include <linux/types.h>
> #include <linux/errno.h>
> diff --git a/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h b/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
> index 540b405cc0f7..a3c7f3de6d17 100644
> --- a/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
> +++ b/drivers/staging/media/atomisp/pci/hive_isp_css_include/print_support.h
> @@ -16,7 +16,7 @@
> #ifndef __PRINT_SUPPORT_H_INCLUDED__
> #define __PRINT_SUPPORT_H_INCLUDED__
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> extern int (*sh_css_printf)(const char *fmt, va_list args);
> /* depends on host supplied print function in ia_css_init() */
> diff --git a/drivers/staging/media/atomisp/pci/ia_css_env.h b/drivers/staging/media/atomisp/pci/ia_css_env.h
> index 6b38723b27cd..3b89bbd837a0 100644
> --- a/drivers/staging/media/atomisp/pci/ia_css_env.h
> +++ b/drivers/staging/media/atomisp/pci/ia_css_env.h
> @@ -17,7 +17,7 @@
> #define __IA_CSS_ENV_H
>
> #include <type_support.h>
> -#include <stdarg.h> /* va_list */
> +#include <linux/stdarg.h> /* va_list */
> #include "ia_css_types.h"
> #include "ia_css_acc_types.h"
>
> diff --git a/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h b/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
> index 5e6e7447ae00..e37ef4232c55 100644
> --- a/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
> +++ b/drivers/staging/media/atomisp/pci/runtime/debug/interface/ia_css_debug.h
> @@ -19,7 +19,7 @@
> /*! \file */
>
> #include <type_support.h>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include "ia_css_types.h"
> #include "ia_css_binary.h"
> #include "ia_css_frame_public.h"
> diff --git a/drivers/staging/media/atomisp/pci/sh_css_internal.h b/drivers/staging/media/atomisp/pci/sh_css_internal.h
> index 3c669ec79b68..496faa7297a5 100644
> --- a/drivers/staging/media/atomisp/pci/sh_css_internal.h
> +++ b/drivers/staging/media/atomisp/pci/sh_css_internal.h
> @@ -20,7 +20,7 @@
> #include <math_support.h>
> #include <type_support.h>
> #include <platform_support.h>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #if !defined(ISP2401)
> #include "input_formatter.h"
> diff --git a/fs/befs/debug.c b/fs/befs/debug.c
> index eb7bd6c692c7..02fa66fb82c2 100644
> --- a/fs/befs/debug.c
> +++ b/fs/befs/debug.c
> @@ -14,7 +14,7 @@
> #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> #ifdef __KERNEL__
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/string.h>
> #include <linux/spinlock.h>
> #include <linux/kernel.h>
> diff --git a/fs/reiserfs/prints.c b/fs/reiserfs/prints.c
> index 500f2000eb41..30319dc33c18 100644
> --- a/fs/reiserfs/prints.c
> +++ b/fs/reiserfs/prints.c
> @@ -8,7 +8,7 @@
> #include <linux/string.h>
> #include <linux/buffer_head.h>
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> static char error_buf[1024];
> static char fmt_buf[1024];
> diff --git a/fs/ufs/super.c b/fs/ufs/super.c
> index 74028b5a7b0a..00a01471ea05 100644
> --- a/fs/ufs/super.c
> +++ b/fs/ufs/super.c
> @@ -70,7 +70,7 @@
> #include <linux/module.h>
> #include <linux/bitops.h>
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/uaccess.h>
>
> diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h
> index f6656be81760..fb172a03a753 100644
> --- a/include/acpi/platform/acgcc.h
> +++ b/include/acpi/platform/acgcc.h
> @@ -22,7 +22,7 @@ typedef __builtin_va_list va_list;
> #define va_arg(v, l) __builtin_va_arg(v, l)
> #define va_copy(d, s) __builtin_va_copy(d, s)
> #else
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #endif
> #endif
>
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index 1b2f0a7e00d6..2776423a587e 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -2,7 +2,7 @@
> #ifndef _LINUX_KERNEL_H
> #define _LINUX_KERNEL_H
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/align.h>
> #include <linux/limits.h>
> #include <linux/linkage.h>
> diff --git a/include/linux/printk.h b/include/linux/printk.h
> index e834d78f0478..9f3f29ea348e 100644
> --- a/include/linux/printk.h
> +++ b/include/linux/printk.h
> @@ -2,7 +2,7 @@
> #ifndef __KERNEL_PRINTK__
> #define __KERNEL_PRINTK__
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/init.h>
> #include <linux/kern_levels.h>
> #include <linux/linkage.h>
> diff --git a/include/linux/stdarg.h b/include/linux/stdarg.h
> new file mode 100644
> index 000000000000..c8dc7f4f390c
> --- /dev/null
> +++ b/include/linux/stdarg.h
> @@ -0,0 +1,11 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +#ifndef _LINUX_STDARG_H
> +#define _LINUX_STDARG_H
> +
> +typedef __builtin_va_list va_list;
> +#define va_start(v, l) __builtin_va_start(v, l)
> +#define va_end(v) __builtin_va_end(v)
> +#define va_arg(v, T) __builtin_va_arg(v, T)
> +#define va_copy(d, s) __builtin_va_copy(d, s)
> +
> +#endif
> diff --git a/include/linux/string.h b/include/linux/string.h
> index b48d2d28e0b1..5e96d656be7a 100644
> --- a/include/linux/string.h
> +++ b/include/linux/string.h
> @@ -6,7 +6,7 @@
> #include <linux/types.h> /* for size_t */
> #include <linux/stddef.h> /* for NULL */
> #include <linux/errno.h> /* for E2BIG */
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <uapi/linux/string.h>
>
> extern char *strndup_user(const char __user *, long);
> diff --git a/lib/debug_info.c b/lib/debug_info.c
> index 36daf753293c..cc4723c74af5 100644
> --- a/lib/debug_info.c
> +++ b/lib/debug_info.c
> @@ -5,8 +5,6 @@
> * CONFIG_DEBUG_INFO_REDUCED. Please do not add actual code. However,
> * adding appropriate #includes is fine.
> */
> -#include <stdarg.h>
> -
> #include <linux/cred.h>
> #include <linux/crypto.h>
> #include <linux/dcache.h>
> @@ -22,6 +20,7 @@
> #include <linux/net.h>
> #include <linux/sched.h>
> #include <linux/slab.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
> #include <net/addrconf.h>
> #include <net/sock.h>
> diff --git a/lib/kasprintf.c b/lib/kasprintf.c
> index bacf7b83ccf0..cd2f5974ed98 100644
> --- a/lib/kasprintf.c
> +++ b/lib/kasprintf.c
> @@ -5,7 +5,7 @@
> * Copyright (C) 1991, 1992 Linus Torvalds
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/export.h>
> #include <linux/slab.h>
> #include <linux/types.h>
> diff --git a/lib/kunit/string-stream.h b/lib/kunit/string-stream.h
> index 5e94b623454f..43f9508a55b4 100644
> --- a/lib/kunit/string-stream.h
> +++ b/lib/kunit/string-stream.h
> @@ -11,7 +11,7 @@
>
> #include <linux/spinlock.h>
> #include <linux/types.h>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> struct string_stream_fragment {
> struct kunit *test;
> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> index 26c83943748a..3bcb7be03f93 100644
> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -17,7 +17,7 @@
> * - scnprintf and vscnprintf
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
> #include <linux/build_bug.h>
> #include <linux/clk.h>
> #include <linux/clk-provider.h>
> diff --git a/mm/kfence/report.c b/mm/kfence/report.c
> index 2a319c21c939..4b891dd75650 100644
> --- a/mm/kfence/report.c
> +++ b/mm/kfence/report.c
> @@ -5,7 +5,7 @@
> * Copyright (C) 2020, Google LLC.
> */
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include <linux/kernel.h>
> #include <linux/lockdep.h>
> diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c
> index f0e5d1429662..7a93a1e94c40 100644
> --- a/net/batman-adv/log.c
> +++ b/net/batman-adv/log.c
> @@ -7,7 +7,7 @@
> #include "log.h"
> #include "main.h"
>
> -#include <stdarg.h>
> +#include <linux/stdarg.h>
>
> #include "trace.h"
>
> --
> 2.31.1
>

2021-08-17 01:34:47

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH 2/3] isystem: ship and use stdarg.h

On Tue, Aug 3, 2021 at 4:14 PM Ard Biesheuvel <[email protected]> wrote:
>
> On Sun, 1 Aug 2021 at 22:13, Alexey Dobriyan <[email protected]> wrote:
> >
> > Ship minimal stdarg.h (1 type, 4 macros) as <linux/stdarg.h>.
> > stdarg.h is the only userspace header commonly used in the kernel.
> >
>
> I /think/ I know why this is a good thing, but it is always better to
> spell it out.
>
> So with a better explanation in the commit log:
>
> Acked-by: Ard Biesheuvel <[email protected]>
>


I added your Ack because the benefit of this refactoring
is described in this:

https://lore.kernel.org/lkml/[email protected]/



--
Best Regards
Masahiro Yamada