From b41305a39a6966d8e8b1449d6b7c194923bfb451 Mon Sep 17 00:00:00 2001
From: Arnd Bergmann <arnd@arndb.de>
Date: Mon, 5 Dec 2005 22:52:23 -0500
Subject: [PATCH] [PATCH] spufs: Fix oops when spufs module is not loaded

try_module_get returns true when NULL arguments, so
we first need to check if there is a module loaded before
getting the reference count.

Signed-off-by: Arnd Bergmann <arndb@de.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 arch/powerpc/platforms/cell/spu_syscalls.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spu_syscalls.c b/arch/powerpc/platforms/cell/spu_syscalls.c
index 43e0b187ffde3..91d564df944e0 100644
--- a/arch/powerpc/platforms/cell/spu_syscalls.c
+++ b/arch/powerpc/platforms/cell/spu_syscalls.c
@@ -37,11 +37,12 @@ asmlinkage long sys_spu_create(const char __user *name,
 		unsigned int flags, mode_t mode)
 {
 	long ret;
+	struct module *owner = spufs_calls.owner;
 
 	ret = -ENOSYS;
-	if (try_module_get(spufs_calls.owner)) {
+	if (owner && try_module_get(spufs_calls.owner)) {
 		ret = spufs_calls.create_thread(name, flags, mode);
-		module_put(spufs_calls.owner);
+		module_put(owner);
 	}
 	return ret;
 }
@@ -51,16 +52,17 @@ asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, __u32 __user *ustatus)
 	long ret;
 	struct file *filp;
 	int fput_needed;
+	struct module *owner = spufs_calls.owner;
 
 	ret = -ENOSYS;
-	if (try_module_get(spufs_calls.owner)) {
+	if (owner && try_module_get(owner)) {
 		ret = -EBADF;
 		filp = fget_light(fd, &fput_needed);
 		if (filp) {
 			ret = spufs_calls.spu_run(filp, unpc, ustatus);
 			fput_light(filp, fput_needed);
 		}
-		module_put(spufs_calls.owner);
+		module_put(owner);
 	}
 	return ret;
 }
-- 
2.30.2