// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB /* Copyright (c) 2004 Topspin Communications. All rights reserved. * Copyright (c) 2005 - 2008 Mellanox Technologies. All rights reserved. * Copyright (c) 2006 - 2007 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. */ #include "dr_types.h" int mlx5dr_buddy_init(struct mlx5dr_icm_buddy_mem *buddy, unsigned int max_order) { … } void mlx5dr_buddy_cleanup(struct mlx5dr_icm_buddy_mem *buddy) { … } static int dr_buddy_find_free_seg(struct mlx5dr_icm_buddy_mem *buddy, unsigned int start_order, unsigned int *segment, unsigned int *order) { … } /** * mlx5dr_buddy_alloc_mem() - Update second level bitmap. * @buddy: Buddy to update. * @order: Order of the buddy to update. * @segment: Segment number. * * This function finds the first area of the ICM memory managed by this buddy. * It uses the data structures of the buddy system in order to find the first * area of free place, starting from the current order till the maximum order * in the system. * * Return: 0 when segment is set, non-zero error status otherwise. * * The function returns the location (segment) in the whole buddy ICM memory * area - the index of the memory segment that is available for use. */ int mlx5dr_buddy_alloc_mem(struct mlx5dr_icm_buddy_mem *buddy, unsigned int order, unsigned int *segment) { … } void mlx5dr_buddy_free_mem(struct mlx5dr_icm_buddy_mem *buddy, unsigned int seg, unsigned int order) { … }