lkml.org 
[lkml]   [2006]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 2.6.17-rc5] ieee1394_core: switch to kthread API
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jody McIntyre <scjody@modernduck.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
Submitted by Christoph on 2006-04-14. The Patch has been in -mm since
April but vanished temporarily due to some git-ieee1394 mishap.

This gets also rid of the MODPOST warning "drivers/ieee1394/ieee1394.o -
Section mismatch: reference to .exit.text: from .smp_locks after '' (at
offset 0x18)".

drivers/ieee1394/ieee1394_core.c | 44 +++++++++----------------------
1 files changed, 13 insertions(+), 31 deletions(-)

Index: linux-2.6.17-rc5/drivers/ieee1394/ieee1394_core.c
===================================================================
--- linux-2.6.17-rc5.orig/drivers/ieee1394/ieee1394_core.c 2006-05-28 17:53:59.000000000 +0200
+++ linux-2.6.17-rc5/drivers/ieee1394/ieee1394_core.c 2006-05-28 17:54:53.000000000 +0200
@@ -33,6 +33,7 @@
#include <linux/kdev_t.h>
#include <linux/skbuff.h>
#include <linux/suspend.h>
+#include <linux/kthread.h>

#include <asm/byteorder.h>
#include <asm/semaphore.h>
@@ -997,10 +998,8 @@ void abort_timedouts(unsigned long __opa
* packets that have a "complete" function are sent here. This way, the
* completion is run out of kernel context, and doesn't block the rest of
* the stack. */
-static int khpsbpkt_pid = -1, khpsbpkt_kill;
-static DECLARE_COMPLETION(khpsbpkt_complete);
+static struct task_struct *khpsbpkt_thread;
static struct sk_buff_head hpsbpkt_queue;
-static DECLARE_MUTEX_LOCKED(khpsbpkt_sig);


static void queue_packet_complete(struct hpsb_packet *packet)
@@ -1011,9 +1010,7 @@ static void queue_packet_complete(struct
}
if (packet->complete_routine != NULL) {
skb_queue_tail(&hpsbpkt_queue, packet->skb);
-
- /* Signal the kernel thread to handle this */
- up(&khpsbpkt_sig);
+ wake_up_process(khpsbpkt_thread);
}
return;
}
@@ -1025,19 +1022,9 @@ static int hpsbpkt_thread(void *__hi)
void (*complete_routine)(void*);
void *complete_data;

- daemonize("khpsbpkt");
-
current->flags |= PF_NOFREEZE;

- while (1) {
- if (down_interruptible(&khpsbpkt_sig)) {
- printk("khpsbpkt: received unexpected signal?!\n" );
- break;
- }
-
- if (khpsbpkt_kill)
- break;
-
+ while (!kthread_should_stop()) {
while ((skb = skb_dequeue(&hpsbpkt_queue)) != NULL) {
packet = (struct hpsb_packet *)skb->data;

@@ -1048,9 +1035,12 @@ static int hpsbpkt_thread(void *__hi)

complete_routine(complete_data);
}
+
+ set_current_state(TASK_INTERRUPTIBLE );
+ schedule();
}

- complete_and_exit(&khpsbpkt_complete, 0);
+ return 0;
}

static int __init ieee1394_init(void)
@@ -1065,10 +1055,10 @@ static int __init ieee1394_init(void)
HPSB_ERR("Some features may not be available\n");
}

- khpsbpkt_pid = kernel_thread(hpsbpkt_thread, NULL, CLONE_KERNEL);
- if (khpsbpkt_pid < 0) {
+ khpsbpkt_thread = kthread_run(hpsbpkt_thread, NULL, "khpsbpkt");
+ if (IS_ERR(khpsbpkt_thread)) {
HPSB_ERR("Failed to start hpsbpkt thread!\n");
- ret = -ENOMEM;
+ ret = PTR_ERR(khpsbpkt_thread);
goto exit_cleanup_config_roms;
}

@@ -1148,10 +1138,7 @@ release_all_bus:
release_chrdev:
unregister_chrdev_region(IEEE1394_CORE_DEV, 256);
exit_release_kernel_thread:
- if (khpsbpkt_pid >= 0) {
- kill_proc(khpsbpkt_pid, SIGTERM, 1);
- wait_for_completion(&khpsbpkt_complete);
- }
+ kthread_stop(khpsbpkt_thread);
exit_cleanup_config_roms:
hpsb_cleanup_config_roms();
return ret;
@@ -1172,12 +1159,7 @@ static void __exit ieee1394_cleanup(void
bus_remove_file(&ieee1394_bus_type, fw_bus_attrs[i]);
bus_unregister(&ieee1394_bus_type);

- if (khpsbpkt_pid >= 0) {
- khpsbpkt_kill = 1;
- mb();
- up(&khpsbpkt_sig);
- wait_for_completion(&khpsbpkt_complete);
- }
+ kthread_stop(khpsbpkt_thread);

hpsb_cleanup_config_roms();


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-05-28 18:47    [W:0.044 / U:0.380 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site