summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kvm.c19
-rw-r--r--kvm.h8
2 files changed, 8 insertions, 19 deletions
diff --git a/kvm.c b/kvm.c
index b99b773..d02a93b 100644
--- a/kvm.c
+++ b/kvm.c
@@ -14097,45 +14097,38 @@ kvm_ioctl(dev_t dev, int cmd, intptr_t arg, int md, cred_t *cr, int *rv)
#endif /* KVM_CAP_IRQ_ROUTING */
case KVM_IRQ_LINE_STATUS:
case KVM_IRQ_LINE: {
- struct kvm_irq_level_ioc *irq_event_ioc;
+ struct kvm_irq_level level;
struct kvm *kvmp;
- size_t sz = sizeof (struct kvm_irq_level_ioc);
+ size_t sz = sizeof (struct kvm_irq_level);
int32_t status;
- irq_event_ioc = kmem_zalloc(sz, KM_SLEEP);
-
- if (copyin(argp, irq_event_ioc, sz) != 0) {
- kmem_free(irq_event_ioc, sz);
+ if (copyin(argp, &level, sz) != 0) {
rval = EFAULT;
break;
}
if ((kvmp = ksp->kds_kvmp) == NULL) {
- kmem_free(irq_event_ioc, sz);
rval = EINVAL;
break;
}
if (!irqchip_in_kernel(kvmp)) {
- kmem_free(irq_event_ioc, sz);
rval = ENXIO;
break;
}
status = kvm_set_irq(kvmp, KVM_USERSPACE_IRQ_SOURCE_ID,
- irq_event_ioc->event.irq, irq_event_ioc->event.level);
+ level.irq, level.level);
if (cmd == KVM_IRQ_LINE_STATUS) {
- irq_event_ioc->event.status = status;
+ level.status = status;
- if (copyout(irq_event_ioc, argp, sz) != 0) {
- kmem_free(irq_event_ioc, sz);
+ if (copyout(&level, argp, sz) != 0) {
rval = EFAULT;
break;
}
}
- kmem_free(irq_event_ioc, sz);
break;
}
diff --git a/kvm.h b/kvm.h
index 8c334c0..b47b4b6 100644
--- a/kvm.h
+++ b/kvm.h
@@ -1583,10 +1583,6 @@ typedef struct kvm_irq_level {
uint32_t level;
} kvm_irq_level_t;
-typedef struct kvm_irq_level_ioc {
- struct kvm_irq_level event;
-} kvm_irq_level_ioc_t;
-
/*
* for KVM_SET_IDENTITY_MAP_ADDR
*/
@@ -1618,8 +1614,8 @@ typedef struct kvm_id_map_addr_ioc {
#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, struct kvm_id_map_addr_ioc)
/* Device model IOC */
#define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60)
-#define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level_ioc)
-#define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level_ioc)
+#define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level)
+#define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level)
#define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip)
#define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip)