aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2007-07-17 07:03:35 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-17 13:23:02 -0400
commit831441862956fffa17b9801db37e6ea1650b0f69 (patch)
treeb0334921341f8f1734bdd3243de76d676329d21c /drivers/media/video
parent787d2214c19bcc9b6ac48af0ce098277a801eded (diff)
Freezer: make kernel threads nonfreezable by default
Currently, the freezer treats all tasks as freezable, except for the kernel threads that explicitly set the PF_NOFREEZE flag for themselves. This approach is problematic, since it requires every kernel thread to either set PF_NOFREEZE explicitly, or call try_to_freeze(), even if it doesn't care for the freezing of tasks at all. It seems better to only require the kernel threads that want to or need to be frozen to use some freezer-related code and to remove any freezer-related code from the other (nonfreezable) kernel threads, which is done in this patch. The patch causes all kernel threads to be nonfreezable by default (ie. to have PF_NOFREEZE set by default) and introduces the set_freezable() function that should be called by the freezable kernel threads in order to unset PF_NOFREEZE. It also makes all of the currently freezable kernel threads call set_freezable(), so it shouldn't cause any (intentional) change of behaviour to appear. Additionally, it updates documentation to describe the freezing of tasks more accurately. [akpm@linux-foundation.org: build fixes] Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Nigel Cunningham <nigel@nigel.suspend2.net> Cc: Pavel Machek <pavel@ucw.cz> Cc: Oleg Nesterov <oleg@tv-sign.ru> Cc: Gautham R Shenoy <ego@in.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/cx88/cx88-tvaudio.c1
-rw-r--r--drivers/media/video/msp3400-kthreads.c6
-rw-r--r--drivers/media/video/tvaudio.c2
-rw-r--r--drivers/media/video/video-buf-dvb.c1
-rw-r--r--drivers/media/video/vivi.c1
5 files changed, 8 insertions, 3 deletions
diff --git a/drivers/media/video/cx88/cx88-tvaudio.c b/drivers/media/video/cx88/cx88-tvaudio.c
index 259ea08e784f..1cc2d286a1cb 100644
--- a/drivers/media/video/cx88/cx88-tvaudio.c
+++ b/drivers/media/video/cx88/cx88-tvaudio.c
@@ -906,6 +906,7 @@ int cx88_audio_thread(void *data)
906 u32 mode = 0; 906 u32 mode = 0;
907 907
908 dprintk("cx88: tvaudio thread started\n"); 908 dprintk("cx88: tvaudio thread started\n");
909 set_freezable();
909 for (;;) { 910 for (;;) {
910 msleep_interruptible(1000); 911 msleep_interruptible(1000);
911 if (kthread_should_stop()) 912 if (kthread_should_stop())
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c
index e1821eb82fb5..d5ee2629121e 100644
--- a/drivers/media/video/msp3400-kthreads.c
+++ b/drivers/media/video/msp3400-kthreads.c
@@ -23,6 +23,7 @@
23#include <linux/module.h> 23#include <linux/module.h>
24#include <linux/slab.h> 24#include <linux/slab.h>
25#include <linux/i2c.h> 25#include <linux/i2c.h>
26#include <linux/freezer.h>
26#include <linux/videodev.h> 27#include <linux/videodev.h>
27#include <linux/videodev2.h> 28#include <linux/videodev2.h>
28#include <media/v4l2-common.h> 29#include <media/v4l2-common.h>
@@ -468,6 +469,7 @@ int msp3400c_thread(void *data)
468 469
469 470
470 v4l_dbg(1, msp_debug, client, "msp3400 daemon started\n"); 471 v4l_dbg(1, msp_debug, client, "msp3400 daemon started\n");
472 set_freezable();
471 for (;;) { 473 for (;;) {
472 v4l_dbg(2, msp_debug, client, "msp3400 thread: sleep\n"); 474 v4l_dbg(2, msp_debug, client, "msp3400 thread: sleep\n");
473 msp_sleep(state, -1); 475 msp_sleep(state, -1);
@@ -646,7 +648,7 @@ int msp3410d_thread(void *data)
646 int val, i, std, count; 648 int val, i, std, count;
647 649
648 v4l_dbg(1, msp_debug, client, "msp3410 daemon started\n"); 650 v4l_dbg(1, msp_debug, client, "msp3410 daemon started\n");
649 651 set_freezable();
650 for (;;) { 652 for (;;) {
651 v4l_dbg(2, msp_debug, client, "msp3410 thread: sleep\n"); 653 v4l_dbg(2, msp_debug, client, "msp3410 thread: sleep\n");
652 msp_sleep(state,-1); 654 msp_sleep(state,-1);
@@ -940,7 +942,7 @@ int msp34xxg_thread(void *data)
940 int val, i; 942 int val, i;
941 943
942 v4l_dbg(1, msp_debug, client, "msp34xxg daemon started\n"); 944 v4l_dbg(1, msp_debug, client, "msp34xxg daemon started\n");
943 945 set_freezable();
944 for (;;) { 946 for (;;) {
945 v4l_dbg(2, msp_debug, client, "msp34xxg thread: sleep\n"); 947 v4l_dbg(2, msp_debug, client, "msp34xxg thread: sleep\n");
946 msp_sleep(state, -1); 948 msp_sleep(state, -1);
diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
index c9bf9dbc2ea3..9da338dc4f3b 100644
--- a/drivers/media/video/tvaudio.c
+++ b/drivers/media/video/tvaudio.c
@@ -271,7 +271,7 @@ static int chip_thread(void *data)
271 struct CHIPDESC *desc = chiplist + chip->type; 271 struct CHIPDESC *desc = chiplist + chip->type;
272 272
273 v4l_dbg(1, debug, &chip->c, "%s: thread started\n", chip->c.name); 273 v4l_dbg(1, debug, &chip->c, "%s: thread started\n", chip->c.name);
274 274 set_freezable();
275 for (;;) { 275 for (;;) {
276 set_current_state(TASK_INTERRUPTIBLE); 276 set_current_state(TASK_INTERRUPTIBLE);
277 if (!kthread_should_stop()) 277 if (!kthread_should_stop())
diff --git a/drivers/media/video/video-buf-dvb.c b/drivers/media/video/video-buf-dvb.c
index fcc5467e7636..e617925ba31e 100644
--- a/drivers/media/video/video-buf-dvb.c
+++ b/drivers/media/video/video-buf-dvb.c
@@ -47,6 +47,7 @@ static int videobuf_dvb_thread(void *data)
47 int err; 47 int err;
48 48
49 dprintk("dvb thread started\n"); 49 dprintk("dvb thread started\n");
50 set_freezable();
50 videobuf_read_start(&dvb->dvbq); 51 videobuf_read_start(&dvb->dvbq);
51 52
52 for (;;) { 53 for (;;) {
diff --git a/drivers/media/video/vivi.c b/drivers/media/video/vivi.c
index f7e1d1910374..3ef4d0159c33 100644
--- a/drivers/media/video/vivi.c
+++ b/drivers/media/video/vivi.c
@@ -573,6 +573,7 @@ static int vivi_thread(void *data)
573 dprintk(1,"thread started\n"); 573 dprintk(1,"thread started\n");
574 574
575 mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT); 575 mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT);
576 set_freezable();
576 577
577 for (;;) { 578 for (;;) {
578 vivi_sleep(dma_q); 579 vivi_sleep(dma_q);