On Thu, 28 Sep 2006, Ralf Baechle wrote:
> If we take a DBE exception in this code we're in trouble and I've seen
> systems delivering DBEs highly asynchronously. Afar the Broadcom SOCs
> fall into that class.
> So the interesting part is if we take a data bus exception between
> the stack pointer adjustment and and before EXL is cleared. We're taking
> a nested exception so c0_epc and c0_cause.bd will not be updated. So
> when the bus error handler will save the $sp value it saw on entry but
> will return to the EPC of the first exception, that is only one stack
> frame will be popped. Whops ...
It looks like a design issue -- further asynchronous bus error exceptions
should be blocked till one currenly being handled has been acked. In fact
if they are asynchronous, then it really makes no sense to use the
exception and a general interrupt should be used instead -- the whole
point of using an exception here is the ability to stop a data corrupting
transaction, as unlike an interropt, an exception can be precise.