Re: [PATCH] vmd: handle the reset control register at 0xcf9
Dave Voutila <[email protected]>
| Newsgroups | gmane.os.openbsd.tech |
|---|---|
| Message-ID | <[email protected]> |
Mike Larkin <[email protected]> writes: > On Sun, Aug 23, 2026 at 12:28:28AM +0000, ssnf wrote: >> Handle guest writes to the x86 reset control register and terminate >> the VM on a reset request. >> >> Tested on a 9front guest with fshalt -r. >> --- >> usr.sbin/vmd/x86_vm.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/usr.sbin/vmd/x86_vm.c b/usr.sbin/vmd/x86_vm.c >> index 1b5ade90f9b..a0197c34b4c 100644 >> --- a/usr.sbin/vmd/x86_vm.c >> +++ b/usr.sbin/vmd/x86_vm.c >> @@ -507,6 +507,7 @@ vcpu_exit_inout(struct vm_run_params *vrp) >> int >> vcpu_exit(struct vm_run_params *vrp) >> { >> + struct vm_exit *vei = vrp->vrp_exit; >> int ret; >> >> switch (vrp->vrp_exit_reason) { >> @@ -533,6 +534,10 @@ vcpu_exit(struct vm_run_params *vrp) >> break; >> case VMX_EXIT_IO: >> case SVM_VMEXIT_IOIO: >> + if (vei->vei.vei_dir == VEI_DIR_OUT && >> + vei->vei.vei_port == 0xcf9 && >> + (vei->vei.vei_data & 0x06) == 0x06) >> + return (EAGAIN); >> vcpu_exit_inout(vrp); >> break; >> case VMX_EXIT_HLT: >> -- >> 2.51.0 >> > > I am not opposed to the general idea of supporting this register, but I would > ask for the following changes: > > 1. move the checks above into vcpu_exit_inout ; that function is where in/out > instruction emulation is done, not directly in the vcpu_exit handler. make > vcpu_exit_inout return a value, and you can return EAGAIN there and pass > it up the chain like you are doing above. > Good point! > 2. use #defines for 0xcf9 and whatever 0x06 means > > Happy to take a look again if those changes are made. Thx! Same.