[Cbe-oss-dev] [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 cbe-oss-dev
mailing list