Skip to content

Commit 73fec7f

Browse files
haggaiedledford
authored andcommitted
IB/cm: Remove compare_data checks
Now that there are no ib_cm clients using the compare_data feature for matching IB CM requests' private data, remove the compare_data parameter of ib_cm_listen and remove the code implementing the feature. Signed-off-by: Haggai Eran <[email protected]> Signed-off-by: Doug Ledford <[email protected]>
1 parent 51efe39 commit 73fec7f

File tree

5 files changed

+23
-107
lines changed

5 files changed

+23
-107
lines changed

drivers/infiniband/core/cm.c

Lines changed: 18 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,6 @@ struct cm_id_private {
222222
/* todo: use alternate port on send failure */
223223
struct cm_av av;
224224
struct cm_av alt_av;
225-
struct ib_cm_compare_data *compare_data;
226225

227226
void *private_data;
228227
__be64 tid;
@@ -443,40 +442,6 @@ static struct cm_id_private * cm_acquire_id(__be32 local_id, __be32 remote_id)
443442
return cm_id_priv;
444443
}
445444

446-
static void cm_mask_copy(u32 *dst, const u32 *src, const u32 *mask)
447-
{
448-
int i;
449-
450-
for (i = 0; i < IB_CM_COMPARE_SIZE; i++)
451-
dst[i] = src[i] & mask[i];
452-
}
453-
454-
static int cm_compare_data(struct ib_cm_compare_data *src_data,
455-
struct ib_cm_compare_data *dst_data)
456-
{
457-
u32 src[IB_CM_COMPARE_SIZE];
458-
u32 dst[IB_CM_COMPARE_SIZE];
459-
460-
if (!src_data || !dst_data)
461-
return 0;
462-
463-
cm_mask_copy(src, src_data->data, dst_data->mask);
464-
cm_mask_copy(dst, dst_data->data, src_data->mask);
465-
return memcmp(src, dst, sizeof(src));
466-
}
467-
468-
static int cm_compare_private_data(u32 *private_data,
469-
struct ib_cm_compare_data *dst_data)
470-
{
471-
u32 src[IB_CM_COMPARE_SIZE];
472-
473-
if (!dst_data)
474-
return 0;
475-
476-
cm_mask_copy(src, private_data, dst_data->mask);
477-
return memcmp(src, dst_data->data, sizeof(src));
478-
}
479-
480445
/*
481446
* Trivial helpers to strip endian annotation and compare; the
482447
* endianness doesn't actually matter since we just need a stable
@@ -509,18 +474,14 @@ static struct cm_id_private * cm_insert_listen(struct cm_id_private *cm_id_priv)
509474
struct cm_id_private *cur_cm_id_priv;
510475
__be64 service_id = cm_id_priv->id.service_id;
511476
__be64 service_mask = cm_id_priv->id.service_mask;
512-
int data_cmp;
513477

514478
while (*link) {
515479
parent = *link;
516480
cur_cm_id_priv = rb_entry(parent, struct cm_id_private,
517481
service_node);
518-
data_cmp = cm_compare_data(cm_id_priv->compare_data,
519-
cur_cm_id_priv->compare_data);
520482
if ((cur_cm_id_priv->id.service_mask & service_id) ==
521483
(service_mask & cur_cm_id_priv->id.service_id) &&
522-
(cm_id_priv->id.device == cur_cm_id_priv->id.device) &&
523-
!data_cmp)
484+
(cm_id_priv->id.device == cur_cm_id_priv->id.device))
524485
return cur_cm_id_priv;
525486

526487
if (cm_id_priv->id.device < cur_cm_id_priv->id.device)
@@ -531,8 +492,6 @@ static struct cm_id_private * cm_insert_listen(struct cm_id_private *cm_id_priv)
531492
link = &(*link)->rb_left;
532493
else if (be64_gt(service_id, cur_cm_id_priv->id.service_id))
533494
link = &(*link)->rb_right;
534-
else if (data_cmp < 0)
535-
link = &(*link)->rb_left;
536495
else
537496
link = &(*link)->rb_right;
538497
}
@@ -542,20 +501,16 @@ static struct cm_id_private * cm_insert_listen(struct cm_id_private *cm_id_priv)
542501
}
543502

544503
static struct cm_id_private * cm_find_listen(struct ib_device *device,
545-
__be64 service_id,
546-
u32 *private_data)
504+
__be64 service_id)
547505
{
548506
struct rb_node *node = cm.listen_service_table.rb_node;
549507
struct cm_id_private *cm_id_priv;
550-
int data_cmp;
551508

552509
while (node) {
553510
cm_id_priv = rb_entry(node, struct cm_id_private, service_node);
554-
data_cmp = cm_compare_private_data(private_data,
555-
cm_id_priv->compare_data);
556511
if ((cm_id_priv->id.service_mask & service_id) ==
557512
cm_id_priv->id.service_id &&
558-
(cm_id_priv->id.device == device) && !data_cmp)
513+
(cm_id_priv->id.device == device))
559514
return cm_id_priv;
560515

561516
if (device < cm_id_priv->id.device)
@@ -566,8 +521,6 @@ static struct cm_id_private * cm_find_listen(struct ib_device *device,
566521
node = node->rb_left;
567522
else if (be64_gt(service_id, cm_id_priv->id.service_id))
568523
node = node->rb_right;
569-
else if (data_cmp < 0)
570-
node = node->rb_left;
571524
else
572525
node = node->rb_right;
573526
}
@@ -939,7 +892,6 @@ static void cm_destroy_id(struct ib_cm_id *cm_id, int err)
939892
wait_for_completion(&cm_id_priv->comp);
940893
while ((work = cm_dequeue_work(cm_id_priv)) != NULL)
941894
cm_free_work(work);
942-
kfree(cm_id_priv->compare_data);
943895
kfree(cm_id_priv->private_data);
944896
kfree(cm_id_priv);
945897
}
@@ -962,20 +914,11 @@ EXPORT_SYMBOL(ib_destroy_cm_id);
962914
* range of service IDs. If set to 0, the service ID is matched
963915
* exactly. This parameter is ignored if %service_id is set to
964916
* IB_CM_ASSIGN_SERVICE_ID.
965-
* @compare_data: This parameter is optional. It specifies data that must
966-
* appear in the private data of a connection request for the specified
967-
* listen request.
968-
* @lock: If set, lock the cm.lock spin-lock when adding the id to the
969-
* listener tree. When false, the caller must already hold the spin-lock,
970-
* and compare_data must be NULL.
971917
*/
972918
static int __ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id,
973-
__be64 service_mask,
974-
struct ib_cm_compare_data *compare_data,
975-
bool lock)
919+
__be64 service_mask)
976920
{
977921
struct cm_id_private *cm_id_priv, *cur_cm_id_priv;
978-
unsigned long flags = 0;
979922
int ret = 0;
980923

981924
service_mask = service_mask ? service_mask : ~cpu_to_be64(0);
@@ -988,22 +931,9 @@ static int __ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id,
988931
if (cm_id->state != IB_CM_IDLE)
989932
return -EINVAL;
990933

991-
if (compare_data) {
992-
cm_id_priv->compare_data = kzalloc(sizeof *compare_data,
993-
GFP_KERNEL);
994-
if (!cm_id_priv->compare_data)
995-
return -ENOMEM;
996-
cm_mask_copy(cm_id_priv->compare_data->data,
997-
compare_data->data, compare_data->mask);
998-
memcpy(cm_id_priv->compare_data->mask, compare_data->mask,
999-
sizeof(compare_data->mask));
1000-
}
1001-
1002934
cm_id->state = IB_CM_LISTEN;
1003-
if (lock)
1004-
spin_lock_irqsave(&cm.lock, flags);
1005-
1006935
++cm_id_priv->listen_sharecount;
936+
1007937
if (service_id == IB_CM_ASSIGN_SERVICE_ID) {
1008938
cm_id->service_id = cpu_to_be64(cm.listen_service_id++);
1009939
cm_id->service_mask = ~cpu_to_be64(0);
@@ -1016,22 +946,21 @@ static int __ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id,
1016946
if (cur_cm_id_priv) {
1017947
cm_id->state = IB_CM_IDLE;
1018948
--cm_id_priv->listen_sharecount;
1019-
kfree(cm_id_priv->compare_data);
1020-
cm_id_priv->compare_data = NULL;
1021949
ret = -EBUSY;
1022950
}
1023-
1024-
if (lock)
1025-
spin_unlock_irqrestore(&cm.lock, flags);
1026-
1027951
return ret;
1028952
}
1029953

1030-
int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id, __be64 service_mask,
1031-
struct ib_cm_compare_data *compare_data)
954+
int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id, __be64 service_mask)
1032955
{
1033-
return __ib_cm_listen(cm_id, service_id, service_mask, compare_data,
1034-
true);
956+
unsigned long flags;
957+
int ret;
958+
959+
spin_lock_irqsave(&cm.lock, flags);
960+
ret = __ib_cm_listen(cm_id, service_id, service_mask);
961+
spin_unlock_irqrestore(&cm.lock, flags);
962+
963+
return ret;
1035964
}
1036965
EXPORT_SYMBOL(ib_cm_listen);
1037966

@@ -1071,7 +1000,7 @@ struct ib_cm_id *ib_cm_insert_listen(struct ib_device *device,
10711000
goto new_id;
10721001

10731002
/* Find an existing ID */
1074-
cm_id_priv = cm_find_listen(device, service_id, NULL);
1003+
cm_id_priv = cm_find_listen(device, service_id);
10751004
if (cm_id_priv) {
10761005
if (cm_id->cm_handler != cm_handler || cm_id->context) {
10771006
/* Sharing an ib_cm_id with different handlers is not
@@ -1090,7 +1019,7 @@ struct ib_cm_id *ib_cm_insert_listen(struct ib_device *device,
10901019

10911020
new_id:
10921021
/* Use newly created ID */
1093-
err = __ib_cm_listen(cm_id, service_id, 0, NULL, false);
1022+
err = __ib_cm_listen(cm_id, service_id, 0);
10941023

10951024
spin_unlock_irqrestore(&cm.lock, flags);
10961025

@@ -1615,8 +1544,7 @@ static struct cm_id_private * cm_match_req(struct cm_work *work,
16151544

16161545
/* Find matching listen request. */
16171546
listen_cm_id_priv = cm_find_listen(cm_id_priv->id.device,
1618-
req_msg->service_id,
1619-
req_msg->private_data);
1547+
req_msg->service_id);
16201548
if (!listen_cm_id_priv) {
16211549
cm_cleanup_timewait(cm_id_priv->timewait_info);
16221550
spin_unlock_irq(&cm.lock);
@@ -3164,8 +3092,7 @@ static int cm_sidr_req_handler(struct cm_work *work)
31643092
}
31653093
cm_id_priv->id.state = IB_CM_SIDR_REQ_RCVD;
31663094
cur_cm_id_priv = cm_find_listen(cm_id->device,
3167-
sidr_req_msg->service_id,
3168-
sidr_req_msg->private_data);
3095+
sidr_req_msg->service_id);
31693096
if (!cur_cm_id_priv) {
31703097
spin_unlock_irq(&cm.lock);
31713098
cm_reject_sidr_req(cm_id_priv, IB_SIDR_UNSUPPORTED);

drivers/infiniband/core/ucm.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -658,8 +658,7 @@ static ssize_t ib_ucm_listen(struct ib_ucm_file *file,
658658
if (result)
659659
goto out;
660660

661-
result = ib_cm_listen(ctx->cm_id, cmd.service_id, cmd.service_mask,
662-
NULL);
661+
result = ib_cm_listen(ctx->cm_id, cmd.service_id, cmd.service_mask);
663662
out:
664663
ib_ucm_ctx_put(ctx);
665664
return result;

drivers/infiniband/ulp/ipoib/ipoib_cm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -848,7 +848,7 @@ int ipoib_cm_dev_open(struct net_device *dev)
848848
}
849849

850850
ret = ib_cm_listen(priv->cm.id, cpu_to_be64(IPOIB_CM_IETF_ID | priv->qp->qp_num),
851-
0, NULL);
851+
0);
852852
if (ret) {
853853
printk(KERN_WARNING "%s: failed to listen on ID 0x%llx\n", priv->ca->name,
854854
IPOIB_CM_IETF_ID | priv->qp->qp_num);

drivers/infiniband/ulp/srpt/ib_srpt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3250,7 +3250,7 @@ static void srpt_add_one(struct ib_device *device)
32503250
* in the system as service_id; therefore, the target_id will change
32513251
* if this HCA is gone bad and replaced by different HCA
32523252
*/
3253-
if (ib_cm_listen(sdev->cm_id, cpu_to_be64(srpt_service_guid), 0, NULL))
3253+
if (ib_cm_listen(sdev->cm_id, cpu_to_be64(srpt_service_guid), 0))
32543254
goto err_cm;
32553255

32563256
INIT_IB_EVENT_HANDLER(&sdev->event_handler, sdev->device,

include/rdma/ib_cm.h

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,6 @@ enum ib_cm_data_size {
105105
IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE = 216,
106106
IB_CM_SIDR_REP_PRIVATE_DATA_SIZE = 136,
107107
IB_CM_SIDR_REP_INFO_LENGTH = 72,
108-
/* compare done u32 at a time */
109-
IB_CM_COMPARE_SIZE = (64 / sizeof(u32))
110108
};
111109

112110
struct ib_cm_id;
@@ -344,11 +342,6 @@ void ib_destroy_cm_id(struct ib_cm_id *cm_id);
344342
#define IB_SDP_SERVICE_ID cpu_to_be64(0x0000000000010000ULL)
345343
#define IB_SDP_SERVICE_ID_MASK cpu_to_be64(0xFFFFFFFFFFFF0000ULL)
346344

347-
struct ib_cm_compare_data {
348-
u32 data[IB_CM_COMPARE_SIZE];
349-
u32 mask[IB_CM_COMPARE_SIZE];
350-
};
351-
352345
/**
353346
* ib_cm_listen - Initiates listening on the specified service ID for
354347
* connection and service ID resolution requests.
@@ -361,12 +354,9 @@ struct ib_cm_compare_data {
361354
* range of service IDs. If set to 0, the service ID is matched
362355
* exactly. This parameter is ignored if %service_id is set to
363356
* IB_CM_ASSIGN_SERVICE_ID.
364-
* @compare_data: This parameter is optional. It specifies data that must
365-
* appear in the private data of a connection request for the specified
366-
* listen request.
367357
*/
368-
int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id, __be64 service_mask,
369-
struct ib_cm_compare_data *compare_data);
358+
int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id,
359+
__be64 service_mask);
370360

371361
struct ib_cm_id *ib_cm_insert_listen(struct ib_device *device,
372362
ib_cm_handler cm_handler,

0 commit comments

Comments
 (0)