Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2004-02-16 00:03:58 -0800
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2004-02-16 00:03:58 -0800
commitae4239eca7c1b5482e0438b0ccbd3af8e449cc78 (patch)
tree70d21500feeb07ed7f29b2846128c406cad6c923
parentd9bb5003c00674349b76dc26fc0b4778f08604da (diff)
[PATCH] Fix rtasd zombie on PowerMac G5
The rtasd kernel thread would exit before daemoniz'ing itself if RTAS wasn't present (or if allocation of the buffer failed), thus leaving a zombie. This patch fixes it (and remove #if 0'ed code)
-rw-r--r--arch/ppc64/kernel/rtasd.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/arch/ppc64/kernel/rtasd.c b/arch/ppc64/kernel/rtasd.c
index 36bb742ec4d6..21ab5f2a90c5 100644
--- a/arch/ppc64/kernel/rtasd.c
+++ b/arch/ppc64/kernel/rtasd.c
@@ -347,6 +347,8 @@ static int rtasd(void *unused)
int event_scan = rtas_token("event-scan");
int rc;
+ daemonize("rtasd");
+
if (event_scan == RTAS_UNKNOWN_SERVICE || get_eventscan_parms() == -1)
goto error;
@@ -359,15 +361,9 @@ static int rtasd(void *unused)
/* We can use rtas_log_buf now */
no_more_logging = 0;
- DEBUG("will sleep for %d jiffies\n", (HZ*60/rtas_event_scan_rate) / 2);
-
- daemonize("rtasd");
+ printk(KERN_ERR "RTAS daemon started\n");
-#if 0
- /* Rusty unreal time task */
- current->policy = SCHED_FIFO;
- current->nice = sys_sched_get_priority_max(SCHED_FIFO) + 1;
-#endif
+ DEBUG("will sleep for %d jiffies\n", (HZ*60/rtas_event_scan_rate) / 2);
/* See if we have any error stored in NVRAM */
memset(logdata, 0, rtas_error_log_max);
@@ -423,7 +419,9 @@ repeat:
goto repeat;
error_vfree:
- vfree(rtas_log_buf);
+ if (rtas_log_buf)
+ vfree(rtas_log_buf);
+ rtas_log_buf = NULL;
error:
/* Should delete proc entries */
return -EINVAL;
@@ -451,8 +449,6 @@ static int __init rtas_init(void)
if (kernel_thread(rtasd, 0, CLONE_FS) < 0)
printk(KERN_ERR "Failed to start RTAS daemon\n");
- printk(KERN_ERR "RTAS daemon started\n");
-
/* Make room for the sequence number */
rtas_error_log_buffer_max = rtas_error_log_max + sizeof(int);