summary refs log tree commit diff
path: root/pkgs/os-specific/linux/kernel/common-config.nix
diff options
context:
space:
mode:
authorK900 <me@0upti.me>2023-11-02 15:39:53 +0300
committerGitHub <noreply@github.com>2023-11-02 15:39:53 +0300
commit43c8fb938ae13752e01914e8787f3d9ee9ce44c7 (patch)
tree6ab75d285dbac446ccb0bbfe08331626eb76be4f /pkgs/os-specific/linux/kernel/common-config.nix
parente00c606455cef66797d48b3a145e913b509a4077 (diff)
parentb9495de12eb949fd9d0ca3ebb9c9b862f2f6f786 (diff)
downloadnixpkgs-43c8fb938ae13752e01914e8787f3d9ee9ce44c7.tar
nixpkgs-43c8fb938ae13752e01914e8787f3d9ee9ce44c7.tar.gz
nixpkgs-43c8fb938ae13752e01914e8787f3d9ee9ce44c7.tar.bz2
nixpkgs-43c8fb938ae13752e01914e8787f3d9ee9ce44c7.tar.lz
nixpkgs-43c8fb938ae13752e01914e8787f3d9ee9ce44c7.tar.xz
nixpkgs-43c8fb938ae13752e01914e8787f3d9ee9ce44c7.tar.zst
nixpkgs-43c8fb938ae13752e01914e8787f3d9ee9ce44c7.zip
Merge pull request #255804 from sielicki/kernel-arm-alignment-compat
kernel/common-config: arm: configure alignment traps
Diffstat (limited to 'pkgs/os-specific/linux/kernel/common-config.nix')
-rw-r--r--pkgs/os-specific/linux/kernel/common-config.nix22
1 files changed, 22 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix
index 4e366a87d09..fb583551f1b 100644
--- a/pkgs/os-specific/linux/kernel/common-config.nix
+++ b/pkgs/os-specific/linux/kernel/common-config.nix
@@ -1007,6 +1007,28 @@ let
       # Keeping it a built-in ensures it will be used if possible.
       FB_SIMPLE = yes;
 
+      # https://docs.kernel.org/arch/arm/mem_alignment.html
+      # tldr:
+      #  when buggy userspace code emits illegal misaligned LDM, STM,
+      #  LDRD and STRDs, the instructions trap, are caught, and then
+      #  are emulated by the kernel.
+      #
+      #  This is the default on armv7l, anyway, but it is explicitly
+      #  enabled here for the sake of providing context for the
+      #  aarch64 compat option which follows.
+      ALIGNMENT_TRAP = mkIf (stdenv.hostPlatform.system == "armv7l-linux") yes;
+
+      # https://patchwork.kernel.org/project/linux-arm-kernel/patch/20220701135322.3025321-1-ardb@kernel.org/
+      # tldr:
+      #  when encountering alignment faults under aarch64, this option
+      #  makes the kernel attempt to handle the fault by doing the
+      #  same style of misaligned emulation that is performed under
+      #  armv7l (see above option).
+      #
+      #  This minimizes the potential for aarch32 userspace to behave
+      #  differently when run under aarch64 kernels compared to when
+      #  it is run under an aarch32 kernel.
+      COMPAT_ALIGNMENT_FIXUPS = mkIf (stdenv.hostPlatform.system == "aarch64-linux") (whenAtLeast "6.1" yes);
     } // optionalAttrs (versionAtLeast version "5.4" && (stdenv.hostPlatform.system == "x86_64-linux" || stdenv.hostPlatform.system == "aarch64-linux")) {
       # Required for various hardware features on Chrome OS devices
       CHROME_PLATFORMS = yes;