diff -r 600876f4508f linux/drivers/media/dvb/dvb-core/dvb_ca_en50221.c --- a/linux/drivers/media/dvb/dvb-core/dvb_ca_en50221.c Thu Aug 09 07:41:16 2007 +0200 +++ b/linux/drivers/media/dvb/dvb-core/dvb_ca_en50221.c Sun Aug 12 14:39:07 2007 +0200 @@ -38,8 +38,15 @@ #include #include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) +#include +#else +#include +#endif + #include "dvb_ca_en50221.h" #include "dvb_ringbuffer.h" +#include "compat.h" static int dvb_ca_en50221_debug; @@ -1002,6 +1009,8 @@ static int dvb_ca_en50221_thread(void *d /* choose the correct initial delay */ dvb_ca_en50221_thread_update_delay(ca); + set_freezable(); + /* main loop */ while (!ca->exit) { /* sleep for a bit */ @@ -1009,6 +1018,8 @@ static int dvb_ca_en50221_thread(void *d flags = wait_event_interruptible_timeout(ca->thread_queue, dvb_ca_en50221_thread_should_wakeup(ca), ca->delay); + if (try_to_freeze()) + continue; if ((flags == -ERESTARTSYS) || ca->exit) { /* got signal or quitting */ break;