Activity log for bug #1599903

Date Who What changed Old value New value Message
2016-07-07 15:32:20 mdavidsaver bug added bug
2016-07-07 15:32:32 mdavidsaver nominated for series epics-base/3.15
2016-07-07 15:32:32 mdavidsaver bug task added epics-base/3.15
2016-07-07 15:32:32 mdavidsaver nominated for series epics-base/3.16
2016-07-07 15:32:32 mdavidsaver bug task added epics-base/3.16
2016-07-07 15:32:39 mdavidsaver epics-base/3.15: assignee mdavidsaver (mdavidsaver)
2016-07-07 15:32:41 mdavidsaver epics-base/3.15: importance Undecided High
2016-07-07 15:32:44 mdavidsaver epics-base/3.15: status New Confirmed
2016-07-07 15:32:58 mdavidsaver epics-base/3.15: milestone 3.15.branch
2016-07-07 15:33:01 mdavidsaver epics-base/3.16: milestone 3.16.branch
2016-07-07 15:33:23 mdavidsaver description Andrew Johnson and Shifu Xu of ANL report a nasty bug with epicsMMIO.h effecting all targets except RTEMS/powerpc. This is know to cause incorrect behavior with mrfioc2 on vxWorks, though this particular issue won't manifest on other targets. On 07/01/2016 05:51 PM, Andrew Johnson wrote: > ... > Register reads from the MRF230 are done by calling READ32. > > In mrfCommonIO.h: > > #define READ32(base,offset) NAT_READ32(base,offset) > #define NAT_READ32(base,offset) \ > nat_ioread32 ((epicsUInt8 *)(base) + U32_ ## offset) > > In epicsMMIO.h: > > #define nat_ioread32(address) bswap32(sysPciInLong((UINT32 *)(address))) > > For a PowerPC: > > #define bswap32(value) ( \ > (((epicsUInt32)(value) & 0x000000ff) << 24) | \ > (((epicsUInt32)(value) & 0x0000ff00) << 8) | \ > (((epicsUInt32)(value) & 0x00ff0000) >> 8) | \ > (((epicsUInt32)(value) & 0xff000000) >> 24)) > > Expanding out the bswap32() macro in nat_ioread32 results in > > #define nat_ioread32(address) ( \ > (((epicsUInt32)(sysPciInLong((UINT32 *)(address))) & 0x000000ff) << > 24) | \ > (((epicsUInt32)(sysPciInLong((UINT32 *)(address))) & 0x0000ff00) << 8) | \ > (((epicsUInt32)(sysPciInLong((UINT32 *)(address))) & 0x00ff0000) >> 8) | \ > (((epicsUInt32)(sysPciInLong((UINT32 *)(address))) & 0xff000000) >> 24)) > > i.e. four actual reads for every call to READ32. If the register is a > FIFO, that's probably going to throw away entries. > ... Andrew Johnson and Shifu Xu of ANL report a nasty bug with epicsMMIO.h effecting all targets except RTEMS/powerpc. This is known to cause incorrect behavior with mrfioc2 on vxWorks, though this particular issue won't manifest on other targets. On 07/01/2016 05:51 PM, Andrew Johnson wrote: > ... > Register reads from the MRF230 are done by calling READ32. > > In mrfCommonIO.h: > > #define READ32(base,offset) NAT_READ32(base,offset) > #define NAT_READ32(base,offset) \ > nat_ioread32 ((epicsUInt8 *)(base) + U32_ ## offset) > > In epicsMMIO.h: > > #define nat_ioread32(address) bswap32(sysPciInLong((UINT32 *)(address))) > > For a PowerPC: > > #define bswap32(value) ( \ > (((epicsUInt32)(value) & 0x000000ff) << 24) | \ > (((epicsUInt32)(value) & 0x0000ff00) << 8) | \ > (((epicsUInt32)(value) & 0x00ff0000) >> 8) | \ > (((epicsUInt32)(value) & 0xff000000) >> 24)) > > Expanding out the bswap32() macro in nat_ioread32 results in > > #define nat_ioread32(address) ( \ > (((epicsUInt32)(sysPciInLong((UINT32 *)(address))) & 0x000000ff) << > 24) | \ > (((epicsUInt32)(sysPciInLong((UINT32 *)(address))) & 0x0000ff00) << 8) | \ > (((epicsUInt32)(sysPciInLong((UINT32 *)(address))) & 0x00ff0000) >> 8) | \ > (((epicsUInt32)(sysPciInLong((UINT32 *)(address))) & 0xff000000) >> 24)) > > i.e. four actual reads for every call to READ32. If the register is a > FIFO, that's probably going to throw away entries. > ...
2016-07-08 22:07:45 mdavidsaver epics-base/3.15: status Confirmed Fix Committed
2016-07-08 22:07:50 mdavidsaver epics-base/3.16: status Confirmed In Progress
2017-06-02 21:07:56 Andrew Johnson epics-base/3.16: status In Progress Fix Released
2018-12-08 00:59:09 Andrew Johnson epics-base/3.15: status Fix Committed Fix Released