update-linux-headers: import linux/kvm_para.h header
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>
This commit is contained in:
parent
5f69e42da5
commit
aa274c33c3
38
include/standard-headers/linux/kvm_para.h
Normal file
38
include/standard-headers/linux/kvm_para.h
Normal file
@ -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 */
|
1
linux-headers/asm-x86/kvm_para.h
Normal file
1
linux-headers/asm-x86/kvm_para.h
Normal file
@ -0,0 +1 @@
|
||||
#include "standard-headers/asm-x86/kvm_para.h"
|
2
linux-headers/linux/kvm_para.h
Normal file
2
linux-headers/linux/kvm_para.h
Normal file
@ -0,0 +1,2 @@
|
||||
#include "standard-headers/linux/kvm_para.h"
|
||||
#include <asm/kvm_para.h>
|
@ -63,6 +63,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".
|
||||
@ -70,6 +71,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' \
|
||||
@ -78,7 +88,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/' \
|
||||
@ -158,7 +168,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' \
|
||||
@ -208,6 +223,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
|
||||
@ -230,6 +249,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"
|
||||
|
Loading…
Reference in New Issue
Block a user