On Mon, 2008-12-01 at 08:49 +1100, Paul Mackerras wrote: > It turns out that on Cell, on a kernel with CONFIG_VIRT_CPU_ACCOUNTING > = y, if a program sets the SO (summary overflow) bit in the XER and > then does a system call, the SO bit in CR0 will be set on return > regardless of whether the system call detected an error. Since CR0.SO > is used as the error indication from the system call, this means that > all system calls appear to fail. > > The reason is that the workaround for the timebase bug on Cell uses a > compare instruction. With CONFIG_VIRT_CPU_ACCOUNTING = y, the > ACCOUNT_CPU_USER_ENTRY macro reads the timebase, so we end up doing a > compare instruction, which copies XER.SO to CR0.SO. Since we were > doing this in the system call entry patch after clearing CR0.SO but > before saving the CR, this meant that the saved CR image had CR0.SO > set if XER.SO was set on entry. > > This fixes it by moving the clearing of CR0.SO to after the > ACCOUNT_CPU_USER_ENTRY call in the system call entry path. > > Signed-off-by: Paul Mackerras <[EMAIL PROTECTED]> > Acked-by: Arnd Bergmann <[EMAIL PROTECTED]>
Acked-by: Benjamin Herrenschmidt <[EMAIL PROTECTED]> --- _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev