Fix warnings/errors when building vmm.ko with gcc:
- fix warning about comparison of 'uint8_t v_tpr >= 0' always being true. - fix error triggered by an empty clobber list in the inline assembly for "clgi" and "stgi" - fix error when compiling "vmload %rax", "vmrun %rax" and "vmsave %rax". The gcc assembler does not like the explicit operand "%rax" while the clang assembler requires specifying the operand "%rax". Fix this by encoding the instructions using the ".byte" directive. Reported by: julian MFC after: 1 week
This commit is contained in:
parent
8c24162c0c
commit
7d69783ae4
@ -1641,7 +1641,7 @@ svm_inj_interrupts(struct svm_softc *sc, int vcpu, struct vlapic *vlapic)
|
||||
* VMRUN.
|
||||
*/
|
||||
v_tpr = vlapic_get_cr8(vlapic);
|
||||
KASSERT(v_tpr >= 0 && v_tpr <= 15, ("invalid v_tpr %#x", v_tpr));
|
||||
KASSERT(v_tpr <= 15, ("invalid v_tpr %#x", v_tpr));
|
||||
if (ctrl->v_tpr != v_tpr) {
|
||||
VCPU_CTR2(sc->vm, vcpu, "VMCB V_TPR changed from %#x to %#x",
|
||||
ctrl->v_tpr, v_tpr);
|
||||
@ -1808,14 +1808,14 @@ static __inline void
|
||||
disable_gintr(void)
|
||||
{
|
||||
|
||||
__asm __volatile("clgi" : : :);
|
||||
__asm __volatile("clgi");
|
||||
}
|
||||
|
||||
static __inline void
|
||||
enable_gintr(void)
|
||||
{
|
||||
|
||||
__asm __volatile("stgi" : : :);
|
||||
__asm __volatile("stgi");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -22,6 +22,8 @@
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
#include <machine/asmacros.h>
|
||||
|
||||
@ -35,6 +37,10 @@
|
||||
#define VENTER push %rbp ; mov %rsp,%rbp
|
||||
#define VLEAVE pop %rbp
|
||||
|
||||
#define VMLOAD .byte 0x0f, 0x01, 0xda
|
||||
#define VMRUN .byte 0x0f, 0x01, 0xd8
|
||||
#define VMSAVE .byte 0x0f, 0x01, 0xdb
|
||||
|
||||
/*
|
||||
* svm_launch(uint64_t vmcb, struct svm_regctx *gctx)
|
||||
* %rdi: physical address of VMCB
|
||||
@ -79,9 +85,9 @@ ENTRY(svm_launch)
|
||||
movq SCTX_RDI(%rsi), %rdi
|
||||
movq SCTX_RSI(%rsi), %rsi /* %rsi must be restored last */
|
||||
|
||||
vmload %rax
|
||||
vmrun %rax
|
||||
vmsave %rax
|
||||
VMLOAD
|
||||
VMRUN
|
||||
VMSAVE
|
||||
|
||||
pop %rax /* pop guest context pointer from the stack */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user