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)) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/