}
low = val;
InterruptCommandRegHigh high = regs[APIC_INTERRUPT_COMMAND_HIGH];
- // Record that an IPI is being sent.
- low.deliveryStatus = 1;
TriggerIntMessage message = 0;
message.destination = high.destination;
message.vector = low.vector;
message.destMode = low.destMode;
message.level = low.level;
message.trigger = low.trigger;
- bool timing(sys->isTimingMode());
- // Be careful no updates of the delivery status bit get lost.
- regs[APIC_INTERRUPT_COMMAND_LOW] = low;
ApicList apics;
int numContexts = sys->numContexts();
switch (low.destShorthand) {
}
break;
}
- pendingIPIs += apics.size();
- intMasterPort.sendMessage(apics, message, timing);
+ // Record that an IPI is being sent if one actually is.
+ if (apics.size()) {
+ low.deliveryStatus = 1;
+ pendingIPIs += apics.size();
+ }
+ regs[APIC_INTERRUPT_COMMAND_LOW] = low;
+ intMasterPort.sendMessage(apics, message, sys->isTimingMode());
newVal = regs[APIC_INTERRUPT_COMMAND_LOW];
}
break;