VirtualBox

Ignore:
Timestamp:
Apr 1, 2021 1:16:25 PM (4 years ago)
Author:
vboxsync
Message:

Forward ported r143574 from 6.1: VMM: Must do vmR3SetHaltMethodCallback on all EMTs or only one of them will be doing halting in ring-0. oem2ticketref:40

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r88344 r88346  
    601601}
    602602
    603 #if 0 /** @todo broken see oem2 ticket 40 */
     603#if 0 /** @todo temporarily disabled, see oem2 ticket 40 */
    604604
    605605/**
     
    644644    else if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INTERRUPT_SMI))
    645645    {
     646        Log12(("vmmR0DoHaltInterrupt: CPU%d failed #3\n", pVCpu->idCpu));
    646647        return VINF_EM_HALT;
    647648    }
     
    654655        {
    655656            /** @todo later. */
     657            Log12(("vmmR0DoHaltInterrupt: CPU%d failed #2 (uMWait=%u enmInt=%d)\n", pVCpu->idCpu, uMWait, enmInterruptibility));
    656658            return VINF_EM_HALT;
    657659        }
     
    667669             *        here before injecting the virtual interrupt. See emR3ForcedActions
    668670             *        for details. */
     671            Log12(("vmmR0DoHaltInterrupt: CPU%d failed #1 (uMWait=%u enmInt=%d)\n", pVCpu->idCpu, uMWait, enmInterruptibility));
    669672            return VINF_EM_HALT;
    670673        }
     
    674677    {
    675678        STAM_REL_COUNTER_INC(&pVCpu->vmm.s.StatR0HaltExec);
     679        Log11(("vmmR0DoHaltInterrupt: CPU%d success VINF_SUCCESS (UNHALT)\n", pVCpu->idCpu));
    676680        return VINF_SUCCESS;
    677681    }
     
    679683    {
    680684        STAM_REL_COUNTER_INC(&pVCpu->vmm.s.StatR0HaltExec);
     685        Log11(("vmmR0DoHaltInterrupt: CPU%d success VINF_SUCCESS (uMWait=%u > 1)\n", pVCpu->idCpu, uMWait));
    681686        return VINF_SUCCESS;
    682687    }
    683688
     689    Log12(("vmmR0DoHaltInterrupt: CPU%d failed #0 (uMWait=%u enmInt=%d)\n", pVCpu->idCpu, uMWait, enmInterruptibility));
    684690    return VINF_EM_HALT;
    685691}
     
    850856                            uint64_t const u64EndSchedHalt     = RTTimeNanoTS();
    851857                            uint64_t const cNsElapsedSchedHalt = u64EndSchedHalt - u64StartSchedHalt;
     858                            Log10(("vmmR0DoHalt: CPU%d: halted %llu ns\n", pGVCpu->idCpu, cNsElapsedSchedHalt));
    852859
    853860                            VMCPU_CMPXCHG_STATE(pGVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_HALTED);
     
    878885                                        return vmmR0DoHaltInterrupt(pGVCpu, uMWait, enmInterruptibility);
    879886                                    }
     887                                    Log12(("vmmR0DoHalt: CPU%d post #2 - No pending interrupt\n", pGVCpu->idCpu));
    880888                                }
     889                                else
     890                                    Log12(("vmmR0DoHalt: CPU%d post #1 - Pending FF\n", pGVCpu->idCpu));
    881891                            }
     892                            else
     893                                Log12(("vmmR0DoHalt: CPU%d GVMMR0SchedHalt failed: %Rrc\n", pGVCpu->idCpu, rc));
    882894                        }
    883895                        else
     896                        {
    884897                            VMCPU_CMPXCHG_STATE(pGVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_HALTED);
     898                            Log12(("vmmR0DoHalt: CPU%d failed #4 - Pending FF\n", pGVCpu->idCpu));
     899                        }
    885900                    }
     901                    else
     902                        Log12(("vmmR0DoHalt: CPU%d failed #3 - enmState=%d\n", pGVCpu->idCpu, VMCPU_GET_STATE(pGVCpu)));
    886903                }
     904                else
     905                    Log12(("vmmR0DoHalt: CPU%d failed #2 - Pending FF\n", pGVCpu->idCpu));
    887906            }
    888907        }
    889     }
     908        else
     909            Log12(("vmmR0DoHalt: CPU%d failed #1 - Pending FF\n", pGVCpu->idCpu));
     910    }
     911    else
     912        Log12(("vmmR0DoHalt: CPU%d failed #0 - fMayHaltInRing0=%d TRPMHasTrap=%d enmInt=%d uMWait=%u\n",
     913               pGVCpu->idCpu, pGVCpu->vmm.s.fMayHaltInRing0, TRPMHasTrap(pGVCpu), enmInterruptibility, uMWait));
     914
    890915    return VINF_EM_HALT;
    891916}
     
    14911516                    vmmR0RecordRC(pGVM, pGVCpu, rc);
    14921517#endif
    1493 #if 0 /** @todo broken see oem2 ticket 40 */
     1518#if 0 /** @todo temporarily disabled, see oem2 ticket 40 */
    14941519                    /*
    14951520                     * If this is a halt.
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