VirtualBox

Changeset 62540 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jul 25, 2016 9:31:02 AM (8 years ago)
Author:
vboxsync
Message:

VMM/GIM/HyperV: Synthetic interrupt controller bits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/GIMAllHv.cpp

    r62478 r62540  
    909909        }
    910910
    911         case MSR_GIM_HV_SINT2:
    912         {
    913             if (!pHv->fDbgEnabled)
     911        case MSR_GIM_HV_SINT0:    case MSR_GIM_HV_SINT1:    case MSR_GIM_HV_SINT2:    case MSR_GIM_HV_SINT3:
     912        case MSR_GIM_HV_SINT4:    case MSR_GIM_HV_SINT5:    case MSR_GIM_HV_SINT6:    case MSR_GIM_HV_SINT7:
     913        case MSR_GIM_HV_SINT8:    case MSR_GIM_HV_SINT9:    case MSR_GIM_HV_SINT10:   case MSR_GIM_HV_SINT11:
     914        case MSR_GIM_HV_SINT12:   case MSR_GIM_HV_SINT13:   case MSR_GIM_HV_SINT14:   case MSR_GIM_HV_SINT15:
     915        {
     916#ifndef IN_RING3
     917            /** @todo make this RZ later? */
     918            return VINF_CPUM_R3_MSR_WRITE;
     919#else
     920            PGIMHVCPU    pHvCpu     = &pVCpu->gim.s.u.HvCpu;
     921            uint8_t      uVector    = MSR_GIM_HV_SINT_VECTOR(uRawValue);
     922            bool const   fVMBusMsg  = RT_BOOL(idMsr == GIM_HV_VMBUS_MSG_SINT);
     923            size_t const idxSintMsr = idMsr - MSR_GIM_HV_SINT0;
     924            const char  *pszDesc    = fVMBusMsg ? "VMBus Message" : "Generic";
     925            if (uVector < GIM_HV_SINT_VECTOR_VALID_MIN)
     926            {
     927                LogRel(("GIM: HyperV%u: Programmed an invalid vector in SINT%u (%s), uVector=%u -> #GP(0)\n", pVCpu->idCpu,
     928                        idxSintMsr, pszDesc, uVector));
    914929                return VERR_CPUM_RAISE_GP_0;
    915 #ifndef IN_RING3
    916             return VINF_CPUM_R3_MSR_WRITE;
    917 #else
    918             PGIMHVCPU pHvCpu  = &pVCpu->gim.s.u.HvCpu;
    919             uint8_t   uVector = MSR_GIM_HV_SINT_VECTOR(uRawValue);
    920             if (  !MSR_GIM_HV_SINT_IS_MASKED(uRawValue)
    921                 && uVector < GIM_HV_SINT_VECTOR_VALID_MIN)
    922             {
    923                 LogRel(("GIM: HyperV: Programmed an invalid vector in SINT2 (VMBUS_MSG_SINT), uVector=%u -> #GP(0)\n", uVector));
    924                 return VERR_CPUM_RAISE_GP_0;
    925             }
    926 
    927             pHvCpu->auSintXMsr[GIM_HV_VMBUS_MSG_SINT] = uRawValue;
    928             if (MSR_GIM_HV_SINT_IS_MASKED(uRawValue))
    929                 LogRel(("GIM: HyperV: Masked SINT2 (VMBUS_MSG_SINT)\n"));
    930             else
    931                 LogRel(("GIM: HyperV: Unmasked SINT2 (VMBUS_MSG_SINT), uVector=%u\n", uVector));
     930            }
     931
     932            pHvCpu->auSintXMsr[idxSintMsr] = uRawValue;
     933            if (fVMBusMsg)
     934            {
     935                if (MSR_GIM_HV_SINT_IS_MASKED(uRawValue))
     936                    LogRel(("GIM: HyperV%u: Masked SINT%u (%s)\n", pVCpu->idCpu, idxSintMsr, pszDesc));
     937                else
     938                    LogRel(("GIM: HyperV%u: Unmasked SINT%u (%s), uVector=%u\n", pVCpu->idCpu, idxSintMsr, pszDesc, uVector));
     939            }
    932940            return VINF_SUCCESS;
    933941#endif
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