176 lines
6.6 KiB
Diff
176 lines
6.6 KiB
Diff
|
From 8d6c37ddc253f63202cc9519670c258e9d81b98e Mon Sep 17 00:00:00 2001
|
||
|
From: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
Date: Mon, 3 Jun 2024 14:25:06 +0200
|
||
|
Subject: [PATCH 053/100] update-linux-headers: import linux/kvm_para.h header
|
||
|
|
||
|
RH-Author: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
RH-MergeRequest: 245: SEV-SNP support
|
||
|
RH-Jira: RHEL-39544
|
||
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
||
|
RH-Acked-by: Bandan Das <bdas@redhat.com>
|
||
|
RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
||
|
RH-Commit: [53/91] 27d4db0ecec7d0b8adeba1ec85fca32eacee1009 (bonzini/rhel-qemu-kvm)
|
||
|
|
||
|
Right now QEMU is importing arch/x86/include/uapi/asm/kvm_para.h
|
||
|
because it includes definitions for kvmclock and for KVM CPUID
|
||
|
bits. However, other definitions for KVM hypercall values and return
|
||
|
codes are included in include/uapi/linux/kvm_para.h and they will be
|
||
|
used by SEV-SNP.
|
||
|
|
||
|
To ensure that it is possible to include both <linux/kvm_para.h> and
|
||
|
"standard-headers/asm-x86/kvm_para.h" without conflicts, provide
|
||
|
linux/kvm_para.h as a portable header too, and forward linux-headers/
|
||
|
files to those in include/standard-headers. Note that <linux/kvm_para.h>
|
||
|
will include architecture-specific definitions as well, but
|
||
|
"standard-headers/linux/kvm_para.h" will not because it can be used in
|
||
|
architecture-independent files.
|
||
|
|
||
|
This could easily be extended to other architectures, but right now
|
||
|
they do not need any symbol in their specific kvm_para.h files.
|
||
|
|
||
|
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
(cherry picked from commit aa274c33c39e7de981dc195abe60e1a246c9d248)
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
---
|
||
|
include/standard-headers/linux/kvm_para.h | 38 +++++++++++++++++++++++
|
||
|
linux-headers/asm-x86/kvm_para.h | 1 +
|
||
|
linux-headers/linux/kvm_para.h | 2 ++
|
||
|
scripts/update-linux-headers.sh | 22 ++++++++++++-
|
||
|
4 files changed, 62 insertions(+), 1 deletion(-)
|
||
|
create mode 100644 include/standard-headers/linux/kvm_para.h
|
||
|
create mode 100644 linux-headers/asm-x86/kvm_para.h
|
||
|
create mode 100644 linux-headers/linux/kvm_para.h
|
||
|
|
||
|
diff --git a/include/standard-headers/linux/kvm_para.h b/include/standard-headers/linux/kvm_para.h
|
||
|
new file mode 100644
|
||
|
index 0000000000..015c166302
|
||
|
--- /dev/null
|
||
|
+++ b/include/standard-headers/linux/kvm_para.h
|
||
|
@@ -0,0 +1,38 @@
|
||
|
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||
|
+#ifndef __LINUX_KVM_PARA_H
|
||
|
+#define __LINUX_KVM_PARA_H
|
||
|
+
|
||
|
+/*
|
||
|
+ * This header file provides a method for making a hypercall to the host
|
||
|
+ * Architectures should define:
|
||
|
+ * - kvm_hypercall0, kvm_hypercall1...
|
||
|
+ * - kvm_arch_para_features
|
||
|
+ * - kvm_para_available
|
||
|
+ */
|
||
|
+
|
||
|
+/* Return values for hypercalls */
|
||
|
+#define KVM_ENOSYS 1000
|
||
|
+#define KVM_EFAULT EFAULT
|
||
|
+#define KVM_EINVAL EINVAL
|
||
|
+#define KVM_E2BIG E2BIG
|
||
|
+#define KVM_EPERM EPERM
|
||
|
+#define KVM_EOPNOTSUPP 95
|
||
|
+
|
||
|
+#define KVM_HC_VAPIC_POLL_IRQ 1
|
||
|
+#define KVM_HC_MMU_OP 2
|
||
|
+#define KVM_HC_FEATURES 3
|
||
|
+#define KVM_HC_PPC_MAP_MAGIC_PAGE 4
|
||
|
+#define KVM_HC_KICK_CPU 5
|
||
|
+#define KVM_HC_MIPS_GET_CLOCK_FREQ 6
|
||
|
+#define KVM_HC_MIPS_EXIT_VM 7
|
||
|
+#define KVM_HC_MIPS_CONSOLE_OUTPUT 8
|
||
|
+#define KVM_HC_CLOCK_PAIRING 9
|
||
|
+#define KVM_HC_SEND_IPI 10
|
||
|
+#define KVM_HC_SCHED_YIELD 11
|
||
|
+#define KVM_HC_MAP_GPA_RANGE 12
|
||
|
+
|
||
|
+/*
|
||
|
+ * hypercalls use architecture specific
|
||
|
+ */
|
||
|
+
|
||
|
+#endif /* __LINUX_KVM_PARA_H */
|
||
|
diff --git a/linux-headers/asm-x86/kvm_para.h b/linux-headers/asm-x86/kvm_para.h
|
||
|
new file mode 100644
|
||
|
index 0000000000..1d3e0e0b07
|
||
|
--- /dev/null
|
||
|
+++ b/linux-headers/asm-x86/kvm_para.h
|
||
|
@@ -0,0 +1 @@
|
||
|
+#include "standard-headers/asm-x86/kvm_para.h"
|
||
|
diff --git a/linux-headers/linux/kvm_para.h b/linux-headers/linux/kvm_para.h
|
||
|
new file mode 100644
|
||
|
index 0000000000..6a1e672259
|
||
|
--- /dev/null
|
||
|
+++ b/linux-headers/linux/kvm_para.h
|
||
|
@@ -0,0 +1,2 @@
|
||
|
+#include "standard-headers/linux/kvm_para.h"
|
||
|
+#include <asm/kvm_para.h>
|
||
|
diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
|
||
|
index 90759dcfe0..64d1989961 100755
|
||
|
--- a/scripts/update-linux-headers.sh
|
||
|
+++ b/scripts/update-linux-headers.sh
|
||
|
@@ -64,6 +64,7 @@ cp_portable() {
|
||
|
-e 'linux/kernel' \
|
||
|
-e 'linux/sysinfo' \
|
||
|
-e 'asm/setup_data.h' \
|
||
|
+ -e 'asm/kvm_para.h' \
|
||
|
> /dev/null
|
||
|
then
|
||
|
echo "Unexpected #include in input file $f".
|
||
|
@@ -71,6 +72,15 @@ cp_portable() {
|
||
|
fi
|
||
|
|
||
|
header=$(basename "$f");
|
||
|
+
|
||
|
+ if test -z "$arch"; then
|
||
|
+ # Let users of include/standard-headers/linux/ headers pick the
|
||
|
+ # asm-* header that they care about
|
||
|
+ arch_cmd='/<asm\/\([^>]*\)>/d'
|
||
|
+ else
|
||
|
+ arch_cmd='s/<asm\/\([^>]*\)>/"standard-headers\/asm-'$arch'\/\1"/'
|
||
|
+ fi
|
||
|
+
|
||
|
sed -e 's/__aligned_u64/__u64 __attribute__((aligned(8)))/g' \
|
||
|
-e 's/__u\([0-9][0-9]*\)/uint\1_t/g' \
|
||
|
-e 's/u\([0-9][0-9]*\)/uint\1_t/g' \
|
||
|
@@ -79,7 +89,7 @@ cp_portable() {
|
||
|
-e 's/__be\([0-9][0-9]*\)/uint\1_t/g' \
|
||
|
-e 's/"\(input-event-codes\.h\)"/"standard-headers\/linux\/\1"/' \
|
||
|
-e 's/<linux\/\([^>]*\)>/"standard-headers\/linux\/\1"/' \
|
||
|
- -e 's/<asm\/\([^>]*\)>/"standard-headers\/asm-'$arch'\/\1"/' \
|
||
|
+ -e "$arch_cmd" \
|
||
|
-e 's/__bitwise//' \
|
||
|
-e 's/__attribute__((packed))/QEMU_PACKED/' \
|
||
|
-e 's/__inline__/inline/' \
|
||
|
@@ -159,7 +169,12 @@ EOF
|
||
|
cp "$hdrdir/include/asm/unistd_32.h" "$output/linux-headers/asm-x86/"
|
||
|
cp "$hdrdir/include/asm/unistd_x32.h" "$output/linux-headers/asm-x86/"
|
||
|
cp "$hdrdir/include/asm/unistd_64.h" "$output/linux-headers/asm-x86/"
|
||
|
+
|
||
|
cp_portable "$hdrdir/include/asm/kvm_para.h" "$output/include/standard-headers/asm-$arch"
|
||
|
+ cat <<EOF >$output/linux-headers/asm-$arch/kvm_para.h
|
||
|
+#include "standard-headers/asm-$arch/kvm_para.h"
|
||
|
+EOF
|
||
|
+
|
||
|
# Remove everything except the macros from bootparam.h avoiding the
|
||
|
# unnecessary import of several video/ist/etc headers
|
||
|
sed -e '/__ASSEMBLY__/,/__ASSEMBLY__/d' \
|
||
|
@@ -209,6 +224,10 @@ if [ -d "$linux/LICENSES" ]; then
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
+cat <<EOF >$output/linux-headers/linux/kvm_para.h
|
||
|
+#include "standard-headers/linux/kvm_para.h"
|
||
|
+#include <asm/kvm_para.h>
|
||
|
+EOF
|
||
|
cat <<EOF >$output/linux-headers/linux/virtio_config.h
|
||
|
#include "standard-headers/linux/virtio_config.h"
|
||
|
EOF
|
||
|
@@ -231,6 +250,7 @@ for i in "$hdrdir"/include/linux/*virtio*.h \
|
||
|
"$hdrdir/include/linux/ethtool.h" \
|
||
|
"$hdrdir/include/linux/const.h" \
|
||
|
"$hdrdir/include/linux/kernel.h" \
|
||
|
+ "$hdrdir/include/linux/kvm_para.h" \
|
||
|
"$hdrdir/include/linux/vhost_types.h" \
|
||
|
"$hdrdir/include/linux/sysinfo.h"; do
|
||
|
cp_portable "$i" "$output/include/standard-headers/linux"
|
||
|
--
|
||
|
2.39.3
|
||
|
|