1697static int dvb_frontend_open(struct inode *inode, struct file *file)
1698{
1699 struct dvb_device *dvbdev = file->private_data;
1700 struct dvb_frontend *fe = dvbdev->priv;
1701 struct dvb_frontend_private *fepriv = fe->frontend_priv;
1702 struct dvb_adapter *adapter = fe->dvb;
1703 int ret;
1704
1705 dprintk ("%s\n", __func__);
1706
1707 if (adapter->mfe_shared) {
1708 mutex_lock (&adapter->mfe_lock);
1709
1710 if (adapter->mfe_dvbdev == NULL)
1711 adapter->mfe_dvbdev = dvbdev;
1712
1713 else if (adapter->mfe_dvbdev != dvbdev) {
1714 struct dvb_device
1715 *mfedev = adapter->mfe_dvbdev;
1716 struct dvb_frontend
1717 *mfe = mfedev->priv;
1718 struct dvb_frontend_private
1719 *mfepriv = mfe->frontend_priv;
1720 int mferetry = (dvb_mfe_wait_time << 1);
1721
1722 mutex_unlock (&adapter->mfe_lock);
1723 while (mferetry-- && (mfedev->users != -1 ||
1724 mfepriv->thread != NULL)) {
1725 if(msleep_interruptible(500)) {
1726 if(signal_pending(current))
1727 return -EINTR;
1728 }
1729 }
1730
1731 mutex_lock (&adapter->mfe_lock);
1732 if(adapter->mfe_dvbdev != dvbdev) {
1733 mfedev = adapter->mfe_dvbdev;
1734 mfe = mfedev->priv;
1735 mfepriv = mfe->frontend_priv;
1736 if (mfedev->users != -1 ||
1737 mfepriv->thread != NULL) {