VirtualBox

Changeset 90140 in vbox for trunk/src/VBox/Devices/Audio


Ignore:
Timestamp:
Jul 9, 2021 10:29:54 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
145642
Message:

DevHda: Aligned the codec state more along cache lines. bugref:9890

Location:
trunk/src/VBox/Devices/Audio
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DevHda.h

    r90138 r90140  
    754754        R3PTRTYPE(char *)       pszOutPath;
    755755    } Dbg;
    756 
     756    /** Align the codec state on a cache line. */
     757    uint64_t                au64Padding[3];
    757758    /** The HDA codec state. */
    758759    HDACODECR3              Codec;
    759760} HDASTATER3;
     761AssertCompileMemberAlignment(HDASTATER3, Codec, 64);
    760762
    761763
  • trunk/src/VBox/Devices/Audio/DevHdaCodec.h

    r90138 r90140  
    796796{
    797797    /** Codec implementation type. */
    798     CODECTYPE  enmType;
     798    CODECTYPE   enmType;
    799799    /** Codec ID. */
    800     uint16_t   id;
    801     uint16_t   u16VendorId;
    802     uint16_t   u16DeviceId;
    803     uint8_t    u8BSKU;
    804     uint8_t    u8AssemblyId;
    805 
    806     CODECNODE  aNodes[CODEC_NODES_MAX];
    807     uint32_t   cNodes;
    808 
    809     bool       fInReset;
    810     uint8_t    abPadding1[3]; /**< @todo r=bird: Merge with bPadding2 and eliminate both */
    811 
    812     uint8_t    cTotalNodes;
    813     uint8_t    u8AdcVolsLineIn;
    814     uint8_t    u8DacLineOut;
    815     uint8_t    bPadding2;
    816 
    817     uint8_t    au8Ports[CODEC_NODES_MAX];
    818     uint8_t    au8Dacs[CODEC_NODES_MAX];
    819     uint8_t    au8AdcVols[CODEC_NODES_MAX];
    820     uint8_t    au8Adcs[CODEC_NODES_MAX];
    821     uint8_t    au8AdcMuxs[CODEC_NODES_MAX];
    822     uint8_t    au8Pcbeeps[CODEC_NODES_MAX];
    823     uint8_t    au8SpdifIns[CODEC_NODES_MAX];
    824     uint8_t    au8SpdifOuts[CODEC_NODES_MAX];
    825     uint8_t    au8DigInPins[CODEC_NODES_MAX];
    826     uint8_t    au8DigOutPins[CODEC_NODES_MAX];
    827     uint8_t    au8Cds[CODEC_NODES_MAX];
    828     uint8_t    au8VolKnobs[CODEC_NODES_MAX];
    829     uint8_t    au8Reserveds[CODEC_NODES_MAX];
     800    uint16_t    id;
     801    uint16_t    u16VendorId;
     802    uint16_t    u16DeviceId;
     803    uint8_t     u8BSKU;
     804    uint8_t     u8AssemblyId;
     805
     806    bool        fInReset;
     807
     808    uint8_t     cTotalNodes;
     809    uint8_t     u8AdcVolsLineIn;
     810    uint8_t     u8DacLineOut;
     811
     812    uint32_t    cNodes;
     813
     814    /** Align the lists below so they don't cross cache lines (assumes
     815     *  CODEC_NODES_MAX is 32). */
     816    uint8_t     abPadding1[CODEC_NODES_MAX - 20];
     817
     818    uint8_t     au8Ports[CODEC_NODES_MAX];
     819    uint8_t     au8Dacs[CODEC_NODES_MAX];
     820    uint8_t     au8AdcVols[CODEC_NODES_MAX];
     821    uint8_t     au8Adcs[CODEC_NODES_MAX];
     822    uint8_t     au8AdcMuxs[CODEC_NODES_MAX];
     823    uint8_t     au8Pcbeeps[CODEC_NODES_MAX];
     824    uint8_t     au8SpdifIns[CODEC_NODES_MAX];
     825    uint8_t     au8SpdifOuts[CODEC_NODES_MAX];
     826    uint8_t     au8DigInPins[CODEC_NODES_MAX];
     827    uint8_t     au8DigOutPins[CODEC_NODES_MAX];
     828    uint8_t     au8Cds[CODEC_NODES_MAX];
     829    uint8_t     au8VolKnobs[CODEC_NODES_MAX];
     830    uint8_t     au8Reserveds[CODEC_NODES_MAX];
     831
     832    /** Safty zero padding before the nodes start. */
     833    uint8_t     abSaftyPadding2[CODEC_NODES_MAX * 2];
     834
     835    CODECNODE   aNodes[CODEC_NODES_MAX];
    830836
    831837    STAMCOUNTER StatLookupsR3;
     838    uint64_t    au64Padding3[7];
    832839} HDACODECR3;
     840AssertCompile(RT_IS_POWER_OF_TWO(CODEC_NODES_MAX));
     841AssertCompileMemberAlignment(HDACODECR3, au8Ports, CODEC_NODES_MAX);
     842AssertCompileMemberAlignment(HDACODECR3, aNodes, 64);
     843AssertCompileSizeAlignment(HDACODECR3, 8);
     844AssertCompileSizeAlignment(HDACODECR3, 16);
     845AssertCompileSizeAlignment(HDACODECR3, 32);
     846AssertCompileSizeAlignment(HDACODECR3, 64);
    833847
    834848
Note: See TracChangeset for help on using the changeset viewer.

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