VirtualBox

Changeset 39154 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Oct 31, 2011 3:36:29 PM (13 years ago)
Author:
vboxsync
Message:

IOM: Added flags for dropping into the vbox debugger on complicated MMIO accesses. DBGF: some namespace cleanups.

File:
1 edited

Legend:

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

    r39112 r39154  
    8585 *          VINF_IOM_HC_MMIO_READ may be returned.
    8686 *
     87 * @param   pVM                 The VM handle.
    8788 * @param   pRange              The range to write to.
    8889 * @param   GCPhys              The physical address to start writing.
     
    9091 * @param   cbValue             The size of the value to write.
    9192 */
    92 static VBOXSTRICTRC iomMMIODoComplicatedWrite(PIOMMMIORANGE pRange, RTGCPHYS GCPhys, void const *pvValue, unsigned cbValue)
     93static VBOXSTRICTRC iomMMIODoComplicatedWrite(PVM pVM, PIOMMMIORANGE pRange, RTGCPHYS GCPhys, void const *pvValue, unsigned cbValue)
    9394{
    9495    AssertReturn(   (pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) != IOMMMIO_FLAGS_WRITE_PASSTHRU
     
    100101
    101102    /*
     103     * Do debug stop if requested.
     104     */
     105    int rc = VINF_SUCCESS; NOREF(pVM);
     106#ifdef VBOX_STRICT
     107    if (pRange->fFlags & IOMMMIO_FLAGS_DBGSTOP_ON_COMPLICATED_WRITE)
     108# ifdef IN_RING3
     109        rc = DBGFR3EventSrc(pVM, DBGFEVENT_DEV_STOP, RT_SRC_POS,
     110                            "Complicated write %#x byte at %RGp to %s\n", cbValue, GCPhys, R3STRING(pRange->pszDesc));
     111# else
     112        return VINF_IOM_HC_MMIO_WRITE;
     113# endif
     114#endif
     115
     116
     117    /*
    102118     * Split and conquer.
    103119     */
    104     int rc = VINF_SUCCESS;
    105120    for (;;)
    106121    {
     
    251266                                                    GCPhysFault, (void *)pvData, cb); /** @todo fix const!! */
    252267        else
    253             rc = iomMMIODoComplicatedWrite(pRange, GCPhysFault, pvData, cb);
     268            rc = iomMMIODoComplicatedWrite(pVM, pRange, GCPhysFault, pvData, cb);
    254269    }
    255270    else
     
    271286 *          VINF_IOM_HC_MMIO_WRITE may be returned.
    272287 *
     288 * @param   pVM                 The VM handle.
    273289 * @param   pRange              The range to read from.
    274290 * @param   GCPhys              The physical address to start reading.
     
    276292 * @param   cbValue             The size of the value to read.
    277293 */
    278 static VBOXSTRICTRC iomMMIODoComplicatedRead(PIOMMMIORANGE pRange, RTGCPHYS GCPhys, void *pvValue, unsigned cbValue)
     294static VBOXSTRICTRC iomMMIODoComplicatedRead(PVM pVM, PIOMMMIORANGE pRange, RTGCPHYS GCPhys, void *pvValue, unsigned cbValue)
    279295{
    280296    AssertReturn(   (pRange->fFlags & IOMMMIO_FLAGS_READ_MODE) == IOMMMIO_FLAGS_READ_DWORD
     
    285301
    286302    /*
     303     * Do debug stop if requested.
     304     */
     305    int rc = VINF_SUCCESS; NOREF(pVM);
     306#ifdef VBOX_STRICT
     307    if (pRange->fFlags & IOMMMIO_FLAGS_DBGSTOP_ON_COMPLICATED_WRITE)
     308# ifdef IN_RING3
     309        rc = DBGFR3EventSrc(pVM, DBGFEVENT_DEV_STOP, RT_SRC_POS,
     310                            "Complicated read %#x byte at %RGp to %s\n", cbValue, GCPhys, R3STRING(pRange->pszDesc));
     311# else
     312        return VINF_IOM_HC_MMIO_READ;
     313# endif
     314#endif
     315
     316    /*
    287317     * Split and conquer.
    288318     */
    289     int rc = VINF_SUCCESS;
    290319    for (;;)
    291320    {
     
    439468            rc = pRange->CTX_SUFF(pfnReadCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), GCPhys, pvValue, cbValue);
    440469        else
    441             rc = iomMMIODoComplicatedRead(pRange, GCPhys, pvValue, cbValue);
     470            rc = iomMMIODoComplicatedRead(pVM, pRange, GCPhys, pvValue, cbValue);
    442471    }
    443472    else
     
    18041833                                                   pu32Value, (unsigned)cbValue);
    18051834        else
    1806             rc = iomMMIODoComplicatedRead(pRange, GCPhys, pu32Value, (unsigned)cbValue);
     1835            rc = iomMMIODoComplicatedRead(pVM, pRange, GCPhys, pu32Value, (unsigned)cbValue);
    18071836        STAM_PROFILE_STOP(&pStats->CTX_SUFF_Z(ProfRead), a);
    18081837        switch (VBOXSTRICTRC_VAL(rc))
     
    19331962                                                    GCPhys, &u32Value, (unsigned)cbValue);
    19341963        else
    1935             rc = iomMMIODoComplicatedWrite(pRange, GCPhys, &u32Value, (unsigned)cbValue);
     1964            rc = iomMMIODoComplicatedWrite(pVM, pRange, GCPhys, &u32Value, (unsigned)cbValue);
    19361965        STAM_PROFILE_STOP(&pStats->CTX_SUFF_Z(ProfWrite), a);
    19371966#ifndef IN_RING3
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