hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/infiniband/hw/mlx5/devx.c
....@@ -595,7 +595,21 @@
595595 obj_id;
596596
597597 case MLX5_IB_OBJECT_DEVX_OBJ:
598
- return ((struct devx_obj *)uobj->object)->obj_id == obj_id;
598
+ {
599
+ u16 opcode = MLX5_GET(general_obj_in_cmd_hdr, in, opcode);
600
+ struct devx_obj *devx_uobj = uobj->object;
601
+
602
+ if (opcode == MLX5_CMD_OP_QUERY_FLOW_COUNTER &&
603
+ devx_uobj->flow_counter_bulk_size) {
604
+ u64 end;
605
+
606
+ end = devx_uobj->obj_id +
607
+ devx_uobj->flow_counter_bulk_size;
608
+ return devx_uobj->obj_id <= obj_id && end > obj_id;
609
+ }
610
+
611
+ return devx_uobj->obj_id == obj_id;
612
+ }
599613
600614 default:
601615 return false;
....@@ -1416,10 +1430,17 @@
14161430 goto obj_free;
14171431
14181432 if (opcode == MLX5_CMD_OP_ALLOC_FLOW_COUNTER) {
1419
- u8 bulk = MLX5_GET(alloc_flow_counter_in,
1420
- cmd_in,
1421
- flow_counter_bulk);
1422
- obj->flow_counter_bulk_size = 128UL * bulk;
1433
+ u32 bulk = MLX5_GET(alloc_flow_counter_in,
1434
+ cmd_in,
1435
+ flow_counter_bulk_log_size);
1436
+
1437
+ if (bulk)
1438
+ bulk = 1 << bulk;
1439
+ else
1440
+ bulk = 128UL * MLX5_GET(alloc_flow_counter_in,
1441
+ cmd_in,
1442
+ flow_counter_bulk);
1443
+ obj->flow_counter_bulk_size = bulk;
14231444 }
14241445
14251446 uobj->object = obj;