Hi, Bjørn Mork wrote: > Never call dvb_frontend_detach if we failed to attach a frontend. This fixes > the following oops: > > [ 8.172997] DVB: registering new adapter (TT-Budget S2-1600 PCI) > [ 8.209018] adapter has MAC addr = 00:d0:5c:cc:a7:29 > [ 8.328665] Intel ICH 0000:00:1f.5: PCI INT B -> GSI 17 (level, low) -> IRQ 17 > [ 8.328753] Intel ICH 0000:00:1f.5: setting latency timer to 64 > [ 8.562047] DVB: Unable to find symbol stv090x_attach() > [ 8.562117] BUG: unable to handle kernel NULL pointer dereference at 000000ac > [ 8.562239] IP: [<e08b04a3>] dvb_frontend_detach+0x4/0x67 [dvb_core] > > Ref http://bugs.debian.org/575207 > > Also clean up if we are unable to register the tuner and LNB drivers > > Signed-off-by: Bjørn Mork <bjorn@xxxxxxx> > Reported-by: Fladischer Michael <FladischerMichael@xxxxxxxx> > --- > This version should apply to to git://linuxtv.org/v4l-dvb.git master on > top of commit 30b8f0787e51a3ab0c447e0e3bf4aadc7caf9ffd. > > It is otherwise identical to the v2 patch for the upstream and stable > kernel repositories. > > > drivers/media/dvb/ttpci/budget.c | 56 ++++++++++++++++++++----------------- > 1 files changed, 30 insertions(+), 26 deletions(-) > > diff --git a/drivers/media/dvb/ttpci/budget.c b/drivers/media/dvb/ttpci/budget.c > index fccb6ad..918679e 100644 > --- a/drivers/media/dvb/ttpci/budget.c > +++ b/drivers/media/dvb/ttpci/budget.c > @@ -628,32 +628,36 @@ static void frontend_init(struct budget *budget) > &tt1600_stv6110x_config, > &budget->i2c_adap); > > - tt1600_stv090x_config.tuner_init = ctl->tuner_init; > - tt1600_stv090x_config.tuner_sleep = ctl->tuner_sleep; > - tt1600_stv090x_config.tuner_set_mode = ctl->tuner_set_mode; > - tt1600_stv090x_config.tuner_set_frequency = ctl->tuner_set_frequency; > - tt1600_stv090x_config.tuner_get_frequency = ctl->tuner_get_frequency; > - tt1600_stv090x_config.tuner_set_bandwidth = ctl->tuner_set_bandwidth; > - tt1600_stv090x_config.tuner_get_bandwidth = ctl->tuner_get_bandwidth; > - tt1600_stv090x_config.tuner_set_bbgain = ctl->tuner_set_bbgain; > - tt1600_stv090x_config.tuner_get_bbgain = ctl->tuner_get_bbgain; > - tt1600_stv090x_config.tuner_set_refclk = ctl->tuner_set_refclk; > - tt1600_stv090x_config.tuner_get_status = ctl->tuner_get_status; > - > - /* call the init function once to initialize > - tuner's clock output divider and demod's > - master clock */ > - if (budget->dvb_frontend->ops.init) > - budget->dvb_frontend->ops.init(budget->dvb_frontend); > - > - dvb_attach(isl6423_attach, > - budget->dvb_frontend, > - &budget->i2c_adap, > - &tt1600_isl6423_config); > - > - } else { > - dvb_frontend_detach(budget->dvb_frontend); > - budget->dvb_frontend = NULL; > + if (ctl) { > + tt1600_stv090x_config.tuner_init = ctl->tuner_init; > + tt1600_stv090x_config.tuner_sleep = ctl->tuner_sleep; > + tt1600_stv090x_config.tuner_set_mode = ctl->tuner_set_mode; > + tt1600_stv090x_config.tuner_set_frequency = ctl->tuner_set_frequency; > + tt1600_stv090x_config.tuner_get_frequency = ctl->tuner_get_frequency; > + tt1600_stv090x_config.tuner_set_bandwidth = ctl->tuner_set_bandwidth; > + tt1600_stv090x_config.tuner_get_bandwidth = ctl->tuner_get_bandwidth; > + tt1600_stv090x_config.tuner_set_bbgain = ctl->tuner_set_bbgain; > + tt1600_stv090x_config.tuner_get_bbgain = ctl->tuner_get_bbgain; > + tt1600_stv090x_config.tuner_set_refclk = ctl->tuner_set_refclk; > + tt1600_stv090x_config.tuner_get_status = ctl->tuner_get_status; > + > + /* call the init function once to initialize > + tuner's clock output divider and demod's > + master clock */ > + if (budget->dvb_frontend->ops.init) > + budget->dvb_frontend->ops.init(budget->dvb_frontend); > + > + if (dvb_attach(isl6423_attach, > + budget->dvb_frontend, > + &budget->i2c_adap, > + &tt1600_isl6423_config) == NULL) { > + printk("%s: No Intersil ISL6423 found!\n", __func__); > + goto error_out; > + } > + } else { > + printk("%s: No STV6110(A) Silicon Tuner found!\n", __func__); > + goto error_out; > + } > } > } > break; Looks fine. Acked-by: Oliver Endriss <o.endriss@xxxxxx> CU Oliver -- ---------------------------------------------------------------- VDR Remote Plugin 0.4.0: http://www.escape-edv.de/endriss/vdr/ 4 MByte Mod: http://www.escape-edv.de/endriss/dvb-mem-mod/ Full-TS Mod: http://www.escape-edv.de/endriss/dvb-full-ts-mod/ ---------------------------------------------------------------- -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html