# zx_interrupt_bind_vcpu ## NAME interrupt_bind_vcpu - bind an interrupt object to a VCPU ## SYNOPSIS ``` #include zx_status_t zx_interrupt_bind_vcpu(zx_handle_t handle, zx_handle_t vcpu, uint32_t options); ``` ## DESCRIPTION `zx_interrupt_bind_vcpu()` binds an interrupt object to a VCPU. When the interrupt object is triggered, the interrupt is redirected to the VCPU, in order to be processed by a guest with no host intervention. An interrupt object may be bound to multiple VCPUs, in order to distribute the interrupt. Simply invoke `zx_interrupt_bind_vcpu()` with the same *handle*, but different *vcpu*s. However, all VCPUs must belong to a single guest. ## RIGHTS *handle* must be of type **ZX_OBJ_TYPE_INTERRUPT** and have **ZX_RIGHT_READ**. *vcpu* must be of type **ZX_OBJ_TYPE_VCPU** and have **ZX_RIGHT_WRITE**. ## RETURN VALUE `zx_interrupt_bind_vcpu()` returns **ZX_OK** on success. On failure, an error value is returned. ## ERRORS **ZX_ERR_BAD_HANDLE** *handle* or *vcpu* are not valid handles. **ZX_ERR_WRONG_TYPE** *handle* is not an interrupt object or *vcpu* is not a VCPU. **ZX_ERR_CANCELED** [`zx_interrupt_destroy()`] was called on *handle*. **ZX_ERR_BAD_STATE** a thread is waiting on the interrupt using [`zx_interrupt_wait()`]. **ZX_ERR_ACCESS_DENIED** *handle* lacks **ZX_RIGHT_READ** or *vcpu* lacks **ZX_RIGHT_WRITE**. **ZX_ERR_ALREADY_BOUND** *handle* is already bound to another guest or to a port. **ZX_ERR_INVALID_ARGS** *vcpu* is bound to a different guest than previously bound VCPUs, or *options* is non-zero. ## SEE ALSO - [`zx_guest_create()`] - [`zx_interrupt_create()`] - [`zx_vcpu_create()`] [`zx_guest_create()`]: guest_create.md [`zx_interrupt_create()`]: interrupt_create.md [`zx_interrupt_destroy()`]: interrupt_destroy.md [`zx_interrupt_wait()`]: interrupt_wait.md [`zx_vcpu_create()`]: vcpu_create.md