Skip to content

Commit

Permalink
V4L/DVB (7687): pvrusb2: Fix oops in pvrusb2-dvb
Browse files Browse the repository at this point in the history
The pvrusb2-dvb feed thread cannot be allowed to exit by itself
without first waiting for kthread_should_stop() to return true.
Otherwise the driver will have a dangling task_struct context, which
will cause a very nasty kernel oops.

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Mike Isely authored and Mauro Carvalho Chehab committed Apr 24, 2008
1 parent e2780fb commit ceb4340
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions drivers/media/video/pvrusb2/pvrusb2-dvb.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,8 @@ static void pvr2_dvb_fh_done(struct pvr2_dvb_fh *fh)
pvr2_channel_done(&fh->channel);
}

static int pvr2_dvb_feed_thread(void *data)
static int pvr2_dvb_feed_func(struct pvr2_dvb_adapter *adap)
{
struct pvr2_dvb_adapter *adap = data;
struct pvr2_dvb_fh fh;
int ret;
unsigned int count;
Expand Down Expand Up @@ -203,12 +202,18 @@ static int pvr2_dvb_feed_thread(void *data)

printk(KERN_DEBUG "dvb thread stopped\n");

return 0;
}

static int pvr2_dvb_feed_thread(void *data)
{
int stat = pvr2_dvb_feed_func(data);
/* from videobuf-dvb.c: */
while (!kthread_should_stop()) {
set_current_state(TASK_INTERRUPTIBLE);
schedule();
}
return 0;
return stat;
}

static int pvr2_dvb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
Expand Down

0 comments on commit ceb4340

Please sign in to comment.