首页 > 其他分享 >Sync File API 指南【ChatGPT】

Sync File API 指南【ChatGPT】

时间:2023-12-10 19:44:32浏览次数:36  
标签:驱动程序 fence Sync sync API file ChatGPT fences

Sync File API Guide

本文档旨在为设备驱动程序编写者提供有关sync_file API的指南,以及驱动程序如何支持它。Sync file是需要在驱动程序之间或跨进程边界同步的fences(struct dma_fence)的载体。

sync_file API旨在用于在用户空间和内核空间之间发送和接收fence信息。它使用户空间能够进行显式的fencing,即生产者驱动程序(如GPU或V4L驱动程序)不是将fence附加到缓冲区,而是通过sync_file将与缓冲区相关的fence发送到用户空间。

然后,sync_file可以发送到消费者(例如DRM驱动程序),在fence信号之前,消费者不会对缓冲区进行任何操作,即发出fence的驱动程序不再使用/处理缓冲区,因此它表示缓冲区已准备好使用。对于循环的消费者->生产者部分也是如此。

Sync file允许用户空间了解驱动程序之间的缓冲区共享同步。

Sync file最初是在Android内核中添加的,但当前的Linux桌面系统也可以从中受益。

in-fences和out-fences

Sync file可以从用户空间发送到内核空间,也可以从内核空间发送到用户空间。当sync_file从驱动程序发送到用户空间时,其中包含的fences称为'out-fences'。它们与驱动程序正在处理或将要处理的缓冲区相关,因此驱动程序创建out-fence以通过dma_fence_signal()通知何时完成使用(或处理)该缓冲区。Out-fences是驱动程序创建的fences。

另一方面,如果驱动程序通过sync_file从用户空间接收fence(s),则称这些fence(s)为'in-fences'。接收in-fences意味着我们需要在使用与in-fences相关的任何缓冲区之前等待fence(s)发出信号。

创建Sync Files

当驱动程序需要向用户空间发送out-fence时,它创建一个sync_file。

接口:

struct sync_file *sync_file_create(struct dma_fence *fence);

调用者传递out-fence并获得sync_file。这只是第一步,接下来需要在sync_file->file上安装一个fd。因此,它获取一个fd:

fd = get_unused_fd_flags(O_CLOEXEC);

并将其安装在sync_file->file上:

fd_install(fd, sync_file->file);

现在可以将sync_file fd发送到用户空间。

如果创建过程失败,或者由于其他原因需要释放sync_file,则应使用fput(sync_file->file)。

从用户空间接收Sync Files

当用户空间需要向驱动程序发送in-fence时,它将Sync File的文件描述符传递给内核。然后内核可以从中检索fences。

接口:

struct dma_fence *sync_file_get_fence(int fd);

返回的引用由调用者拥有,并且必须在使用dma_fence_put()之后进行处理。如果出现错误,将返回NULL。

参考:

  • include/linux/sync_file.h中的struct sync_file
  • include/linux/sync_file.h中定义的所有上述接口

标签:驱动程序,fence,Sync,sync,API,file,ChatGPT,fences
From: https://www.cnblogs.com/pengdonglin137/p/17893116.html

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (153)-- 算法导论12.2 9题
    九、用go语言,设T是一棵二叉搜索树,其关键字互不相同;设x是一个叶结点,y为其父结点。证明:y.key或者是T树中大于x.key的最小关键字,或者是T树中小于x.key的最大关键字。文心一言:要证明这个性质,我们可以采用二叉搜索树的性质:对于任何节点N,其左子树中的所有节点的值都小......
  • Ramfs、rootfs和initramfs【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/filesystems/ramfs-rootfs-initramfs.htmlRamfs、rootfs和initramfs作者[email protected]什么是ramfs?Ramfs是一个非常简单的文件系统,它将Linux的磁盘缓存机制(页面缓存和目录项缓存)作为一个动态可调整大小的基于RAM的文件......
  • Java实现对Hadoop HDFS的API操作
    1.配置Hadoop的Windows客户端Hadoop配置Windows客户端2.新建Maven项目[略]3.添加依赖<!--https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client--><dependency><groupId>org.apache.hadoop</groupId>......
  • 设备链接 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/device_link.html默认情况下,驱动核心仅强制执行设备之间的依赖关系,这些依赖关系源自设备层次结构中的父/子关系:在挂起、恢复或关闭系统时,设备的顺序是基于这种关系的,即子设备总是在其父设备之前挂起,父设备总是在其子设备之前......
  • DMA-BUF缓冲区共享和同步【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/dma-buf.html#DMA-BUF缓冲区共享和同步DMA-BUF子系统提供了一个框架,用于在多个设备驱动程序和子系统之间共享硬件(DMA)访问的缓冲区,并用于同步异步硬件访问。例如,drm的“prime”多GPU支持就使用了这个框架,但当然不仅限于GPU的......
  • ioctl基于接口 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/ioctl.htmlioctl基于接口ioctl()是应用程序与设备驱动程序进行接口交互的最常见方式。它灵活且易于通过添加新命令进行扩展,并且可以通过字符设备、块设备以及套接字和其他特殊文件描述符进行传递。然而,很容易错误地定义ioct......
  • 将驱动程序移植到新的驱动模型 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/driver-model/porting.html将驱动程序移植到新的驱动模型PatrickMochel2003年1月7日概述请参阅Documentation/driver-api/driver-model/*.rst以获取各种驱动程序类型和概念的定义。将设备驱动程序移植到新模型的大部分......
  • 平台设备和驱动程序 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/driver-model/platform.html平台设备和驱动程序请参阅<linux/platform_device.h>以获取与平台总线的驱动程序模型接口相关的信息:platform_device和platform_driver。这个伪总线用于连接具有最小基础设施的总线上的设备,例如用......
  • 设备驱动程序 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/driver-model/driver.html设备驱动程序请参阅结构体device_driver的kerneldoc。分配设备驱动程序是静态分配的结构。尽管系统中可能有多个驱动程序支持的设备,但structdevice_driver代表了整个驱动程序(而不是特定的设备实......
  • 总线类型 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/driver-model/bus.html总线类型定义请参阅结构体bus_type的内核文档。intbus_register(structbus_type*bus);声明内核中的每个总线类型(如PCI、USB等)应该声明一个此类型的静态对象。它们必须初始化name字段,并可以选......