鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

特殊场景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释放预留的内存。