1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
- big kernel lock unavailable
- CLASS_ATTR callbacks changed signature
--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/debugtool.c 2009-01-22 14:36:34.000000000 +0100
+++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/debugtool.c 2011-07-11 14:46:28.845001528 +0200
@@ -121,11 +121,11 @@ static void dt_run (void)
struct socket *sock;
struct sockaddr_in addr;
- lock_kernel();
+ //lock_kernel();
current->flags |= PF_NOFREEZE;
daemonize(MODULE_NAME);
allow_signal(SIGKILL);
- unlock_kernel();
+ //unlock_kernel();
/* init socket */
ret = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
@@ -181,12 +181,12 @@ static struct class dt_class = {
#endif
};
-static ssize_t attr_show_enabled (struct class *class, char *buf)
+static ssize_t attr_show_enabled (struct class *class, struct class_attribute *attr, char *buf)
{
return sprintf(buf, "%d\n", dt_enabled);
}
-static ssize_t attr_store_enabled (struct class *class, const char *buf, size_t count)
+static ssize_t attr_store_enabled (struct class *class, struct class_attribute *attr, const char *buf, size_t count)
{
if (count > 0 && *buf == '1') {
mISDN_dt_enable();
@@ -241,13 +241,13 @@ void __exit dt_exit(void)
mISDN_module_unregister(THIS_MODULE);
if (thread) {
- lock_kernel();
+ //lock_kernel();
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
ret = kill_pid(find_pid_ns(thread->pid, &init_pid_ns), SIGKILL, 1);
#else
ret = kill_proc(thread->pid, SIGKILL, 1);
#endif
- unlock_kernel();
+ //unlock_kernel();
if (ret < 0)
printk(KERN_INFO MODULE_NAME ": Unknown error (%d) while trying to terminate kernel thread!\n", -ret);
wake_up_interruptible(&skb_q_wait);
|