Loading drivers/sbus/char/bbc_envctrl.c +10 −29 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #define __KERNEL_SYSCALLS__ #include <linux/kernel.h> #include <linux/kthread.h> #include <linux/sched.h> #include <linux/slab.h> #include <linux/delay.h> Loading Loading @@ -459,10 +460,6 @@ static struct task_struct *kenvctrld_task; static int kenvctrld(void *__unused) { daemonize("kenvctrld"); allow_signal(SIGKILL); kenvctrld_task = current; printk(KERN_INFO "bbc_envctrl: kenvctrld starting...\n"); last_warning_jiffies = jiffies - WARN_INTERVAL; for (;;) { Loading @@ -470,7 +467,7 @@ static int kenvctrld(void *__unused) struct bbc_fan_control *fp; msleep_interruptible(POLL_INTERVAL); if (signal_pending(current)) if (kthread_should_stop()) break; for (tp = all_bbc_temps; tp; tp = tp->next) { Loading Loading @@ -577,7 +574,6 @@ int bbc_envctrl_init(void) int temp_index = 0; int fan_index = 0; int devidx = 0; int err = 0; while ((echild = bbc_i2c_getdev(devidx++)) != NULL) { if (!strcmp(echild->prom_name, "temperature")) Loading @@ -585,9 +581,13 @@ int bbc_envctrl_init(void) if (!strcmp(echild->prom_name, "fan-control")) attach_one_fan(echild, fan_index++); } if (temp_index != 0 && fan_index != 0) err = kernel_thread(kenvctrld, NULL, CLONE_FS | CLONE_FILES); return err; if (temp_index != 0 && fan_index != 0) { kenvctrld_task = kthread_run(kenvctrld, NULL, "kenvctrld"); if (IS_ERR(kenvctrld_task)) return PTR_ERR(kenvctrld_task); } return 0; } static void destroy_one_temp(struct bbc_cpu_temperature *tp) Loading @@ -607,26 +607,7 @@ void bbc_envctrl_cleanup(void) struct bbc_cpu_temperature *tp; struct bbc_fan_control *fp; if (kenvctrld_task != NULL) { force_sig(SIGKILL, kenvctrld_task); for (;;) { struct task_struct *p; int found = 0; read_lock(&tasklist_lock); for_each_process(p) { if (p == kenvctrld_task) { found = 1; break; } } read_unlock(&tasklist_lock); if (!found) break; msleep(1000); } kenvctrld_task = NULL; } kthread_stop(kenvctrld_task); tp = all_bbc_temps; while (tp != NULL) { Loading drivers/sbus/char/envctrl.c +10 −35 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <linux/config.h> #include <linux/module.h> #include <linux/sched.h> #include <linux/kthread.h> #include <linux/errno.h> #include <linux/delay.h> #include <linux/ioport.h> Loading Loading @@ -1010,14 +1011,11 @@ static int kenvctrld(void *__unused) poll_interval = 5000; /* TODO env_mon_interval */ daemonize("kenvctrld"); allow_signal(SIGKILL); kenvctrld_task = current; printk(KERN_INFO "envctrl: %s starting...\n", current->comm); for (;;) { if(msleep_interruptible(poll_interval)) msleep_interruptible(poll_interval); if (kthread_should_stop()) break; for (whichcpu = 0; whichcpu < ENVCTRL_MAX_CPU; ++whichcpu) { Loading @@ -1041,7 +1039,6 @@ static int kenvctrld(void *__unused) static int __init envctrl_init(void) { #ifdef CONFIG_PCI struct linux_ebus *ebus = NULL; struct linux_ebus_device *edev = NULL; struct linux_ebus_child *edev_child = NULL; Loading Loading @@ -1118,9 +1115,11 @@ static int __init envctrl_init(void) i2c_childlist[i].addr, (0 == i) ? ("\n") : (" ")); } err = kernel_thread(kenvctrld, NULL, CLONE_FS | CLONE_FILES); if (err < 0) kenvctrld_task = kthread_run(kenvctrld, NULL, "kenvctrld"); if (IS_ERR(kenvctrld_task)) { err = PTR_ERR(kenvctrld_task); goto out_deregister; } return 0; Loading @@ -1133,37 +1132,13 @@ static int __init envctrl_init(void) kfree(i2c_childlist[i].tables); } return err; #else return -ENODEV; #endif } static void __exit envctrl_cleanup(void) { int i; if (NULL != kenvctrld_task) { force_sig(SIGKILL, kenvctrld_task); for (;;) { struct task_struct *p; int found = 0; read_lock(&tasklist_lock); for_each_process(p) { if (p == kenvctrld_task) { found = 1; break; } } read_unlock(&tasklist_lock); if (!found) break; msleep(1000); } kenvctrld_task = NULL; } kthread_stop(kenvctrld_task); iounmap(i2c); misc_deregister(&envctrl_dev); Loading Loading
drivers/sbus/char/bbc_envctrl.c +10 −29 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #define __KERNEL_SYSCALLS__ #include <linux/kernel.h> #include <linux/kthread.h> #include <linux/sched.h> #include <linux/slab.h> #include <linux/delay.h> Loading Loading @@ -459,10 +460,6 @@ static struct task_struct *kenvctrld_task; static int kenvctrld(void *__unused) { daemonize("kenvctrld"); allow_signal(SIGKILL); kenvctrld_task = current; printk(KERN_INFO "bbc_envctrl: kenvctrld starting...\n"); last_warning_jiffies = jiffies - WARN_INTERVAL; for (;;) { Loading @@ -470,7 +467,7 @@ static int kenvctrld(void *__unused) struct bbc_fan_control *fp; msleep_interruptible(POLL_INTERVAL); if (signal_pending(current)) if (kthread_should_stop()) break; for (tp = all_bbc_temps; tp; tp = tp->next) { Loading Loading @@ -577,7 +574,6 @@ int bbc_envctrl_init(void) int temp_index = 0; int fan_index = 0; int devidx = 0; int err = 0; while ((echild = bbc_i2c_getdev(devidx++)) != NULL) { if (!strcmp(echild->prom_name, "temperature")) Loading @@ -585,9 +581,13 @@ int bbc_envctrl_init(void) if (!strcmp(echild->prom_name, "fan-control")) attach_one_fan(echild, fan_index++); } if (temp_index != 0 && fan_index != 0) err = kernel_thread(kenvctrld, NULL, CLONE_FS | CLONE_FILES); return err; if (temp_index != 0 && fan_index != 0) { kenvctrld_task = kthread_run(kenvctrld, NULL, "kenvctrld"); if (IS_ERR(kenvctrld_task)) return PTR_ERR(kenvctrld_task); } return 0; } static void destroy_one_temp(struct bbc_cpu_temperature *tp) Loading @@ -607,26 +607,7 @@ void bbc_envctrl_cleanup(void) struct bbc_cpu_temperature *tp; struct bbc_fan_control *fp; if (kenvctrld_task != NULL) { force_sig(SIGKILL, kenvctrld_task); for (;;) { struct task_struct *p; int found = 0; read_lock(&tasklist_lock); for_each_process(p) { if (p == kenvctrld_task) { found = 1; break; } } read_unlock(&tasklist_lock); if (!found) break; msleep(1000); } kenvctrld_task = NULL; } kthread_stop(kenvctrld_task); tp = all_bbc_temps; while (tp != NULL) { Loading
drivers/sbus/char/envctrl.c +10 −35 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <linux/config.h> #include <linux/module.h> #include <linux/sched.h> #include <linux/kthread.h> #include <linux/errno.h> #include <linux/delay.h> #include <linux/ioport.h> Loading Loading @@ -1010,14 +1011,11 @@ static int kenvctrld(void *__unused) poll_interval = 5000; /* TODO env_mon_interval */ daemonize("kenvctrld"); allow_signal(SIGKILL); kenvctrld_task = current; printk(KERN_INFO "envctrl: %s starting...\n", current->comm); for (;;) { if(msleep_interruptible(poll_interval)) msleep_interruptible(poll_interval); if (kthread_should_stop()) break; for (whichcpu = 0; whichcpu < ENVCTRL_MAX_CPU; ++whichcpu) { Loading @@ -1041,7 +1039,6 @@ static int kenvctrld(void *__unused) static int __init envctrl_init(void) { #ifdef CONFIG_PCI struct linux_ebus *ebus = NULL; struct linux_ebus_device *edev = NULL; struct linux_ebus_child *edev_child = NULL; Loading Loading @@ -1118,9 +1115,11 @@ static int __init envctrl_init(void) i2c_childlist[i].addr, (0 == i) ? ("\n") : (" ")); } err = kernel_thread(kenvctrld, NULL, CLONE_FS | CLONE_FILES); if (err < 0) kenvctrld_task = kthread_run(kenvctrld, NULL, "kenvctrld"); if (IS_ERR(kenvctrld_task)) { err = PTR_ERR(kenvctrld_task); goto out_deregister; } return 0; Loading @@ -1133,37 +1132,13 @@ static int __init envctrl_init(void) kfree(i2c_childlist[i].tables); } return err; #else return -ENODEV; #endif } static void __exit envctrl_cleanup(void) { int i; if (NULL != kenvctrld_task) { force_sig(SIGKILL, kenvctrld_task); for (;;) { struct task_struct *p; int found = 0; read_lock(&tasklist_lock); for_each_process(p) { if (p == kenvctrld_task) { found = 1; break; } } read_unlock(&tasklist_lock); if (!found) break; msleep(1000); } kenvctrld_task = NULL; } kthread_stop(kenvctrld_task); iounmap(i2c); misc_deregister(&envctrl_dev); Loading