From: Steffen Eiden <seiden@linux.ibm.com>
To: kvm@vger.kernel.org, kvmarm@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org
Cc: Alexander Gordeev <agordeev@linux.ibm.com>,
Andreas Grapentin <gra@linux.ibm.com>,
Arnd Bergmann <arnd@arndb.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
David Hildenbrand <david@kernel.org>,
Friedrich Welter <fritz@linux.ibm.com>,
Fuad Tabba <tabba@google.com>, Gautam Gala <ggala@linux.ibm.com>,
Hariharan Mari <hari55@linux.ibm.com>,
Heiko Carstens <hca@linux.ibm.com>,
Hendrik Brueckner <brueckner@linux.ibm.com>,
Ilya Leoshkevich <iii@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Joey Gouly <joey.gouly@arm.com>, Marc Zyngier <maz@kernel.org>,
Nico Boehr <nrb@linux.ibm.com>,
Nina Schoetterl-Glausch <oss@nina.schoetterlglausch.eu>,
Oliver Upton <oupton@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
Sean Christopherson <seanjc@google.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Ulrich Weigand <Ulrich.Weigand@de.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>, Will Deacon <will@kernel.org>,
Zenghui Yu <yuzenghui@huawei.com>
Subject: [PATCH v9 14/24] s390/tools: Use arm64 headers
Date: Wed, 30 Sep 2026 19:34:29 +0200 [thread overview]
Message-ID: <20260930173441.66762-15-seiden@linux.ibm.com> (raw)
In-Reply-To: <20260930173441.66762-1-seiden@linux.ibm.com>
Introduce a flexible system for sharing ARM64 headers with s390 KVM.
Selected arm64 headers or snippet of headers will be reachable by s390
code through asm/header.h.
Add copy-arm64h.awk that detects ARM64_S390_COMMON markers and extracts
marked section into a generated header consumable by s390. Falls back to
full file copy when no markers are found.
Transform copied includes by replacing '#include <asm/...>' with
'#include <arm64/...>' and similar for uapi headers to ensure
correct path resolution on s390 and allow for a clear separation of s390
asm headers and arm64 asm headers.
Integrate this extraction into the s390/kapi target, conditional on
CONFIG_KVM.
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
---
arch/s390/include/uapi/Kbuild | 6 ++
arch/s390/tools/Makefile | 6 +-
arch/s390/tools/Makefile.arm64h | 55 ++++++++++++++++++
arch/s390/tools/copy-arm64h-full.awk | 50 +++++++++++++++++
arch/s390/tools/copy-arm64h.awk | 83 ++++++++++++++++++++++++++++
5 files changed, 199 insertions(+), 1 deletion(-)
create mode 100644 arch/s390/include/uapi/Kbuild
create mode 100644 arch/s390/tools/Makefile.arm64h
create mode 100644 arch/s390/tools/copy-arm64h-full.awk
create mode 100644 arch/s390/tools/copy-arm64h.awk
diff --git a/arch/s390/include/uapi/Kbuild b/arch/s390/include/uapi/Kbuild
new file mode 100644
index 000000000000..81dcaaf42c40
--- /dev/null
+++ b/arch/s390/include/uapi/Kbuild
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0
+
+# The ARM64 uapi headers under generated/uapi/arm64/ are private copies used
+# internally by the s390 KVM ARM64 implementation. They contain #line
+# directives and rewritten include paths and must not be shipped to userspace.
+no-export-headers += arm64/%
diff --git a/arch/s390/tools/Makefile b/arch/s390/tools/Makefile
index f2862364fb42..d0aa7e076bad 100644
--- a/arch/s390/tools/Makefile
+++ b/arch/s390/tools/Makefile
@@ -3,12 +3,16 @@
# Makefile for s390 specific build tools
#
+include $(srctree)/arch/s390/tools/Makefile.arm64h
+
kapi := arch/$(ARCH)/include/generated/asm
kapi-hdrs-y := $(kapi)/facility-defs.h $(kapi)/dis-defs.h
+kapi-hdrs-$(CONFIG_KVM) += $(ARM64_TARGETS)
+
PHONY += kapi
-kapi: $(kapi-hdrs-y)
+kapi: $(kapi-hdrs-y) $(kapi-hdrs-m)
hostprogs += gen_facilities
hostprogs += gen_opcode_table
diff --git a/arch/s390/tools/Makefile.arm64h b/arch/s390/tools/Makefile.arm64h
new file mode 100644
index 000000000000..f3f8e9d9bdd8
--- /dev/null
+++ b/arch/s390/tools/Makefile.arm64h
@@ -0,0 +1,55 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Share ARM64 headers with s390 KVM
+#
+
+arm64api := $(objtree)/arch/$(ARCH)/include/generated/arm64
+arm64uapi := $(objtree)/arch/$(ARCH)/include/generated/uapi/arm64
+
+# List of ARM64 headers to share with s390 KVM
+# Format: [uapi:]header.h or header-gen.h
+#
+# * header.h - from arch/arm64/include/asm/ to arm64/
+# * uapi:header.h - from arch/arm64/include/uapi/asm/ to uapi/arm64/
+# * header-gen.h - generated as header-gen.h from ARM64 header header.h
+# If a header contains partial markers (#if ARM64_S390_COMMON == 1) only this part will be copied.
+# If the file does not contain any markers the whole file will be copied.
+ARM64_SHARED_HEADERS := \
+ brk-imm.h \
+ esr.h \
+ kvm_arm.h \
+ kvm_emulate-gen.h \
+ kvm_host.h \
+ ptrace-gen.h \
+ sysreg-gen.h \
+ uapi:hwcap.h \
+ uapi:kvm.h \
+ uapi:ptrace.h \
+ uapi:sve_context.h
+
+filechk_gen_arm_hdr = \
+ $(AWK) -f $(src)/copy-arm64h.awk $< || \
+ $(AWK) -f $(src)/copy-arm64h-full.awk $< || \
+ { echo "Error: Unbalanced ARM64_S390_COMMON markers in $<" >&2; exit 1; }
+
+arm64-type = $(firstword $(subst :, ,$(1)))
+arm64-base = $(or $(word 2,$(subst :, ,$(1))),$(1))
+arm64-src-base = $(patsubst %-gen.h,%.h,$(call arm64-base,$(1)))
+
+arm64-src = $(srctree)/arch/arm64/include/$(if $(filter uapi,$(call arm64-type,$(1))),uapi/)asm/$(call arm64-src-base,$(1))
+arm64-dst = $(if $(filter uapi,$(call arm64-type,$(1))),$(arm64uapi),$(arm64api))/$(call arm64-base,$(1))
+
+$(foreach hdr,$(ARM64_SHARED_HEADERS),\
+ $(eval $(call arm64-dst,$(hdr)): $(call arm64-src,$(hdr)) $(src)/copy-arm64h.awk $(src)/copy-arm64h-full.awk FORCE))
+
+ARM64_TARGETS := $(sort $(foreach hdr,$(ARM64_SHARED_HEADERS),$(call arm64-dst,$(hdr))))
+$(ARM64_TARGETS):
+ $(call filechk,gen_arm_hdr)
+
+filechk_gen_sysreg_arm64 = \
+ $(AWK) -f $(srctree)/arch/arm64/tools/gen-sysreg.awk $(srctree)/arch/arm64/tools/sysreg
+
+$(arm64api)/sysreg-defs.h: $(srctree)/arch/arm64/tools/gen-sysreg.awk $(srctree)/arch/arm64/tools/sysreg FORCE
+ $(call filechk,gen_sysreg_arm64)
+
+ARM64_TARGETS += $(arm64api)/sysreg-defs.h
diff --git a/arch/s390/tools/copy-arm64h-full.awk b/arch/s390/tools/copy-arm64h-full.awk
new file mode 100644
index 000000000000..ad7bb98dc4a6
--- /dev/null
+++ b/arch/s390/tools/copy-arm64h-full.awk
@@ -0,0 +1,50 @@
+#!/usr/bin/awk -f
+# SPDX-License-Identifier: GPL-2.0
+#
+# Process entire ARM64 headers for sharing with s390 KVM
+#
+# Usage: copy-arm64h-full.awk <input_file>
+#
+# This processes the entire file (unlike copy-arm64h.awk which only extracts marked sections)
+
+BEGIN {
+ max_guard_line = 25
+ guard_found = 0
+ header_added = 0
+}
+
+# Find and process the include guard in the first few lines
+NR <= max_guard_line && !guard_found && /^#ifndef [A-Z_0-9]+$/ {
+ guard_name = $2
+ guard_found = 1
+ print "/* This header was copied from " FILENAME " */"
+ print ""
+ # Map subsequent lines back to the original ARM64 source file so that
+ # compiler diagnostics point there rather than at the generated copy.
+ print "#line " NR " \"" FILENAME "\""
+ print
+ header_added = 1
+ next
+}
+
+# Transform include directives
+/^#include <uapi\/asm\// {
+ sub(/<uapi\/asm\//, "<uapi/arm64/")
+ print
+ next
+}
+
+/^#include <asm\// {
+ sub(/<asm\//, "<arm64/")
+ print
+ next
+}
+
+/ARM64_S390_COMMON/ {
+ exit 1
+}
+
+# Pass through all other lines
+{
+ print
+}
diff --git a/arch/s390/tools/copy-arm64h.awk b/arch/s390/tools/copy-arm64h.awk
new file mode 100644
index 000000000000..9a338d71bba2
--- /dev/null
+++ b/arch/s390/tools/copy-arm64h.awk
@@ -0,0 +1,83 @@
+#!/usr/bin/awk -f
+# SPDX-License-Identifier: GPL-2.0
+#
+# Extract marked sections from ARM64 headers for sharing with s390 KVM
+#
+# Usage: copy-arm64h.awk <input_file>
+#
+# Extracts all sections between start/end markers. If no markers found, signals for fallback.
+BEGIN {
+ # Constants
+ start_pattern = "^#if ARM64_S390_COMMON == 1$"
+ end_pattern = "^#endif \\/\\* ARM64_S390_COMMON == 1 \\*\\/$"
+ max_guard_line = 25
+
+ # State variables
+ copying = found_marker = error = 0
+ guard_name = ""
+ file_header_done = 0
+ depth = 0
+}
+
+NR <= max_guard_line && !guard_name && /^#ifndef [A-Za-z0-9_]+$/ {
+ guard_name = $2
+ next
+}
+
+NR > max_guard_line && !guard_name && !file_header_done {
+ print "error: no include guard found in first " max_guard_line " lines" > "/dev/stderr"
+ file_header_done = 1
+ error = 1; exit
+}
+
+$0 ~ start_pattern {
+ if (copying) { error = 1; exit }
+ if (!found_marker) {
+ print "/*"
+ print " * This header was automatically generated from " FILENAME
+ print " * Do not modify this file directly."
+ print " */"
+ print "#ifndef " guard_name
+ print "#define " guard_name
+ print ""
+ }
+ depth = copying= found_marker = 1
+ # Map subsequent lines back to the original ARM64 source file so that
+ # compiler diagnostics point there rather than at the generated copy.
+ print "#line " (NR + 1) " \"" FILENAME "\""
+ next
+}
+
+guard_name && !found_marker {
+ next
+}
+
+$0 ~ /^[ \t]*#[ \t]*endif/ {
+ depth--
+ if (depth == 0) {
+ if ($0 ~ end_pattern ) {
+ copying = 0
+ next
+ }
+ error = 1; exit
+ }
+}
+
+/ARM64_S390_COMMON/ { error = 1; exit }
+
+copying {
+ if ($0 ~ /^[ \t]*#[ \t]*if(def|ndef)?([ \t]|$)/) depth++
+ gsub(/#include <asm\//, "#include <arm64/")
+ gsub(/#include <uapi\/asm\//, "#include <uapi/arm64/")
+ print
+ next
+}
+
+END {
+ if (error) exit 1
+ if (found_marker) {
+ print ""
+ print "#endif /* " guard_name " */"
+ }
+ exit !found_marker || copying
+}
--
2.53.0
next prev parent reply other threads:[~2026-09-30 17:35 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 17:34 [PATCH v9 00/24] KVM: s390: Introduce arm64 KVM Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 01/24] KVM: Make device name configurable Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 02/24] KVM: Move architecture capability Kconfigs to header defines Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 03/24] KVM: Replace CONFIG_KVM_MMIO with KVM_NO_MMIO Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 04/24] arm64: Use proper include variant Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 05/24] arm64: ptrace: Use constants for compat register numbers Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 06/24] arm64: sysreg: Convert SPSR_ELx to automatic register generation Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 07/24] KVM: arm64: Access elements of vcpu_gp_regs individually Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 08/24] KVM: arm64: Use accessor functions for core regs Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 09/24] arm64: Prepare sharing arm64 headers with s390 Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 10/24] arm64: Share " Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 11/24] KVM: arm64: Share arm64 code " Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 12/24] s390/Kconfig: remove PCI dependency from HAS_IOMEM Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 13/24] KVM: s390: Use dedicated function for migration mode Steffen Eiden
2026-09-30 17:34 ` Steffen Eiden [this message]
2026-10-01 10:25 ` [PATCH v9 14/24] s390/tools: Use arm64 headers Hendrik Brueckner
2026-09-30 17:34 ` [PATCH v9 15/24] KVM: s390: Use arm64 code Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 16/24] s390: Introduce Start Arm Execution instruction Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 17/24] KVM: s390: arm64: Introduce host definitions Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 18/24] s390/hwcaps: Report SAE support as hwcap Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 19/24] KVM: s390: Add basic arm64 kvm module Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 20/24] KVM: s390: arm64: Implement required functions Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 21/24] KVM: s390: arm64: Implement vm/vcpu create destroy Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 22/24] KVM: s390: arm64: Implement vCPU IOCTLs Steffen Eiden
2026-09-30 17:34 ` [PATCH v9 23/24] KVM: s390: arm64: Implement basic page fault handler Steffen Eiden
2026-10-01 12:10 ` Arnd Bergmann
2026-10-01 13:35 ` Arnd Bergmann
2026-10-01 14:36 ` Lorenzo Stoakes (ARM)
2026-10-01 15:30 ` Steffen Eiden
2026-10-02 10:18 ` Lorenzo Stoakes (ARM)
2026-10-01 14:03 ` Steffen Eiden
2026-10-01 14:39 ` Lorenzo Stoakes (ARM)
2026-09-30 17:34 ` [PATCH v9 24/24] KVM: s390: arm64: Integrate arm on s390 Steffen Eiden
2026-10-01 11:04 ` (subset) [PATCH v9 00/24] KVM: s390: Introduce arm64 KVM Marc Zyngier
2026-10-01 13:27 ` Steffen Eiden
2026-10-01 13:39 ` Arnd Bergmann
2026-10-02 8:46 ` Arnd Bergmann
2026-10-01 15:12 ` Marc Zyngier
2026-10-02 8:00 ` Steffen Eiden
2026-10-02 9:02 ` Marc Zyngier
2026-10-02 9:17 ` Steffen Eiden
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260930173441.66762-15-seiden@linux.ibm.com \
--to=seiden@linux.ibm.com \
--cc=Ulrich.Weigand@de.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=arnd@arndb.de \
--cc=borntraeger@linux.ibm.com \
--cc=brueckner@linux.ibm.com \
--cc=catalin.marinas@arm.com \
--cc=david@kernel.org \
--cc=frankja@linux.ibm.com \
--cc=fritz@linux.ibm.com \
--cc=ggala@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=gra@linux.ibm.com \
--cc=hari55@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=joey.gouly@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=maz@kernel.org \
--cc=nrb@linux.ibm.com \
--cc=oss@nina.schoetterlglausch.eu \
--cc=oupton@kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=suzuki.poulose@arm.com \
--cc=svens@linux.ibm.com \
--cc=tabba@google.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®