[linux-dvb] [PATCH] dvb/cinergyT2: Fix cinergyt2_poll() to allow for non-blocking IO on the frontend device

Dyks, Axel (XL) xl at xlsigned.net
Sat May 13 03:55:02 CEST 2006


"cinergyt2_poll()" shouldn't return (POLLIN | POLLRDNORM | POLLPRI) when
there are no pending events. User space programs that do non-bocking IO
using "select()" and/or "poll()" would otherwise produce high system load.
See http://forum.videolan.org/viewtopic.php?t=20529 for details.

Signed-off-by: Axel Dyks <xl at xlsigned.net>  

--- linux-2.6.16.orig/drivers/media/dvb/cinergyT2/cinergyT2.c	2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16/drivers/media/dvb/cinergyT2/cinergyT2.c	2006-05-13 01:15:24.000000000 +0200
@@ -540,15 +540,18 @@
 {
 	struct dvb_device *dvbdev = file->private_data;
 	struct cinergyt2 *cinergyt2 = dvbdev->priv;
+	unsigned int mask = 0;
 
 	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
 		return -ERESTARTSYS;
 
 	poll_wait(file, &cinergyt2->poll_wq, wait);
 
+	if (cinergyt2->pending_fe_events != 0) mask |= (POLLIN | POLLRDNORM | POLLPRI);
+
 	up(&cinergyt2->sem);
 
-	return (POLLIN | POLLRDNORM | POLLPRI);
+	return mask;
 }
 
 



More information about the linux-dvb mailing list