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