【C语言】linux内核ipoib模块 - ipoib_intf_init

news2024/11/14 20:28:34

一、ipoib_intf_init函数定义

int ipoib_intf_init(struct ib_device *hca, u8 port, const char *name,
            struct net_device *dev, struct ipoib_dev_priv *priv)
{
    struct rdma_netdev *rn = netdev_priv(dev);
    int rc;
    priv->ca = hca;
    priv->port = port;
    rc = rdma_init_netdev(hca, port, RDMA_NETDEV_IPOIB, name,
                  NET_NAME_UNKNOWN, ipoib_setup_common, dev,
                  !ipoib_enhanced_enabled);
    if (rc) {
        if (rc != -EOPNOTSUPP)
            goto out;
        if (priv->num_tx_queues > 1) {
            netif_set_real_num_tx_queues(dev, priv->num_tx_queues);
            netif_set_real_num_rx_queues(dev, priv->num_rx_queues);
            rn->attach_mcast = ipoib_mcast_attach_rss;
            rn->send = ipoib_send_rss;
            /* Override ethtool_ops to ethtool_ops_rss */
            ipoib_set_ethtool_ops_rss(dev);
        } else {
            rn->attach_mcast = ipoib_mcast_attach;
            rn->send = ipoib_send;
        }
        dev->netdev_ops = ipoib_get_rn_ops(priv);
        rn->detach_mcast = ipoib_mcast_detach;
        rn->hca = hca;
    }
    priv->rn_ops = dev->netdev_ops;
    dev->netdev_ops = ipoib_get_netdev_ops(priv);
    rn->clnt_priv = priv;
    /*
     * Only the child register_netdev flows can handle priv_destructor
     * being set, so we force it to NULL here and handle manually until it
     * is safe to turn on.
     */
    priv->next_priv_destructor = dev->priv_destructor;
    dev->priv_destructor = NULL;
    ipoib_build_priv(dev);
    return 0;
out:
    return rc;
}

二、函数解读

是的,这个函数`ipoib_intf_init`在初始化一个IP over InfiniBand (IPoIB) 网络接口时注册了回调函数 ipoib_send_rss 和 ipoib_send。让我们用中文逐步解读这个函数的作用和它做了什么:
1. 函数 ipoib_intf_init 接收了几个参数:
   - *hca:指向InfiniBand设备 (ib_device) 的指针。
   - port:表示InfiniBand端口的号码。
   - *name:网络接口的名字。
   - *dev:指向网络设备 (net_device) 的指针。
   - *priv:指向IPoIB私有数据结构 (ipoib_dev_priv) 的指针。
2. 函数开始时,将 hca 和 port 存储在 priv 结构中,这样就能在后面使用这些IB设备和端口信息。
3. 调用 rdma_init_netdev 来初始化网络设备。这个过程会设置一些基础的网络设备操作,并且可以通过参数 ipoib_setup_common 来定制一些IPoIB的特定设置。
4. 如果 rdma_init_netdev 返回的 rc 不为零,表示初始化失败,除非错误代码是 -EOPNOTSUPP,否则会直接跳到函数最后,并返回错误码。
5. 如果初始化成功,函数将会根据 priv->num_tx_queues 的值来决定使用哪一套回调函数:
   - 如果 priv->num_tx_queues 大于1,表示启用了多个发送队列(可能是为了RSS)。这时,函数会设置真正的发送(netif_set_real_num_tx_queues)和接收(netif_set_real_num_rx_queues)队列数量,并注册多队列版本的回调函数 ipoib_mcast_attach_rss 和 ipoib_send_rss。
   - 如果只有一个发送队列,就会注册单队列版本的回调函数 ipoib_mcast_attach 和 ipoib_send。
6. 还有其他一些回调函数被设置,例如 ipoib_mcast_detach 用于处理组播的分离操作。
7. ipoib_get_rn_ops 和 ipoib_get_netdev_ops 函数被用于获取和设置适当的网络操作结构(netdev_ops),其中可能还包含了更多回调函数。
8. 函数设置了 rn->clnt_priv 为 priv,将私有结构关联到设备上下文中。
9. 有一个特别的代码块处理了网络设备的 priv_destructor。原来的析构器被存储在 priv->next_priv_destructor 中,而 dev->priv_destructor 被设置为 NULL。这表明在特定情况下,设备的内存或资源会在后续过程手动释放而不是自动释放。
10. 调用 ipoib_build_priv 函数来对IPoIB私有结构进行进一步初始和构建。
11. 在成功完成所有操作之后,函数返回0,表示成功。如果有步骤失败,则跳转至 out 标签,并返回相应的错误码。
总之,这个函数负责根据InfiniBand设备和端口对IPoIB网络接口进行初始化,注册了网络操作回调函数以及其他相关职能的函数,以便正确处理网络数据包的发送和接收。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1397901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP国内外大模型汇总列表[文心一言、智谱、百川、星火、通义千问、盘古等等]

国内外大模型汇总列表 中国大模型列表大全,全面收集有明确来源的大模型情况,包括机构、来源信息和分类等,随时更新。 Awesome family related to LLMS includes: https://github.com/wgwang/awesome-LLM-benchmarkshttps://github.com/wgw…

20240116使用Firefly的AIO-3399J的预编译的Android10固件确认RT5640声卡信息

20240116使用Firefly的AIO-3399J的预编译的Android10固件确认RT5640声卡信息 2024/1/16 17:55 百度:RK3399 ALC5640 RK3399 RT5640 BING:RK3399 ALC5640 LINE-IN接麦克风不会有声音的。 耳机只有右边有声音,但是偏小,可以通过音量…

Ubuntu 22.04 安装MySql

MySQL是非常常用的关系型数据库,无论是大厂还是小厂,都有它的身影。最大的优点是免费,安装起来也比较简单。 MySQL的架构 画了个简图,描述了下MySQL的架构。 其中的比较有趣的点在于连接池和存储引擎。连接池缓存了数据库和客户端的TCP连接,以减少建立连接的开销。存储引…

YOLOv3:算法与论文详细解读

【yolov1:背景介绍与算法精讲】 【yolo9000:Better, Faster, Stronger的目标检测网络】 目录 一、YOLOv3概述二、创新与改进三、改进细节3.1 多尺度特征3.2 不同尺度先验框3.3 完整的网络结构3.3 Darknet-53主干网络3.4 残差网络3.4.1 恒等映射3.4.2 网络…

【分布式技术】ELK大型日志收集分析系统

目录 步骤一:完成JAVA环境部署 步骤二:部署ES节点(三台主机) 步骤三:内核参数修改 步骤四:web端查看验证 步骤五:yum安装nginx 步骤六:完成logstash部署 步骤七:部…

docker安装 mysql 8.0.32

首先下载 mysql 其次如果虚拟机以前安过mysql 需要把mysql关闭 命令 永久关闭mysql 但是当前不生效 需要重启虚拟机 systemctl enable mysqld 如果不想重启虚拟机 可以执行 systemctl stop mysqld //指定版本 docker pull mysql:8.0.32 // 拉取最新的…

MyBatis 使用报错:org.xml.sax.SAXParseException 元素内容必须由格式正确的字符数据或标记组成

文章目录 前言问题分析解决方案方案一&#xff1a;使用 CDATA 区块&#xff0c;依然使用 “ > ” 或者 “ < ”方案二&#xff1a;使用转义字符 个人简介 前言 今天在使用 MyBatis 时出现报错&#xff1a; Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式…

【人工智能平台】ubuntu22.04.3部署cube-studio

简介&#xff1a;本次安装是在虚拟机上进行&#xff0c;需要给虚拟机至少分配16GB&#xff0c;分配8GB时系统会卡死。 一、环境&#xff1a; 主机环境&#xff1a;win11&#xff08;全程科学&#xff09;vm虚拟机 虚拟机&#xff1a;ubuntu22.04.3桌面版&#xff08;新装&…

循环神经网络-单变量序列预测详解(pytorch)

参考博客 文章目录 &#xff08;1&#xff09;导入所需要的包&#xff08;2&#xff09;读取数据并展示&#xff08;3&#xff09;数据预处理&#xff08;4&#xff09;划分训练集和测试集&#xff08;5&#xff09;构建RNN回归模型&#xff08;6&#xff09;构造训练函数&…

EasyRecovery2024免费电脑数据恢复软件下载

easyrecovery是一款功能强大、易于使用的硬盘数据恢复软件。这款软件可以帮助用户非常方便地恢复丢失的数据。软件非常容易使用和高效的数据恢复。感兴趣的朋友们赶快来下载吧。 无论是因为意外删除、格式化、病毒感染、系统崩溃还是其他原因&#xff0c;该软件可以帮助您恢复…

说说集成学习的四种模型

集成学习概念 集成学习是机器学习中的一种思想&#xff0c;它通过多个模型的组合形成一个精度更高的模型&#xff0c;参与组合的 模型成为弱学习器&#xff08;弱学习器&#xff09;。训练时&#xff0c;使用训练集依次训练出这些弱学习器&#xff0c;对未知的样本进 行预测…

day15 DOM(1)

目录 DOM简介DOM作用能力使用场景 DOM树&#xff08;文档树&#xff09;DOM对象获取DOM对象根据CSS选择器来获取DOM元素其它获取DOM元素方法 操作元素内容操作元素属性 DOM简介 当网页被加载时&#xff0c;浏览器会创建页面的文档对象模型&#xff08;Document Object Model&a…

KKVIEW远程控制软件介绍

KKVIEW是一款全功能远程控制软件&#xff0c;可以随时随地访问家里或公司设备。KKVIEW,连接自由&#xff0c;KKVIEW旨在帮助用户在远程技术支持、远程办公、远程教育等领域便利的开展工作。 [主要功能] 远程桌面 一键远程显示远程桌面&#xff0c;一键开启远程控制&#xff0…

Linux环境下部署Tomcat(详细图文)

目录 一、下载地址 1.服务器不能联网情况下载 2.服务器能够联网 二、安装 1. Tomcat解压 2. Tomcat目录说明&#xff1a; 3. 重命名解压后的文件名 4. 配置环境变量 5. 修改配置文件 6.启动Tomcat 7.访问Tomcat 8. 停止Tomcat 一、下载地址 1.服务器不能联网情况下…

软考十大管理领域49个过程开展频次总结

1、仅开展一次或仅在预定义时点开展的项目管理过程 序号 过程 过程组 说明 1 制定项目章程 启动 项目章程尽量在整个项目期间保持不变 2 制订项目管理计划 计划 各种管理(程序性)计划和项目基准尽量在整个项目期间保持不变 3 规划范围管理 除规划沟通管…

读懂比特币—bitcoin代码分析(一)

最近美国 SEC 通过了比特币的 ETF申请&#xff0c;比特币究竟是个什么东西&#xff0c;从技术上来说&#xff0c;bitcoin 是一个点对点的电子现金系统&#xff0c;它可以实现分布式的记账&#xff0c;不依赖中心化的账务系统&#xff08;比如银行&#xff0c;支付宝&#xff09…

线上排查问题全套命令WIP(查看日志、端口占用、磁盘、CPU等)

线上排查问题全套命令WIP&#xff08;查看日志、端口占用、磁盘、CPU等&#xff09; 1 查看日志 1.1 less ①less xxx.log&#xff1a;查看日志文件 ②less -N xxx.log&#xff1a;带行号查看日志 ③g&#xff1a;定位到文件顶部 ④G&#xff08;shiftg键&#xff09;&am…

AI嵌入式K210项目(15)-安全散列算法加速器

文章目录 前言一、什么是SHA256&#xff1f;实验原理 二、K210的安全散列算法加速器三、实验过程总结 前言 K210内置了丰富的加速器&#xff0c;包括神经网络处理器 (KPU)&#xff0c;AES(高级加密加速器)&#xff0c;APU 麦克风阵列语音数据加速计算处理器&#xff0c;现场可…

【RabbitMQ】快速入门及基本使用

一、引言 1、、消息队列 Ⅰ、什么是消息队列&#xff1f; 消息队列是一种进程间通信或同一进程的不同线程间的通信方式&#xff0c;软件的贮列用来处理一系列的输入&#xff0c;通常是来自用户。消息队列提供了异步的通信协议&#xff0c;每一个贮列中的纪录包含详细说明的数据…

HCIA-HarmonyOS设备开发认证-序

序 最近涉及到HarmonyOS鸿蒙系统设备开发&#xff0c;在网络上已经有很多相关资料&#xff0c;视频教程&#xff0c;我也移植了公司的一个stm32G474板卡&#xff0c;运行LiteOS-m L0系统。 一面看资料一面移植&#xff0c;遇到不少坑&#xff0c;当看到运行的LOGO时&#xff0…