Skip to content

Commit

Permalink
13110 clean up compiler gags in bhyve kernel
Browse files Browse the repository at this point in the history
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Approved by: Dan McDonald <danmcd@joyent.com>
  • Loading branch information
pfmooney committed Sep 10, 2020
1 parent 374fc69 commit db8733f
Show file tree
Hide file tree
Showing 9 changed files with 67 additions and 117 deletions.
8 changes: 4 additions & 4 deletions usr/src/uts/i86pc/io/vmm/amd/svm.c
Expand Up @@ -1937,7 +1937,7 @@ svm_dr_leave_guest(struct svm_regctx *gctx)
* Start vcpu with specified RIP.
*/
static int
svm_vmrun(void *arg, int vcpu, register_t rip, pmap_t pmap,
svm_vmrun(void *arg, int vcpu, uint64_t rip, pmap_t pmap,
struct vm_eventinfo *evinfo)
{
struct svm_regctx *gctx;
Expand Down Expand Up @@ -2121,7 +2121,7 @@ svm_vmcleanup(void *arg)
free(sc, M_SVM);
}

static register_t *
static uint64_t *
swctx_regptr(struct svm_regctx *regctx, int reg)
{
switch (reg) {
Expand Down Expand Up @@ -2171,7 +2171,7 @@ svm_getreg(void *arg, int vcpu, int ident, uint64_t *val)
{
struct svm_softc *sc;
struct vmcb *vmcb;
register_t *regp;
uint64_t *regp;
uint64_t *fieldp;
struct vmcb_segment *seg;

Expand Down Expand Up @@ -2233,7 +2233,7 @@ svm_setreg(void *arg, int vcpu, int ident, uint64_t val)
{
struct svm_softc *sc;
struct vmcb *vmcb;
register_t *regp;
uint64_t *regp;
uint64_t *fieldp;
uint32_t dirty;
struct vmcb_segment *seg;
Expand Down
48 changes: 24 additions & 24 deletions usr/src/uts/i86pc/io/vmm/amd/svm.h
Expand Up @@ -35,31 +35,31 @@
* Guest register state that is saved outside the VMCB.
*/
struct svm_regctx {
register_t sctx_rbp;
register_t sctx_rbx;
register_t sctx_rcx;
register_t sctx_rdx;
register_t sctx_rdi;
register_t sctx_rsi;
register_t sctx_r8;
register_t sctx_r9;
register_t sctx_r10;
register_t sctx_r11;
register_t sctx_r12;
register_t sctx_r13;
register_t sctx_r14;
register_t sctx_r15;
register_t sctx_dr0;
register_t sctx_dr1;
register_t sctx_dr2;
register_t sctx_dr3;
uint64_t sctx_rbp;
uint64_t sctx_rbx;
uint64_t sctx_rcx;
uint64_t sctx_rdx;
uint64_t sctx_rdi;
uint64_t sctx_rsi;
uint64_t sctx_r8;
uint64_t sctx_r9;
uint64_t sctx_r10;
uint64_t sctx_r11;
uint64_t sctx_r12;
uint64_t sctx_r13;
uint64_t sctx_r14;
uint64_t sctx_r15;
uint64_t sctx_dr0;
uint64_t sctx_dr1;
uint64_t sctx_dr2;
uint64_t sctx_dr3;

register_t host_dr0;
register_t host_dr1;
register_t host_dr2;
register_t host_dr3;
register_t host_dr6;
register_t host_dr7;
uint64_t host_dr0;
uint64_t host_dr1;
uint64_t host_dr2;
uint64_t host_dr3;
uint64_t host_dr6;
uint64_t host_dr7;
uint64_t host_debugctl;
};

Expand Down
12 changes: 6 additions & 6 deletions usr/src/uts/i86pc/io/vmm/intel/vmx.c
Expand Up @@ -2250,7 +2250,7 @@ vmx_exit_process(struct vmx *vmx, int vcpu, struct vm_exit *vmexit)
struct vie *vie;
struct vlapic *vlapic;
struct vm_task_switch *ts;
uint32_t eax, ecx, edx, idtvec_info, idtvec_err, intr_info, inst_info;
uint32_t eax, ecx, edx, idtvec_info, idtvec_err, intr_info;
uint32_t intr_type, intr_vec, reason;
uint64_t exitintinfo, qual, gpa;
bool retu;
Expand Down Expand Up @@ -2795,7 +2795,7 @@ vmx_exit_handle_nmi(struct vmx *vmx, int vcpuid, struct vm_exit *vmexit)
static __inline void
vmx_dr_enter_guest(struct vmxctx *vmxctx)
{
register_t rflags;
uint64_t rflags;

/* Save host control debug registers. */
vmxctx->host_dr7 = rdr7();
Expand Down Expand Up @@ -2860,7 +2860,7 @@ vmx_dr_leave_guest(struct vmxctx *vmxctx)
}

static int
vmx_run(void *arg, int vcpu, register_t rip, pmap_t pmap,
vmx_run(void *arg, int vcpu, uint64_t rip, pmap_t pmap,
struct vm_eventinfo *evinfo)
{
int rc, handled, launched;
Expand Down Expand Up @@ -3133,7 +3133,7 @@ vmx_vmcleanup(void *arg)
return;
}

static register_t *
static uint64_t *
vmxctx_regptr(struct vmxctx *vmxctx, int reg)
{
switch (reg) {
Expand Down Expand Up @@ -3190,7 +3190,7 @@ vmx_getreg(void *arg, int vcpu, int reg, uint64_t *retval)
{
int running, hostcpu, err;
struct vmx *vmx = arg;
register_t *regp;
uint64_t *regp;

running = vcpu_is_running(vmx->vm, vcpu, &hostcpu);
if (running && hostcpu != curcpu)
Expand Down Expand Up @@ -3233,7 +3233,7 @@ vmx_setreg(void *arg, int vcpu, int reg, uint64_t val)
{
int running, hostcpu, error;
struct vmx *vmx = arg;
register_t *regp;
uint64_t *regp;

running = vcpu_is_running(vmx->vm, vcpu, &hostcpu);
if (running && hostcpu != curcpu)
Expand Down
66 changes: 28 additions & 38 deletions usr/src/uts/i86pc/io/vmm/intel/vmx.h
Expand Up @@ -50,44 +50,34 @@
struct pmap;

struct vmxctx {
register_t guest_rdi; /* Guest state */
register_t guest_rsi;
register_t guest_rdx;
register_t guest_rcx;
register_t guest_r8;
register_t guest_r9;
register_t guest_rax;
register_t guest_rbx;
register_t guest_rbp;
register_t guest_r10;
register_t guest_r11;
register_t guest_r12;
register_t guest_r13;
register_t guest_r14;
register_t guest_r15;
register_t guest_cr2;
register_t guest_dr0;
register_t guest_dr1;
register_t guest_dr2;
register_t guest_dr3;
register_t guest_dr6;

#ifdef __FreeBSD__
register_t host_r15; /* Host state */
register_t host_r14;
register_t host_r13;
register_t host_r12;
register_t host_rbp;
register_t host_rsp;
register_t host_rbx;
#endif /* __FreeBSD__ */

register_t host_dr0;
register_t host_dr1;
register_t host_dr2;
register_t host_dr3;
register_t host_dr6;
register_t host_dr7;
uint64_t guest_rdi; /* Guest state */
uint64_t guest_rsi;
uint64_t guest_rdx;
uint64_t guest_rcx;
uint64_t guest_r8;
uint64_t guest_r9;
uint64_t guest_rax;
uint64_t guest_rbx;
uint64_t guest_rbp;
uint64_t guest_r10;
uint64_t guest_r11;
uint64_t guest_r12;
uint64_t guest_r13;
uint64_t guest_r14;
uint64_t guest_r15;
uint64_t guest_cr2;
uint64_t guest_dr0;
uint64_t guest_dr1;
uint64_t guest_dr2;
uint64_t guest_dr3;
uint64_t guest_dr6;

uint64_t host_dr0;
uint64_t host_dr1;
uint64_t host_dr2;
uint64_t host_dr3;
uint64_t host_dr6;
uint64_t host_dr7;
uint64_t host_debugctl;
int host_tf;

Expand Down
34 changes: 1 addition & 33 deletions usr/src/uts/i86pc/io/vmm/io/iommu.c
Expand Up @@ -204,12 +204,8 @@ iommu_find_device(dev_info_t *dip, void *arg)
static void
iommu_init(void)
{
int error, bus, slot, func;
int error;
vm_paddr_t maxaddr;
#ifdef __FreeBSD__
devclass_t dc;
#endif
device_t dev;

if (!iommu_enable)
return;
Expand Down Expand Up @@ -246,35 +242,7 @@ iommu_init(void)
*/
iommu_create_mapping(host_domain, 0, 0, maxaddr);

#ifdef __FreeBSD__
add_tag = EVENTHANDLER_REGISTER(pci_add_device, iommu_pci_add, NULL, 0);
delete_tag = EVENTHANDLER_REGISTER(pci_delete_device, iommu_pci_delete,
NULL, 0);
dc = devclass_find("ppt");
for (bus = 0; bus <= PCI_BUSMAX; bus++) {
for (slot = 0; slot <= PCI_SLOTMAX; slot++) {
for (func = 0; func <= PCI_FUNCMAX; func++) {
dev = pci_find_dbsf(0, bus, slot, func);
if (dev == NULL)
continue;

/* Skip passthrough devices. */
if (dc != NULL &&
device_get_devclass(dev) == dc)
continue;

/*
* Everything else belongs to the host
* domain.
*/
iommu_add_device(host_domain,
pci_get_rid(dev));
}
}
}
#else
ddi_walk_devs(ddi_root_node(), iommu_find_device, (void *)B_TRUE);
#endif
IOMMU_ENABLE();

}
Expand Down
2 changes: 2 additions & 0 deletions usr/src/uts/i86pc/io/vmm/io/vlapic.c
Expand Up @@ -140,12 +140,14 @@ vlapic_dfr_write_handler(struct vlapic *vlapic)
lapic->dfr &= APIC_DFR_MODEL_MASK;
lapic->dfr |= APIC_DFR_RESERVED;

#ifdef __FreeBSD__
if ((lapic->dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_FLAT)
VLAPIC_CTR0(vlapic, "vlapic DFR in Flat Model");
else if ((lapic->dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_CLUSTER)
VLAPIC_CTR0(vlapic, "vlapic DFR in Cluster Model");
else
VLAPIC_CTR1(vlapic, "DFR in Unknown Model %#x", lapic->dfr);
#endif
}

void
Expand Down
2 changes: 1 addition & 1 deletion usr/src/uts/i86pc/io/vmm/sys/vmm_kernel.h
Expand Up @@ -74,7 +74,7 @@ typedef int (*vmm_init_func_t)(int ipinum);
typedef int (*vmm_cleanup_func_t)(void);
typedef void (*vmm_resume_func_t)(void);
typedef void * (*vmi_init_func_t)(struct vm *vm, struct pmap *pmap);
typedef int (*vmi_run_func_t)(void *vmi, int vcpu, register_t rip,
typedef int (*vmi_run_func_t)(void *vmi, int vcpu, uint64_t rip,
struct pmap *pmap, struct vm_eventinfo *info);
typedef void (*vmi_cleanup_func_t)(void *vmi);
typedef int (*vmi_get_register_t)(void *vmi, int vcpu, int num,
Expand Down
2 changes: 1 addition & 1 deletion usr/src/uts/i86pc/io/vmm/vmm.c
Expand Up @@ -1915,7 +1915,7 @@ vm_suspend(struct vm *vm, enum vm_suspend_how how)
if (how <= VM_SUSPEND_NONE || how >= VM_SUSPEND_LAST)
return (EINVAL);

if (atomic_cmpset_int(&vm->suspend, 0, how) == 0) {
if (atomic_cmpset_int((uint_t *)&vm->suspend, 0, how) == 0) {
VM_CTR2(vm, "virtual machine already suspended %d/%d",
vm->suspend, how);
return (EALREADY);
Expand Down
10 changes: 0 additions & 10 deletions usr/src/uts/i86pc/vmm/Makefile
Expand Up @@ -43,33 +43,23 @@ INSTALL_TARGET = $(BINARY) $(ROOTMODULE) $(ROOT_CONFFILE)
# Overrides and additions
#

CERRWARN += -_gcc=-Wno-empty-body

# 3rd party code
SMOFF += all_func_returns

# needs work
$(OBJS_DIR)/vmm_sol_dev.o := SMOFF += signed_integer_overflow_check

# a can't happen: vmx_setcap() warn: variable dereferenced before check 'pptr'
$(OBJS_DIR)/vmx.o := SMOFF += deref_check

ALL_BUILDS = $(ALL_BUILDSONLY64)
DEF_BUILDS = $(DEF_BUILDSONLY64)
PRE_INC_PATH = -I$(COMPAT)/bhyve -I$(COMPAT)/bhyve/amd64 \
-I$(CONTRIB)/bhyve -I$(CONTRIB)/bhyve/amd64
INC_PATH += -I$(UTSBASE)/i86pc/io/vmm -I$(UTSBASE)/i86pc/io/vmm/io
AS_INC_PATH += -I$(UTSBASE)/i86pc/io/vmm -I$(OBJS_DIR)

CFLAGS += -_gcc=-Wimplicit-function-declaration
# enable collection of VMM statistics
CFLAGS += -DVMM_KEEP_STATS

$(OBJS_DIR)/vmm.o := CERRWARN += -_gcc=-Wno-pointer-sign -_gcc=-Wno-type-limits
$(OBJS_DIR)/svm.o := CERRWARN += -_gcc=-Wno-pointer-sign -_gcc=-Wno-type-limits
$(OBJS_DIR)/vmx.o := CERRWARN += -_gcc=-Wno-unused-variable
$(OBJS_DIR)/iommu.o := CERRWARN += -_gcc=-Wno-unused-variable

LDFLAGS += -N misc/acpica -N misc/pcie -N fs/dev
LDFLAGS += -z type=kmod -M $(MAPFILE)

Expand Down

0 comments on commit db8733f

Please sign in to comment.