116 lines · plain
1 2.. include:: ../disclaimer-zh_CN.rst3 4:Original: Documentation/infiniband/core_locking.rst5 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_ah31 - modify_ah32 - query_ah33 - destroy_ah34 - post_send35 - post_recv36 - poll_cq37 - req_notify_cq38 39 他们可能不可以睡眠,而且必须可以从任何上下文中调用。40 41 向上层协议使用者输出的相应函数:42 43 - rdma_create_ah44 - rdma_modify_ah45 - rdma_query_ah46 - rdma_destroy_ah47 - ib_post_send48 - ib_post_recv49 - ib_req_notify_cq50 51 因此,在任何情况下都可以安全调用(它们)。52 53 此外,该函数54 55 - ib_dispatch_event56 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 CPU287 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 handler96 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 使用者被允许在其添加和删除方法中睡眠。116