512a513,514
> ApicList apics;
> int numContexts = sys->numContexts();
515,517c517,547
< pendingIPIs++;
< intPort->sendMessage(message, timing);
< newVal = regs[APIC_INTERRUPT_COMMAND_LOW];
---
> if (message.deliveryMode == DeliveryMode::LowestPriority) {
> panic("Lowest priority delivery mode "
> "IPIs aren't implemented.\n");
> }
> if (message.destMode == 1) {
> int dest = message.destination;
> hack_once("Assuming logical destinations are 1 << id.\n");
> for (int i = 0; i < numContexts; i++) {
> if (dest & 0x1)
> apics.push_back(i);
> dest = dest >> 1;
> }
> } else {
> if (message.destination == 0xFF) {
> for (int i = 0; i < numContexts; i++) {
> if (i == initialApicId) {
> requestInterrupt(message.vector,
> message.deliveryMode, message.trigger);
> } else {
> apics.push_back(i);
> }
> }
> } else {
> if (message.destination == initialApicId) {
> requestInterrupt(message.vector,
> message.deliveryMode, message.trigger);
> } else {
> apics.push_back(message.destination);
> }
> }
> }
530,531d559
< int numContexts = sys->numContexts();
< pendingIPIs += (numContexts - 1);
533,539c561,562
< int thisId = sys->getThreadContext(i)->contextId();
< if (thisId != initialApicId) {
< PacketPtr pkt = buildIntRequest(thisId, message);
< if (timing)
< intPort->sendMessageTiming(pkt, latency);
< else
< intPort->sendMessageAtomic(pkt);
---
> if (i != initialApicId) {
> apics.push_back(i);
543d565
< newVal = regs[APIC_INTERRUPT_COMMAND_LOW];
545a568,570
> pendingIPIs += apics.size();
> intPort->sendMessage(apics, message, timing);
> newVal = regs[APIC_INTERRUPT_COMMAND_LOW];