LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [RFC][PATCH 0/7] Freezer changes
@ 2007-02-23 10:01 Rafael J. Wysocki
  2007-02-23 10:02 ` [RFC][PATCH 1/7] Freezer: Rafael J. Wysocki
  2007-02-23 10:07 ` [RFC][PATCH 0/7] Freezer changes Rafael J. Wysocki
  0 siblings, 2 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2007-02-23 10:01 UTC (permalink / raw)
  To: LKML
  Cc: paulmck, ego, akpm, mingo, vatsa, dipankar, venkatesh.pallipadi,
	Pavel Machek, Aneesh Kumar

Hi,

The following series of patches implements the changes to the task freezer
that should close the remaining races in it and harden it before it's used for
the CPU hotplugging.

Not all of the patches are from me, but I've decided to make the series out
of all freezer-related patches that have been posted recently.  If I have
missed some of them, please let me know.

Most of the patches in this series have been already discussed, so they
should be fine, but of course additional comments are welcome.

Greetings,
Rafael

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [RFC][PATCH 1/7] Freezer:
  2007-02-23 10:01 [RFC][PATCH 0/7] Freezer changes Rafael J. Wysocki
@ 2007-02-23 10:02 ` Rafael J. Wysocki
  2007-02-23 10:07   ` Rafael J. Wysocki
  2007-02-23 10:07 ` [RFC][PATCH 0/7] Freezer changes Rafael J. Wysocki
  1 sibling, 1 reply; 4+ messages in thread
From: Rafael J. Wysocki @ 2007-02-23 10:02 UTC (permalink / raw)
  To: LKML
  Cc: paulmck, ego, akpm, mingo, vatsa, dipankar, venkatesh.pallipadi,
	Pavel Machek, Aneesh Kumar

 arch/i386/kernel/apm.c              |    2 ++
 drivers/block/loop.c                |    2 ++
 drivers/char/apm-emulation.c        |    3 +++
 drivers/ieee1394/ieee1394_core.c    |    3 +++
 drivers/md/md.c                     |    2 ++
 drivers/mmc/card/queue.c            |    3 +++
 drivers/mtd/mtd_blkdevs.c           |    3 +++
 drivers/scsi/libsas/sas_scsi_host.c |    3 +++
 drivers/scsi/scsi_error.c           |    3 +++
 drivers/usb/storage/usb.c           |    2 ++
 kernel/softirq.c                    |    2 ++
 kernel/softlockup.c                 |    2 ++
 kernel/workqueue.c                  |    3 +--
 13 files changed, 31 insertions(+), 2 deletions(-)

Index: linux-2.6.20-mm2/arch/i386/kernel/apm.c
===================================================================
--- linux-2.6.20-mm2.orig/arch/i386/kernel/apm.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/arch/i386/kernel/apm.c	2007-02-23 00:34:25.000000000 +0100
@@ -227,6 +227,7 @@
 #include <linux/dmi.h>
 #include <linux/suspend.h>
 #include <linux/kthread.h>
+#include <linux/freezer.h>
 
 #include <asm/system.h>
 #include <asm/uaccess.h>
@@ -1402,6 +1403,7 @@ static void apm_mainloop(void)
 	add_wait_queue(&apm_waitqueue, &wait);
 	set_current_state(TASK_INTERRUPTIBLE);
 	for (;;) {
+		try_to_freeze();
 		schedule_timeout(APM_CHECK_TIMEOUT);
 		if (kthread_should_stop())
 			break;
Index: linux-2.6.20-mm2/drivers/md/md.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/md/md.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/md/md.c	2007-02-23 00:34:25.000000000 +0100
@@ -4513,6 +4513,8 @@ static int md_thread(void * arg)
 			 || kthread_should_stop(),
 			 thread->timeout);
 
+		try_to_freeze();
+
 		clear_bit(THREAD_WAKEUP, &thread->flags);
 
 		thread->run(thread->mddev);
Index: linux-2.6.20-mm2/drivers/mmc/card/queue.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/mmc/card/queue.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/mmc/card/queue.c	2007-02-23 00:34:25.000000000 +0100
@@ -12,6 +12,7 @@
 #include <linux/module.h>
 #include <linux/blkdev.h>
 #include <linux/kthread.h>
+#include <linux/freezer.h>
 
 #include <linux/mmc/card.h>
 #include <linux/mmc/host.h>
@@ -71,6 +72,8 @@ static int mmc_queue_thread(void *d)
 	do {
 		struct request *req = NULL;
 
+		try_to_freeze();
+
 		spin_lock_irq(q->queue_lock);
 		set_current_state(TASK_INTERRUPTIBLE);
 		if (!blk_queue_plugged(q))
Index: linux-2.6.20-mm2/drivers/mtd/mtd_blkdevs.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/mtd/mtd_blkdevs.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/mtd/mtd_blkdevs.c	2007-02-23 00:34:25.000000000 +0100
@@ -20,6 +20,7 @@
 #include <linux/hdreg.h>
 #include <linux/init.h>
 #include <linux/mutex.h>
+#include <linux/freezer.h>
 #include <asm/uaccess.h>
 
 static LIST_HEAD(blktrans_majors);
@@ -113,6 +114,8 @@ static int mtd_blktrans_thread(void *arg
 			schedule();
 			remove_wait_queue(&tr->blkcore_priv->thread_wq, &wait);
 
+			try_to_freeze();
+
 			spin_lock_irq(rq->queue_lock);
 
 			continue;
Index: linux-2.6.20-mm2/drivers/usb/storage/usb.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/usb/storage/usb.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/usb/storage/usb.c	2007-02-23 00:34:25.000000000 +0100
@@ -304,6 +304,8 @@ static int usb_stor_control_thread(void 
 	current->flags |= PF_NOFREEZE;
 
 	for(;;) {
+		try_to_freeze();
+
 		US_DEBUGP("*** thread sleeping.\n");
 		if(down_interruptible(&us->sema))
 			break;
Index: linux-2.6.20-mm2/drivers/ieee1394/ieee1394_core.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/ieee1394/ieee1394_core.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/ieee1394/ieee1394_core.c	2007-02-23 00:34:25.000000000 +0100
@@ -35,6 +35,7 @@
 #include <linux/kthread.h>
 #include <linux/preempt.h>
 #include <linux/time.h>
+#include <linux/freezer.h>
 
 #include <asm/system.h>
 #include <asm/byteorder.h>
@@ -1081,6 +1082,8 @@ static int hpsbpkt_thread(void *__hi)
 			complete_routine(complete_data);
 		}
 
+		try_to_freeze();
+
 		set_current_state(TASK_INTERRUPTIBLE);
 		if (!skb_peek(&hpsbpkt_queue))
 			schedule();
Index: linux-2.6.20-mm2/drivers/char/apm-emulation.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/char/apm-emulation.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/char/apm-emulation.c	2007-02-23 00:34:25.000000000 +0100
@@ -27,6 +27,7 @@
 #include <linux/completion.h>
 #include <linux/kthread.h>
 #include <linux/delay.h>
+#include <linux/freezer.h>
 
 #include <asm/system.h>
 
@@ -539,6 +540,8 @@ static int kapmd(void *arg)
 		apm_event_t event;
 		int ret;
 
+		try_to_freeze();
+
 		wait_event_interruptible(kapmd_wait,
 				!queue_empty(&kapmd_queue) || kthread_should_stop());
 
Index: linux-2.6.20-mm2/drivers/block/loop.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/block/loop.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/block/loop.c	2007-02-23 00:34:25.000000000 +0100
@@ -74,6 +74,7 @@
 #include <linux/highmem.h>
 #include <linux/gfp.h>
 #include <linux/kthread.h>
+#include <linux/freezer.h>
 
 #include <asm/uaccess.h>
 
@@ -580,6 +581,7 @@ static int loop_thread(void *data)
 	set_user_nice(current, -20);
 
 	while (!kthread_should_stop() || lo->lo_bio) {
+		try_to_freeze();
 
 		wait_event_interruptible(lo->lo_event,
 				lo->lo_bio || kthread_should_stop());
Index: linux-2.6.20-mm2/drivers/scsi/libsas/sas_scsi_host.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/scsi/libsas/sas_scsi_host.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/scsi/libsas/sas_scsi_host.c	2007-02-23 00:34:25.000000000 +0100
@@ -39,6 +39,7 @@
 #include <linux/err.h>
 #include <linux/blkdev.h>
 #include <linux/scatterlist.h>
+#include <linux/freezer.h>
 
 /* ---------- SCSI Host glue ---------- */
 
@@ -875,6 +876,8 @@ static int sas_queue_thread(void *_sas_h
 	complete(&queue_th_comp);
 
 	while (1) {
+		try_to_freeze();
+
 		down_interruptible(&core->queue_thread_sema);
 		sas_queue(sas_ha);
 		if (core->queue_thread_kill)
Index: linux-2.6.20-mm2/drivers/scsi/scsi_error.c
===================================================================
--- linux-2.6.20-mm2.orig/drivers/scsi/scsi_error.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/drivers/scsi/scsi_error.c	2007-02-23 00:34:25.000000000 +0100
@@ -24,6 +24,7 @@
 #include <linux/interrupt.h>
 #include <linux/blkdev.h>
 #include <linux/delay.h>
+#include <linux/freezer.h>
 
 #include <scsi/scsi.h>
 #include <scsi/scsi_cmnd.h>
@@ -1536,6 +1537,8 @@ int scsi_error_handler(void *data)
 	 */
 	set_current_state(TASK_INTERRUPTIBLE);
 	while (!kthread_should_stop()) {
+		try_to_freeze();
+
 		if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
 		    shost->host_failed != shost->host_busy) {
 			SCSI_LOG_ERROR_RECOVERY(1,
Index: linux-2.6.20-mm2/kernel/softlockup.c
===================================================================
--- linux-2.6.20-mm2.orig/kernel/softlockup.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/kernel/softlockup.c	2007-02-23 00:34:25.000000000 +0100
@@ -13,6 +13,7 @@
 #include <linux/kthread.h>
 #include <linux/notifier.h>
 #include <linux/module.h>
+#include <linux/freezer.h>
 
 static DEFINE_SPINLOCK(print_lock);
 
@@ -93,6 +94,7 @@ static int watchdog(void * __bind_cpu)
 	 * debug-printout triggers in softlockup_tick().
 	 */
 	while (!kthread_should_stop()) {
+		try_to_freeze();
 		set_current_state(TASK_INTERRUPTIBLE);
 		touch_softlockup_watchdog();
 		schedule();
Index: linux-2.6.20-mm2/kernel/softirq.c
===================================================================
--- linux-2.6.20-mm2.orig/kernel/softirq.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/kernel/softirq.c	2007-02-23 00:34:25.000000000 +0100
@@ -18,6 +18,7 @@
 #include <linux/rcupdate.h>
 #include <linux/smp.h>
 #include <linux/tick.h>
+#include <linux/freezer.h>
 
 #include <asm/irq.h>
 /*
@@ -494,6 +495,7 @@ static int ksoftirqd(void * __bind_cpu)
 	set_current_state(TASK_INTERRUPTIBLE);
 
 	while (!kthread_should_stop()) {
+		try_to_freeze();
 		preempt_disable();
 		if (!local_softirq_pending()) {
 			preempt_enable_no_resched();
Index: linux-2.6.20-mm2/kernel/workqueue.c
===================================================================
--- linux-2.6.20-mm2.orig/kernel/workqueue.c	2007-02-22 23:48:52.000000000 +0100
+++ linux-2.6.20-mm2/kernel/workqueue.c	2007-02-23 00:34:25.000000000 +0100
@@ -316,8 +316,7 @@ static int worker_thread(void *__cwq)
 	do_sigaction(SIGCHLD, &sa, (struct k_sigaction *)0);
 
 	for (;;) {
-		if (cwq->wq->freezeable)
-			try_to_freeze();
+		try_to_freeze();
 
 		prepare_to_wait(&cwq->more_work, &wait, TASK_INTERRUPTIBLE);
 		if (!cwq->should_stop && list_empty(&cwq->worklist))

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC][PATCH 0/7] Freezer changes
  2007-02-23 10:01 [RFC][PATCH 0/7] Freezer changes Rafael J. Wysocki
  2007-02-23 10:02 ` [RFC][PATCH 1/7] Freezer: Rafael J. Wysocki
@ 2007-02-23 10:07 ` Rafael J. Wysocki
  1 sibling, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2007-02-23 10:07 UTC (permalink / raw)
  To: LKML
  Cc: paulmck, ego, akpm, mingo, vatsa, dipankar, venkatesh.pallipadi,
	Pavel Machek, Aneesh Kumar

Sorry, this has been sent by mistake, please ignore.

On Friday, 23 February 2007 11:01, Rafael J. Wysocki wrote:
> Hi,
> 
> The following series of patches implements the changes to the task freezer
> that should close the remaining races in it and harden it before it's used for
> the CPU hotplugging.
> 
> Not all of the patches are from me, but I've decided to make the series out
> of all freezer-related patches that have been posted recently.  If I have
> missed some of them, please let me know.
> 
> Most of the patches in this series have been already discussed, so they
> should be fine, but of course additional comments are welcome.
> 
> Greetings,
> Rafael
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC][PATCH 1/7] Freezer:
  2007-02-23 10:02 ` [RFC][PATCH 1/7] Freezer: Rafael J. Wysocki
@ 2007-02-23 10:07   ` Rafael J. Wysocki
  0 siblings, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2007-02-23 10:07 UTC (permalink / raw)
  To: LKML
  Cc: paulmck, ego, akpm, mingo, vatsa, dipankar, venkatesh.pallipadi,
	Pavel Machek, Aneesh Kumar

Sorry, this has been sent by mistake, please ignore.

On Friday, 23 February 2007 11:02, Rafael J. Wysocki wrote:
>  arch/i386/kernel/apm.c              |    2 ++
>  drivers/block/loop.c                |    2 ++
>  drivers/char/apm-emulation.c        |    3 +++
>  drivers/ieee1394/ieee1394_core.c    |    3 +++
>  drivers/md/md.c                     |    2 ++
>  drivers/mmc/card/queue.c            |    3 +++
>  drivers/mtd/mtd_blkdevs.c           |    3 +++
>  drivers/scsi/libsas/sas_scsi_host.c |    3 +++
>  drivers/scsi/scsi_error.c           |    3 +++
>  drivers/usb/storage/usb.c           |    2 ++
>  kernel/softirq.c                    |    2 ++
>  kernel/softlockup.c                 |    2 ++
>  kernel/workqueue.c                  |    3 +--
>  13 files changed, 31 insertions(+), 2 deletions(-)
> 
> Index: linux-2.6.20-mm2/arch/i386/kernel/apm.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/arch/i386/kernel/apm.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/arch/i386/kernel/apm.c	2007-02-23 00:34:25.000000000 +0100
> @@ -227,6 +227,7 @@
>  #include <linux/dmi.h>
>  #include <linux/suspend.h>
>  #include <linux/kthread.h>
> +#include <linux/freezer.h>
>  
>  #include <asm/system.h>
>  #include <asm/uaccess.h>
> @@ -1402,6 +1403,7 @@ static void apm_mainloop(void)
>  	add_wait_queue(&apm_waitqueue, &wait);
>  	set_current_state(TASK_INTERRUPTIBLE);
>  	for (;;) {
> +		try_to_freeze();
>  		schedule_timeout(APM_CHECK_TIMEOUT);
>  		if (kthread_should_stop())
>  			break;
> Index: linux-2.6.20-mm2/drivers/md/md.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/md/md.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/md/md.c	2007-02-23 00:34:25.000000000 +0100
> @@ -4513,6 +4513,8 @@ static int md_thread(void * arg)
>  			 || kthread_should_stop(),
>  			 thread->timeout);
>  
> +		try_to_freeze();
> +
>  		clear_bit(THREAD_WAKEUP, &thread->flags);
>  
>  		thread->run(thread->mddev);
> Index: linux-2.6.20-mm2/drivers/mmc/card/queue.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/mmc/card/queue.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/mmc/card/queue.c	2007-02-23 00:34:25.000000000 +0100
> @@ -12,6 +12,7 @@
>  #include <linux/module.h>
>  #include <linux/blkdev.h>
>  #include <linux/kthread.h>
> +#include <linux/freezer.h>
>  
>  #include <linux/mmc/card.h>
>  #include <linux/mmc/host.h>
> @@ -71,6 +72,8 @@ static int mmc_queue_thread(void *d)
>  	do {
>  		struct request *req = NULL;
>  
> +		try_to_freeze();
> +
>  		spin_lock_irq(q->queue_lock);
>  		set_current_state(TASK_INTERRUPTIBLE);
>  		if (!blk_queue_plugged(q))
> Index: linux-2.6.20-mm2/drivers/mtd/mtd_blkdevs.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/mtd/mtd_blkdevs.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/mtd/mtd_blkdevs.c	2007-02-23 00:34:25.000000000 +0100
> @@ -20,6 +20,7 @@
>  #include <linux/hdreg.h>
>  #include <linux/init.h>
>  #include <linux/mutex.h>
> +#include <linux/freezer.h>
>  #include <asm/uaccess.h>
>  
>  static LIST_HEAD(blktrans_majors);
> @@ -113,6 +114,8 @@ static int mtd_blktrans_thread(void *arg
>  			schedule();
>  			remove_wait_queue(&tr->blkcore_priv->thread_wq, &wait);
>  
> +			try_to_freeze();
> +
>  			spin_lock_irq(rq->queue_lock);
>  
>  			continue;
> Index: linux-2.6.20-mm2/drivers/usb/storage/usb.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/usb/storage/usb.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/usb/storage/usb.c	2007-02-23 00:34:25.000000000 +0100
> @@ -304,6 +304,8 @@ static int usb_stor_control_thread(void 
>  	current->flags |= PF_NOFREEZE;
>  
>  	for(;;) {
> +		try_to_freeze();
> +
>  		US_DEBUGP("*** thread sleeping.\n");
>  		if(down_interruptible(&us->sema))
>  			break;
> Index: linux-2.6.20-mm2/drivers/ieee1394/ieee1394_core.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/ieee1394/ieee1394_core.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/ieee1394/ieee1394_core.c	2007-02-23 00:34:25.000000000 +0100
> @@ -35,6 +35,7 @@
>  #include <linux/kthread.h>
>  #include <linux/preempt.h>
>  #include <linux/time.h>
> +#include <linux/freezer.h>
>  
>  #include <asm/system.h>
>  #include <asm/byteorder.h>
> @@ -1081,6 +1082,8 @@ static int hpsbpkt_thread(void *__hi)
>  			complete_routine(complete_data);
>  		}
>  
> +		try_to_freeze();
> +
>  		set_current_state(TASK_INTERRUPTIBLE);
>  		if (!skb_peek(&hpsbpkt_queue))
>  			schedule();
> Index: linux-2.6.20-mm2/drivers/char/apm-emulation.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/char/apm-emulation.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/char/apm-emulation.c	2007-02-23 00:34:25.000000000 +0100
> @@ -27,6 +27,7 @@
>  #include <linux/completion.h>
>  #include <linux/kthread.h>
>  #include <linux/delay.h>
> +#include <linux/freezer.h>
>  
>  #include <asm/system.h>
>  
> @@ -539,6 +540,8 @@ static int kapmd(void *arg)
>  		apm_event_t event;
>  		int ret;
>  
> +		try_to_freeze();
> +
>  		wait_event_interruptible(kapmd_wait,
>  				!queue_empty(&kapmd_queue) || kthread_should_stop());
>  
> Index: linux-2.6.20-mm2/drivers/block/loop.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/block/loop.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/block/loop.c	2007-02-23 00:34:25.000000000 +0100
> @@ -74,6 +74,7 @@
>  #include <linux/highmem.h>
>  #include <linux/gfp.h>
>  #include <linux/kthread.h>
> +#include <linux/freezer.h>
>  
>  #include <asm/uaccess.h>
>  
> @@ -580,6 +581,7 @@ static int loop_thread(void *data)
>  	set_user_nice(current, -20);
>  
>  	while (!kthread_should_stop() || lo->lo_bio) {
> +		try_to_freeze();
>  
>  		wait_event_interruptible(lo->lo_event,
>  				lo->lo_bio || kthread_should_stop());
> Index: linux-2.6.20-mm2/drivers/scsi/libsas/sas_scsi_host.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/scsi/libsas/sas_scsi_host.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/scsi/libsas/sas_scsi_host.c	2007-02-23 00:34:25.000000000 +0100
> @@ -39,6 +39,7 @@
>  #include <linux/err.h>
>  #include <linux/blkdev.h>
>  #include <linux/scatterlist.h>
> +#include <linux/freezer.h>
>  
>  /* ---------- SCSI Host glue ---------- */
>  
> @@ -875,6 +876,8 @@ static int sas_queue_thread(void *_sas_h
>  	complete(&queue_th_comp);
>  
>  	while (1) {
> +		try_to_freeze();
> +
>  		down_interruptible(&core->queue_thread_sema);
>  		sas_queue(sas_ha);
>  		if (core->queue_thread_kill)
> Index: linux-2.6.20-mm2/drivers/scsi/scsi_error.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/drivers/scsi/scsi_error.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/drivers/scsi/scsi_error.c	2007-02-23 00:34:25.000000000 +0100
> @@ -24,6 +24,7 @@
>  #include <linux/interrupt.h>
>  #include <linux/blkdev.h>
>  #include <linux/delay.h>
> +#include <linux/freezer.h>
>  
>  #include <scsi/scsi.h>
>  #include <scsi/scsi_cmnd.h>
> @@ -1536,6 +1537,8 @@ int scsi_error_handler(void *data)
>  	 */
>  	set_current_state(TASK_INTERRUPTIBLE);
>  	while (!kthread_should_stop()) {
> +		try_to_freeze();
> +
>  		if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
>  		    shost->host_failed != shost->host_busy) {
>  			SCSI_LOG_ERROR_RECOVERY(1,
> Index: linux-2.6.20-mm2/kernel/softlockup.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/kernel/softlockup.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/kernel/softlockup.c	2007-02-23 00:34:25.000000000 +0100
> @@ -13,6 +13,7 @@
>  #include <linux/kthread.h>
>  #include <linux/notifier.h>
>  #include <linux/module.h>
> +#include <linux/freezer.h>
>  
>  static DEFINE_SPINLOCK(print_lock);
>  
> @@ -93,6 +94,7 @@ static int watchdog(void * __bind_cpu)
>  	 * debug-printout triggers in softlockup_tick().
>  	 */
>  	while (!kthread_should_stop()) {
> +		try_to_freeze();
>  		set_current_state(TASK_INTERRUPTIBLE);
>  		touch_softlockup_watchdog();
>  		schedule();
> Index: linux-2.6.20-mm2/kernel/softirq.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/kernel/softirq.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/kernel/softirq.c	2007-02-23 00:34:25.000000000 +0100
> @@ -18,6 +18,7 @@
>  #include <linux/rcupdate.h>
>  #include <linux/smp.h>
>  #include <linux/tick.h>
> +#include <linux/freezer.h>
>  
>  #include <asm/irq.h>
>  /*
> @@ -494,6 +495,7 @@ static int ksoftirqd(void * __bind_cpu)
>  	set_current_state(TASK_INTERRUPTIBLE);
>  
>  	while (!kthread_should_stop()) {
> +		try_to_freeze();
>  		preempt_disable();
>  		if (!local_softirq_pending()) {
>  			preempt_enable_no_resched();
> Index: linux-2.6.20-mm2/kernel/workqueue.c
> ===================================================================
> --- linux-2.6.20-mm2.orig/kernel/workqueue.c	2007-02-22 23:48:52.000000000 +0100
> +++ linux-2.6.20-mm2/kernel/workqueue.c	2007-02-23 00:34:25.000000000 +0100
> @@ -316,8 +316,7 @@ static int worker_thread(void *__cwq)
>  	do_sigaction(SIGCHLD, &sa, (struct k_sigaction *)0);
>  
>  	for (;;) {
> -		if (cwq->wq->freezeable)
> -			try_to_freeze();
> +		try_to_freeze();
>  
>  		prepare_to_wait(&cwq->more_work, &wait, TASK_INTERRUPTIBLE);
>  		if (!cwq->should_stop && list_empty(&cwq->worklist))
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-02-23 10:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-23 10:01 [RFC][PATCH 0/7] Freezer changes Rafael J. Wysocki
2007-02-23 10:02 ` [RFC][PATCH 1/7] Freezer: Rafael J. Wysocki
2007-02-23 10:07   ` Rafael J. Wysocki
2007-02-23 10:07 ` [RFC][PATCH 0/7] Freezer changes Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).