From 61b45aa351b79f9c1dd22cbdddb0def1d7bba699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 14 Dec 2020 14:02:08 +0100 Subject: [PATCH] Interrupt zero is borked. Not sure if that's a Linux thing, the PLIC implementation being broken, or something else entirely. Just reserve it for now. --- .../java/li/cil/oc2/common/vm/ManagedInterruptAllocator.java | 2 +- .../li/cil/oc2/common/vm/VirtualMachineDeviceBusAdapter.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/li/cil/oc2/common/vm/ManagedInterruptAllocator.java b/src/main/java/li/cil/oc2/common/vm/ManagedInterruptAllocator.java index b2de8723..27292b47 100644 --- a/src/main/java/li/cil/oc2/common/vm/ManagedInterruptAllocator.java +++ b/src/main/java/li/cil/oc2/common/vm/ManagedInterruptAllocator.java @@ -44,7 +44,7 @@ public final class ManagedInterruptAllocator implements InterruptAllocator { throw new IllegalStateException(); } - if (interrupt < 0 || interrupt >= R5PlatformLevelInterruptController.INTERRUPT_COUNT) { + if (interrupt < 1 || interrupt >= R5PlatformLevelInterruptController.INTERRUPT_COUNT) { throw new IllegalArgumentException(); } diff --git a/src/main/java/li/cil/oc2/common/vm/VirtualMachineDeviceBusAdapter.java b/src/main/java/li/cil/oc2/common/vm/VirtualMachineDeviceBusAdapter.java index 8934312a..4308c073 100644 --- a/src/main/java/li/cil/oc2/common/vm/VirtualMachineDeviceBusAdapter.java +++ b/src/main/java/li/cil/oc2/common/vm/VirtualMachineDeviceBusAdapter.java @@ -31,6 +31,7 @@ public final class VirtualMachineDeviceBusAdapter { public VirtualMachineDeviceBusAdapter(final Board board) { this.board = board; + this.claimedInterrupts.set(0); } public int claimInterrupt() { @@ -38,7 +39,7 @@ public final class VirtualMachineDeviceBusAdapter { } public int claimInterrupt(final int interrupt) { - if (interrupt < 0 || interrupt >= R5PlatformLevelInterruptController.INTERRUPT_COUNT) { + if (interrupt < 1 || interrupt >= R5PlatformLevelInterruptController.INTERRUPT_COUNT) { throw new IllegalArgumentException(); }