flush_workqueue(ipoib_workqueue); 
if (flush) flush_workqueue(ipoib_workqueue); 
int ipoib_mcast_stop_thread(struct net_device *dev){	struct ipoib_dev_priv *priv = netdev_priv(dev);	struct ipoib_mcast *mcast;	ipoib_dbg_mcast(priv, "stopping multicast thread\n");	down(&mcast_mutex);	clear_bit(IPOIB_MCAST_RUN, &priv->flags);	cancel_delayed_work(&priv->mcast_task);	up(&mcast_mutex);	flush_workqueue(ipoib_workqueue);	if (priv->broadcast && priv->broadcast->query) {		ib_sa_cancel_query(priv->broadcast->query_id, priv->broadcast->query);		priv->broadcast->query = NULL;		ipoib_dbg_mcast(priv, "waiting for bcast\n");		wait_for_completion(&priv->broadcast->done);	}	list_for_each_entry(mcast, &priv->multicast_list, list) {		if (mcast->query) {			ib_sa_cancel_query(mcast->query_id, mcast->query);			mcast->query = NULL;			ipoib_dbg_mcast(priv, "waiting for MGID " IPOIB_GID_FMT "\n",					IPOIB_GID_ARG(mcast->mcmember.mgid));			wait_for_completion(&mcast->done);		}	}	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8d2cae0651502028bf64844508ab18528bbd65c2/ipoib_multicast.c/clean/drivers/infiniband/ulp/ipoib/ipoib_multicast.c