Lines Matching refs:gids

165 static int mlx4_ib_update_gids_v1(struct gid_entry *gids,  in mlx4_ib_update_gids_v1()  argument
182 memcpy(&gid_tbl[i], &gids[i].gid, sizeof(union ib_gid)); in mlx4_ib_update_gids_v1()
198 static int mlx4_ib_update_gids_v1_v2(struct gid_entry *gids, in mlx4_ib_update_gids_v1_v2() argument
221 memcpy(&gid_tbl[i].gid, &gids[i].gid, sizeof(union ib_gid)); in mlx4_ib_update_gids_v1_v2()
222 if (gids[i].gid_type == IB_GID_TYPE_ROCE_UDP_ENCAP) { in mlx4_ib_update_gids_v1_v2()
224 if (!ipv6_addr_v4mapped((struct in6_addr *)&gids[i].gid)) in mlx4_ib_update_gids_v1_v2()
245 static int mlx4_ib_update_gids(struct gid_entry *gids, in mlx4_ib_update_gids() argument
250 return mlx4_ib_update_gids_v1_v2(gids, ibdev, port_num); in mlx4_ib_update_gids()
252 return mlx4_ib_update_gids_v1(gids, ibdev, port_num); in mlx4_ib_update_gids()
269 struct gid_entry *gids = NULL; in mlx4_ib_add_gid() local
280 port_gid_table = &iboe->gids[port_num - 1]; in mlx4_ib_add_gid()
283 if (!memcmp(&port_gid_table->gids[i].gid, gid, sizeof(*gid)) && in mlx4_ib_add_gid()
284 (port_gid_table->gids[i].gid_type == attr->gid_type)) { in mlx4_ib_add_gid()
288 if (free < 0 && !memcmp(&port_gid_table->gids[i].gid, &zgid, sizeof(*gid))) in mlx4_ib_add_gid()
296 port_gid_table->gids[free].ctx = kmalloc(sizeof(*port_gid_table->gids[free].ctx), GFP_ATOMIC); in mlx4_ib_add_gid()
297 if (!port_gid_table->gids[free].ctx) { in mlx4_ib_add_gid()
300 *context = port_gid_table->gids[free].ctx; in mlx4_ib_add_gid()
301 memcpy(&port_gid_table->gids[free].gid, gid, sizeof(*gid)); in mlx4_ib_add_gid()
302 port_gid_table->gids[free].gid_type = attr->gid_type; in mlx4_ib_add_gid()
303 port_gid_table->gids[free].ctx->real_index = free; in mlx4_ib_add_gid()
304 port_gid_table->gids[free].ctx->refcount = 1; in mlx4_ib_add_gid()
309 struct gid_cache_context *ctx = port_gid_table->gids[found].ctx; in mlx4_ib_add_gid()
314 gids = kmalloc(sizeof(*gids) * MLX4_MAX_PORT_GIDS, GFP_ATOMIC); in mlx4_ib_add_gid()
315 if (!gids) { in mlx4_ib_add_gid()
319 memcpy(&gids[i].gid, &port_gid_table->gids[i].gid, sizeof(union ib_gid)); in mlx4_ib_add_gid()
320 gids[i].gid_type = port_gid_table->gids[i].gid_type; in mlx4_ib_add_gid()
327 ret = mlx4_ib_update_gids(gids, ibdev, port_num); in mlx4_ib_add_gid()
328 kfree(gids); in mlx4_ib_add_gid()
345 struct gid_entry *gids = NULL; in mlx4_ib_del_gid() local
353 port_gid_table = &iboe->gids[port_num - 1]; in mlx4_ib_del_gid()
360 memcpy(&port_gid_table->gids[real_index].gid, &zgid, sizeof(zgid)); in mlx4_ib_del_gid()
361 kfree(port_gid_table->gids[real_index].ctx); in mlx4_ib_del_gid()
362 port_gid_table->gids[real_index].ctx = NULL; in mlx4_ib_del_gid()
369 gids = kmalloc(sizeof(*gids) * MLX4_MAX_PORT_GIDS, GFP_ATOMIC); in mlx4_ib_del_gid()
370 if (!gids) { in mlx4_ib_del_gid()
374 memcpy(&gids[i].gid, in mlx4_ib_del_gid()
375 &port_gid_table->gids[i].gid, in mlx4_ib_del_gid()
377 gids[i].gid_type = in mlx4_ib_del_gid()
378 port_gid_table->gids[i].gid_type; in mlx4_ib_del_gid()
385 ret = mlx4_ib_update_gids(gids, ibdev, port_num); in mlx4_ib_del_gid()
386 kfree(gids); in mlx4_ib_del_gid()
424 port_gid_table = &iboe->gids[port_num - 1]; in mlx4_ib_gid_index_to_real_index()
427 if (!memcmp(&port_gid_table->gids[i].gid, &gid, sizeof(gid)) && in mlx4_ib_gid_index_to_real_index()
428 attr.gid_type == port_gid_table->gids[i].gid_type) { in mlx4_ib_gid_index_to_real_index()
429 ctx = port_gid_table->gids[i].ctx; in mlx4_ib_gid_index_to_real_index()