VirtualBox

Changeset 19475 in vbox


Ignore:
Timestamp:
May 7, 2009 10:55:17 AM (16 years ago)
Author:
vboxsync
Message:

VMM: sending init IPI

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/pdmdev.h

    r19468 r19475  
    10271027     * and relocating them. Perhaps doing some kind of device init in GC...
    10281028     *
    1029      * @returns The current TPR.
     1029     * @returns status code.
    10301030     * @param   pDevIns         Device instance of the APIC.
    10311031     * @param   u8Dest          See APIC implementation.
     
    10361036     * @param   u8TriggerMode   See APIC implementation.
    10371037     */
    1038     DECLR3CALLBACKMEMBER(void, pfnBusDeliverR3,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     1038    DECLR3CALLBACKMEMBER(int, pfnBusDeliverR3,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    10391039                                                uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode));
    10401040
     
    13021302     */
    13031303    DECLR3CALLBACKMEMBER(void,    pfnSendSipi,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t uVector));
     1304   
     1305    /**
     1306     * Sends init IPI to given virtual CPU, should result in reset and
     1307     * halting till SIPI.
     1308     *
     1309     * @param   pDevIns         The APIC device instance.
     1310     * @param   idCpu           Virtual CPU to perform SIPI on
     1311     */
     1312    DECLR3CALLBACKMEMBER(void,    pfnSendInitIpi,(PPDMDEVINS pDevIns, VMCPUID idCpu));
    13041313
    13051314    /**
     
    13801389     * See comments about this hack on PDMAPICREG::pfnBusDeliverR3.
    13811390     *
    1382      * @returns The current TPR.
     1391     * @returns status code.
    13831392     * @param   pDevIns         Device instance of the IOAPIC.
    13841393     * @param   u8Dest          See APIC implementation.
     
    13891398     * @param   u8TriggerMode   See APIC implementation.
    13901399     */
    1391     DECLRCCALLBACKMEMBER(void, pfnApicBusDeliver,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     1400    DECLRCCALLBACKMEMBER(int, pfnApicBusDeliver,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    13921401                                                  uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode));
    13931402
     
    14341443     * See comments about this hack on PDMAPICREG::pfnBusDeliverR3.
    14351444     *
    1436      * @returns The current TPR.
     1445     * @returns status code.
    14371446     * @param   pDevIns         Device instance of the IOAPIC.
    14381447     * @param   u8Dest          See APIC implementation.
     
    14431452     * @param   u8TriggerMode   See APIC implementation.
    14441453     */
    1445     DECLR0CALLBACKMEMBER(void, pfnApicBusDeliver,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     1454    DECLR0CALLBACKMEMBER(int, pfnApicBusDeliver,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    14461455                                                  uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode));
    14471456
     
    14871496     * See comments about this hack on PDMAPICREG::pfnBusDeliverR3.
    14881497     *
    1489      * @returns The current TPR.
     1498     * @returns status code
    14901499     * @param   pDevIns         Device instance of the IOAPIC.
    14911500     * @param   u8Dest          See APIC implementation.
     
    14961505     * @param   u8TriggerMode   See APIC implementation.
    14971506     */
    1498     DECLR3CALLBACKMEMBER(void, pfnApicBusDeliver,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     1507    DECLR3CALLBACKMEMBER(int, pfnApicBusDeliver,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    14991508                                                  uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode));
    15001509
  • trunk/include/VBox/vmm.h

    r19468 r19475  
    160160VMMR3DECL(void)     VMMR3YieldResume(PVM pVM);
    161161VMMR3DECL(void)     VMMR3SendSipi(PVM pVM, VMCPUID idCpu, uint32_t uVector);
     162VMMR3DECL(void)     VMMR3SendInitIpi(PVM pVM, VMCPUID idCpu);
    162163/** @} */
    163164#endif /* IN_RING3 */
  • trunk/src/VBox/Devices/PC/DevAPIC.cpp

    r19468 r19475  
    363363                                                 getCpuFromLapic(dev, s));
    364364}
     365
    365366#ifdef IN_RING3
    366367DECLINLINE(void) cpuSendSipi(APICDeviceInfo* dev, APICState *s, int vector)
     
    371372                                 getCpuFromLapic(dev, s),
    372373                                 vector);
     374}
     375
     376DECLINLINE(void) cpuSendInitIpi(APICDeviceInfo* dev, APICState *s)
     377{
     378    Log2(("apic: send init IPI\n"));
     379
     380    dev->pApicHlpR3->pfnSendInitIpi(dev->pDevInsR3,
     381                                    getCpuFromLapic(dev, s));
    373382}
    374383#endif
     
    416425#endif /* !VBOX */
    417426
    418 static void apic_init_ipi(APICState *s);
     427static void apic_init_ipi(APICDeviceInfo* dev, APICState *s);
    419428static void apic_set_irq(APICDeviceInfo* dev, APICState *s, int vector_num, int trigger_mode);
    420429static bool apic_update_irq(APICDeviceInfo* dev, APICState *s);
     
    431440PDMBOTHCBDECL(void) apicSetTPR(PPDMDEVINS pDevIns, uint8_t val);
    432441PDMBOTHCBDECL(uint8_t) apicGetTPR(PPDMDEVINS pDevIns);
    433 PDMBOTHCBDECL(void) apicBusDeliverCallback(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode,
     442PDMBOTHCBDECL(int) apicBusDeliverCallback(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode,
    434443                                           uint8_t u8DeliveryMode, uint8_t iVector, uint8_t u8Polarity,
    435444                                           uint8_t u8TriggerMode);
     
    451460    APICState *apic_iter;
    452461#else /* VBOX */
    453 static void apic_bus_deliver(APICDeviceInfo* dev,
    454                              uint32_t deliver_bitmask, uint8_t delivery_mode,
    455                              uint8_t vector_num, uint8_t polarity,
    456                              uint8_t trigger_mode)
     462static int apic_bus_deliver(APICDeviceInfo* dev,
     463                            uint32_t deliver_bitmask, uint8_t delivery_mode,
     464                            uint8_t vector_num, uint8_t polarity,
     465                            uint8_t trigger_mode)
    457466{
    458467#endif /* VBOX */
     
    470479                apic_set_irq(dev, apic, vector_num, trigger_mode);
    471480            }
    472             return;
     481            return VINF_SUCCESS;
    473482        }
    474483        case APIC_DM_FIXED:
     
    480489            foreach_apic(dev, deliver_bitmask,
    481490                         cpuSetInterrupt(dev, apic));
    482             return;
     491            return VINF_SUCCESS;
    483492
    484493        case APIC_DM_NMI:
     
    486495            foreach_apic(dev, deliver_bitmask,
    487496                         cpuSetInterrupt(dev, apic));
    488             return;
     497            return VINF_SUCCESS;
    489498
    490499        case APIC_DM_INIT:
    491500            /* normal INIT IPI sent to processors */
    492501#ifdef VBOX
     502#ifdef IN_RING3
    493503            foreach_apic(dev, deliver_bitmask,
    494                          apic_init_ipi(apic));
     504                         apic_init_ipi(dev, apic));
     505            return VINF_SUCCESS;
     506#else
     507            /* We shall send init IPI only in R3, R0 calls should be
     508               rescheduled to R3 */
     509            return  VINF_IOM_HC_MMIO_READ_WRITE;
     510#endif /* IN_RING3 */
     511
    495512#else
    496513            for (apic_iter = first_local_apic; apic_iter != NULL;
     
    499516            }
    500517#endif
    501             return;
    502518
    503519        case APIC_DM_EXTINT:
     
    506522
    507523        default:
    508             return;
     524            return VINF_SUCCESS;
    509525    }
    510526
     
    512528    foreach_apic(dev, deliver_bitmask,
    513529                       apic_set_irq (dev, apic, vector_num, trigger_mode));
     530    return VINF_SUCCESS;
    514531#else  /* VBOX */
    515532    for (apic_iter = first_local_apic; apic_iter != NULL;
     
    672689{
    673690    APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *);
    674     int rv = VINF_SUCCESS;
     691    int rc = VINF_SUCCESS;
    675692
    676693    if (dev->enmVersion < PDMAPICVERSION_X2APIC)
     
    718735            apic->icr[0] = (uint32_t)u64Value;
    719736            apic->icr[1] = (uint32_t)(u64Value >> 32);
    720             rv = apic_deliver(dev, apic, (apic->icr[1] >> 24) & 0xff, (apic->icr[0] >> 11) & 1,
     737            rc = apic_deliver(dev, apic, (apic->icr[1] >> 24) & 0xff, (apic->icr[0] >> 11) & 1,
    721738                             (apic->icr[0] >>  8) & 7, (apic->icr[0] & 0xff),
    722739                             (apic->icr[0] >> 14) & 1, (apic->icr[0] >> 15) & 1);
     
    750767            /* Self IPI, see x2APIC book 2.4.5 */
    751768            int vector = u64Value & 0xff;
    752             apic_bus_deliver(dev,
    753                              1 << getLapicById(dev, idCpu)->id /* Self */,
    754                              0 /* Delivery mode - fixed */,
    755                              vector,
    756                              0 /* Polarity - conform to the bus */,
    757                              0 /* Trigger mode - edge */);
     769            rc = apic_bus_deliver(dev,
     770                                  1 << getLapicById(dev, idCpu)->id /* Self */,
     771                                  0 /* Delivery mode - fixed */,
     772                                  vector,
     773                                  0 /* Polarity - conform to the bus */,
     774                                  0 /* Trigger mode - edge */);
    758775            break;
    759776        }
     
    764781    }
    765782
    766     return rv;
     783    return rc;
    767784}
    768785PDMBOTHCBDECL(int) apicReadMSR(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t *pu64Value)
     
    854871 * for connecting the two devices.
    855872 */
    856 PDMBOTHCBDECL(void) apicBusDeliverCallback(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode,
     873PDMBOTHCBDECL(int) apicBusDeliverCallback(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode,
    857874                                           uint8_t u8DeliveryMode, uint8_t iVector, uint8_t u8Polarity,
    858875                                           uint8_t u8TriggerMode)
     
    861878    LogFlow(("apicBusDeliverCallback: pDevIns=%p u8Dest=%#x u8DestMode=%#x u8DeliveryMode=%#x iVector=%#x u8Polarity=%#x u8TriggerMode=%#x\n",
    862879             pDevIns, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode));
    863     apic_bus_deliver(dev, apic_get_delivery_bitmask(dev, u8Dest, u8DestMode),
    864                      u8DeliveryMode, iVector, u8Polarity, u8TriggerMode);
     880    return apic_bus_deliver(dev, apic_get_delivery_bitmask(dev, u8Dest, u8DestMode),
     881                            u8DeliveryMode, iVector, u8Polarity, u8TriggerMode);
    865882}
    866883
     
    10531070}
    10541071
    1055 static void apic_init_ipi(APICState *s)
     1072#ifdef IN_RING3
     1073static void apic_init_ipi(APICDeviceInfo* dev, APICState *s)
    10561074{
    10571075    int i;
     
    10751093
    10761094#ifdef VBOX
    1077     /** @todo reset CPU, activate wait for sipi mode for application processors */
    1078     /** Must be dealt with in ring 3 */
    1079 #endif
    1080 }
    1081 
    1082 #ifdef IN_RING3
     1095    cpuSendInitIpi(dev, s);
     1096#endif
     1097}
     1098
    10831099/* send a SIPI message to the CPU to start it */
    10841100static void apic_startup(APICDeviceInfo* dev, APICState *s, int vector_num)
     
    10981114#endif
    10991115}
    1100 #endif
     1116#endif /* IN_RING3 */
    11011117
    11021118static int  apic_deliver(APICDeviceInfo* dev, APICState *s,
     
    11421158                int level = (s->icr[0] >> 14) & 1;
    11431159                if (level == 0 && trig_mode == 1) {
    1144 #ifdef VBOX
    11451160                    foreach_apic(dev, deliver_bitmask,
    11461161                                       apic->arb_id = apic->id);
     1162#ifndef VBOX
     1163                    return;
     1164#else
    11471165                    return VINF_SUCCESS;
    1148 #else /* !VBOX */
    1149                     for (apic_iter = first_local_apic; apic_iter != NULL;
    1150                          apic_iter = apic_iter->next_apic) {
    1151                         if (deliver_bitmask & (1 << apic_iter->id)) {
    1152                             apic_iter->arb_id = apic_iter->id;
    1153                         }
    1154                     }
    1155                     return;
    1156 #endif /* !VBOX */
     1166#endif
    11571167                }
    11581168            }
     
    11711181#else
    11721182# ifdef IN_RING3
    1173            
    11741183            foreach_apic(dev, deliver_bitmask,
    11751184                         apic_startup(dev, apic, vector_num));
    11761185            return VINF_SUCCESS;
    11771186# else
    1178             /* We shall send SIPI only in R3, R0 calls should be 
     1187            /* We shall send SIPI only in R3, R0 calls should be
    11791188               rescheduled to R3 */
    11801189            return  VINF_IOM_HC_MMIO_WRITE;
     
    11871196                     trigger_mode);
    11881197#else /* VBOX */
    1189     apic_bus_deliver(dev, deliver_bitmask, delivery_mode, vector_num, polarity,
    1190                      trigger_mode);
    1191     return VINF_SUCCESS;
     1198    return apic_bus_deliver(dev, deliver_bitmask, delivery_mode, vector_num,
     1199                            polarity, trigger_mode);
    11921200#endif /* VBOX */
    11931201}
     
    14561464static int apic_mem_writel(APICDeviceInfo* dev, APICState *s, target_phys_addr_t addr, uint32_t val)
    14571465{
    1458     int rv = VINF_SUCCESS;
     1466    int rc = VINF_SUCCESS;
    14591467#endif /* VBOX */
    14601468    int index;
     
    15201528    case 0x30:
    15211529        s->icr[0] = val;
    1522         rv = apic_deliver(dev, s, (s->icr[1] >> 24) & 0xff,
     1530        rc = apic_deliver(dev, s, (s->icr[1] >> 24) & 0xff,
    15231531                          (s->icr[0] >> 11) & 1,
    15241532                          (s->icr[0] >> 8) & 7, (s->icr[0] & 0xff),
     
    15701578    }
    15711579#ifdef VBOX
    1572     return rv;
     1580    return rc;
    15731581#endif
    15741582}
     
    17831791                                 delivery_mode, vector, polarity, trig_mode);
    17841792#else /* VBOX */
    1785                 s->CTX_SUFF(pIoApicHlp)->pfnApicBusDeliver(s->CTX_SUFF(pDevIns),
     1793                int rc = s->CTX_SUFF(pIoApicHlp)->pfnApicBusDeliver(s->CTX_SUFF(pDevIns),
    17861794                                                           dest,
    17871795                                                           dest_mode,
     
    17901798                                                           polarity,
    17911799                                                           trig_mode);
     1800                /* We must be sure that attempts to reschedule in R3
     1801                   never get here */
     1802                Assert(rc == VINF_SUCCESS);
    17921803#endif /* VBOX */
    17931804            }
     
    21552166    TMTimerStop(s->CTX_SUFF(pTimer));
    21562167
    2157     apic_init_ipi(s);
     2168    apic_init_ipi(dev, s);
    21582169    /* malc, I've removed the initing duplicated in apic_init_ipi(). This
    21592170     * arb_id was left over.. */
  • trunk/src/VBox/VMM/PDMDevMiscHlp.cpp

    r19468 r19475  
    221221}
    222222
    223 
    224223/** @copydoc PDMAPICHLPR3::pfnGetCpuId */
    225224static DECLCALLBACK(VMCPUID) pdmR3ApicHlp_GetCpuId(PPDMDEVINS pDevIns)
     
    239238}
    240239
     240/** @copydoc PDMAPICHLPR3::pfnSendInitIpi */
     241static DECLCALLBACK(void) pdmR3ApicHlp_SendInitIpi(PPDMDEVINS pDevIns, VMCPUID idCpu)
     242{
     243    PDMDEV_ASSERT_DEVINS(pDevIns);
     244    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     245    VMMR3SendInitIpi(pDevIns->Internal.s.pVMR3, idCpu);
     246}
    241247
    242248/** @copydoc PDMAPICHLPR3::pfnGetRCHelpers */
     
    283289    pdmR3ApicHlp_GetCpuId,
    284290    pdmR3ApicHlp_SendSipi,
     291    pdmR3ApicHlp_SendInitIpi,
    285292    pdmR3ApicHlp_GetRCHelpers,
    286293    pdmR3ApicHlp_GetR0Helpers,
     
    298305
    299306/** @copydoc PDMIOAPICHLPR3::pfnApicBusDeliver */
    300 static DECLCALLBACK(void) pdmR3IoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     307static DECLCALLBACK(int) pdmR3IoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    301308                                                        uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode)
    302309{
     
    306313             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode));
    307314    if (pVM->pdm.s.Apic.pfnBusDeliverR3)
    308         pVM->pdm.s.Apic.pfnBusDeliverR3(pVM->pdm.s.Apic.pDevInsR3, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode);
     315        return pVM->pdm.s.Apic.pfnBusDeliverR3(pVM->pdm.s.Apic.pDevInsR3, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode);
     316    return VINF_SUCCESS;
    309317}
    310318
  • trunk/src/VBox/VMM/PDMInternal.h

    r18615 r19475  
    417417    DECLR3CALLBACKMEMBER(int,       pfnReadMSRR3, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t *pu64Value));
    418418    /** @copydoc PDMAPICREG::pfnBusDeliverR3 */
    419     DECLR3CALLBACKMEMBER(void,      pfnBusDeliverR3,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     419    DECLR3CALLBACKMEMBER(int,       pfnBusDeliverR3,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    420420                                                     uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode));
    421421
     
    439439    DECLR0CALLBACKMEMBER(uint32_t,  pfnReadMSRR0, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t *pu64Value));
    440440    /** @copydoc PDMAPICREG::pfnBusDeliverR3 */
    441     DECLR0CALLBACKMEMBER(void,      pfnBusDeliverR0,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     441    DECLR0CALLBACKMEMBER(int,       pfnBusDeliverR0,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    442442                                                     uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode));
    443443
     
    461461    DECLRCCALLBACKMEMBER(uint32_t,  pfnReadMSRRC, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t *pu64Value));
    462462    /** @copydoc PDMAPICREG::pfnBusDeliverR3 */
    463     DECLRCCALLBACKMEMBER(void,      pfnBusDeliverRC,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     463    DECLRCCALLBACKMEMBER(int,       pfnBusDeliverRC,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    464464                                                     uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode));
    465465} PDMAPIC;
  • trunk/src/VBox/VMM/VMMAll/VMMAll.cpp

    r19468 r19475  
    100100}
    101101
     102DECLCALLBACK(int) vmmR3SendInitIpi(PVM pVM, VMCPUID idCpu)
     103{
     104    PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);
     105    VMCPU_ASSERT_EMT(pVCpu);
     106
     107    /** @todo: reset CPU and halt till SIPI */
     108
     109    return VINF_SUCCESS;
     110}
     111
    102112/**
    103113 * Sends SIPI to the virtual CPU by setting CS:EIP into vector-dependent state
     
    115125    int rc = VMR3ReqCallU(pVM->pUVM, idCpu, &pReq, RT_INDEFINITE_WAIT, 0,
    116126                          (PFNRT)vmmR3SendSipi, 3, pVM, idCpu, uVector);
     127    AssertRC(rc);
     128    VMR3ReqFree(pReq);
     129}
     130
     131/**
     132 * Sends init IPI to the virtual CPU.
     133 *
     134 * @param   pVM         The VM to operate on.
     135 * @param   idCpu       Virtual CPU to perform int IPI on
     136 */
     137VMMR3DECL(void) VMMR3SendInitIpi(PVM pVM, VMCPUID idCpu)
     138{
     139    AssertReturnVoid(idCpu < pVM->cCPUs);
     140
     141    PVMREQ pReq;
     142    int rc = VMR3ReqCallU(pVM->pUVM, idCpu, &pReq, RT_INDEFINITE_WAIT, 0,
     143                          (PFNRT)vmmR3SendInitIpi, 2, pVM, idCpu);
    117144    AssertRC(rc);
    118145    VMR3ReqFree(pReq);
  • trunk/src/VBox/VMM/VMMGC/PDMGCDevice.cpp

    r19468 r19475  
    9898 * @{
    9999 */
    100 static DECLCALLBACK(void) pdmRCIoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     100static DECLCALLBACK(int) pdmRCIoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    101101                                                        uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode);
    102102static DECLCALLBACK(int) pdmRCIoApicHlp_Lock(PPDMDEVINS pDevIns, int rc);
     
    490490
    491491/** @copydoc PDMIOAPICHLPRC::pfnApicBusDeliver */
    492 static DECLCALLBACK(void) pdmRCIoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     492static DECLCALLBACK(int) pdmRCIoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    493493                                                        uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode)
    494494{
     
    498498             pDevIns, pDevIns->iInstance, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode));
    499499    if (pVM->pdm.s.Apic.pfnBusDeliverRC)
    500         pVM->pdm.s.Apic.pfnBusDeliverRC(pVM->pdm.s.Apic.pDevInsRC, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode);
     500        return pVM->pdm.s.Apic.pfnBusDeliverRC(pVM->pdm.s.Apic.pDevInsRC, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode);
     501    return VINF_SUCCESS;
    501502}
    502503
  • trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp

    r19468 r19475  
    100100 * @{
    101101 */
    102 static DECLCALLBACK(void) pdmR0IoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     102static DECLCALLBACK(int) pdmR0IoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    103103                                                        uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode);
    104104static DECLCALLBACK(int) pdmR0IoApicHlp_Lock(PPDMDEVINS pDevIns, int rc);
     
    504504
    505505/** @copydoc PDMIOAPICHLPR0::pfnApicBusDeliver */
    506 static DECLCALLBACK(void) pdmR0IoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
     506static DECLCALLBACK(int) pdmR0IoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
    507507                                                        uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode)
    508508{
     
    513513    Assert(pVM->pdm.s.Apic.pDevInsR0);
    514514    if (pVM->pdm.s.Apic.pfnBusDeliverR0)
    515         pVM->pdm.s.Apic.pfnBusDeliverR0(pVM->pdm.s.Apic.pDevInsR0, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode);
     515        return pVM->pdm.s.Apic.pfnBusDeliverR0(pVM->pdm.s.Apic.pDevInsR0, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode);
     516    return VINF_SUCCESS;
    516517}
    517518
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette