[Cbe-oss-dev] (no subject)

adetsch at br.ibm.com adetsch at br.ibm.com
Thu Dec 11 06:04:33 EST 2008


>From ba8b198959d296347eb75691bfa90d7fdcec98dd Mon Sep 17 00:00:00 2001
In-Reply-To: <200812101654.05091.adetsch at br.ibm.com>
References: <200812101654.05091.adetsch at br.ibm.com>
From: Andre Detsch <adetsch at br.ibm.com>
Date: Wed, 10 Dec 2008 17:04:34 -0200
Subject: [PATCH 17/18] powerpc/spufs: Reorder spu_gang_remove_ctx and spu_fini_csa operations
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Message-Id: <200812101704.34533.adetsch at br.ibm.com>

It is not safe to destroy csa data before the context is removed from the
gang. In some rare situations, this could lead to the following problem
during context restore:

Unable to handle kernel paging request for data at address 0xd000000000000880
Faulting instruction address: 0xc00000000004935c
cpu 0x3: Vector: 300 (Data Access) at [c00000003ed1b670]
    pc: c00000000004935c: .spu_restore+0x7c/0x10dc
    lr: c000000000049320: .spu_restore+0x40/0x10dc
    sp: c00000003ed1b8f0
   msr: 9000000000009032
   dar: d000000000000880
 dsisr: 42000000
  current = 0xc00000003e183a30
  paca    = 0xc000000000853a80
    pid   = 2182, comm = affinity
enter ? for help
[c00000003ed1b9e0] c0000000000451dc .__spu_schedule+0x374/0x428
[c00000003ed1baa0] c000000000045db8 .spu_activate+0x43c/0x5d8
[c00000003ed1bbc0] c000000000047a6c .spufs_run_spu+0x510/0xb0c
[c00000003ed1bcc0] c000000000042f9c .do_spu_run+0xb0/0x17c
[c00000003ed1bd80] c00000000003bfdc .sys_spu_run+0x80/0xc8
[c00000003ed1be30] c0000000000076b4 syscall_exit+0x0/0x40
---
 arch/powerpc/platforms/cell/spufs/context.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spufs/context.c b/arch/powerpc/platforms/cell/spufs/context.c
index ef81894..a83c3bd 100644
--- a/arch/powerpc/platforms/cell/spufs/context.c
+++ b/arch/powerpc/platforms/cell/spufs/context.c
@@ -130,8 +130,8 @@ void destroy_spu_context(struct kref *kref)
 
 	spu_context_nospu_trace(destroy_spu_context__enter, ctx);
 
-	spu_fini_csa(&ctx->csa);
 	spu_gang_remove_ctx(ctx->gang, ctx);
+	spu_fini_csa(&ctx->csa);
 	if (ctx->prof_priv_kref)
 		kref_put(ctx->prof_priv_kref, ctx->prof_priv_release);
 	atomic_dec(&nr_spu_contexts);
-- 
1.5.4.3




More information about the cbe-oss-dev mailing list