|Title||MPS PoolAMC could (if no shield cache) assert in LockClaim|
|Assigned user||Richard Kistruck|
|Description||MPS PoolAMC could (if no shield cache) assert in LockClaim|
HOWEVER: because of the MPS shield cache, this assert does not seem
to happen. Nonetheless, this is a defect. If something else were
to cause a shield cache flush, the defect would cause a failure. It
is not known whether such a flush could occur.
Assert might be, for example:
MPS ASSERTION FAILURE: res == 0
This can be provoked by disabling the shield cache and running
amcsshe with seed 27370 (for example).
job000441 - incorrect (but successful) fix for the same symptom
The cause is that AMCFix/AMCHeaderFix fails to make
ShieldExpose/Cover calls around access to the from-seg. Two such
calls are missing:
1. around: length = AddrOffset(ref, (*format->skip)(ref));
2. around: (void)AddrCopy(newBase, AddrSub(ref, headerSize), length);
However, because of the shield cache, the barrier is in fact 'never'
in place at these times (it has been left off, by the shield cache,
after a previous ShieldExpose), so we get away with it.
|Created by||Richard Kistruck|
|Created on||2007-08-22 11:25:01|
|Last modified by||Richard Kistruck|
|Last modified on||2007-09-12 17:05:10|
|History||2007-08-22 RHSK Created.|
|163171||closed||2007-08-23 17:50:31||Richard Kistruck||MPS master: poolamc.c AMCFix, AMCHeaderFix: Correct bad shield
code (but badness was being masked by the shield cache; see
job001706). ShieldExpose(seg) once, and ShieldCover it once, so
that _all_ .exposed.seg statements are between Expose and Cover.
|163170||open||2007-08-23 17:28:16||Richard Kistruck||MPS master: poolamc.c AMCFix, AMCHeaderFix: (comment only) tag
with ".exposed.seg" statements that require that "seg" (that is:
the 'from' seg) has been ShieldExposed. (Preparatory to fixing