Skip to content

Commit f398f4f

Browse files
committed
devices: vmm: Update IOAPIC IRQ routes
Update the IOAPIC IRQ routes to use the new wrapped `kvm_bindings::KvmIrqRouting` instead of `kvm_bindings::kvm_irq_routing`. Signed-off-by: Jake Correnti <[email protected]>
1 parent a72e938 commit f398f4f

File tree

3 files changed

+12
-32
lines changed

3 files changed

+12
-32
lines changed

examples/chroot_vm.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ int main(int argc, char *const argv[])
248248
}
249249

250250
// Set the log level to "warn".
251-
err = krun_init_log(cmdline.log_target, KRUN_LOG_LEVEL_WARN, cmdline.log_style, 0);
251+
err = krun_init_log(cmdline.log_target, KRUN_LOG_LEVEL_DEBUG, cmdline.log_style, 0);
252252
if (err) {
253253
errno = -err;
254254
perror("Error configuring log level");
@@ -331,7 +331,7 @@ int main(int argc, char *const argv[])
331331
return -1;
332332
}
333333

334-
if (err = krun_split_irqchip(ctx_id, false)) {
334+
if (err = krun_split_irqchip(ctx_id, true)) {
335335
errno = -err;
336336
perror("Error setting split IRQCHIP property");
337337
return -1;

src/devices/src/legacy/ioapic.rs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crossbeam_channel::unbounded;
22
use kvm_bindings::{
3-
kvm_enable_cap, kvm_irq_routing, kvm_irq_routing_entry, kvm_irq_routing_entry__bindgen_ty_1,
4-
kvm_irq_routing_msi, KVM_CAP_SPLIT_IRQCHIP, KVM_IRQ_ROUTING_MSI,
3+
kvm_enable_cap, kvm_irq_routing_entry, kvm_irq_routing_entry__bindgen_ty_1,
4+
kvm_irq_routing_msi, KvmIrqRouting, KVM_CAP_SPLIT_IRQCHIP, KVM_IRQ_ROUTING_MSI,
55
};
66
use kvm_ioctls::{Error, VmFd};
77

@@ -125,20 +125,10 @@ impl IoApic {
125125

126126
(0..IOAPIC_NUM_PINS).for_each(|i| ioapic.add_msi_route(i));
127127

128-
let mut irq_routing = utils::sized_vec::vec_with_array_field::<
129-
kvm_irq_routing,
130-
kvm_irq_routing_entry,
131-
>(ioapic.irq_routes.len());
132-
irq_routing[0].nr = ioapic.irq_routes.len() as u32;
133-
irq_routing[0].flags = 0;
134-
135-
unsafe {
136-
let entries_slice: &mut [kvm_irq_routing_entry] =
137-
irq_routing[0].entries.as_mut_slice(ioapic.irq_routes.len());
138-
entries_slice.copy_from_slice(ioapic.irq_routes.as_slice());
139-
}
140-
141-
vm.set_gsi_routing(&irq_routing[0])?;
128+
let mut routing = KvmIrqRouting::new(ioapic.irq_routes.len()).unwrap();
129+
let routing_entires = routing.as_mut_slice();
130+
routing_entires.copy_from_slice(ioapic.irq_routes.as_slice());
131+
vm.set_gsi_routing(&routing)?;
142132

143133
Ok(ioapic)
144134
}

src/vmm/src/worker.rs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,11 @@ impl super::Vmm {
4444
WorkerMessage::GpuRemoveMapping(s, g, l) => self.remove_mapping(s, g, l),
4545
#[cfg(target_arch = "x86_64")]
4646
WorkerMessage::GsiRoute(sender, entries) => {
47-
let mut irq_routing = utils::sized_vec::vec_with_array_field::<
48-
kvm_bindings::kvm_irq_routing,
49-
kvm_bindings::kvm_irq_routing_entry,
50-
>(entries.len());
51-
irq_routing[0].nr = entries.len() as u32;
52-
irq_routing[0].flags = 0;
53-
54-
unsafe {
55-
let entries_slice: &mut [kvm_bindings::kvm_irq_routing_entry] =
56-
irq_routing[0].entries.as_mut_slice(entries.len());
57-
entries_slice.copy_from_slice(&entries);
58-
}
59-
47+
let mut routing = kvm_bindings::KvmIrqRouting::new(entries.len()).unwrap();
48+
let routing_entries = routing.as_mut_slice();
49+
routing_entries.copy_from_slice(&entries);
6050
sender
61-
.send(self.vm.fd().set_gsi_routing(&irq_routing[0]).is_ok())
51+
.send(self.vm.fd().set_gsi_routing(&routing).is_ok())
6252
.unwrap();
6353
}
6454
#[cfg(target_arch = "x86_64")]

0 commit comments

Comments
 (0)