[PATCH] powerpc/ps3: Fix failure paths in ps3_create_spu()

Thorsten Blum <[email protected]>
Newsgroups org.ozlabs.lists.linuxppc-dev,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
ps3_destroy_spu() expects the logical SPE to be constructed and enabled
successfully. However, ps3_create_spu() calls ps3_destroy_spu() when
either construct_spu() or enable_spu() failed.

Only free spu->pdata when construct_spu() fails. If construct_spu()
succeeded but enable_spu() fails, destruct the logical SPE before
freeing spu->pdata.

Fixes: de91a5342995 ("[POWERPC] ps3: add spu support")
Cc: [email protected]
Signed-off-by: Thorsten Blum <[email protected]>
---
 arch/powerpc/platforms/ps3/spu.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/ps3/spu.c b/arch/powerpc/platforms/ps3/spu.c
index 33a676fa3d6c..05c439fed8a7 100644
--- a/arch/powerpc/platforms/ps3/spu.c
+++ b/arch/powerpc/platforms/ps3/spu.c
@@ -369,8 +369,10 @@ static int __init ps3_create_spu(struct spu *spu, void *data)
 	return result;
 
 fail_enable:
+	BUG_ON(lv1_destruct_logical_spe(spu_pdata(spu)->spe_id));
 fail_construct:
-	ps3_destroy_spu(spu);
+	kfree(spu->pdata);
+	spu->pdata = NULL;
 fail_malloc:
 	return result;
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.