Subject: spufs: use memcpy_fromio() to copy from local store From: Akinobu Mita GCC may generates inline copy loop to handle memcpy() function instead of kernel defined memcpy(). But this inlined version of memcpy() causes an alignment interrupt when copying from local store. This patch uses memcpy_fromio() and memcpy_toio to copy local store to prevent memcpy() being inlined. Signed-off-by: Akinobu Mita Signed-off-by: Arnd Bergmann --- arch/powerpc/platforms/cell/spufs/run.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) Index: linux-cg/arch/powerpc/platforms/cell/spufs/run.c =================================================================== --- linux-cg.orig/arch/powerpc/platforms/cell/spufs/run.c +++ linux-cg/arch/powerpc/platforms/cell/spufs/run.c @@ -245,10 +245,10 @@ int spu_process_callback(struct spu_cont /* get syscall block from local store */ npc = ctx->ops->npc_read(ctx); ls = ctx->ops->get_ls(ctx); - ls_pointer = *(u32*)(ls + npc); + ls_pointer = *(u32 *)(ls + npc); if (ls_pointer > (LS_SIZE - sizeof(s))) return -EFAULT; - memcpy(&s, ls + ls_pointer, sizeof (s)); + memcpy_fromio(&s, ls + ls_pointer, sizeof(s)); /* do actual syscall without pinning the spu */ ret = 0; @@ -268,7 +268,7 @@ int spu_process_callback(struct spu_cont } /* write result, jump over indirect pointer */ - memcpy(ls + ls_pointer, &spu_ret, sizeof (spu_ret)); + memcpy_toio(ls + ls_pointer, &spu_ret, sizeof(spu_ret)); ctx->ops->npc_write(ctx, npc); ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_RUNNABLE); return ret;