Re: Hang with isync
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2006-09-20 21:35:22
On Tue, 2006-09-19 at 18:16 -0700, Manoj Sharma wrote:
Hi,
We use linux kernel 2.4.20 on ppc405 and the system hangs once
in a while when isync gets called in this function:
_GLOBAL(_nmask_and_or_msr)
mfmsr r0 /* Get current msr */
andc r0,r0,r3 /* And off the bits set in r3 (first
parm) */
or r0,r0,r4 /* Or on the bits in r4 (second parm) */
sync /* Some chip revs have problems here... */
isync
mtmsr r0 /* Update machine state */
isync
blr /* Done */
2.5 onwards, I find that "sync; isync" has been replaced by a
macro SYNC (defined only for 601). I don't find it in any
changelog and reason for the change.
Can someone give some information on this change? Regardless of the change... on 2.4, _nmask_and_or_msr() was used for a number of things. We would need to know where it was called from with what values as arguments to have an idea of what's going wrong. It's probably not dying on the isync, but rather on the following mtmsr due to a problem with the values passed in.... Ben.