Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3402a4e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by James Bottomley
Browse files

[VOYAGER] Convert the monitor thread to use the kthread API



full kthread conversion on the voyager power switch handling thread.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 9f483519
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1111,7 +1111,7 @@ voyager_cat_do_common_interrupt(void)
				printk(KERN_ERR "Voyager front panel switch turned off\n");
				voyager_status.switch_off = 1;
				voyager_status.request_from_kernel = 1;
				up(&kvoyagerd_sem);
				wake_up_process(voyager_thread);
			}
			/* Tell the hardware we're taking care of the
			 * shutdown, otherwise it will power the box off
@@ -1157,7 +1157,7 @@ voyager_cat_do_common_interrupt(void)
			outb(VOYAGER_CAT_END, CAT_CMD);
			voyager_status.power_fail = 1;
			voyager_status.request_from_kernel = 1;
			up(&kvoyagerd_sem);
			wake_up_process(voyager_thread);
		}
		
		
+21 −48
Original line number Diff line number Diff line
@@ -24,33 +24,16 @@
#include <linux/kmod.h>
#include <linux/completion.h>
#include <linux/sched.h>
#include <linux/kthread.h>
#include <asm/desc.h>
#include <asm/voyager.h>
#include <asm/vic.h>
#include <asm/mtrr.h>
#include <asm/msr.h>

#define THREAD_NAME "kvoyagerd"

/* external variables */
int kvoyagerd_running = 0;
DECLARE_MUTEX_LOCKED(kvoyagerd_sem);

static int thread(void *);

static __u8 set_timeout = 0;

/* Start the machine monitor thread.  Return 1 if OK, 0 if fail */
static int __init
voyager_thread_start(void)
{
	if(kernel_thread(thread, NULL, CLONE_KERNEL) < 0) {
		/* This is serious, but not fatal */
		printk(KERN_ERR "Voyager: Failed to create system monitor thread!!!\n");
		return 1;
	}
	return 0;
}
struct task_struct *voyager_thread;
static __u8 set_timeout;

static int
execute(const char *string)
@@ -110,31 +93,15 @@ check_continuing_condition(void)
	}
}

static void
wakeup(unsigned long unused)
{
	up(&kvoyagerd_sem);
}

static int
thread(void *unused)
{
	struct timer_list wakeup_timer;

	kvoyagerd_running = 1;

	daemonize(THREAD_NAME);

	set_timeout = 0;

	init_timer(&wakeup_timer);

	sigfillset(&current->blocked);

	printk(KERN_NOTICE "Voyager starting monitor thread\n");

	for (;;) {
		down_interruptible(&kvoyagerd_sem);
		set_current_state(TASK_INTERRUPTIBLE);
		schedule_timeout(set_timeout ? HZ : MAX_SCHEDULE_TIMEOUT);

		VDEBUG(("Voyager Daemon awoken\n"));
		if(voyager_status.request_from_kernel == 0) {
			/* probably awoken from timeout */
@@ -143,20 +110,26 @@ thread(void *unused)
			check_from_kernel();
			voyager_status.request_from_kernel = 0;
		}
		if(set_timeout) {
			del_timer(&wakeup_timer);
			wakeup_timer.expires = HZ + jiffies;
			wakeup_timer.function = wakeup;
			add_timer(&wakeup_timer);
	}
}

static int __init
voyager_thread_start(void)
{
	voyager_thread = kthread_run(thread, NULL, "kvoyagerd");
	if (IS_ERR(voyager_thread)) {
		printk(KERN_ERR "Voyager: Failed to create system monitor thread.\n");
		return PTR_ERR(voyager_thread);
	}
	return 0;
}


static void __exit
voyager_thread_stop(void)
{
	/* FIXME: do nothing at the moment */
	kthread_stop(voyager_thread);
}

module_init(voyager_thread_start);
//module_exit(voyager_thread_stop);
module_exit(voyager_thread_stop);
+1 −5
Original line number Diff line number Diff line
@@ -487,15 +487,11 @@ extern struct voyager_qic_cpi *voyager_quad_cpi_addr[NR_CPUS];
extern struct voyager_SUS *voyager_SUS;

/* variables exported always */
extern struct task_struct *voyager_thread;
extern int voyager_level;
extern int kvoyagerd_running;
extern struct semaphore kvoyagerd_sem;
extern struct voyager_status voyager_status;



/* functions exported by the voyager and voyager_smp modules */

extern int voyager_cat_readb(__u8 module, __u8 asic, int reg);
extern void voyager_cat_init(void);
extern void voyager_detect(struct voyager_bios_info *);