Re: [PATCH] vmd: handle the reset control register at 0xcf9

Mike Larkin <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
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.

2. use #defines for 0xcf9 and whatever 0x06 means

Happy to take a look again if those changes are made. Thx!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.