Commit ccf17e9d authored by Jeremy Kerr's avatar Jeremy Kerr Committed by Arnd Bergmann

[POWERPC] spu_base: fix initialisation on systems with no SPEs

This change fixes the case where spu_base and spufs are initialised on a
system with no SPEs - unconditionally create the spu_lists so spu_alloc
doesn't explode, and check for spu_management ops before starting spufs.
Signed-off-by: default avatarJeremy Kerr <jk@ozlabs.org>
Signed-off-by: default avatarArnd Bergmann <arnd.bergmann@de.ibm.com>

 arch/powerpc/platforms/cell/spu_base.c    |    7 ++++---
 arch/powerpc/platforms/cell/spufs/inode.c |    5 +++++
 2 files changed, 9 insertions(+), 3 deletions(-)
parent befdc746
...@@ -36,6 +36,8 @@ ...@@ -36,6 +36,8 @@
#include <asm/xmon.h> #include <asm/xmon.h>
const struct spu_management_ops *spu_management_ops; const struct spu_management_ops *spu_management_ops;
EXPORT_SYMBOL_GPL(spu_management_ops);
const struct spu_priv1_ops *spu_priv1_ops; const struct spu_priv1_ops *spu_priv1_ops;
static struct list_head spu_list[MAX_NUMNODES]; static struct list_head spu_list[MAX_NUMNODES];
...@@ -589,6 +591,9 @@ static int __init init_spu_base(void) ...@@ -589,6 +591,9 @@ static int __init init_spu_base(void)
{ {
int i, ret = 0; int i, ret = 0;
for (i = 0; i < MAX_NUMNODES; i++)
INIT_LIST_HEAD(&spu_list[i]);
if (!spu_management_ops) if (!spu_management_ops)
goto out; goto out;
...@@ -597,9 +602,6 @@ static int __init init_spu_base(void) ...@@ -597,9 +602,6 @@ static int __init init_spu_base(void)
if (ret) if (ret)
goto out; goto out;
for (i = 0; i < MAX_NUMNODES; i++)
INIT_LIST_HEAD(&spu_list[i]);
ret = spu_enumerate_spus(create_spu); ret = spu_enumerate_spus(create_spu);
if (ret) { if (ret) {
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/spu.h> #include <asm/spu.h>
#include <asm/spu_priv1.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "spufs.h" #include "spufs.h"
...@@ -665,6 +666,10 @@ static int __init spufs_init(void) ...@@ -665,6 +666,10 @@ static int __init spufs_init(void)
{ {
int ret; int ret;
ret = -ENODEV;
if (!spu_management_ops)
goto out;
ret = -ENOMEM; ret = -ENOMEM;
spufs_inode_cache = kmem_cache_create("spufs_inode_cache", spufs_inode_cache = kmem_cache_create("spufs_inode_cache",
sizeof(struct spufs_inode_info), 0, sizeof(struct spufs_inode_info), 0,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment