Merge branch 'k.o/for-4.3-v1' into k.o/for-4.4
Pick up the late fixes from the 4.3 cycle so we have them in our next branch.
This commit is contained in:
Коммит
fc81a06965
|
@ -508,12 +508,12 @@ void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port,
|
||||||
memset(&gid_attr, 0, sizeof(gid_attr));
|
memset(&gid_attr, 0, sizeof(gid_attr));
|
||||||
gid_attr.ndev = ndev;
|
gid_attr.ndev = ndev;
|
||||||
|
|
||||||
|
mutex_lock(&table->lock);
|
||||||
ix = find_gid(table, NULL, NULL, true, GID_ATTR_FIND_MASK_DEFAULT);
|
ix = find_gid(table, NULL, NULL, true, GID_ATTR_FIND_MASK_DEFAULT);
|
||||||
|
|
||||||
/* Coudn't find default GID location */
|
/* Coudn't find default GID location */
|
||||||
WARN_ON(ix < 0);
|
WARN_ON(ix < 0);
|
||||||
|
|
||||||
mutex_lock(&table->lock);
|
|
||||||
if (!__ib_cache_gid_get(ib_dev, port, ix,
|
if (!__ib_cache_gid_get(ib_dev, port, ix,
|
||||||
¤t_gid, ¤t_gid_attr) &&
|
¤t_gid, ¤t_gid_attr) &&
|
||||||
mode == IB_CACHE_GID_DEFAULT_MODE_SET &&
|
mode == IB_CACHE_GID_DEFAULT_MODE_SET &&
|
||||||
|
|
|
@ -835,6 +835,11 @@ retest:
|
||||||
case IB_CM_SIDR_REQ_RCVD:
|
case IB_CM_SIDR_REQ_RCVD:
|
||||||
spin_unlock_irq(&cm_id_priv->lock);
|
spin_unlock_irq(&cm_id_priv->lock);
|
||||||
cm_reject_sidr_req(cm_id_priv, IB_SIDR_REJECT);
|
cm_reject_sidr_req(cm_id_priv, IB_SIDR_REJECT);
|
||||||
|
spin_lock_irq(&cm.lock);
|
||||||
|
if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node))
|
||||||
|
rb_erase(&cm_id_priv->sidr_id_node,
|
||||||
|
&cm.remote_sidr_table);
|
||||||
|
spin_unlock_irq(&cm.lock);
|
||||||
break;
|
break;
|
||||||
case IB_CM_REQ_SENT:
|
case IB_CM_REQ_SENT:
|
||||||
case IB_CM_MRA_REQ_RCVD:
|
case IB_CM_MRA_REQ_RCVD:
|
||||||
|
@ -3172,7 +3177,10 @@ int ib_send_cm_sidr_rep(struct ib_cm_id *cm_id,
|
||||||
spin_unlock_irqrestore(&cm_id_priv->lock, flags);
|
spin_unlock_irqrestore(&cm_id_priv->lock, flags);
|
||||||
|
|
||||||
spin_lock_irqsave(&cm.lock, flags);
|
spin_lock_irqsave(&cm.lock, flags);
|
||||||
rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);
|
if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node)) {
|
||||||
|
rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);
|
||||||
|
RB_CLEAR_NODE(&cm_id_priv->sidr_id_node);
|
||||||
|
}
|
||||||
spin_unlock_irqrestore(&cm.lock, flags);
|
spin_unlock_irqrestore(&cm.lock, flags);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -1067,14 +1067,14 @@ static int cma_save_req_info(const struct ib_cm_event *ib_event,
|
||||||
sizeof(req->local_gid));
|
sizeof(req->local_gid));
|
||||||
req->has_gid = true;
|
req->has_gid = true;
|
||||||
req->service_id = req_param->primary_path->service_id;
|
req->service_id = req_param->primary_path->service_id;
|
||||||
req->pkey = req_param->bth_pkey;
|
req->pkey = be16_to_cpu(req_param->primary_path->pkey);
|
||||||
break;
|
break;
|
||||||
case IB_CM_SIDR_REQ_RECEIVED:
|
case IB_CM_SIDR_REQ_RECEIVED:
|
||||||
req->device = sidr_param->listen_id->device;
|
req->device = sidr_param->listen_id->device;
|
||||||
req->port = sidr_param->port;
|
req->port = sidr_param->port;
|
||||||
req->has_gid = false;
|
req->has_gid = false;
|
||||||
req->service_id = sidr_param->service_id;
|
req->service_id = sidr_param->service_id;
|
||||||
req->pkey = sidr_param->bth_pkey;
|
req->pkey = sidr_param->pkey;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1232,14 +1232,32 @@ static bool cma_match_private_data(struct rdma_id_private *id_priv,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool cma_protocol_roce_dev_port(struct ib_device *device, int port_num)
|
||||||
|
{
|
||||||
|
enum rdma_link_layer ll = rdma_port_get_link_layer(device, port_num);
|
||||||
|
enum rdma_transport_type transport =
|
||||||
|
rdma_node_get_transport(device->node_type);
|
||||||
|
|
||||||
|
return ll == IB_LINK_LAYER_ETHERNET && transport == RDMA_TRANSPORT_IB;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool cma_protocol_roce(const struct rdma_cm_id *id)
|
||||||
|
{
|
||||||
|
struct ib_device *device = id->device;
|
||||||
|
const int port_num = id->port_num ?: rdma_start_port(device);
|
||||||
|
|
||||||
|
return cma_protocol_roce_dev_port(device, port_num);
|
||||||
|
}
|
||||||
|
|
||||||
static bool cma_match_net_dev(const struct rdma_id_private *id_priv,
|
static bool cma_match_net_dev(const struct rdma_id_private *id_priv,
|
||||||
const struct net_device *net_dev)
|
const struct net_device *net_dev)
|
||||||
{
|
{
|
||||||
const struct rdma_addr *addr = &id_priv->id.route.addr;
|
const struct rdma_addr *addr = &id_priv->id.route.addr;
|
||||||
|
|
||||||
if (!net_dev)
|
if (!net_dev)
|
||||||
/* This request is an AF_IB request */
|
/* This request is an AF_IB request or a RoCE request */
|
||||||
return addr->src_addr.ss_family == AF_IB;
|
return addr->src_addr.ss_family == AF_IB ||
|
||||||
|
cma_protocol_roce(&id_priv->id);
|
||||||
|
|
||||||
return !addr->dev_addr.bound_dev_if ||
|
return !addr->dev_addr.bound_dev_if ||
|
||||||
(net_eq(dev_net(net_dev), &init_net) &&
|
(net_eq(dev_net(net_dev), &init_net) &&
|
||||||
|
@ -1294,6 +1312,10 @@ static struct rdma_id_private *cma_id_from_event(struct ib_cm_id *cm_id,
|
||||||
if (PTR_ERR(*net_dev) == -EAFNOSUPPORT) {
|
if (PTR_ERR(*net_dev) == -EAFNOSUPPORT) {
|
||||||
/* Assuming the protocol is AF_IB */
|
/* Assuming the protocol is AF_IB */
|
||||||
*net_dev = NULL;
|
*net_dev = NULL;
|
||||||
|
} else if (cma_protocol_roce_dev_port(req.device, req.port)) {
|
||||||
|
/* TODO find the net dev matching the request parameters
|
||||||
|
* through the RoCE GID table */
|
||||||
|
*net_dev = NULL;
|
||||||
} else {
|
} else {
|
||||||
return ERR_CAST(*net_dev);
|
return ERR_CAST(*net_dev);
|
||||||
}
|
}
|
||||||
|
@ -1302,7 +1324,7 @@ static struct rdma_id_private *cma_id_from_event(struct ib_cm_id *cm_id,
|
||||||
bind_list = cma_ps_find(rdma_ps_from_service_id(req.service_id),
|
bind_list = cma_ps_find(rdma_ps_from_service_id(req.service_id),
|
||||||
cma_port_from_service_id(req.service_id));
|
cma_port_from_service_id(req.service_id));
|
||||||
id_priv = cma_find_listener(bind_list, cm_id, ib_event, &req, *net_dev);
|
id_priv = cma_find_listener(bind_list, cm_id, ib_event, &req, *net_dev);
|
||||||
if (IS_ERR(id_priv)) {
|
if (IS_ERR(id_priv) && *net_dev) {
|
||||||
dev_put(*net_dev);
|
dev_put(*net_dev);
|
||||||
*net_dev = NULL;
|
*net_dev = NULL;
|
||||||
}
|
}
|
||||||
|
@ -1593,11 +1615,16 @@ static struct rdma_id_private *cma_new_conn_id(struct rdma_cm_id *listen_id,
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
} else {
|
} else {
|
||||||
/* An AF_IB connection */
|
if (!cma_protocol_roce(listen_id) &&
|
||||||
WARN_ON_ONCE(ss_family != AF_IB);
|
cma_any_addr(cma_src_addr(id_priv))) {
|
||||||
|
rt->addr.dev_addr.dev_type = ARPHRD_INFINIBAND;
|
||||||
cma_translate_ib((struct sockaddr_ib *)cma_src_addr(id_priv),
|
rdma_addr_set_sgid(&rt->addr.dev_addr, &rt->path_rec[0].sgid);
|
||||||
&rt->addr.dev_addr);
|
ib_addr_set_pkey(&rt->addr.dev_addr, be16_to_cpu(rt->path_rec[0].pkey));
|
||||||
|
} else if (!cma_any_addr(cma_src_addr(id_priv))) {
|
||||||
|
ret = cma_translate_addr(cma_src_addr(id_priv), &rt->addr.dev_addr);
|
||||||
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rdma_addr_set_dgid(&rt->addr.dev_addr, &rt->path_rec[0].dgid);
|
rdma_addr_set_dgid(&rt->addr.dev_addr, &rt->path_rec[0].dgid);
|
||||||
|
|
||||||
|
@ -1635,13 +1662,12 @@ static struct rdma_id_private *cma_new_udp_id(struct rdma_cm_id *listen_id,
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
} else {
|
} else {
|
||||||
/* An AF_IB connection */
|
if (!cma_any_addr(cma_src_addr(id_priv))) {
|
||||||
WARN_ON_ONCE(ss_family != AF_IB);
|
ret = cma_translate_addr(cma_src_addr(id_priv),
|
||||||
|
&id->route.addr.dev_addr);
|
||||||
if (!cma_any_addr(cma_src_addr(id_priv)))
|
if (ret)
|
||||||
cma_translate_ib((struct sockaddr_ib *)
|
goto err;
|
||||||
cma_src_addr(id_priv),
|
}
|
||||||
&id->route.addr.dev_addr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
id_priv->state = RDMA_CM_CONNECT;
|
id_priv->state = RDMA_CM_CONNECT;
|
||||||
|
|
|
@ -250,25 +250,44 @@ static void enum_netdev_ipv4_ips(struct ib_device *ib_dev,
|
||||||
u8 port, struct net_device *ndev)
|
u8 port, struct net_device *ndev)
|
||||||
{
|
{
|
||||||
struct in_device *in_dev;
|
struct in_device *in_dev;
|
||||||
|
struct sin_list {
|
||||||
|
struct list_head list;
|
||||||
|
struct sockaddr_in ip;
|
||||||
|
};
|
||||||
|
struct sin_list *sin_iter;
|
||||||
|
struct sin_list *sin_temp;
|
||||||
|
|
||||||
|
LIST_HEAD(sin_list);
|
||||||
if (ndev->reg_state >= NETREG_UNREGISTERING)
|
if (ndev->reg_state >= NETREG_UNREGISTERING)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
in_dev = in_dev_get(ndev);
|
rcu_read_lock();
|
||||||
if (!in_dev)
|
in_dev = __in_dev_get_rcu(ndev);
|
||||||
|
if (!in_dev) {
|
||||||
|
rcu_read_unlock();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for_ifa(in_dev) {
|
for_ifa(in_dev) {
|
||||||
struct sockaddr_in ip;
|
struct sin_list *entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
|
||||||
|
|
||||||
ip.sin_family = AF_INET;
|
if (!entry) {
|
||||||
ip.sin_addr.s_addr = ifa->ifa_address;
|
pr_warn("roce_gid_mgmt: couldn't allocate entry for IPv4 update\n");
|
||||||
update_gid_ip(GID_ADD, ib_dev, port, ndev,
|
continue;
|
||||||
(struct sockaddr *)&ip);
|
}
|
||||||
|
entry->ip.sin_family = AF_INET;
|
||||||
|
entry->ip.sin_addr.s_addr = ifa->ifa_address;
|
||||||
|
list_add_tail(&entry->list, &sin_list);
|
||||||
}
|
}
|
||||||
endfor_ifa(in_dev);
|
endfor_ifa(in_dev);
|
||||||
|
rcu_read_unlock();
|
||||||
|
|
||||||
in_dev_put(in_dev);
|
list_for_each_entry_safe(sin_iter, sin_temp, &sin_list, list) {
|
||||||
|
update_gid_ip(GID_ADD, ib_dev, port, ndev,
|
||||||
|
(struct sockaddr *)&sin_iter->ip);
|
||||||
|
list_del(&sin_iter->list);
|
||||||
|
kfree(sin_iter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void enum_netdev_ipv6_ips(struct ib_device *ib_dev,
|
static void enum_netdev_ipv6_ips(struct ib_device *ib_dev,
|
||||||
|
|
|
@ -1624,11 +1624,16 @@ static int ucma_open(struct inode *inode, struct file *filp)
|
||||||
if (!file)
|
if (!file)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
file->close_wq = create_singlethread_workqueue("ucma_close_id");
|
||||||
|
if (!file->close_wq) {
|
||||||
|
kfree(file);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
INIT_LIST_HEAD(&file->event_list);
|
INIT_LIST_HEAD(&file->event_list);
|
||||||
INIT_LIST_HEAD(&file->ctx_list);
|
INIT_LIST_HEAD(&file->ctx_list);
|
||||||
init_waitqueue_head(&file->poll_wait);
|
init_waitqueue_head(&file->poll_wait);
|
||||||
mutex_init(&file->mut);
|
mutex_init(&file->mut);
|
||||||
file->close_wq = create_singlethread_workqueue("ucma_close_id");
|
|
||||||
|
|
||||||
filp->private_data = file;
|
filp->private_data = file;
|
||||||
file->filp = filp;
|
file->filp = filp;
|
||||||
|
|
|
@ -245,7 +245,6 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
|
||||||
props->device_cap_flags |= IB_DEVICE_BAD_QKEY_CNTR;
|
props->device_cap_flags |= IB_DEVICE_BAD_QKEY_CNTR;
|
||||||
if (MLX5_CAP_GEN(mdev, apm))
|
if (MLX5_CAP_GEN(mdev, apm))
|
||||||
props->device_cap_flags |= IB_DEVICE_AUTO_PATH_MIG;
|
props->device_cap_flags |= IB_DEVICE_AUTO_PATH_MIG;
|
||||||
props->device_cap_flags |= IB_DEVICE_LOCAL_DMA_LKEY;
|
|
||||||
if (MLX5_CAP_GEN(mdev, xrc))
|
if (MLX5_CAP_GEN(mdev, xrc))
|
||||||
props->device_cap_flags |= IB_DEVICE_XRC;
|
props->device_cap_flags |= IB_DEVICE_XRC;
|
||||||
props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
|
props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
|
||||||
|
@ -795,53 +794,6 @@ static int mlx5_ib_mmap(struct ib_ucontext *ibcontext, struct vm_area_struct *vm
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int alloc_pa_mkey(struct mlx5_ib_dev *dev, u32 *key, u32 pdn)
|
|
||||||
{
|
|
||||||
struct mlx5_create_mkey_mbox_in *in;
|
|
||||||
struct mlx5_mkey_seg *seg;
|
|
||||||
struct mlx5_core_mr mr;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
in = kzalloc(sizeof(*in), GFP_KERNEL);
|
|
||||||
if (!in)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
seg = &in->seg;
|
|
||||||
seg->flags = MLX5_PERM_LOCAL_READ | MLX5_ACCESS_MODE_PA;
|
|
||||||
seg->flags_pd = cpu_to_be32(pdn | MLX5_MKEY_LEN64);
|
|
||||||
seg->qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
|
|
||||||
seg->start_addr = 0;
|
|
||||||
|
|
||||||
err = mlx5_core_create_mkey(dev->mdev, &mr, in, sizeof(*in),
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
if (err) {
|
|
||||||
mlx5_ib_warn(dev, "failed to create mkey, %d\n", err);
|
|
||||||
goto err_in;
|
|
||||||
}
|
|
||||||
|
|
||||||
kfree(in);
|
|
||||||
*key = mr.key;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err_in:
|
|
||||||
kfree(in);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void free_pa_mkey(struct mlx5_ib_dev *dev, u32 key)
|
|
||||||
{
|
|
||||||
struct mlx5_core_mr mr;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
memset(&mr, 0, sizeof(mr));
|
|
||||||
mr.key = key;
|
|
||||||
err = mlx5_core_destroy_mkey(dev->mdev, &mr);
|
|
||||||
if (err)
|
|
||||||
mlx5_ib_warn(dev, "failed to destroy mkey 0x%x\n", key);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct ib_pd *mlx5_ib_alloc_pd(struct ib_device *ibdev,
|
static struct ib_pd *mlx5_ib_alloc_pd(struct ib_device *ibdev,
|
||||||
struct ib_ucontext *context,
|
struct ib_ucontext *context,
|
||||||
struct ib_udata *udata)
|
struct ib_udata *udata)
|
||||||
|
@ -867,13 +819,6 @@ static struct ib_pd *mlx5_ib_alloc_pd(struct ib_device *ibdev,
|
||||||
kfree(pd);
|
kfree(pd);
|
||||||
return ERR_PTR(-EFAULT);
|
return ERR_PTR(-EFAULT);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
err = alloc_pa_mkey(to_mdev(ibdev), &pd->pa_lkey, pd->pdn);
|
|
||||||
if (err) {
|
|
||||||
mlx5_core_dealloc_pd(to_mdev(ibdev)->mdev, pd->pdn);
|
|
||||||
kfree(pd);
|
|
||||||
return ERR_PTR(err);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return &pd->ibpd;
|
return &pd->ibpd;
|
||||||
|
@ -884,9 +829,6 @@ static int mlx5_ib_dealloc_pd(struct ib_pd *pd)
|
||||||
struct mlx5_ib_dev *mdev = to_mdev(pd->device);
|
struct mlx5_ib_dev *mdev = to_mdev(pd->device);
|
||||||
struct mlx5_ib_pd *mpd = to_mpd(pd);
|
struct mlx5_ib_pd *mpd = to_mpd(pd);
|
||||||
|
|
||||||
if (!pd->uobject)
|
|
||||||
free_pa_mkey(mdev, mpd->pa_lkey);
|
|
||||||
|
|
||||||
mlx5_core_dealloc_pd(mdev->mdev, mpd->pdn);
|
mlx5_core_dealloc_pd(mdev->mdev, mpd->pdn);
|
||||||
kfree(mpd);
|
kfree(mpd);
|
||||||
|
|
||||||
|
@ -1245,18 +1187,10 @@ static int create_dev_resources(struct mlx5_ib_resources *devr)
|
||||||
struct ib_srq_init_attr attr;
|
struct ib_srq_init_attr attr;
|
||||||
struct mlx5_ib_dev *dev;
|
struct mlx5_ib_dev *dev;
|
||||||
struct ib_cq_init_attr cq_attr = {.cqe = 1};
|
struct ib_cq_init_attr cq_attr = {.cqe = 1};
|
||||||
u32 rsvd_lkey;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
dev = container_of(devr, struct mlx5_ib_dev, devr);
|
dev = container_of(devr, struct mlx5_ib_dev, devr);
|
||||||
|
|
||||||
ret = mlx5_core_query_special_context(dev->mdev, &rsvd_lkey);
|
|
||||||
if (ret) {
|
|
||||||
pr_err("Failed to query special context %d\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
dev->ib_dev.local_dma_lkey = rsvd_lkey;
|
|
||||||
|
|
||||||
devr->p0 = mlx5_ib_alloc_pd(&dev->ib_dev, NULL, NULL);
|
devr->p0 = mlx5_ib_alloc_pd(&dev->ib_dev, NULL, NULL);
|
||||||
if (IS_ERR(devr->p0)) {
|
if (IS_ERR(devr->p0)) {
|
||||||
ret = PTR_ERR(devr->p0);
|
ret = PTR_ERR(devr->p0);
|
||||||
|
@ -1418,6 +1352,7 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
|
||||||
strlcpy(dev->ib_dev.name, "mlx5_%d", IB_DEVICE_NAME_MAX);
|
strlcpy(dev->ib_dev.name, "mlx5_%d", IB_DEVICE_NAME_MAX);
|
||||||
dev->ib_dev.owner = THIS_MODULE;
|
dev->ib_dev.owner = THIS_MODULE;
|
||||||
dev->ib_dev.node_type = RDMA_NODE_IB_CA;
|
dev->ib_dev.node_type = RDMA_NODE_IB_CA;
|
||||||
|
dev->ib_dev.local_dma_lkey = 0 /* not supported for now */;
|
||||||
dev->num_ports = MLX5_CAP_GEN(mdev, num_ports);
|
dev->num_ports = MLX5_CAP_GEN(mdev, num_ports);
|
||||||
dev->ib_dev.phys_port_cnt = dev->num_ports;
|
dev->ib_dev.phys_port_cnt = dev->num_ports;
|
||||||
dev->ib_dev.num_comp_vectors =
|
dev->ib_dev.num_comp_vectors =
|
||||||
|
|
|
@ -103,7 +103,6 @@ static inline struct mlx5_ib_ucontext *to_mucontext(struct ib_ucontext *ibuconte
|
||||||
struct mlx5_ib_pd {
|
struct mlx5_ib_pd {
|
||||||
struct ib_pd ibpd;
|
struct ib_pd ibpd;
|
||||||
u32 pdn;
|
u32 pdn;
|
||||||
u32 pa_lkey;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Use macros here so that don't have to duplicate
|
/* Use macros here so that don't have to duplicate
|
||||||
|
@ -213,7 +212,6 @@ struct mlx5_ib_qp {
|
||||||
int uuarn;
|
int uuarn;
|
||||||
|
|
||||||
int create_type;
|
int create_type;
|
||||||
u32 pa_lkey;
|
|
||||||
|
|
||||||
/* Store signature errors */
|
/* Store signature errors */
|
||||||
bool signature_en;
|
bool signature_en;
|
||||||
|
|
|
@ -925,8 +925,6 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
|
||||||
err = create_kernel_qp(dev, init_attr, qp, &in, &inlen);
|
err = create_kernel_qp(dev, init_attr, qp, &in, &inlen);
|
||||||
if (err)
|
if (err)
|
||||||
mlx5_ib_dbg(dev, "err %d\n", err);
|
mlx5_ib_dbg(dev, "err %d\n", err);
|
||||||
else
|
|
||||||
qp->pa_lkey = to_mpd(pd)->pa_lkey;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -2045,7 +2043,7 @@ static void set_frwr_pages(struct mlx5_wqe_data_seg *dseg,
|
||||||
mfrpl->mapped_page_list[i] = cpu_to_be64(page_list[i] | perm);
|
mfrpl->mapped_page_list[i] = cpu_to_be64(page_list[i] | perm);
|
||||||
dseg->addr = cpu_to_be64(mfrpl->map);
|
dseg->addr = cpu_to_be64(mfrpl->map);
|
||||||
dseg->byte_count = cpu_to_be32(ALIGN(sizeof(u64) * wr->wr.fast_reg.page_list_len, 64));
|
dseg->byte_count = cpu_to_be32(ALIGN(sizeof(u64) * wr->wr.fast_reg.page_list_len, 64));
|
||||||
dseg->lkey = cpu_to_be32(pd->pa_lkey);
|
dseg->lkey = cpu_to_be32(pd->ibpd.local_dma_lkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
static __be32 send_ieth(struct ib_send_wr *wr)
|
static __be32 send_ieth(struct ib_send_wr *wr)
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* licenses. You may choose to be licensed under the terms of the GNU
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* General Public License (GPL) Version 2, available from the file
|
* General Public License (GPL) Version 2, available from the file
|
||||||
* COPYING in the main directory of this source tree, or the
|
* COPYING in the main directory of this source tree, or the
|
||||||
* OpenIB.org BSD license below:
|
* BSD license below:
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or
|
* Redistribution and use in source and binary forms, with or
|
||||||
* without modification, are permitted provided that the following
|
* without modification, are permitted provided that the following
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2014, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you may redistribute it and/or modify
|
* This software is available to you under a choice of one of two
|
||||||
* it under the terms of the GNU General Public License as published by
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
* the Free Software Foundation; version 2 of the License.
|
* General Public License (GPL) Version 2, available from the file
|
||||||
|
* COPYING in the main directory of this source tree, or the
|
||||||
|
* BSD license below:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or
|
||||||
|
* without modification, are permitted provided that the following
|
||||||
|
* conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
|
|
@ -80,7 +80,7 @@ enum {
|
||||||
IPOIB_NUM_WC = 4,
|
IPOIB_NUM_WC = 4,
|
||||||
|
|
||||||
IPOIB_MAX_PATH_REC_QUEUE = 3,
|
IPOIB_MAX_PATH_REC_QUEUE = 3,
|
||||||
IPOIB_MAX_MCAST_QUEUE = 3,
|
IPOIB_MAX_MCAST_QUEUE = 64,
|
||||||
|
|
||||||
IPOIB_FLAG_OPER_UP = 0,
|
IPOIB_FLAG_OPER_UP = 0,
|
||||||
IPOIB_FLAG_INITIALIZED = 1,
|
IPOIB_FLAG_INITIALIZED = 1,
|
||||||
|
@ -495,6 +495,7 @@ void ipoib_dev_cleanup(struct net_device *dev);
|
||||||
void ipoib_mcast_join_task(struct work_struct *work);
|
void ipoib_mcast_join_task(struct work_struct *work);
|
||||||
void ipoib_mcast_carrier_on_task(struct work_struct *work);
|
void ipoib_mcast_carrier_on_task(struct work_struct *work);
|
||||||
void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb);
|
void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb);
|
||||||
|
void ipoib_mcast_free(struct ipoib_mcast *mc);
|
||||||
|
|
||||||
void ipoib_mcast_restart_task(struct work_struct *work);
|
void ipoib_mcast_restart_task(struct work_struct *work);
|
||||||
int ipoib_mcast_start_thread(struct net_device *dev);
|
int ipoib_mcast_start_thread(struct net_device *dev);
|
||||||
|
@ -548,6 +549,8 @@ void ipoib_path_iter_read(struct ipoib_path_iter *iter,
|
||||||
|
|
||||||
int ipoib_mcast_attach(struct net_device *dev, u16 mlid,
|
int ipoib_mcast_attach(struct net_device *dev, u16 mlid,
|
||||||
union ib_gid *mgid, int set_qkey);
|
union ib_gid *mgid, int set_qkey);
|
||||||
|
int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast);
|
||||||
|
struct ipoib_mcast *__ipoib_mcast_find(struct net_device *dev, void *mgid);
|
||||||
|
|
||||||
int ipoib_init_qp(struct net_device *dev);
|
int ipoib_init_qp(struct net_device *dev);
|
||||||
int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca);
|
int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca);
|
||||||
|
|
|
@ -1149,6 +1149,9 @@ static void __ipoib_reap_neigh(struct ipoib_dev_priv *priv)
|
||||||
unsigned long dt;
|
unsigned long dt;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int i;
|
int i;
|
||||||
|
LIST_HEAD(remove_list);
|
||||||
|
struct ipoib_mcast *mcast, *tmcast;
|
||||||
|
struct net_device *dev = priv->dev;
|
||||||
|
|
||||||
if (test_bit(IPOIB_STOP_NEIGH_GC, &priv->flags))
|
if (test_bit(IPOIB_STOP_NEIGH_GC, &priv->flags))
|
||||||
return;
|
return;
|
||||||
|
@ -1176,6 +1179,19 @@ static void __ipoib_reap_neigh(struct ipoib_dev_priv *priv)
|
||||||
lockdep_is_held(&priv->lock))) != NULL) {
|
lockdep_is_held(&priv->lock))) != NULL) {
|
||||||
/* was the neigh idle for two GC periods */
|
/* was the neigh idle for two GC periods */
|
||||||
if (time_after(neigh_obsolete, neigh->alive)) {
|
if (time_after(neigh_obsolete, neigh->alive)) {
|
||||||
|
u8 *mgid = neigh->daddr + 4;
|
||||||
|
|
||||||
|
/* Is this multicast ? */
|
||||||
|
if (*mgid == 0xff) {
|
||||||
|
mcast = __ipoib_mcast_find(dev, mgid);
|
||||||
|
|
||||||
|
if (mcast && test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags)) {
|
||||||
|
list_del(&mcast->list);
|
||||||
|
rb_erase(&mcast->rb_node, &priv->multicast_tree);
|
||||||
|
list_add_tail(&mcast->list, &remove_list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rcu_assign_pointer(*np,
|
rcu_assign_pointer(*np,
|
||||||
rcu_dereference_protected(neigh->hnext,
|
rcu_dereference_protected(neigh->hnext,
|
||||||
lockdep_is_held(&priv->lock)));
|
lockdep_is_held(&priv->lock)));
|
||||||
|
@ -1191,6 +1207,10 @@ static void __ipoib_reap_neigh(struct ipoib_dev_priv *priv)
|
||||||
|
|
||||||
out_unlock:
|
out_unlock:
|
||||||
spin_unlock_irqrestore(&priv->lock, flags);
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||||||
|
list_for_each_entry_safe(mcast, tmcast, &remove_list, list) {
|
||||||
|
ipoib_mcast_leave(dev, mcast);
|
||||||
|
ipoib_mcast_free(mcast);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ipoib_reap_neigh(struct work_struct *work)
|
static void ipoib_reap_neigh(struct work_struct *work)
|
||||||
|
|
|
@ -106,7 +106,7 @@ static void __ipoib_mcast_schedule_join_thread(struct ipoib_dev_priv *priv,
|
||||||
queue_delayed_work(priv->wq, &priv->mcast_task, 0);
|
queue_delayed_work(priv->wq, &priv->mcast_task, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ipoib_mcast_free(struct ipoib_mcast *mcast)
|
void ipoib_mcast_free(struct ipoib_mcast *mcast)
|
||||||
{
|
{
|
||||||
struct net_device *dev = mcast->dev;
|
struct net_device *dev = mcast->dev;
|
||||||
int tx_dropped = 0;
|
int tx_dropped = 0;
|
||||||
|
@ -153,7 +153,7 @@ static struct ipoib_mcast *ipoib_mcast_alloc(struct net_device *dev,
|
||||||
return mcast;
|
return mcast;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct ipoib_mcast *__ipoib_mcast_find(struct net_device *dev, void *mgid)
|
struct ipoib_mcast *__ipoib_mcast_find(struct net_device *dev, void *mgid)
|
||||||
{
|
{
|
||||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||||
struct rb_node *n = priv->multicast_tree.rb_node;
|
struct rb_node *n = priv->multicast_tree.rb_node;
|
||||||
|
@ -508,17 +508,19 @@ static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast)
|
||||||
rec.hop_limit = priv->broadcast->mcmember.hop_limit;
|
rec.hop_limit = priv->broadcast->mcmember.hop_limit;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Historically Linux IPoIB has never properly supported SEND
|
* Send-only IB Multicast joins do not work at the core
|
||||||
* ONLY join. It emulated it by not providing all the required
|
* IB layer yet, so we can't use them here. However,
|
||||||
* attributes, which is enough to prevent group creation and
|
* we are emulating an Ethernet multicast send, which
|
||||||
* detect if there are full members or not. A major problem
|
* does not require a multicast subscription and will
|
||||||
* with supporting SEND ONLY is detecting when the group is
|
* still send properly. The most appropriate thing to
|
||||||
* auto-destroyed as IPoIB will cache the MLID..
|
* do is to create the group if it doesn't exist as that
|
||||||
|
* most closely emulates the behavior, from a user space
|
||||||
|
* application perspecitive, of Ethernet multicast
|
||||||
|
* operation. For now, we do a full join, maybe later
|
||||||
|
* when the core IB layers support send only joins we
|
||||||
|
* will use them.
|
||||||
*/
|
*/
|
||||||
#if 1
|
#if 0
|
||||||
if (test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags))
|
|
||||||
comp_mask &= ~IB_SA_MCMEMBER_REC_TRAFFIC_CLASS;
|
|
||||||
#else
|
|
||||||
if (test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags))
|
if (test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags))
|
||||||
rec.join_state = 4;
|
rec.join_state = 4;
|
||||||
#endif
|
#endif
|
||||||
|
@ -675,7 +677,7 @@ int ipoib_mcast_stop_thread(struct net_device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast)
|
int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast)
|
||||||
{
|
{
|
||||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
|
@ -97,6 +97,11 @@ unsigned int iser_max_sectors = ISER_DEF_MAX_SECTORS;
|
||||||
module_param_named(max_sectors, iser_max_sectors, uint, S_IRUGO | S_IWUSR);
|
module_param_named(max_sectors, iser_max_sectors, uint, S_IRUGO | S_IWUSR);
|
||||||
MODULE_PARM_DESC(max_sectors, "Max number of sectors in a single scsi command (default:1024");
|
MODULE_PARM_DESC(max_sectors, "Max number of sectors in a single scsi command (default:1024");
|
||||||
|
|
||||||
|
bool iser_always_reg = true;
|
||||||
|
module_param_named(always_register, iser_always_reg, bool, S_IRUGO);
|
||||||
|
MODULE_PARM_DESC(always_register,
|
||||||
|
"Always register memory, even for continuous memory regions (default:true)");
|
||||||
|
|
||||||
bool iser_pi_enable = false;
|
bool iser_pi_enable = false;
|
||||||
module_param_named(pi_enable, iser_pi_enable, bool, S_IRUGO);
|
module_param_named(pi_enable, iser_pi_enable, bool, S_IRUGO);
|
||||||
MODULE_PARM_DESC(pi_enable, "Enable T10-PI offload support (default:disabled)");
|
MODULE_PARM_DESC(pi_enable, "Enable T10-PI offload support (default:disabled)");
|
||||||
|
|
|
@ -611,6 +611,7 @@ extern int iser_debug_level;
|
||||||
extern bool iser_pi_enable;
|
extern bool iser_pi_enable;
|
||||||
extern int iser_pi_guard;
|
extern int iser_pi_guard;
|
||||||
extern unsigned int iser_max_sectors;
|
extern unsigned int iser_max_sectors;
|
||||||
|
extern bool iser_always_reg;
|
||||||
|
|
||||||
int iser_assign_reg_ops(struct iser_device *device);
|
int iser_assign_reg_ops(struct iser_device *device);
|
||||||
|
|
||||||
|
|
|
@ -803,11 +803,12 @@ static int
|
||||||
iser_reg_prot_sg(struct iscsi_iser_task *task,
|
iser_reg_prot_sg(struct iscsi_iser_task *task,
|
||||||
struct iser_data_buf *mem,
|
struct iser_data_buf *mem,
|
||||||
struct iser_fr_desc *desc,
|
struct iser_fr_desc *desc,
|
||||||
|
bool use_dma_key,
|
||||||
struct iser_mem_reg *reg)
|
struct iser_mem_reg *reg)
|
||||||
{
|
{
|
||||||
struct iser_device *device = task->iser_conn->ib_conn.device;
|
struct iser_device *device = task->iser_conn->ib_conn.device;
|
||||||
|
|
||||||
if (mem->dma_nents == 1)
|
if (use_dma_key)
|
||||||
return iser_reg_dma(device, mem, reg);
|
return iser_reg_dma(device, mem, reg);
|
||||||
|
|
||||||
return device->reg_ops->reg_mem(task, mem, &desc->pi_ctx->rsc, reg);
|
return device->reg_ops->reg_mem(task, mem, &desc->pi_ctx->rsc, reg);
|
||||||
|
@ -817,11 +818,12 @@ static int
|
||||||
iser_reg_data_sg(struct iscsi_iser_task *task,
|
iser_reg_data_sg(struct iscsi_iser_task *task,
|
||||||
struct iser_data_buf *mem,
|
struct iser_data_buf *mem,
|
||||||
struct iser_fr_desc *desc,
|
struct iser_fr_desc *desc,
|
||||||
|
bool use_dma_key,
|
||||||
struct iser_mem_reg *reg)
|
struct iser_mem_reg *reg)
|
||||||
{
|
{
|
||||||
struct iser_device *device = task->iser_conn->ib_conn.device;
|
struct iser_device *device = task->iser_conn->ib_conn.device;
|
||||||
|
|
||||||
if (mem->dma_nents == 1)
|
if (use_dma_key)
|
||||||
return iser_reg_dma(device, mem, reg);
|
return iser_reg_dma(device, mem, reg);
|
||||||
|
|
||||||
return device->reg_ops->reg_mem(task, mem, &desc->rsc, reg);
|
return device->reg_ops->reg_mem(task, mem, &desc->rsc, reg);
|
||||||
|
@ -836,14 +838,17 @@ int iser_reg_rdma_mem(struct iscsi_iser_task *task,
|
||||||
struct iser_mem_reg *reg = &task->rdma_reg[dir];
|
struct iser_mem_reg *reg = &task->rdma_reg[dir];
|
||||||
struct iser_mem_reg *data_reg;
|
struct iser_mem_reg *data_reg;
|
||||||
struct iser_fr_desc *desc = NULL;
|
struct iser_fr_desc *desc = NULL;
|
||||||
|
bool use_dma_key;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = iser_handle_unaligned_buf(task, mem, dir);
|
err = iser_handle_unaligned_buf(task, mem, dir);
|
||||||
if (unlikely(err))
|
if (unlikely(err))
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
if (mem->dma_nents != 1 ||
|
use_dma_key = (mem->dma_nents == 1 && !iser_always_reg &&
|
||||||
scsi_get_prot_op(task->sc) != SCSI_PROT_NORMAL) {
|
scsi_get_prot_op(task->sc) == SCSI_PROT_NORMAL);
|
||||||
|
|
||||||
|
if (!use_dma_key) {
|
||||||
desc = device->reg_ops->reg_desc_get(ib_conn);
|
desc = device->reg_ops->reg_desc_get(ib_conn);
|
||||||
reg->mem_h = desc;
|
reg->mem_h = desc;
|
||||||
}
|
}
|
||||||
|
@ -853,7 +858,7 @@ int iser_reg_rdma_mem(struct iscsi_iser_task *task,
|
||||||
else
|
else
|
||||||
data_reg = &task->desc.data_reg;
|
data_reg = &task->desc.data_reg;
|
||||||
|
|
||||||
err = iser_reg_data_sg(task, mem, desc, data_reg);
|
err = iser_reg_data_sg(task, mem, desc, use_dma_key, data_reg);
|
||||||
if (unlikely(err))
|
if (unlikely(err))
|
||||||
goto err_reg;
|
goto err_reg;
|
||||||
|
|
||||||
|
@ -866,7 +871,8 @@ int iser_reg_rdma_mem(struct iscsi_iser_task *task,
|
||||||
if (unlikely(err))
|
if (unlikely(err))
|
||||||
goto err_reg;
|
goto err_reg;
|
||||||
|
|
||||||
err = iser_reg_prot_sg(task, mem, desc, prot_reg);
|
err = iser_reg_prot_sg(task, mem, desc,
|
||||||
|
use_dma_key, prot_reg);
|
||||||
if (unlikely(err))
|
if (unlikely(err))
|
||||||
goto err_reg;
|
goto err_reg;
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,11 +133,15 @@ static int iser_create_device_ib_res(struct iser_device *device)
|
||||||
(unsigned long)comp);
|
(unsigned long)comp);
|
||||||
}
|
}
|
||||||
|
|
||||||
device->mr = ib_get_dma_mr(device->pd, IB_ACCESS_LOCAL_WRITE |
|
if (!iser_always_reg) {
|
||||||
IB_ACCESS_REMOTE_WRITE |
|
int access = IB_ACCESS_LOCAL_WRITE |
|
||||||
IB_ACCESS_REMOTE_READ);
|
IB_ACCESS_REMOTE_WRITE |
|
||||||
if (IS_ERR(device->mr))
|
IB_ACCESS_REMOTE_READ;
|
||||||
goto dma_mr_err;
|
|
||||||
|
device->mr = ib_get_dma_mr(device->pd, access);
|
||||||
|
if (IS_ERR(device->mr))
|
||||||
|
goto dma_mr_err;
|
||||||
|
}
|
||||||
|
|
||||||
INIT_IB_EVENT_HANDLER(&device->event_handler, device->ib_device,
|
INIT_IB_EVENT_HANDLER(&device->event_handler, device->ib_device,
|
||||||
iser_event_handler);
|
iser_event_handler);
|
||||||
|
@ -147,7 +151,8 @@ static int iser_create_device_ib_res(struct iser_device *device)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
handler_err:
|
handler_err:
|
||||||
ib_dereg_mr(device->mr);
|
if (device->mr)
|
||||||
|
ib_dereg_mr(device->mr);
|
||||||
dma_mr_err:
|
dma_mr_err:
|
||||||
for (i = 0; i < device->comps_used; i++)
|
for (i = 0; i < device->comps_used; i++)
|
||||||
tasklet_kill(&device->comps[i].tasklet);
|
tasklet_kill(&device->comps[i].tasklet);
|
||||||
|
@ -173,7 +178,6 @@ comps_err:
|
||||||
static void iser_free_device_ib_res(struct iser_device *device)
|
static void iser_free_device_ib_res(struct iser_device *device)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
BUG_ON(device->mr == NULL);
|
|
||||||
|
|
||||||
for (i = 0; i < device->comps_used; i++) {
|
for (i = 0; i < device->comps_used; i++) {
|
||||||
struct iser_comp *comp = &device->comps[i];
|
struct iser_comp *comp = &device->comps[i];
|
||||||
|
@ -184,7 +188,8 @@ static void iser_free_device_ib_res(struct iser_device *device)
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)ib_unregister_event_handler(&device->event_handler);
|
(void)ib_unregister_event_handler(&device->event_handler);
|
||||||
(void)ib_dereg_mr(device->mr);
|
if (device->mr)
|
||||||
|
(void)ib_dereg_mr(device->mr);
|
||||||
ib_dealloc_pd(device->pd);
|
ib_dealloc_pd(device->pd);
|
||||||
|
|
||||||
kfree(device->comps);
|
kfree(device->comps);
|
||||||
|
|
|
@ -200,25 +200,3 @@ int mlx5_cmd_teardown_hca(struct mlx5_core_dev *dev)
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mlx5_core_query_special_context(struct mlx5_core_dev *dev, u32 *rsvd_lkey)
|
|
||||||
{
|
|
||||||
struct mlx5_cmd_query_special_contexts_mbox_in in;
|
|
||||||
struct mlx5_cmd_query_special_contexts_mbox_out out;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
memset(&in, 0, sizeof(in));
|
|
||||||
memset(&out, 0, sizeof(out));
|
|
||||||
in.hdr.opcode = cpu_to_be16(MLX5_CMD_OP_QUERY_SPECIAL_CONTEXTS);
|
|
||||||
err = mlx5_cmd_exec(dev, &in, sizeof(in), &out, sizeof(out));
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
if (out.hdr.status)
|
|
||||||
err = mlx5_cmd_status_to_err(&out.hdr);
|
|
||||||
|
|
||||||
*rsvd_lkey = be32_to_cpu(out.resd_lkey);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(mlx5_core_query_special_context);
|
|
||||||
|
|
|
@ -402,17 +402,6 @@ struct mlx5_cmd_teardown_hca_mbox_out {
|
||||||
u8 rsvd[8];
|
u8 rsvd[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx5_cmd_query_special_contexts_mbox_in {
|
|
||||||
struct mlx5_inbox_hdr hdr;
|
|
||||||
u8 rsvd[8];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_cmd_query_special_contexts_mbox_out {
|
|
||||||
struct mlx5_outbox_hdr hdr;
|
|
||||||
__be32 dump_fill_mkey;
|
|
||||||
__be32 resd_lkey;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_cmd_layout {
|
struct mlx5_cmd_layout {
|
||||||
u8 type;
|
u8 type;
|
||||||
u8 rsvd0[3];
|
u8 rsvd0[3];
|
||||||
|
|
|
@ -845,7 +845,6 @@ void *mlx5_get_protocol_dev(struct mlx5_core_dev *mdev, int protocol);
|
||||||
int mlx5_register_interface(struct mlx5_interface *intf);
|
int mlx5_register_interface(struct mlx5_interface *intf);
|
||||||
void mlx5_unregister_interface(struct mlx5_interface *intf);
|
void mlx5_unregister_interface(struct mlx5_interface *intf);
|
||||||
int mlx5_core_query_vendor_id(struct mlx5_core_dev *mdev, u32 *vendor_id);
|
int mlx5_core_query_vendor_id(struct mlx5_core_dev *mdev, u32 *vendor_id);
|
||||||
int mlx5_core_query_special_context(struct mlx5_core_dev *dev, u32 *rsvd_lkey);
|
|
||||||
|
|
||||||
struct mlx5_profile {
|
struct mlx5_profile {
|
||||||
u64 mask;
|
u64 mask;
|
||||||
|
|
|
@ -39,25 +39,6 @@ static int
|
||||||
fmr_op_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
|
fmr_op_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
|
||||||
struct rpcrdma_create_data_internal *cdata)
|
struct rpcrdma_create_data_internal *cdata)
|
||||||
{
|
{
|
||||||
struct ib_device_attr *devattr = &ia->ri_devattr;
|
|
||||||
struct ib_mr *mr;
|
|
||||||
|
|
||||||
/* Obtain an lkey to use for the regbufs, which are
|
|
||||||
* protected from remote access.
|
|
||||||
*/
|
|
||||||
if (devattr->device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY) {
|
|
||||||
ia->ri_dma_lkey = ia->ri_device->local_dma_lkey;
|
|
||||||
} else {
|
|
||||||
mr = ib_get_dma_mr(ia->ri_pd, IB_ACCESS_LOCAL_WRITE);
|
|
||||||
if (IS_ERR(mr)) {
|
|
||||||
pr_err("%s: ib_get_dma_mr for failed with %lX\n",
|
|
||||||
__func__, PTR_ERR(mr));
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
ia->ri_dma_lkey = ia->ri_dma_mr->lkey;
|
|
||||||
ia->ri_dma_mr = mr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -189,11 +189,6 @@ frwr_op_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
|
||||||
struct ib_device_attr *devattr = &ia->ri_devattr;
|
struct ib_device_attr *devattr = &ia->ri_devattr;
|
||||||
int depth, delta;
|
int depth, delta;
|
||||||
|
|
||||||
/* Obtain an lkey to use for the regbufs, which are
|
|
||||||
* protected from remote access.
|
|
||||||
*/
|
|
||||||
ia->ri_dma_lkey = ia->ri_device->local_dma_lkey;
|
|
||||||
|
|
||||||
ia->ri_max_frmr_depth =
|
ia->ri_max_frmr_depth =
|
||||||
min_t(unsigned int, RPCRDMA_MAX_DATA_SEGS,
|
min_t(unsigned int, RPCRDMA_MAX_DATA_SEGS,
|
||||||
devattr->max_fast_reg_page_list_len);
|
devattr->max_fast_reg_page_list_len);
|
||||||
|
|
|
@ -23,7 +23,6 @@ static int
|
||||||
physical_op_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
|
physical_op_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
|
||||||
struct rpcrdma_create_data_internal *cdata)
|
struct rpcrdma_create_data_internal *cdata)
|
||||||
{
|
{
|
||||||
struct ib_device_attr *devattr = &ia->ri_devattr;
|
|
||||||
struct ib_mr *mr;
|
struct ib_mr *mr;
|
||||||
|
|
||||||
/* Obtain an rkey to use for RPC data payloads.
|
/* Obtain an rkey to use for RPC data payloads.
|
||||||
|
@ -37,15 +36,8 @@ physical_op_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
|
||||||
__func__, PTR_ERR(mr));
|
__func__, PTR_ERR(mr));
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
ia->ri_dma_mr = mr;
|
ia->ri_dma_mr = mr;
|
||||||
|
|
||||||
/* Obtain an lkey to use for regbufs.
|
|
||||||
*/
|
|
||||||
if (devattr->device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY)
|
|
||||||
ia->ri_dma_lkey = ia->ri_device->local_dma_lkey;
|
|
||||||
else
|
|
||||||
ia->ri_dma_lkey = ia->ri_dma_mr->lkey;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -543,11 +543,8 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (memreg == RPCRDMA_FRMR) {
|
if (memreg == RPCRDMA_FRMR) {
|
||||||
/* Requires both frmr reg and local dma lkey */
|
if (!(devattr->device_cap_flags & IB_DEVICE_MEM_MGT_EXTENSIONS) ||
|
||||||
if (((devattr->device_cap_flags &
|
(devattr->max_fast_reg_page_list_len == 0)) {
|
||||||
(IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) !=
|
|
||||||
(IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) ||
|
|
||||||
(devattr->max_fast_reg_page_list_len == 0)) {
|
|
||||||
dprintk("RPC: %s: FRMR registration "
|
dprintk("RPC: %s: FRMR registration "
|
||||||
"not supported by HCA\n", __func__);
|
"not supported by HCA\n", __func__);
|
||||||
memreg = RPCRDMA_MTHCAFMR;
|
memreg = RPCRDMA_MTHCAFMR;
|
||||||
|
@ -557,6 +554,7 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
|
||||||
if (!ia->ri_device->alloc_fmr) {
|
if (!ia->ri_device->alloc_fmr) {
|
||||||
dprintk("RPC: %s: MTHCAFMR registration "
|
dprintk("RPC: %s: MTHCAFMR registration "
|
||||||
"not supported by HCA\n", __func__);
|
"not supported by HCA\n", __func__);
|
||||||
|
rc = -EINVAL;
|
||||||
goto out3;
|
goto out3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1252,7 +1250,7 @@ rpcrdma_alloc_regbuf(struct rpcrdma_ia *ia, size_t size, gfp_t flags)
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
||||||
iov->length = size;
|
iov->length = size;
|
||||||
iov->lkey = ia->ri_dma_lkey;
|
iov->lkey = ia->ri_pd->local_dma_lkey;
|
||||||
rb->rg_size = size;
|
rb->rg_size = size;
|
||||||
rb->rg_owner = NULL;
|
rb->rg_owner = NULL;
|
||||||
return rb;
|
return rb;
|
||||||
|
|
|
@ -65,7 +65,6 @@ struct rpcrdma_ia {
|
||||||
struct rdma_cm_id *ri_id;
|
struct rdma_cm_id *ri_id;
|
||||||
struct ib_pd *ri_pd;
|
struct ib_pd *ri_pd;
|
||||||
struct ib_mr *ri_dma_mr;
|
struct ib_mr *ri_dma_mr;
|
||||||
u32 ri_dma_lkey;
|
|
||||||
struct completion ri_done;
|
struct completion ri_done;
|
||||||
int ri_async_rc;
|
int ri_async_rc;
|
||||||
unsigned int ri_max_frmr_depth;
|
unsigned int ri_max_frmr_depth;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче