#include <linux/signal.h>
#include <linux/interrupt.h>
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
+ #include <asm/semaphore.h>
+#else
+ #include <linux/semaphore.h>
+#endif
-#include <asm/semaphore.h>
-#include <linux/smp_lock.h>
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
+ #include <linux/smp_lock.h>
+#endif
#include "../include/kthread.h"
sema_init(&kthread->startstop_sem,0);
/* We need to do a memory barrier here to be sure that
- the flags are visible on all CPUs.
+ the flags are visible on all CPUs.
*/
mb();
kthread->terminate = 1;
/* We need to do a memory barrier here to be sure that
- the flags are visible on all CPUs.
+ the flags are visible on all CPUs.
*/
mb();
+#warning The local code for kernel thread support is not more needed for recent 2.6 kernels
+#warning and code should be modified to emulate same interface for older kernels
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
kill_proc(kthread->thread->pid, SIGKILL, 1);
+#else /* >= 2,6,20 */
+ send_sig(SIGKILL, kthread->thread, 1);
+#endif /* >= 2,6,20 */
/* block till thread terminated */
down(&kthread->startstop_sem);
/* now we are sure the thread is in zombie state. We
notify keventd to clean the process up.
*/
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
kill_proc(2, SIGCHLD, 1);
+#endif /* >= 2,6,20 */
}