cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

core_locking.rst (4005B)


      1
      2.. include:: ../disclaimer-zh_CN.rst
      3
      4:Original: Documentation/infiniband/core_locking.rst
      5
      6:翻译:
      7
      8 司延腾 Yanteng Si <siyanteng@loongson.cn>
      9
     10:校译:
     11
     12 王普宇 Puyu Wang <realpuyuwang@gmail.com>
     13 时奎亮 Alex Shi <alexs@kernel.org>
     14
     15.. _cn_infiniband_core_locking:
     16
     17==================
     18infiniband中间层锁
     19==================
     20
     21  本指南试图明确infiniband中间层的锁假设。它描述了对位于中间层以下的低
     22  级驱动程序和使用中间层的上层协议的要求。
     23
     24睡眠和中断环境
     25==============
     26
     27  除了以下异常情况,ib_device结构体中所有方法的低级驱动实现都可以睡眠。
     28  这些异常情况是列表中的任意的方法:
     29
     30    - create_ah
     31    - modify_ah
     32    - query_ah
     33    - destroy_ah
     34    - post_send
     35    - post_recv
     36    - poll_cq
     37    - req_notify_cq
     38
     39    他们可能不可以睡眠,而且必须可以从任何上下文中调用。
     40
     41    向上层协议使用者输出的相应函数:
     42
     43    - rdma_create_ah
     44    - rdma_modify_ah
     45    - rdma_query_ah
     46    - rdma_destroy_ah
     47    - ib_post_send
     48    - ib_post_recv
     49    - ib_req_notify_cq
     50
     51    因此,在任何情况下都可以安全调用(它们)。
     52
     53  此外,该函数
     54
     55    - ib_dispatch_event
     56
     57  被底层驱动用来通过中间层调度异步事件的“A”,也可以从任何上下文中安全调
     58  用。
     59
     60可重入性
     61--------
     62
     63  由低级驱动程序导出的ib_device结构体中的所有方法必须是完全可重入的。
     64  即使使用同一对象的多个函数调用被同时运行,低级驱动程序也需要执行所有
     65  必要的同步以保持一致性。
     66
     67  IB中间层不执行任何函数调用的序列化。
     68
     69  因为低级驱动程序是可重入的,所以不要求上层协议使用者任何顺序执行。然
     70  而,为了得到合理的结果,可能需要一些顺序。例如,一个使用者可以在多个
     71  CPU上同时安全地调用ib_poll_cq()。然而,不同的ib_poll_cq()调用之间
     72  的工作完成信息的顺序没有被定义。
     73
     74回调
     75----
     76
     77  低级驱动程序不得直接从与ib_device方法调用相同的调用链中执行回调。例
     78  如,低级驱动程序不允许从post_send方法直接调用使用者的完成事件处理程
     79  序。相反,低级驱动程序应该推迟这个回调,例如,调度一个tasklet来执行
     80  这个回调。
     81
     82  低层驱动负责确保同一CQ的多个完成事件处理程序不被同时调用。驱动程序必
     83  须保证一个给定的CQ的事件处理程序在同一时间只有一个在运行。换句话说,
     84  以下情况是不允许的::
     85
     86          CPU1                                    CPU2
     87
     88    low-level driver ->
     89      consumer CQ event callback:
     90        /* ... */
     91        ib_req_notify_cq(cq, ...);
     92                                          low-level driver ->
     93        /* ... */                           consumer CQ event callback:
     94                                              /* ... */
     95        return from CQ event handler
     96
     97  完成事件和异步事件回调的运行环境没有被定义。 根据低级别的驱动程序,它可能是
     98  进程上下文、softirq上下文或中断上下文。上层协议使用者可能不会在回调中睡眠。
     99
    100热插拔
    101------
    102
    103  当一个低级驱动程序调用ib_register_device()时,它宣布一个设备已经
    104  准备好供使用者使用,所有的初始化必须在这个调用之前完成。设备必须保
    105  持可用,直到驱动对ib_unregister_device()的调用返回。
    106
    107  低级驱动程序必须从进程上下文调用ib_register_device()和
    108  ib_unregister_device()。如果使用者在这些调用中回调到驱动程序,它
    109  不能持有任何可能导致死锁的semaphores。
    110
    111  一旦其结构体ib_client的add方法被调用,上层协议使用者就可以开始使用
    112  一个IB设备。使用者必须在从移除方法返回之前完成所有的清理工作并释放
    113  与设备相关的所有资源。
    114
    115  使用者被允许在其添加和删除方法中睡眠。