当前位置: 首页 > news >正文

MLX5_SET_TO_ONES宏解析

看代码时,遇到一个非常复杂的宏MLX5_SET_TO_ONES,这个宏的主要作用是对特定的数据结构置位,宏的上下文如下:

#define __mlx5_nullp(typ) ((struct mlx5_ifc_##typ##_bits *)0)
#define __mlx5_bit_off(typ, fld) (offsetof(struct mlx5_ifc_##typ##_bits, fld))
// 获取fld在typ中的字(32位)偏移量,
#define __mlx5_dw_off(typ, fld) (__mlx5_bit_off(typ, fld) / 32)
#define __mlx5_bit_sz(typ, fld) sizeof(__mlx5_nullp(typ)->fld)
#define __mlx5_mask(typ, fld) ((u32)((1ull << __mlx5_bit_sz(typ, fld)) - 1))
#define __mlx5_mask16(typ, fld) ((u16)((1ull << __mlx5_bit_sz(typ, fld)) - 1))
// 获取fld在一个字内的偏移量
#define __mlx5_dw_bit_off(typ, fld) (32 - __mlx5_bit_sz(typ, fld) - (__mlx5_bit_off(typ, fld) & 0x1f))
#define __mlx5_dw_mask(typ, fld) (__mlx5_mask(typ, fld) << __mlx5_dw_bit_off(typ, fld))
#define __mlx5_16_bit_off(typ, fld) (16 - __mlx5_bit_sz(typ, fld) - (__mlx5_bit_off(typ, fld) & 0xf))
#define __mlx5_16_mask(typ, fld) (__mlx5_mask16(typ, fld) << __mlx5_16_bit_off(typ, fld))#define __mlx5_st_sz_bits(typ) sizeof(struct mlx5_ifc_##typ##_bits)#define __mlx5_16_off(typ, fld) (__mlx5_bit_off(typ, fld) / 16)/* 置位 */
#define MLX5_SET_TO_ONES(typ, p, fld) do { \BUILD_BUG_ON(__mlx5_st_sz_bits(typ) % 32);             \*((__be32 *)(p) + __mlx5_dw_off(typ, fld)) = \cpu_to_be32((be32_to_cpu(*((__be32 *)(p) + __mlx5_dw_off(typ, fld))) & \(~__mlx5_dw_mask(typ, fld))) | ((__mlx5_mask(typ, fld)) \<< __mlx5_dw_bit_off(typ, fld))); \
} while (0)

来一步一步看一下

  • 获取目标位置
    1. 这个宏首先会将指针 p 转换为指向 32 位大端整数 (__be32) 的指针:(__be32 *)§ ,这是因为要以32位为单位,内部设置偏移量进行置位,
    2. 其次获取fld在typ中的字偏移量(32位):__mlx5_dw_off(typ, fld)
    3. 获取p指针字偏移处的值:*((__be32 *)§ + __mlx5_dw_off(typ, fld))
  • 读取当前值并转换为主机字节序: be32_to_cpu(*((__be32 *)§ + __mlx5_dw_off(typ, fld)))
    1. 读取目标字处的值。
    2. be32_to_cpu 将读取到的大端格式值转换为主机字节序。
  • 清除目标位:
    1. __mlx5_dw_mask(typ, fld) 生成目标字段的掩码。
    2. ~__mlx5_dw_mask(typ, fld) 取反掩码,用于清除目标位。
    3. & (~__mlx5_dw_mask(typ, fld)) 使用按位与操作,将目标字段位清零。
  • 生成新值并转换为大端字节序:((__mlx5_mask(typ, fld)) << __mlx5_dw_bit_off(typ, fld))
    1. __mlx5_mask(typ, fld) 生成目标字段的位掩码。
    2. << __mlx5_dw_bit_off(typ, fld) 将掩码左移至目标位偏移量位置。
    3. | ((__mlx5_mask(typ, fld)) << __mlx5_dw_bit_off(typ, fld)) 将目标位设置为 1。
    4. cpu_to_be32 将结果转换回大端格式。
  • 写回结果:*((__be32 *)§ + __mlx5_dw_off(typ, fld)) = cpu_to_be32(…)
    1. 将处理后的结果写回 p 指针对应双字偏移量处。

相关文章:

MLX5_SET_TO_ONES宏解析

看代码时&#xff0c;遇到一个非常复杂的宏MLX5_SET_TO_ONES&#xff0c;这个宏的主要作用是对特定的数据结构置位&#xff0c;宏的上下文如下&#xff1a; #define __mlx5_nullp(typ) ((struct mlx5_ifc_##typ##_bits *)0) #define __mlx5_bit_off(typ, fld) (offsetof(struc…...

SQL Server入门-SSMS简单使用(2008R2版)-1

环境&#xff1a; win10&#xff0c;SQL Server 2008 R2 参考&#xff1a; SQL Server 新建数据库 - 菜鸟教程 https://www.cainiaoya.com/sqlserver/sql-server-create-db.html 第 2 课&#xff1a;编写 Transact-SQL | Microsoft Learn https://learn.microsoft.com/zh-cn/…...

高考专业抉择探索计算机专业的未来展望及适合人群

身份&#xff1a;一位正在面临人生重要抉择的高考生&#xff0c;一位计算机行业从业者  正文&#xff1a;  随着2024年高考落幕&#xff0c;我与数百万高三学生一样&#xff0c;又将面临人生中的重要抉择&#xff1a;选择大学专业。对于许多学生来说&#xff0c;计算机科学…...

windows安装spark

在 Windows 上安装 Spark 并进行配置需要一些步骤&#xff0c;包括安装必要的软件和配置环境变量。以下是详细的步骤指南&#xff1a; 步骤一&#xff1a;安装 Java 下载和安装 Java Development Kit (JDK) 到 Oracle JDK 下载页面 或 OpenJDK 下载页面 下载适合你系统的 JDK。…...

【信息学奥赛】CSP-J/S初赛03 计算机网络与编程语言分类

第1节 计算机网络基础 1.1 网络的定义 所谓计算机网络&#xff0c;就是利用通信线路和设备&#xff0c;把分布在不同地理位置上的多台计算机连 接起来。计算机网络是现代通信技术与计算机技术相结合的产物。 网络中计算机与计算机之间的通信依靠协议进行。协议是计算机收、发…...

python20 函数的定及调用

函数的定及调用 函数是将一段实现功能的完整代码&#xff0c;使用函数名称进行封装&#xff0c;通过函数名称进行调用。以此达到一次编写&#xff0c;多次调用的目的 用 def 关键字来声明 函数 格式&#xff1a; def 函数名(参数列表):函数体[:return 返回值是可选的&#xff0…...

【Android WebView】WebView基础

一、简介 WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核&#xff0c;4.4后直接使用了Chrome。 二、重要类 以WebView类为基础&#xff0c;WebSettings、WebViewClient、WebChromeClient为辅助共同完成安卓段加…...

Python酷库之旅-第三方库openpyxl(03)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…...

电脑丢失dll文件一键修复的方法有哪些?分析dll文件修复的多种策略

我们经常会遇到各种各样的问题&#xff0c;其中之一就是DLL文件的丢失。DLL文件&#xff08;动态链接库&#xff09;是操作系统和应用程序正常运行所必需的文件&#xff0c;当这些文件丢失或损坏时&#xff0c;可能会导致软件无法正常启动&#xff0c;甚至影响系统的稳定性。对…...

小程序项目业务逻辑回忆4

用户查询积分 积分获取规则如下: 邀请其他用户购票参会,将获取该用户花费金额的10%获取积分。 邀请用户注册参观展览&#xff0c;需注册并现场签到&#xff0c;将获取10分的奖励积分。 邀请企业用户参展&#xff0c;将获取企业参展金额的5%获取到积分。 上述3条积分获取规…...

LeetCode 16.最接近的三数之和(C++)

链接 https://leetcode.cn/problems/3sum-closest/description/ 题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例1 输入&a…...

JSON.parse 解析NaN, Infinity, -Infinity失败

背景 JSON.parse() 方法解析字符串时&#xff0c; 如果字符串包含NaN, Infinity, -Infinity会报错。因为我们需要先将NaN, Infinity, -Infinity替换成字符类型&#xff0c;再做转换 解决方法 function convert(str) {str str.replace(/NaN/g, "NaN");str str.re…...

【计算机】我不允许还有人不知道数据库是什么

数据库是计算机科学中的一个核心概念,它是用于存储、检索、管理和处理数据的系统。在现代的软件开发和信息技术中,数据库扮演着至关重要的角色。以下是关于数据库的一些基本要点: 数据存储: 数据库提供了一个结构化的方式来存储数据,使得数据可以高效地组织和访问。它通过…...

制作WIFI二维码,实现一键扫描连接WIFI

在现代社会&#xff0c;Wi-Fi已成为我们日常生活中不可或缺的一部分。无论是在家庭、办公室还是公共场所&#xff0c;我们都希望能够快速方便地连接到Wi-Fi网络。下面小编就来和大家分享通过制作WIFI二维码&#xff0c;来实现一键扫描就可以连接WIFI的方法。连接WIFI不用在告诉…...

数据结构-图的基本概念

图的定义 图时由非空的顶点集合和一个描述顶点之间关系的集合组成。可以定义为&#xff1a; ​​​​​​​ ​​​​​​​ ​​​​​​​ G表示一个图&#xff0c;V表示点集&#xff0c;E表示边集。集合E的每一个二元组都包含两个值和&#xff0c;表示…...

【HarmonyOS NEXT 】鸿蒙generateBarcode (码图生成)

本模块支持将字符串转换为二维码或条形码&#xff0c;目前已支持的码制式为EAN-8、EAN-13、UPC-A、UPC-E、Codabar、Code 39、Code 93、Code 128、ITF-14、QR Code、Data Matrix、PDF417、Aztec。暂时不支持多功能码生成。 起始版本&#xff1a;4.1.0(11) 导入模块 import {…...

python测试工程师 之 unittest框架总结

unittest 学习目标unittest 框架的基本使⽤⽅法(组成)断⾔的使⽤ (让程序⾃动的判断预期结果和实际结果是否相符)参数化(多个测试数据, 测试代码写⼀份 传参)⽣成测试报告 复习pythonunittest 框架的介绍核⼼要素(组成)1. TestCase 测试⽤例, 这个测试⽤例是 unittest 的组成部…...

微服务中的相关概念

Eureka Eureka 是由 Netflix 开发的一个服务发现和注册中心&#xff0c;广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现&#xff0c;确保各个服务之间能够方便地找到并通信。它是 Netflix OSS&#xff08;Netflix Open Source Software&#xff09…...

常见的设计模式

设计模式是一套被反复使用的、代码设计经验的总结。它们被用来解决软件开发中的某些常见问题&#xff0c;提高代码的可维护性、可扩展性和重用性。设计模式主要分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。以下是一些常见的设计模式及其简要说明&#xff1a; …...

Camtasia2024中文版最新电脑录屏剪辑神器!

大家好&#xff0c;今天我要安利一个我最近超级喜欢的工具——Camtasia2024中文版&#xff01;这款软件真的太棒了&#xff0c;它让我的视频编辑工作变得更加轻松和高效。如果你也对视频制作感兴趣&#xff0c;那么一定要尝试一下这款神器哦&#xff01; Camtasia2024win-正式…...

为你的Hermes Agent项目配置Taotoken作为自定义模型提供商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为你的Hermes Agent项目配置Taotoken作为自定义模型提供商 应用场景类&#xff0c;假设你正在使用Hermes Agent框架并希望接入更多…...

我用豆包写的论文 AI 率为什么 95%?这款工具一次降到 4% 万方检测合格

我用豆包写的论文 AI 率为什么 95%&#xff1f;这款工具一次降到 4% 万方检测合格 去年我用豆包写了 1 万字的生物学本科论文——自己读着挺顺、像人写的。送学校万方 AIGC 检测——AI 率 95.7%&#xff0c;学校卡的是 30%。我整个人懵了。 这篇文章我把当时的实测过程写下来—…...

考研数学避坑指南:那些课本不讲但真题爱考的极限与无穷小细节

考研数学避坑指南&#xff1a;那些课本不讲但真题爱考的极限与无穷小细节 考研数学中&#xff0c;极限与无穷小的概念看似基础&#xff0c;却暗藏玄机。每年都有大量考生在看似简单的题目上失分&#xff0c;原因往往是对这些概念的深层理解不足。本文将聚焦真题中最常见的陷阱&…...

深度解析fullPage.js全屏滚动插件的架构设计与性能优化策略

深度解析fullPage.js全屏滚动插件的架构设计与性能优化策略 【免费下载链接】fullPage.js fullPage plugin by Alvaro Trigo. Create full screen pages fast and simple 项目地址: https://gitcode.com/gh_mirrors/fu/fullPage.js fullPage.js作为现代Web开发中广受青睐…...

3步掌握Windows 11任务栏自定义神器:Taskbar11完全指南

3步掌握Windows 11任务栏自定义神器&#xff1a;Taskbar11完全指南 【免费下载链接】Taskbar11 Change the position and size of the Taskbar in Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar11 还在为Windows 11僵化的任务栏设置而烦恼吗&#xf…...

深度学习CNN(一)—— 卷积运算的本质(三十八)

1. 定位导航 🎉 第 9 章 CNN 大门正式开启! CNN 是深度学习历史上最具影响力的架构创新之一: 2012 AlexNet:ImageNet 革命,开启深度学习时代 2015 ResNet:突破"深度极限" 2020 Vision Transformer:CNN 的最大竞争对手出现 直到 2024 年:CNN 仍是图像处理、…...

无王无帝定乾坤,来自田间第一人 凰标传世照千秋

无王无帝定乾坤 ——来自田间第一人华夏文明千年流转&#xff0c;王朝霸业此起彼伏。 无数帝王功业随岁月风化&#xff0c;无数朝堂规制随朝代更迭消散。 真正能够跨越岁月、贯穿古今、安定世道、照亮千秋的&#xff0c; 从不是一时的权位霸业&#xff0c;而是亘古不变的公道正…...

Windows 11系统优化神器:Win11Debloat一站式去广告与性能提升指南

Windows 11系统优化神器&#xff1a;Win11Debloat一站式去广告与性能提升指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declu…...

新手入门教程使用Python快速调用Taotoken提供的多模型API服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 新手入门教程使用Python快速调用Taotoken提供的多模型API服务 对于刚开始接触大模型API的开发者而言&#xff0c;直接对接不同厂商…...

C++ TinyWebServer项目实战:手把手教你用阻塞队列实现高性能异步日志(附完整代码)

C TinyWebServer项目实战&#xff1a;手把手教你用阻塞队列实现高性能异步日志&#xff08;附完整代码&#xff09; 在构建高并发服务器时&#xff0c;日志系统往往成为容易被忽视却至关重要的组件。想象这样一个场景&#xff1a;当服务器每秒处理上万请求时&#xff0c;如果每…...