/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ /* Copyright (c) 2019 Mellanox Technologies */ #ifndef __MLX5_MAPPING_H__ #define __MLX5_MAPPING_H__ struct mapping_ctx; int mapping_add(struct mapping_ctx *ctx, void *data, u32 *id); int mapping_remove(struct mapping_ctx *ctx, u32 id); int mapping_find(struct mapping_ctx *ctx, u32 id, void *data); /* mapping uses an xarray to map data to ids in add(), and for find(). * For locking, it uses a internal xarray spin lock for add()/remove(), * find() uses rcu_read_lock(). * Choosing delayed_removal postpones the removal of a previously mapped * id by MAPPING_GRACE_PERIOD milliseconds. * This is to avoid races against hardware, where we mark the packet in * hardware with a previous id, and quick remove() and add() reusing the same * previous id. Then find() will get the new mapping instead of the old * which was used to mark the packet. */ struct mapping_ctx *mapping_create(size_t data_size, u32 max_id, bool delayed_removal); void mapping_destroy(struct mapping_ctx *ctx); #endif /* __MLX5_MAPPING_H__ */