---
title: BLK内存管理接口
description: "```"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_17_0041.html
sourcePath: /source/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_17_0041.html
indexId: 7b66cf4ba0564b49d7b48e71275e0610c84e60c01c6a8eb54151cca15b7b235a72
---
# BLK内存管理接口

```
/* Memory pool creating parameters */
struct wd_blkpool_setup {
__u32 block_size;/* Block buffer size */
__u32 block_num;/* Block buffer number */
__u32 align_size;/* Block buffer startging address align size */
struct wd_mm_br br;/* memory from user if don't use WD memory */
};
```

| 函数原型 | void \*wd\_blkpool\_create(struct wd\_queue \*q, struct wd\_blkpool\_setup \*setup); |
| --- | --- |
| 函数功能 | 在Warpdrive队列上使用Warpdrive内存或用户的内存创建块内存池 |
| 输入说明 | q：Warpdrive算法队列 setup：用户给出的规格与内存信息 |
| 输出说明 | setup\->block\_num：当用户使用WD的内存来创建池时，block\_num将作为实际创建的block buffer数量输出；当该数目小于用户输入的要求数量的90%时，创建blkpool将失败 |
| 返回值说明 | 非NULL：BLK池 NULL：失败 |
| 使用说明 | 在使用WD默认内存来创建BLK池时，如果对block\_num数量有严格要求，请配置setup的block\_num比实际需求高15%。 在使用外部内存时，要求用户可提供struct wd\_mm\_br，即br可以满足创建池的内存大小要求，且dma map/unmap操作在该内存范围内适用，若属于直接物理地址DMA，则要求该内存范围内物理地址连续。 |
| 注意事项 | 如果用户没有指定内存，那么默认使用wd预留内存进行池的创建；在使用WD默认内存创建池时，struct wd\_blkpool\_setup中block\_num为输入和输出参数。 |


| 函数原型 | void wd\_blkpool\_destroy(void \*pool); |
| --- | --- |
| 函数功能 | 销毁BLK池 |
| 输入说明 | pool：需要销毁的BLK池 |
| 输出说明 | 无 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void \*wd\_alloc\_blk(void \*pool); |
| --- | --- |
| 函数功能 | 从Warpdrive SGL内存池分配BLK缓冲区 |
| 输入说明 | pool：BLK池 |
| 输出说明 | 无 |
| 返回值说明 | 非NULL：一个BLK buffer的起始地址 NULL：申请失败 |
| 使用说明 | 支持多线程 |
| 注意事项 | 无 |


| 函数原型 | void wd\_free\_blk(void \*pool, void \*blk); |
| --- | --- |
| 函数功能 | 将BLK缓冲区释放到Warpdrive BLK内存池 |
| 输入说明 | pool：BLK池 blk：一个BLK buffer范围内的任意地址 |
| 输出说明 | 无 |
| 返回值说明 | 无 |
| 使用说明 | 支持多线程 |
| 注意事项 | 入参blk是一个block buffer范围内的任意地址 |


| 函数原型 | void \*wd\_blk\_iova\_map(void \*pool, void \*blk); |
| --- | --- |
| 函数功能 | iova映射块缓冲区 |
| 输入说明 | pool：BLK池 blk：一个block buffer范围内的任意地址 |
| 输出说明 | 无 |
| 返回值说明 | 非NULL：返回blk map的iova地址 NULL：map失败 |
| 使用说明 | 支持多线程。 |
| 注意事项 | 目前为了支持no\-iommu与iommu\-passthrough场景的接口。 入参blk是block buffer范围的任意地址。 |


| 函数原型 | void wd\_blk\_iova\_unmap(void \*pool, void \*blk\_iova, void \*blk); |
| --- | --- |
| 函数功能 | 用物理地址取消映射块缓冲区的iova |
| 输入说明 | pool：BLK池 blk\_iova：blk map的iova地址 blk：一个block buffer范围内的任意地址 |
| 输出说明 | 无 |
| 返回值说明 | 无 |
| 使用说明 | 支持多线程 |
| 注意事项 | 目前为了支持no\-iommu与iommu\-passthrough场景的接口，no\-iommu模式下无任何操作。 |


| 函数原型 | int wd\_get\_free\_blk\_num (void \*pool, \_\_u32 \*free\_num); |
| --- | --- |
| 函数功能 | 获取池的空闲块缓冲区数量 |
| 输入说明 | pool：BLK池 |
| 输出说明 | Number of free block buffer：\*free\_num； |
| 返回值说明 | 成功：WD\_SUCCESS 失败：\-WD\_EINVAL |
| 使用说明 | 支持多线程 |
| 注意事项 | 维测接口 |


| 函数原型 | unsigned int wd\_blk\_alloc\_failures (void \*pool, \_\_u32 \*fail\_num); |
| --- | --- |
| 函数功能 | 获取失败的池分配次数 |
| 输入说明 | pool：BLK池 |
| 输出说明 | 分配失败次数将通过指针参数\*fail\_num返回 |
| 返回值说明 | 成功：WD\_SUCCESS 失败：\-WD\_EINVAL |
| 使用说明 | 支持多线程 |
| 注意事项 | 维测接口 |
