---
title: 特殊场景1-不支持SVA但是使能IOMMU，所有注册到UACCE框架的设备都是支持PASID和支持IOMMU的场景
description: "在这种场景下，和特殊场景1-不支持SVA但是使能IOMMU，所有注册到UACCE框架的设备都是支持PASID和支持IOMMU的场景一致。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_17_0023.html
sourcePath: /source/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_17_0023.html
indexId: a512bcdd3859f97fe1155212974ee9ae4439e8e07c9f290f6ba5fbc7c64bb5f172
---
# 特殊场景1-不支持SVA但是使能IOMMU，所有注册到UACCE框架的设备都是支持PASID和支持IOMMU的场景

在这种场景下，和特殊场景1-不支持SVA但是使能IOMMU，所有注册到UACCE框架的设备都是支持PASID和支持IOMMU的场景一致。

算法层没有新增接口。

在涉及到内存操作时要稍作调整，具体包括：

1. 调用算法操作前，指针需要传递给硬件的话，在  默认场景
的第4步之前，声明一个struct wd_blkpool_setup变量，确定使用多大的内存池，这块内存池里面又切分成多少块，每块内存是多大。
  1 2 3 4 5 6 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 */ };

2. 调用算法操作前，指针需要传递给硬件的话，取struct wd_blkpool_setup变量地址作为参数，调用void *wd_blkpool_create(struct wd_queue *q, struct wd_blkpool_setup *setup)接口预留出相应大小的内存，如果成功则返回内存池起始地址，失败则返回空指针。函数内部会调用wd_reserve_memory来预留内存。
3. 调用算法操作前，指针需要传递给硬件的话，在  默认场景
中的第4步中，涉及到需要传给硬件的地址，都通过wd_alloc_blk从预留的内存池中分配出来。
4. 数据处理完后，在  默认场景
中的第6步中，释放内存时，使用wd_free_blk释放。
5. 释放队列前，在  默认场景
中的第7步后，把预留内存池起始地址作为参数，调用wd_blkpool_destroy释放预留的内存。
