diff options
Diffstat (limited to 'drivers/infiniband/core')
-rw-r--r-- | drivers/infiniband/core/cm.c | 15 | ||||
-rw-r--r-- | drivers/infiniband/core/cm_msgs.h | 22 | ||||
-rw-r--r-- | drivers/infiniband/core/device.c | 4 | ||||
-rw-r--r-- | drivers/infiniband/core/mad_rmpp.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/core/sa_query.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/core/sysfs.c | 19 |
6 files changed, 27 insertions, 37 deletions
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index f1e82a92e61e..5130fc55b8e2 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c | |||
@@ -927,8 +927,7 @@ int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id, __be64 service_mask, | |||
927 | unsigned long flags; | 927 | unsigned long flags; |
928 | int ret = 0; | 928 | int ret = 0; |
929 | 929 | ||
930 | service_mask = service_mask ? service_mask : | 930 | service_mask = service_mask ? service_mask : ~cpu_to_be64(0); |
931 | __constant_cpu_to_be64(~0ULL); | ||
932 | service_id &= service_mask; | 931 | service_id &= service_mask; |
933 | if ((service_id & IB_SERVICE_ID_AGN_MASK) == IB_CM_ASSIGN_SERVICE_ID && | 932 | if ((service_id & IB_SERVICE_ID_AGN_MASK) == IB_CM_ASSIGN_SERVICE_ID && |
934 | (service_id != IB_CM_ASSIGN_SERVICE_ID)) | 933 | (service_id != IB_CM_ASSIGN_SERVICE_ID)) |
@@ -954,7 +953,7 @@ int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id, __be64 service_mask, | |||
954 | spin_lock_irqsave(&cm.lock, flags); | 953 | spin_lock_irqsave(&cm.lock, flags); |
955 | if (service_id == IB_CM_ASSIGN_SERVICE_ID) { | 954 | if (service_id == IB_CM_ASSIGN_SERVICE_ID) { |
956 | cm_id->service_id = cpu_to_be64(cm.listen_service_id++); | 955 | cm_id->service_id = cpu_to_be64(cm.listen_service_id++); |
957 | cm_id->service_mask = __constant_cpu_to_be64(~0ULL); | 956 | cm_id->service_mask = ~cpu_to_be64(0); |
958 | } else { | 957 | } else { |
959 | cm_id->service_id = service_id; | 958 | cm_id->service_id = service_id; |
960 | cm_id->service_mask = service_mask; | 959 | cm_id->service_mask = service_mask; |
@@ -1134,7 +1133,7 @@ int ib_send_cm_req(struct ib_cm_id *cm_id, | |||
1134 | goto error1; | 1133 | goto error1; |
1135 | } | 1134 | } |
1136 | cm_id->service_id = param->service_id; | 1135 | cm_id->service_id = param->service_id; |
1137 | cm_id->service_mask = __constant_cpu_to_be64(~0ULL); | 1136 | cm_id->service_mask = ~cpu_to_be64(0); |
1138 | cm_id_priv->timeout_ms = cm_convert_to_ms( | 1137 | cm_id_priv->timeout_ms = cm_convert_to_ms( |
1139 | param->primary_path->packet_life_time) * 2 + | 1138 | param->primary_path->packet_life_time) * 2 + |
1140 | cm_convert_to_ms( | 1139 | cm_convert_to_ms( |
@@ -1545,7 +1544,7 @@ static int cm_req_handler(struct cm_work *work) | |||
1545 | cm_id_priv->id.cm_handler = listen_cm_id_priv->id.cm_handler; | 1544 | cm_id_priv->id.cm_handler = listen_cm_id_priv->id.cm_handler; |
1546 | cm_id_priv->id.context = listen_cm_id_priv->id.context; | 1545 | cm_id_priv->id.context = listen_cm_id_priv->id.context; |
1547 | cm_id_priv->id.service_id = req_msg->service_id; | 1546 | cm_id_priv->id.service_id = req_msg->service_id; |
1548 | cm_id_priv->id.service_mask = __constant_cpu_to_be64(~0ULL); | 1547 | cm_id_priv->id.service_mask = ~cpu_to_be64(0); |
1549 | 1548 | ||
1550 | cm_process_routed_req(req_msg, work->mad_recv_wc->wc); | 1549 | cm_process_routed_req(req_msg, work->mad_recv_wc->wc); |
1551 | cm_format_paths_from_req(req_msg, &work->path[0], &work->path[1]); | 1550 | cm_format_paths_from_req(req_msg, &work->path[0], &work->path[1]); |
@@ -2898,7 +2897,7 @@ int ib_send_cm_sidr_req(struct ib_cm_id *cm_id, | |||
2898 | goto out; | 2897 | goto out; |
2899 | 2898 | ||
2900 | cm_id->service_id = param->service_id; | 2899 | cm_id->service_id = param->service_id; |
2901 | cm_id->service_mask = __constant_cpu_to_be64(~0ULL); | 2900 | cm_id->service_mask = ~cpu_to_be64(0); |
2902 | cm_id_priv->timeout_ms = param->timeout_ms; | 2901 | cm_id_priv->timeout_ms = param->timeout_ms; |
2903 | cm_id_priv->max_cm_retries = param->max_cm_retries; | 2902 | cm_id_priv->max_cm_retries = param->max_cm_retries; |
2904 | ret = cm_alloc_msg(cm_id_priv, &msg); | 2903 | ret = cm_alloc_msg(cm_id_priv, &msg); |
@@ -2992,7 +2991,7 @@ static int cm_sidr_req_handler(struct cm_work *work) | |||
2992 | cm_id_priv->id.cm_handler = cur_cm_id_priv->id.cm_handler; | 2991 | cm_id_priv->id.cm_handler = cur_cm_id_priv->id.cm_handler; |
2993 | cm_id_priv->id.context = cur_cm_id_priv->id.context; | 2992 | cm_id_priv->id.context = cur_cm_id_priv->id.context; |
2994 | cm_id_priv->id.service_id = sidr_req_msg->service_id; | 2993 | cm_id_priv->id.service_id = sidr_req_msg->service_id; |
2995 | cm_id_priv->id.service_mask = __constant_cpu_to_be64(~0ULL); | 2994 | cm_id_priv->id.service_mask = ~cpu_to_be64(0); |
2996 | 2995 | ||
2997 | cm_format_sidr_req_event(work, &cur_cm_id_priv->id); | 2996 | cm_format_sidr_req_event(work, &cur_cm_id_priv->id); |
2998 | cm_process_work(cm_id_priv, work); | 2997 | cm_process_work(cm_id_priv, work); |
@@ -3789,7 +3788,7 @@ static int __init ib_cm_init(void) | |||
3789 | rwlock_init(&cm.device_lock); | 3788 | rwlock_init(&cm.device_lock); |
3790 | spin_lock_init(&cm.lock); | 3789 | spin_lock_init(&cm.lock); |
3791 | cm.listen_service_table = RB_ROOT; | 3790 | cm.listen_service_table = RB_ROOT; |
3792 | cm.listen_service_id = __constant_be64_to_cpu(IB_CM_ASSIGN_SERVICE_ID); | 3791 | cm.listen_service_id = be64_to_cpu(IB_CM_ASSIGN_SERVICE_ID); |
3793 | cm.remote_id_table = RB_ROOT; | 3792 | cm.remote_id_table = RB_ROOT; |
3794 | cm.remote_qp_table = RB_ROOT; | 3793 | cm.remote_qp_table = RB_ROOT; |
3795 | cm.remote_sidr_table = RB_ROOT; | 3794 | cm.remote_sidr_table = RB_ROOT; |
diff --git a/drivers/infiniband/core/cm_msgs.h b/drivers/infiniband/core/cm_msgs.h index aec9c7af825d..7e63c08f697c 100644 --- a/drivers/infiniband/core/cm_msgs.h +++ b/drivers/infiniband/core/cm_msgs.h | |||
@@ -44,17 +44,17 @@ | |||
44 | 44 | ||
45 | #define IB_CM_CLASS_VERSION 2 /* IB specification 1.2 */ | 45 | #define IB_CM_CLASS_VERSION 2 /* IB specification 1.2 */ |
46 | 46 | ||
47 | #define CM_REQ_ATTR_ID __constant_htons(0x0010) | 47 | #define CM_REQ_ATTR_ID cpu_to_be16(0x0010) |
48 | #define CM_MRA_ATTR_ID __constant_htons(0x0011) | 48 | #define CM_MRA_ATTR_ID cpu_to_be16(0x0011) |
49 | #define CM_REJ_ATTR_ID __constant_htons(0x0012) | 49 | #define CM_REJ_ATTR_ID cpu_to_be16(0x0012) |
50 | #define CM_REP_ATTR_ID __constant_htons(0x0013) | 50 | #define CM_REP_ATTR_ID cpu_to_be16(0x0013) |
51 | #define CM_RTU_ATTR_ID __constant_htons(0x0014) | 51 | #define CM_RTU_ATTR_ID cpu_to_be16(0x0014) |
52 | #define CM_DREQ_ATTR_ID __constant_htons(0x0015) | 52 | #define CM_DREQ_ATTR_ID cpu_to_be16(0x0015) |
53 | #define CM_DREP_ATTR_ID __constant_htons(0x0016) | 53 | #define CM_DREP_ATTR_ID cpu_to_be16(0x0016) |
54 | #define CM_SIDR_REQ_ATTR_ID __constant_htons(0x0017) | 54 | #define CM_SIDR_REQ_ATTR_ID cpu_to_be16(0x0017) |
55 | #define CM_SIDR_REP_ATTR_ID __constant_htons(0x0018) | 55 | #define CM_SIDR_REP_ATTR_ID cpu_to_be16(0x0018) |
56 | #define CM_LAP_ATTR_ID __constant_htons(0x0019) | 56 | #define CM_LAP_ATTR_ID cpu_to_be16(0x0019) |
57 | #define CM_APR_ATTR_ID __constant_htons(0x001A) | 57 | #define CM_APR_ATTR_ID cpu_to_be16(0x001A) |
58 | 58 | ||
59 | enum cm_msg_sequence { | 59 | enum cm_msg_sequence { |
60 | CM_MSG_SEQUENCE_REQ, | 60 | CM_MSG_SEQUENCE_REQ, |
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index 7913b804311e..d1fba4153332 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c | |||
@@ -193,7 +193,7 @@ void ib_dealloc_device(struct ib_device *device) | |||
193 | 193 | ||
194 | BUG_ON(device->reg_state != IB_DEV_UNREGISTERED); | 194 | BUG_ON(device->reg_state != IB_DEV_UNREGISTERED); |
195 | 195 | ||
196 | ib_device_unregister_sysfs(device); | 196 | kobject_put(&device->dev.kobj); |
197 | } | 197 | } |
198 | EXPORT_SYMBOL(ib_dealloc_device); | 198 | EXPORT_SYMBOL(ib_dealloc_device); |
199 | 199 | ||
@@ -348,6 +348,8 @@ void ib_unregister_device(struct ib_device *device) | |||
348 | 348 | ||
349 | mutex_unlock(&device_mutex); | 349 | mutex_unlock(&device_mutex); |
350 | 350 | ||
351 | ib_device_unregister_sysfs(device); | ||
352 | |||
351 | spin_lock_irqsave(&device->client_data_lock, flags); | 353 | spin_lock_irqsave(&device->client_data_lock, flags); |
352 | list_for_each_entry_safe(context, tmp, &device->client_data_list, list) | 354 | list_for_each_entry_safe(context, tmp, &device->client_data_list, list) |
353 | kfree(context); | 355 | kfree(context); |
diff --git a/drivers/infiniband/core/mad_rmpp.c b/drivers/infiniband/core/mad_rmpp.c index 3af2b84cd838..57a3c6f947b2 100644 --- a/drivers/infiniband/core/mad_rmpp.c +++ b/drivers/infiniband/core/mad_rmpp.c | |||
@@ -735,7 +735,7 @@ process_rmpp_data(struct ib_mad_agent_private *agent, | |||
735 | goto bad; | 735 | goto bad; |
736 | } | 736 | } |
737 | 737 | ||
738 | if (rmpp_hdr->seg_num == __constant_htonl(1)) { | 738 | if (rmpp_hdr->seg_num == cpu_to_be32(1)) { |
739 | if (!(ib_get_rmpp_flags(rmpp_hdr) & IB_MGMT_RMPP_FLAG_FIRST)) { | 739 | if (!(ib_get_rmpp_flags(rmpp_hdr) & IB_MGMT_RMPP_FLAG_FIRST)) { |
740 | rmpp_status = IB_MGMT_RMPP_STATUS_BAD_SEG; | 740 | rmpp_status = IB_MGMT_RMPP_STATUS_BAD_SEG; |
741 | goto bad; | 741 | goto bad; |
diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c index 7863a50d56f2..1865049e80f7 100644 --- a/drivers/infiniband/core/sa_query.c +++ b/drivers/infiniband/core/sa_query.c | |||
@@ -395,6 +395,8 @@ static void update_sm_ah(struct work_struct *work) | |||
395 | } | 395 | } |
396 | 396 | ||
397 | spin_lock_irq(&port->ah_lock); | 397 | spin_lock_irq(&port->ah_lock); |
398 | if (port->sm_ah) | ||
399 | kref_put(&port->sm_ah->ref, free_sm_ah); | ||
398 | port->sm_ah = new_ah; | 400 | port->sm_ah = new_ah; |
399 | spin_unlock_irq(&port->ah_lock); | 401 | spin_unlock_irq(&port->ah_lock); |
400 | 402 | ||
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c index b43f7d3682d3..5c04cfb54cb9 100644 --- a/drivers/infiniband/core/sysfs.c +++ b/drivers/infiniband/core/sysfs.c | |||
@@ -66,11 +66,6 @@ struct port_table_attribute { | |||
66 | int index; | 66 | int index; |
67 | }; | 67 | }; |
68 | 68 | ||
69 | static inline int ibdev_is_alive(const struct ib_device *dev) | ||
70 | { | ||
71 | return dev->reg_state == IB_DEV_REGISTERED; | ||
72 | } | ||
73 | |||
74 | static ssize_t port_attr_show(struct kobject *kobj, | 69 | static ssize_t port_attr_show(struct kobject *kobj, |
75 | struct attribute *attr, char *buf) | 70 | struct attribute *attr, char *buf) |
76 | { | 71 | { |
@@ -80,8 +75,6 @@ static ssize_t port_attr_show(struct kobject *kobj, | |||
80 | 75 | ||
81 | if (!port_attr->show) | 76 | if (!port_attr->show) |
82 | return -EIO; | 77 | return -EIO; |
83 | if (!ibdev_is_alive(p->ibdev)) | ||
84 | return -ENODEV; | ||
85 | 78 | ||
86 | return port_attr->show(p, port_attr, buf); | 79 | return port_attr->show(p, port_attr, buf); |
87 | } | 80 | } |
@@ -562,9 +555,6 @@ static ssize_t show_node_type(struct device *device, | |||
562 | { | 555 | { |
563 | struct ib_device *dev = container_of(device, struct ib_device, dev); | 556 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
564 | 557 | ||
565 | if (!ibdev_is_alive(dev)) | ||
566 | return -ENODEV; | ||
567 | |||
568 | switch (dev->node_type) { | 558 | switch (dev->node_type) { |
569 | case RDMA_NODE_IB_CA: return sprintf(buf, "%d: CA\n", dev->node_type); | 559 | case RDMA_NODE_IB_CA: return sprintf(buf, "%d: CA\n", dev->node_type); |
570 | case RDMA_NODE_RNIC: return sprintf(buf, "%d: RNIC\n", dev->node_type); | 560 | case RDMA_NODE_RNIC: return sprintf(buf, "%d: RNIC\n", dev->node_type); |
@@ -581,9 +571,6 @@ static ssize_t show_sys_image_guid(struct device *device, | |||
581 | struct ib_device_attr attr; | 571 | struct ib_device_attr attr; |
582 | ssize_t ret; | 572 | ssize_t ret; |
583 | 573 | ||
584 | if (!ibdev_is_alive(dev)) | ||
585 | return -ENODEV; | ||
586 | |||
587 | ret = ib_query_device(dev, &attr); | 574 | ret = ib_query_device(dev, &attr); |
588 | if (ret) | 575 | if (ret) |
589 | return ret; | 576 | return ret; |
@@ -600,9 +587,6 @@ static ssize_t show_node_guid(struct device *device, | |||
600 | { | 587 | { |
601 | struct ib_device *dev = container_of(device, struct ib_device, dev); | 588 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
602 | 589 | ||
603 | if (!ibdev_is_alive(dev)) | ||
604 | return -ENODEV; | ||
605 | |||
606 | return sprintf(buf, "%04x:%04x:%04x:%04x\n", | 590 | return sprintf(buf, "%04x:%04x:%04x:%04x\n", |
607 | be16_to_cpu(((__be16 *) &dev->node_guid)[0]), | 591 | be16_to_cpu(((__be16 *) &dev->node_guid)[0]), |
608 | be16_to_cpu(((__be16 *) &dev->node_guid)[1]), | 592 | be16_to_cpu(((__be16 *) &dev->node_guid)[1]), |
@@ -848,6 +832,9 @@ void ib_device_unregister_sysfs(struct ib_device *device) | |||
848 | struct kobject *p, *t; | 832 | struct kobject *p, *t; |
849 | struct ib_port *port; | 833 | struct ib_port *port; |
850 | 834 | ||
835 | /* Hold kobject until ib_dealloc_device() */ | ||
836 | kobject_get(&device->dev.kobj); | ||
837 | |||
851 | list_for_each_entry_safe(p, t, &device->port_list, entry) { | 838 | list_for_each_entry_safe(p, t, &device->port_list, entry) { |
852 | list_del(&p->entry); | 839 | list_del(&p->entry); |
853 | port = container_of(p, struct ib_port, kobj); | 840 | port = container_of(p, struct ib_port, kobj); |