[PATCH] powerpc: Fix system calls on Cell entered with XER.SO=1

Benjamin Herrenschmidt benh at kernel.crashing.org
Mon Dec 1 08:59:42 EST 2008


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 <paulus at samba.org>
> Acked-by: Arnd Bergmann <arnd at arndb.de>

Acked-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---





More information about the Linuxppc-dev mailing list