IB/sa: Require SA registration
Require users to register with SA module, to prevent the sa_query module text from going away while an SA query callback is still running. Update all in-tree users for the new interface. Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
committed by
Roland Dreier
parent
2439a6e65f
commit
c1a0b23bf4
@ -336,6 +336,8 @@ static inline void ipoib_unregister_debugfs(void) { }
|
||||
extern int ipoib_sendq_size;
|
||||
extern int ipoib_recvq_size;
|
||||
|
||||
extern struct ib_sa_client ipoib_sa_client;
|
||||
|
||||
#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
|
||||
extern int ipoib_debug_level;
|
||||
|
||||
|
@ -82,6 +82,8 @@ static const u8 ipv4_bcast_addr[] = {
|
||||
|
||||
struct workqueue_struct *ipoib_workqueue;
|
||||
|
||||
struct ib_sa_client ipoib_sa_client;
|
||||
|
||||
static void ipoib_add_one(struct ib_device *device);
|
||||
static void ipoib_remove_one(struct ib_device *device);
|
||||
|
||||
@ -463,7 +465,7 @@ static int path_rec_start(struct net_device *dev,
|
||||
init_completion(&path->done);
|
||||
|
||||
path->query_id =
|
||||
ib_sa_path_rec_get(priv->ca, priv->port,
|
||||
ib_sa_path_rec_get(&ipoib_sa_client, priv->ca, priv->port,
|
||||
&path->pathrec,
|
||||
IB_SA_PATH_REC_DGID |
|
||||
IB_SA_PATH_REC_SGID |
|
||||
@ -1191,13 +1193,16 @@ static int __init ipoib_init_module(void)
|
||||
goto err_fs;
|
||||
}
|
||||
|
||||
ib_sa_register_client(&ipoib_sa_client);
|
||||
|
||||
ret = ib_register_client(&ipoib_client);
|
||||
if (ret)
|
||||
goto err_wq;
|
||||
goto err_sa;
|
||||
|
||||
return 0;
|
||||
|
||||
err_wq:
|
||||
err_sa:
|
||||
ib_sa_unregister_client(&ipoib_sa_client);
|
||||
destroy_workqueue(ipoib_workqueue);
|
||||
|
||||
err_fs:
|
||||
@ -1209,6 +1214,7 @@ err_fs:
|
||||
static void __exit ipoib_cleanup_module(void)
|
||||
{
|
||||
ib_unregister_client(&ipoib_client);
|
||||
ib_sa_unregister_client(&ipoib_sa_client);
|
||||
ipoib_unregister_debugfs();
|
||||
destroy_workqueue(ipoib_workqueue);
|
||||
}
|
||||
|
@ -361,7 +361,7 @@ static int ipoib_mcast_sendonly_join(struct ipoib_mcast *mcast)
|
||||
|
||||
init_completion(&mcast->done);
|
||||
|
||||
ret = ib_sa_mcmember_rec_set(priv->ca, priv->port, &rec,
|
||||
ret = ib_sa_mcmember_rec_set(&ipoib_sa_client, priv->ca, priv->port, &rec,
|
||||
IB_SA_MCMEMBER_REC_MGID |
|
||||
IB_SA_MCMEMBER_REC_PORT_GID |
|
||||
IB_SA_MCMEMBER_REC_PKEY |
|
||||
@ -485,9 +485,9 @@ static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast,
|
||||
|
||||
init_completion(&mcast->done);
|
||||
|
||||
ret = ib_sa_mcmember_rec_set(priv->ca, priv->port, &rec, comp_mask,
|
||||
mcast->backoff * 1000, GFP_ATOMIC,
|
||||
ipoib_mcast_join_complete,
|
||||
ret = ib_sa_mcmember_rec_set(&ipoib_sa_client, priv->ca, priv->port,
|
||||
&rec, comp_mask, mcast->backoff * 1000,
|
||||
GFP_ATOMIC, ipoib_mcast_join_complete,
|
||||
mcast, &mcast->query);
|
||||
|
||||
if (ret < 0) {
|
||||
@ -528,7 +528,7 @@ void ipoib_mcast_join_task(void *dev_ptr)
|
||||
priv->local_rate = attr.active_speed *
|
||||
ib_width_enum_to_int(attr.active_width);
|
||||
} else
|
||||
ipoib_warn(priv, "ib_query_port failed\n");
|
||||
ipoib_warn(priv, "ib_query_port failed\n");
|
||||
}
|
||||
|
||||
if (!priv->broadcast) {
|
||||
@ -681,7 +681,7 @@ static int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast)
|
||||
* Just make one shot at leaving and don't wait for a reply;
|
||||
* if we fail, too bad.
|
||||
*/
|
||||
ret = ib_sa_mcmember_rec_delete(priv->ca, priv->port, &rec,
|
||||
ret = ib_sa_mcmember_rec_delete(&ipoib_sa_client, priv->ca, priv->port, &rec,
|
||||
IB_SA_MCMEMBER_REC_MGID |
|
||||
IB_SA_MCMEMBER_REC_PORT_GID |
|
||||
IB_SA_MCMEMBER_REC_PKEY |
|
||||
|
@ -96,6 +96,8 @@ static struct ib_client srp_client = {
|
||||
.remove = srp_remove_one
|
||||
};
|
||||
|
||||
static struct ib_sa_client srp_sa_client;
|
||||
|
||||
static inline struct srp_target_port *host_to_target(struct Scsi_Host *host)
|
||||
{
|
||||
return (struct srp_target_port *) host->hostdata;
|
||||
@ -267,7 +269,8 @@ static int srp_lookup_path(struct srp_target_port *target)
|
||||
|
||||
init_completion(&target->done);
|
||||
|
||||
target->path_query_id = ib_sa_path_rec_get(target->srp_host->dev->dev,
|
||||
target->path_query_id = ib_sa_path_rec_get(&srp_sa_client,
|
||||
target->srp_host->dev->dev,
|
||||
target->srp_host->port,
|
||||
&target->path,
|
||||
IB_SA_PATH_REC_DGID |
|
||||
@ -1998,9 +2001,12 @@ static int __init srp_init_module(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ib_sa_register_client(&srp_sa_client);
|
||||
|
||||
ret = ib_register_client(&srp_client);
|
||||
if (ret) {
|
||||
printk(KERN_ERR PFX "couldn't register IB client\n");
|
||||
ib_sa_unregister_client(&srp_sa_client);
|
||||
class_unregister(&srp_class);
|
||||
return ret;
|
||||
}
|
||||
@ -2011,6 +2017,7 @@ static int __init srp_init_module(void)
|
||||
static void __exit srp_cleanup_module(void)
|
||||
{
|
||||
ib_unregister_client(&srp_client);
|
||||
ib_sa_unregister_client(&srp_sa_client);
|
||||
class_unregister(&srp_class);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user