Skip to content

Backport subject : Fixup vector crypto unaligned-access #201

@fangyu0809

Description

@fangyu0809

针对前面 RVCK PR #183 对应的 vector crypto PR,可能会引入不对齐访问问题,需要 backport 上游提交:
torvalds/linux@1cd5bb6

在 backport 该提交时需要解决一些依赖问题,因此针对这些 patch 整理一个 PR,并对相关提交说明如下。

规划backport 上游针对非对齐访问相关的5组patch,每组patch的介绍如下

第一组相关 patch 链接

https://lore.kernel.org/all/20231004151405.521596-3-cleger@rivosinc.com/

1.1 这组 patch 的主要功能

  • 在 S-mode(内核态)实现非对齐访存 trap 的软件模拟/修复:当硬件或 M-mode/SBI 不处理,或者将 misaligned trap 委派给 S-mode 时,由内核解码指令并完成等效的 load/store,然后继续执行用户态。
  • 增加 prctl(PR_UNALIGN) 支持:
    • 默认:内核模拟非对齐访问(应用不崩)
    • 可选:关闭模拟,让非对齐访问直接触发 SIGBUS

第二组相关 patch 链接

https://lore.kernel.org/all/20240308-disable_misaligned_probe_config-v9-0-a388770ba0ce@rivosinc.com/

2.1 这组 patch 的主要功能

  • 如果硬件的非对齐访问(unaligned access)速度在编译时就已知,则可以通过跳过非对齐访问速度探测(probe)来加快启动时间。
    • 在编译阶段可以通过配置这些config,来选择针对非对齐访问的处理逻辑
    • RISCV_PROBE_UNALIGNED_ACCESS(启动时探测)/RISCV_EMULATED_UNALIGNED_ACCESS(不探测,如果硬件不支持则使用软件模拟)/RISCV_SLOW_UNALIGNED_ACCESS(不探测,默认硬件支持slow非对齐访问)/RISCV_EFFICIENT_UNALIGNED_ACCESS(不探测,默认硬件支持fast非对齐访问)

第三组相关 patch 链接

https://lore.kernel.org/all/20241017-jesse_unaligned_vector-v10-0-5b33500160f8@rivosinc.com/

3.1 这组 patch 的主要功能

  • 让内核能够“探测并向用户态报告”向量(Vector)非对齐访问(unaligned/misaligned vector load/store)的支持情况与性能速度,并同时完善/修正标量(scalar)非对齐访问的探测与一致性处理。

第四组相关 patch 链接

https://lore.kernel.org/all/20250304120014.143628-10-ajones@ventanamicro.com/

4.1 这组 patch 的主要功能

  • 优化和修正了一些探测非对齐访问相关的bug。
  • 用命令行直接指定速度,跳过测速。新增两个 boot 参数(__setup):
    • unaligned_scalar_speed=slow|fast|unsupported
    • unaligned_vector_speed=slow|fast|unsupported
  • 如果指定了这些参数,内核不再运行对应的测速/探测线程,而是把所有在线 CPU直接设置为你指定的值

第五组相关 patch 链接

https://lore.kernel.org/all/20251206213750.81474-1-ebiggers@kernel.org/#

5.1 这组 patch 的主要功能

  • 把 RISC‑V 向量加速密码算法(AES/ChaCha20/GHASH/SHA/SM3/SM4 等)的 Kconfig 依赖条件,从“只要有 RVV(RISCV_ISA_V)”提升为“必须保证向量非对齐访问不仅支持而且足够高效”,也就是改为依赖一个更严格的新选项 RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions