|
@@ -275,8 +275,20 @@ static void dvb_frontend_add_event(struct dvb_frontend *fe,
|
|
|
wake_up_interruptible (&events->wait_queue);
|
|
|
}
|
|
|
|
|
|
+static int dvb_frontend_test_event(struct dvb_frontend_private *fepriv,
|
|
|
+ struct dvb_fe_events *events)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ up(&fepriv->sem);
|
|
|
+ ret = events->eventw != events->eventr;
|
|
|
+ down(&fepriv->sem);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
static int dvb_frontend_get_event(struct dvb_frontend *fe,
|
|
|
- struct dvb_frontend_event *event, int flags)
|
|
|
+ struct dvb_frontend_event *event, int flags)
|
|
|
{
|
|
|
struct dvb_frontend_private *fepriv = fe->frontend_priv;
|
|
|
struct dvb_fe_events *events = &fepriv->events;
|
|
@@ -294,13 +306,8 @@ static int dvb_frontend_get_event(struct dvb_frontend *fe,
|
|
|
if (flags & O_NONBLOCK)
|
|
|
return -EWOULDBLOCK;
|
|
|
|
|
|
- up(&fepriv->sem);
|
|
|
-
|
|
|
- ret = wait_event_interruptible (events->wait_queue,
|
|
|
- events->eventw != events->eventr);
|
|
|
-
|
|
|
- if (down_interruptible (&fepriv->sem))
|
|
|
- return -ERESTARTSYS;
|
|
|
+ ret = wait_event_interruptible(events->wait_queue,
|
|
|
+ dvb_frontend_test_event(fepriv, events));
|
|
|
|
|
|
if (ret < 0)
|
|
|
return ret;
|