1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 2*2d9fd380Sjfb8856606 * Copyright 2020 Mellanox Technologies, Ltd 3*2d9fd380Sjfb8856606 */ 4*2d9fd380Sjfb8856606 5*2d9fd380Sjfb8856606 #ifndef MLX5_MALLOC_H_ 6*2d9fd380Sjfb8856606 #define MLX5_MALLOC_H_ 7*2d9fd380Sjfb8856606 8*2d9fd380Sjfb8856606 #ifdef __cplusplus 9*2d9fd380Sjfb8856606 extern "C" { 10*2d9fd380Sjfb8856606 #endif 11*2d9fd380Sjfb8856606 12*2d9fd380Sjfb8856606 #ifndef MLX5_MALLOC_ALIGNMENT 13*2d9fd380Sjfb8856606 #ifndef RTE_ARCH_64 14*2d9fd380Sjfb8856606 #define MLX5_MALLOC_ALIGNMENT 8 15*2d9fd380Sjfb8856606 #else 16*2d9fd380Sjfb8856606 #define MLX5_MALLOC_ALIGNMENT 16 17*2d9fd380Sjfb8856606 #endif 18*2d9fd380Sjfb8856606 #endif 19*2d9fd380Sjfb8856606 20*2d9fd380Sjfb8856606 enum mlx5_mem_flags { 21*2d9fd380Sjfb8856606 MLX5_MEM_ANY = 0, 22*2d9fd380Sjfb8856606 /* Memory will be allocated dpends on sys_mem_en. */ 23*2d9fd380Sjfb8856606 MLX5_MEM_SYS = 1 << 0, 24*2d9fd380Sjfb8856606 /* Memory should be allocated from system. */ 25*2d9fd380Sjfb8856606 MLX5_MEM_RTE = 1 << 1, 26*2d9fd380Sjfb8856606 /* Memory should be allocated from rte hugepage. */ 27*2d9fd380Sjfb8856606 MLX5_MEM_ZERO = 1 << 2, 28*2d9fd380Sjfb8856606 /* Memory should be cleared to zero. */ 29*2d9fd380Sjfb8856606 }; 30*2d9fd380Sjfb8856606 31*2d9fd380Sjfb8856606 /** 32*2d9fd380Sjfb8856606 * Select the PMD memory allocate preference. 33*2d9fd380Sjfb8856606 * 34*2d9fd380Sjfb8856606 * Once sys_mem_en is set, the default memory allocate will from 35*2d9fd380Sjfb8856606 * system only if an explicitly flag is set to order the memory 36*2d9fd380Sjfb8856606 * from rte hugepage memory. 37*2d9fd380Sjfb8856606 * 38*2d9fd380Sjfb8856606 * @param sys_mem_en 39*2d9fd380Sjfb8856606 * Use system memory or not. 40*2d9fd380Sjfb8856606 */ 41*2d9fd380Sjfb8856606 __rte_internal 42*2d9fd380Sjfb8856606 void mlx5_malloc_mem_select(uint32_t sys_mem_en); 43*2d9fd380Sjfb8856606 44*2d9fd380Sjfb8856606 /** 45*2d9fd380Sjfb8856606 * Dump the PMD memory usage statistic. 46*2d9fd380Sjfb8856606 */ 47*2d9fd380Sjfb8856606 __rte_internal 48*2d9fd380Sjfb8856606 void mlx5_memory_stat_dump(void); 49*2d9fd380Sjfb8856606 50*2d9fd380Sjfb8856606 /** 51*2d9fd380Sjfb8856606 * Memory allocate function. 52*2d9fd380Sjfb8856606 * 53*2d9fd380Sjfb8856606 * @param flags 54*2d9fd380Sjfb8856606 * The bits as enum mlx5_mem_flags defined. 55*2d9fd380Sjfb8856606 * @param size 56*2d9fd380Sjfb8856606 * Memory size to be allocated. 57*2d9fd380Sjfb8856606 * @param align 58*2d9fd380Sjfb8856606 * Memory alignment. 59*2d9fd380Sjfb8856606 * @param socket 60*2d9fd380Sjfb8856606 * The socket memory should allocated. 61*2d9fd380Sjfb8856606 * Valid only when allocate the memory from rte hugepage. 62*2d9fd380Sjfb8856606 * 63*2d9fd380Sjfb8856606 * @return 64*2d9fd380Sjfb8856606 * Pointer of the allocated memory, NULL otherwise. 65*2d9fd380Sjfb8856606 */ 66*2d9fd380Sjfb8856606 __rte_internal 67*2d9fd380Sjfb8856606 void *mlx5_malloc(uint32_t flags, size_t size, unsigned int align, int socket); 68*2d9fd380Sjfb8856606 69*2d9fd380Sjfb8856606 /** 70*2d9fd380Sjfb8856606 * Memory reallocate function. 71*2d9fd380Sjfb8856606 * 72*2d9fd380Sjfb8856606 * 73*2d9fd380Sjfb8856606 * 74*2d9fd380Sjfb8856606 * @param addr 75*2d9fd380Sjfb8856606 * The memory to be reallocated. 76*2d9fd380Sjfb8856606 * @param flags 77*2d9fd380Sjfb8856606 * The bits as enum mlx5_mem_flags defined. 78*2d9fd380Sjfb8856606 * @param size 79*2d9fd380Sjfb8856606 * Memory size to be allocated. 80*2d9fd380Sjfb8856606 * @param align 81*2d9fd380Sjfb8856606 * Memory alignment. 82*2d9fd380Sjfb8856606 * @param socket 83*2d9fd380Sjfb8856606 * The socket memory should allocated. 84*2d9fd380Sjfb8856606 * Valid only when allocate the memory from rte hugepage. 85*2d9fd380Sjfb8856606 * 86*2d9fd380Sjfb8856606 * @return 87*2d9fd380Sjfb8856606 * Pointer of the allocated memory, NULL otherwise. 88*2d9fd380Sjfb8856606 */ 89*2d9fd380Sjfb8856606 90*2d9fd380Sjfb8856606 __rte_internal 91*2d9fd380Sjfb8856606 void *mlx5_realloc(void *addr, uint32_t flags, size_t size, unsigned int align, 92*2d9fd380Sjfb8856606 int socket); 93*2d9fd380Sjfb8856606 94*2d9fd380Sjfb8856606 /** 95*2d9fd380Sjfb8856606 * Memory free function. 96*2d9fd380Sjfb8856606 * 97*2d9fd380Sjfb8856606 * @param addr 98*2d9fd380Sjfb8856606 * The memory address to be freed.. 99*2d9fd380Sjfb8856606 */ 100*2d9fd380Sjfb8856606 __rte_internal 101*2d9fd380Sjfb8856606 void mlx5_free(void *addr); 102*2d9fd380Sjfb8856606 103*2d9fd380Sjfb8856606 #ifdef __cplusplus 104*2d9fd380Sjfb8856606 } 105*2d9fd380Sjfb8856606 #endif 106*2d9fd380Sjfb8856606 107*2d9fd380Sjfb8856606 #endif 108