--- x/drivers/media/dvb-core/dvb_frontend.c +++ y/drivers/media/dvb-core/dvb_frontend.c @@ -3072,12 +3072,15 @@ EXPORT_SYMBOL(dvb_register_frontend); int dvb_unregister_frontend(struct dvb_frontend *fe) { struct dvb_frontend_private *fepriv = fe->frontend_priv; + struct dvb_device *dvbdev; dev_dbg(fe->dvb->device, "%s:\n", __func__); mutex_lock(&frontend_mutex); dvb_frontend_stop(fe); - dvb_remove_device(fepriv->dvbdev); + dvbdev = fepriv->dvbdev; + fepriv->dvbdev = NULL; + dvb_unregister_device(dvbdev); /* fe is invalid now */ mutex_unlock(&frontend_mutex);