Skip to content

Commit 6ea81b8

Browse files
author
Jinrong Liang
committed
KVM: x86/PVM: Introduce uapi/asm/pvm.h header with PVM_EXIT_REASONS table
Create a new uapi header file, uapi/asm/pvm.h, containing the PVM_EXIT_REASONS table and associated macros for PVM exit reasons. By centralizing PVM exit reason definitions, both kernel and user-space applications can access them, eliminating the need for duplicate definitions across different parts of the codebase and ensuring consistency between kernel and user-space components. This change allows performance analysis tools, such as perf, to utilize the PVM exit reason macros directly from the uapi header, rather than redefining them locally. As a result, the codebase remains clean and consistent, making future updates and maintenance of these definitions more manageable. Signed-off-by: Jinrong Liang <cloudliang@tencent.com>
1 parent e88ffa5 commit 6ea81b8

3 files changed

Lines changed: 62 additions & 41 deletions

File tree

arch/x86/include/asm/switcher.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44

55
#ifdef CONFIG_X86_64
66
#include <asm/processor-flags.h>
7-
8-
#define SWITCH_EXIT_REASONS_SYSCALL 1024
9-
#define SWITCH_EXIT_REASONS_FAILED_VMETNRY 1025
7+
#include <uapi/asm/pvm.h>
108

119
/*
1210
* SWITCH_FLAGS control the way how the switcher code works,

arch/x86/include/uapi/asm/pvm.h

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2+
#ifndef UAPI_KVM_X86_PVM_H
3+
#define UAPI_KVM_X86_PVM_H
4+
5+
#include <linux/bitops.h>
6+
#include <uapi/asm/pvm_para.h>
7+
8+
#define NMI_VECTOR 0x02
9+
#define SWITCH_EXIT_REASONS_SYSCALL 1024
10+
#define SWITCH_EXIT_REASONS_FAILED_VMETNRY 1025
11+
12+
#define PVM_SYSCALL_VECTOR SWITCH_EXIT_REASONS_SYSCALL
13+
#define PVM_FAILED_VMENTRY_VECTOR SWITCH_EXIT_REASONS_FAILED_VMETNRY
14+
15+
#define PVM_EXIT_REASONS_SHIFT 16
16+
#define PVM_EXIT_REASONS_SYSCALL BIT(PVM_EXIT_REASONS_SHIFT)
17+
#define PVM_EXIT_REASONS_HYPERCALL (2UL << PVM_EXIT_REASONS_SHIFT)
18+
#define PVM_EXIT_REASONS_ERETU (3UL << PVM_EXIT_REASONS_SHIFT)
19+
#define PVM_EXIT_REASONS_ERETS (4UL << PVM_EXIT_REASONS_SHIFT)
20+
#define PVM_EXIT_REASONS_INTERRUPT (5UL << PVM_EXIT_REASONS_SHIFT)
21+
#define PVM_EXIT_REASONS_INT80 (6UL << PVM_EXIT_REASONS_SHIFT)
22+
23+
#define PVM_EXIT_REASONS \
24+
{ DE_VECTOR, "DE excp" }, \
25+
{ DB_VECTOR, "DB excp" }, \
26+
{ NMI_VECTOR, "NMI excp" }, \
27+
{ BP_VECTOR, "BP excp" }, \
28+
{ OF_VECTOR, "OF excp" }, \
29+
{ BR_VECTOR, "BR excp" }, \
30+
{ UD_VECTOR, "UD excp" }, \
31+
{ NM_VECTOR, "NM excp" }, \
32+
{ DF_VECTOR, "DF excp" }, \
33+
{ TS_VECTOR, "TS excp" }, \
34+
{ SS_VECTOR, "SS excp" }, \
35+
{ GP_VECTOR, "GP excp" }, \
36+
{ PF_VECTOR, "PF excp" }, \
37+
{ MF_VECTOR, "MF excp" }, \
38+
{ AC_VECTOR, "AC excp" }, \
39+
{ MC_VECTOR, "MC excp" }, \
40+
{ XM_VECTOR, "XM excp" }, \
41+
{ VE_VECTOR, "VE excp" }, \
42+
{ PVM_EXIT_REASONS_SYSCALL, "SYSCALL" }, \
43+
{ PVM_EXIT_REASONS_HYPERCALL, "HYPERCALL" }, \
44+
{ PVM_EXIT_REASONS_ERETU, "ERETU" }, \
45+
{ PVM_EXIT_REASONS_ERETS, "ERETS" }, \
46+
{ PVM_EXIT_REASONS_INTERRUPT, "INTERRUPT" }, \
47+
{ PVM_EXIT_REASONS_INT80, "INT80" }, \
48+
{ PVM_HC_LOAD_PGTBL, "HC_LOAD_PGTBL" }, \
49+
{ PVM_HC_IRQ_WIN, "HC_IRQ_WIN" }, \
50+
{ PVM_HC_IRQ_HALT, "HC_IRQ_HALT" }, \
51+
{ PVM_HC_TLB_FLUSH, "HC_TLB_FLUSH" }, \
52+
{ PVM_HC_TLB_FLUSH_CURRENT, "HC_TLB_FLUSH_CURRENT" }, \
53+
{ PVM_HC_TLB_INVLPG, "HC_TLB_INVLPG" }, \
54+
{ PVM_HC_LOAD_GS, "HC_LOAD_GS" }, \
55+
{ PVM_HC_RDMSR, "HC_RDMSR" }, \
56+
{ PVM_HC_WRMSR, "HC_WRMSR" }, \
57+
{ PVM_HC_LOAD_TLS, "HC_LOAD_TLS" }, \
58+
{ PVM_FAILED_VMENTRY_VECTOR, "FAILED_VMENTRY" }
59+
60+
#endif /* UAPI_KVM_X86_PVM_H */

arch/x86/kvm/pvm/pvm.h

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <linux/kvm_host.h>
66
#include <asm/switcher.h>
7+
#include <uapi/asm/pvm.h>
78

89
/*
910
* Extra switch flags:
@@ -25,44 +26,6 @@
2526

2627
#define SWITCH_FLAGS_INIT (SWITCH_FLAGS_SMOD | SWITCH_FLAGS_PVCS_INVALID)
2728

28-
#define PVM_SYSCALL_VECTOR SWITCH_EXIT_REASONS_SYSCALL
29-
#define PVM_FAILED_VMENTRY_VECTOR SWITCH_EXIT_REASONS_FAILED_VMETNRY
30-
31-
#define PVM_EXIT_REASONS_SHIFT 16
32-
#define PVM_EXIT_REASONS_SYSCALL (1UL << PVM_EXIT_REASONS_SHIFT)
33-
#define PVM_EXIT_REASONS_HYPERCALL (2UL << PVM_EXIT_REASONS_SHIFT)
34-
#define PVM_EXIT_REASONS_ERETU (3UL << PVM_EXIT_REASONS_SHIFT)
35-
#define PVM_EXIT_REASONS_ERETS (4UL << PVM_EXIT_REASONS_SHIFT)
36-
#define PVM_EXIT_REASONS_INTERRUPT (5UL << PVM_EXIT_REASONS_SHIFT)
37-
#define PVM_EXIT_REASONS_INT80 (6UL << PVM_EXIT_REASONS_SHIFT)
38-
39-
#define PVM_EXIT_REASONS \
40-
{ DE_VECTOR, "DE excp" }, \
41-
{ DB_VECTOR, "DB excp" }, \
42-
{ NMI_VECTOR, "NMI excp" }, \
43-
{ BP_VECTOR, "BP excp" }, \
44-
{ OF_VECTOR, "OF excp" }, \
45-
{ BR_VECTOR, "BR excp" }, \
46-
{ UD_VECTOR, "UD excp" }, \
47-
{ NM_VECTOR, "NM excp" }, \
48-
{ DF_VECTOR, "DF excp" }, \
49-
{ TS_VECTOR, "TS excp" }, \
50-
{ SS_VECTOR, "SS excp" }, \
51-
{ GP_VECTOR, "GP excp" }, \
52-
{ PF_VECTOR, "PF excp" }, \
53-
{ MF_VECTOR, "MF excp" }, \
54-
{ AC_VECTOR, "AC excp" }, \
55-
{ MC_VECTOR, "MC excp" }, \
56-
{ XM_VECTOR, "XM excp" }, \
57-
{ VE_VECTOR, "VE excp" }, \
58-
{ PVM_EXIT_REASONS_SYSCALL, "SYSCALL" }, \
59-
{ PVM_EXIT_REASONS_HYPERCALL, "HYPERCALL" }, \
60-
{ PVM_EXIT_REASONS_ERETU, "ERETU" }, \
61-
{ PVM_EXIT_REASONS_ERETS, "ERETS" }, \
62-
{ PVM_EXIT_REASONS_INTERRUPT, "INTERRUPT" }, \
63-
{ PVM_EXIT_REASONS_INT80, "INT80" }, \
64-
{ PVM_FAILED_VMENTRY_VECTOR, "FAILED_VMENTRY" }
65-
6629
#define PT_L4_SHIFT 39
6730
#define PT_L4_SIZE (1UL << PT_L4_SHIFT)
6831
#define DEFAULT_RANGE_L4_SIZE (32 * PT_L4_SIZE)

0 commit comments

Comments
 (0)