~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/powerpc/include/asm/kvm_book3s_asm.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  2 /*
  3  *
  4  * Copyright SUSE Linux Products GmbH 2009
  5  *
  6  * Authors: Alexander Graf <agraf@suse.de>
  7  */
  8 
  9 #ifndef __ASM_KVM_BOOK3S_ASM_H__
 10 #define __ASM_KVM_BOOK3S_ASM_H__
 11 
 12 /* XICS ICP register offsets */
 13 #define XICS_XIRR               4
 14 #define XICS_MFRR               0xc
 15 #define XICS_IPI                2       /* interrupt source # for IPIs */
 16 
 17 /* Maximum number of threads per physical core */
 18 #define MAX_SMT_THREADS         8
 19 
 20 /* Maximum number of subcores per physical core */
 21 #define MAX_SUBCORES            4
 22 
 23 #ifdef __ASSEMBLY__
 24 
 25 #ifdef CONFIG_KVM_BOOK3S_HANDLER
 26 
 27 #include <asm/kvm_asm.h>
 28 
 29 .macro DO_KVM intno
 30         .if (\intno == BOOK3S_INTERRUPT_SYSTEM_RESET) || \
 31             (\intno == BOOK3S_INTERRUPT_MACHINE_CHECK) || \
 32             (\intno == BOOK3S_INTERRUPT_DATA_STORAGE) || \
 33             (\intno == BOOK3S_INTERRUPT_INST_STORAGE) || \
 34             (\intno == BOOK3S_INTERRUPT_DATA_SEGMENT) || \
 35             (\intno == BOOK3S_INTERRUPT_INST_SEGMENT) || \
 36             (\intno == BOOK3S_INTERRUPT_EXTERNAL) || \
 37             (\intno == BOOK3S_INTERRUPT_EXTERNAL_HV) || \
 38             (\intno == BOOK3S_INTERRUPT_ALIGNMENT) || \
 39             (\intno == BOOK3S_INTERRUPT_PROGRAM) || \
 40             (\intno == BOOK3S_INTERRUPT_FP_UNAVAIL) || \
 41             (\intno == BOOK3S_INTERRUPT_DECREMENTER) || \
 42             (\intno == BOOK3S_INTERRUPT_SYSCALL) || \
 43             (\intno == BOOK3S_INTERRUPT_TRACE) || \
 44             (\intno == BOOK3S_INTERRUPT_PERFMON) || \
 45             (\intno == BOOK3S_INTERRUPT_ALTIVEC) || \
 46             (\intno == BOOK3S_INTERRUPT_VSX)
 47 
 48         b       kvmppc_trampoline_\intno
 49 kvmppc_resume_\intno:
 50 
 51         .endif
 52 .endm
 53 
 54 #else
 55 
 56 .macro DO_KVM intno
 57 .endm
 58 
 59 #endif /* CONFIG_KVM_BOOK3S_HANDLER */
 60 
 61 #else  /*__ASSEMBLY__ */
 62 
 63 struct kvmppc_vcore;
 64 
 65 /* Struct used for coordinating micro-threading (split-core) mode changes */
 66 struct kvm_split_mode {
 67         unsigned long   rpr;
 68         unsigned long   pmmar;
 69         unsigned long   ldbar;
 70         u8              subcore_size;
 71         u8              do_nap;
 72         u8              napped[MAX_SMT_THREADS];
 73         struct kvmppc_vcore *vc[MAX_SUBCORES];
 74 };
 75 
 76 /*
 77  * This struct goes in the PACA on 64-bit processors.  It is used
 78  * to store host state that needs to be saved when we enter a guest
 79  * and restored when we exit, but isn't specific to any particular
 80  * guest or vcpu.  It also has some scratch fields used by the guest
 81  * exit code.
 82  */
 83 struct kvmppc_host_state {
 84         ulong host_r1;
 85         ulong host_r2;
 86         ulong host_msr;
 87         ulong vmhandler;
 88         ulong scratch0;
 89         ulong scratch1;
 90         ulong scratch2;
 91         u8 in_guest;
 92         u8 restore_hid5;
 93         u8 napping;
 94 
 95 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
 96         u8 hwthread_req;
 97         u8 hwthread_state;
 98         u8 host_ipi;
 99         u8 ptid;                /* thread number within subcore when split */
100         u8 fake_suspend;
101         struct kvm_vcpu *kvm_vcpu;
102         struct kvmppc_vcore *kvm_vcore;
103         void __iomem *xics_phys;
104         void __iomem *xive_tima_phys;
105         void __iomem *xive_tima_virt;
106         u32 saved_xirr;
107         u64 dabr;
108         u64 host_mmcr[7];       /* MMCR 0,1,A, SIAR, SDAR, MMCR2, SIER */
109         u32 host_pmc[8];
110         u64 host_purr;
111         u64 host_spurr;
112         u64 host_dscr;
113         u64 dec_expires;
114         struct kvm_split_mode *kvm_split_mode;
115 #endif
116 #ifdef CONFIG_PPC_BOOK3S_64
117         u64 cfar;
118         u64 ppr;
119         u64 host_fscr;
120 #endif
121 };
122 
123 struct kvmppc_book3s_shadow_vcpu {
124         bool in_use;
125         ulong gpr[14];
126         u32 cr;
127         ulong xer;
128         ulong ctr;
129         ulong lr;
130         ulong pc;
131 
132         ulong shadow_srr1;
133         ulong fault_dar;
134         u32 fault_dsisr;
135         u32 last_inst;
136 
137 #ifdef CONFIG_PPC_BOOK3S_32
138         u32     sr[16];                 /* Guest SRs */
139 
140         struct kvmppc_host_state hstate;
141 #endif
142 
143 #ifdef CONFIG_PPC_BOOK3S_64
144         u8 slb_max;                     /* highest used guest slb entry */
145         struct  {
146                 u64     esid;
147                 u64     vsid;
148         } slb[64];                      /* guest SLB */
149         u64 shadow_fscr;
150 #endif
151 };
152 
153 #endif /*__ASSEMBLY__ */
154 
155 /* Values for kvm_state */
156 #define KVM_HWTHREAD_IN_KERNEL  0
157 #define KVM_HWTHREAD_IN_IDLE    1
158 #define KVM_HWTHREAD_IN_KVM     2
159 
160 #endif /* __ASM_KVM_BOOK3S_ASM_H__ */
161 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php