svm_softc.h (267003) | svm_softc.h (271203) |
---|---|
1/*- 2 * Copyright (c) 2013 Anish Gupta (akgupt3@gmail.com) 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 2013 Anish Gupta (akgupt3@gmail.com) 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * |
26 * $FreeBSD: projects/bhyve_svm/sys/amd64/vmm/amd/svm_softc.h 267003 2014-06-03 06:56:54Z grehan $ | 26 * $FreeBSD: projects/bhyve_svm/sys/amd64/vmm/amd/svm_softc.h 271203 2014-09-06 19:02:52Z neel $ |
27 */ 28 29#ifndef _SVM_SOFTC_H_ 30#define _SVM_SOFTC_H_ 31 32#define SVM_IO_BITMAP_SIZE (3 * PAGE_SIZE) 33#define SVM_MSR_BITMAP_SIZE (2 * PAGE_SIZE) 34 | 27 */ 28 29#ifndef _SVM_SOFTC_H_ 30#define _SVM_SOFTC_H_ 31 32#define SVM_IO_BITMAP_SIZE (3 * PAGE_SIZE) 33#define SVM_MSR_BITMAP_SIZE (2 * PAGE_SIZE) 34 |
35struct asid { 36 uint64_t gen; /* range is [1, ~0UL] */ 37 uint32_t num; /* range is [1, nasid - 1] */ 38}; 39 |
|
35/* 36 * svm_vpcu contains SVM VMCB state and vcpu register state. 37 */ 38struct svm_vcpu { | 40/* 41 * svm_vpcu contains SVM VMCB state and vcpu register state. 42 */ 43struct svm_vcpu { |
39 struct vmcb vmcb; /* hardware saved vcpu context */ 40 struct svm_regctx swctx; /* software saved vcpu context */ 41 uint64_t vmcb_pa; /* VMCB physical address */ 42 uint64_t loop; /* loop count for vcpu */ 43 int lastcpu; /* host cpu that the vcpu last ran on */ | 44 struct vmcb vmcb; /* hardware saved vcpu context */ 45 struct svm_regctx swctx; /* software saved vcpu context */ 46 uint64_t vmcb_pa; /* VMCB physical address */ 47 uint64_t loop; /* loop count for vcpu */ 48 int lastcpu; /* host cpu that the vcpu last ran on */ 49 uint32_t dirty; /* state cache bits that must be cleared */ 50 long eptgen; /* pmap->pm_eptgen when the vcpu last ran */ 51 struct asid asid; |
44} __aligned(PAGE_SIZE); 45 46/* 47 * SVM softc, one per virtual machine. 48 */ 49struct svm_softc { 50 /* 51 * IO permission map, VMCB.ctrl.iopm_base_pa should point to this. --- 16 unchanged lines hidden (view full) --- 68 /* Virtual machine pointer. */ 69 struct vm *vm; 70 71 /* Guest VCPU h/w and s/w context. */ 72 struct svm_vcpu vcpu[VM_MAXCPU]; 73 74 uint32_t svm_feature; /* SVM features from CPUID.*/ 75 | 52} __aligned(PAGE_SIZE); 53 54/* 55 * SVM softc, one per virtual machine. 56 */ 57struct svm_softc { 58 /* 59 * IO permission map, VMCB.ctrl.iopm_base_pa should point to this. --- 16 unchanged lines hidden (view full) --- 76 /* Virtual machine pointer. */ 77 struct vm *vm; 78 79 /* Guest VCPU h/w and s/w context. */ 80 struct svm_vcpu vcpu[VM_MAXCPU]; 81 82 uint32_t svm_feature; /* SVM features from CPUID.*/ 83 |
76 int asid; /* Guest Address Space Identifier */ | |
77 int vcpu_cnt; /* number of VCPUs for this guest.*/ 78} __aligned(PAGE_SIZE); 79 80CTASSERT((offsetof(struct svm_softc, nptp) & PAGE_MASK) == 0); 81 82static __inline struct svm_vcpu * 83svm_get_vcpu(struct svm_softc *sc, int vcpu) 84{ --- 34 unchanged lines hidden --- | 84 int vcpu_cnt; /* number of VCPUs for this guest.*/ 85} __aligned(PAGE_SIZE); 86 87CTASSERT((offsetof(struct svm_softc, nptp) & PAGE_MASK) == 0); 88 89static __inline struct svm_vcpu * 90svm_get_vcpu(struct svm_softc *sc, int vcpu) 91{ --- 34 unchanged lines hidden --- |