libvmmapi: Make vm_raise_msi() a common function

Currently, bhyve PCI emulation uses vm_lapic_msi() to raise an MSI in
the guest.  The arm64 port has a similar function, vm_raise_msi().
Add vm_raise_msi() on amd64 as well and have it simply call
vm_lapic_msi() so that bhyve can use a common, generically named
function.

Reviewed by:	corvink, andrew, jhb
MFC after:	2 weeks
Sponsored by:	Innovate UK
Differential Revision:	https://reviews.freebsd.org/D41752
This commit is contained in:
Mark Johnston 2024-04-03 13:09:32 -04:00
parent 5ec6c3007e
commit 1855002ddf
3 changed files with 12 additions and 5 deletions

View file

@ -99,8 +99,8 @@ vm_deassert_irq(struct vmctx *ctx, uint32_t irq)
}
int
vm_raise_msi(struct vmctx *ctx, uint64_t addr, uint64_t msg, int bus, int slot,
int func)
vm_raise_msi(struct vmctx *ctx, uint64_t addr, uint64_t msg,
int bus, int slot, int func)
{
struct vm_msi vmsi;

View file

@ -166,6 +166,13 @@ vm_lapic_msi(struct vmctx *ctx, uint64_t addr, uint64_t msg)
return (ioctl(ctx->fd, VM_LAPIC_MSI, &vmmsi));
}
int
vm_raise_msi(struct vmctx *ctx, uint64_t addr, uint64_t msg,
int bus __unused, int slot __unused, int func __unused)
{
return (vm_lapic_msi(ctx, addr, msg));
}
int
vm_apicid2vcpu(struct vmctx *ctx __unused, int apicid)
{

View file

@ -157,17 +157,17 @@ int vm_get_register_set(struct vcpu *vcpu, unsigned int count,
int vm_run(struct vcpu *vcpu, struct vm_run *vmrun);
int vm_suspend(struct vmctx *ctx, enum vm_suspend_how how);
int vm_reinit(struct vmctx *ctx);
int vm_apicid2vcpu(struct vmctx *ctx, int apicid);
int vm_raise_msi(struct vmctx *ctx, uint64_t addr, uint64_t msg,
int bus, int slot, int func);
#ifdef __aarch64__
int vm_attach_vgic(struct vmctx *ctx, uint64_t dist_start, size_t dist_size,
uint64_t redist_start, size_t redist_size);
int vm_assert_irq(struct vmctx *ctx, uint32_t irq);
int vm_deassert_irq(struct vmctx *ctx, uint32_t irq);
int vm_raise_msi(struct vmctx *ctx, uint64_t addr, uint64_t msg, int bus,
int slot, int func);
int vm_inject_exception(struct vcpu *vcpu, uint64_t esr, uint64_t far);
#endif
#ifdef __amd64__
int vm_apicid2vcpu(struct vmctx *ctx, int apicid);
int vm_inject_exception(struct vcpu *vcpu, int vector,
int errcode_valid, uint32_t errcode, int restart_instruction);
int vm_lapic_irq(struct vcpu *vcpu, int vector);