zfs: add option to restore kernel_neon for linux 6.2 support on aarch64
Introduced in aaeca98456
with the usual disdain for ZFS.
We have been there in the past with
<https://www.phoronix.com/news/NixOS-Linux-5.0-ZFS-FPU-Drop> /
https://github.com/NixOS/nixpkgs/pull/61076.
This fixes ZFS on aarch64 until the next breakage.
See https://github.com/openzfs/zfs/issues/14555 for original upstream
issue.
This commit is contained in:
parent
0b62a4642d
commit
d4cab20b3a
|
@ -323,6 +323,30 @@ in
|
|||
Defaults to 0, which waits forever.
|
||||
'';
|
||||
};
|
||||
|
||||
removeLinuxDRM = lib.mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = lib.mdDoc ''
|
||||
Linux 6.2 dropped some kernel symbols required on aarch64 required by zfs.
|
||||
Enabling this option will bring them back to allow this kernel version.
|
||||
Note that in some jurisdictions this may be illegal as it might be considered
|
||||
removing copyright protection from the code.
|
||||
See https://www.ifross.org/?q=en/artikel/ongoing-dispute-over-value-exportsymbolgpl-function for further information.
|
||||
|
||||
If configure your kernel package with `zfs.latestCompatibleLinuxPackages`, you will need to also pass removeLinuxDRM to that package like this:
|
||||
|
||||
```
|
||||
{ pkgs, ... }: {
|
||||
boot.kernelPackages = (pkgs.zfs.override {
|
||||
removeLinuxDRM = pkgs.hostPlatform.isAarch64;
|
||||
}).latestCompatibleLinuxPackages;
|
||||
|
||||
boot.zfs.removeLinuxDRM = true;
|
||||
}
|
||||
```
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
services.zfs.autoSnapshot = {
|
||||
|
@ -532,11 +556,13 @@ in
|
|||
# https://github.com/NixOS/nixpkgs/issues/106093
|
||||
kernelParams = lib.optionals (!config.boot.zfs.allowHibernation) [ "nohibernate" ];
|
||||
|
||||
extraModulePackages = [
|
||||
(if config.boot.zfs.enableUnstable then
|
||||
extraModulePackages = let
|
||||
kernelPkg = if config.boot.zfs.enableUnstable then
|
||||
config.boot.kernelPackages.zfsUnstable
|
||||
else
|
||||
config.boot.kernelPackages.zfs)
|
||||
config.boot.kernelPackages.zfs;
|
||||
in [
|
||||
(kernelPkg.override { inherit (cfgZfs) removeLinuxDRM; })
|
||||
];
|
||||
};
|
||||
|
||||
|
@ -654,6 +680,21 @@ in
|
|||
services.udev.packages = [ cfgZfs.package ]; # to hook zvol naming, etc.
|
||||
systemd.packages = [ cfgZfs.package ];
|
||||
|
||||
# Export kernel_neon_* symbols again.
|
||||
# This change is necessary until ZFS figures out a solution
|
||||
# with upstream or in their build system to fill the gap for
|
||||
# this symbol.
|
||||
# In the meantime, we restore what was once a working piece of code
|
||||
# in the kernel.
|
||||
boot.kernelPatches = lib.optional (cfgZfs.removeLinuxDRM && pkgs.stdenv.hostPlatform.system == "aarch64-linux") {
|
||||
name = "export-neon-symbols-as-gpl";
|
||||
patch = pkgs.fetchpatch {
|
||||
url = "https://github.com/torvalds/linux/commit/aaeca98456431a8d9382ecf48ac4843e252c07b3.patch";
|
||||
hash = "sha256-L2g4G1tlWPIi/QRckMuHDcdWBcKpObSWSRTvbHRIwIk=";
|
||||
revert = true;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services = let
|
||||
createImportService' = pool: createImportService {
|
||||
inherit pool;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, kernel ? null
|
||||
, stdenv
|
||||
, linuxKernel
|
||||
, removeLinuxDRM ? false
|
||||
, ...
|
||||
} @ args:
|
||||
|
||||
|
@ -11,10 +12,13 @@ in
|
|||
callPackage ./generic.nix args {
|
||||
# check the release notes for compatible kernels
|
||||
kernelCompatible =
|
||||
if stdenv'.isx86_64
|
||||
if stdenv'.isx86_64 || removeLinuxDRM
|
||||
then kernel.kernelOlder "6.4"
|
||||
else kernel.kernelOlder "6.2";
|
||||
latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_3;
|
||||
latestCompatibleLinuxPackages = if stdenv'.isx86_64 || removeLinuxDRM then
|
||||
linuxKernel.packages.linux_6_3
|
||||
else
|
||||
linuxKernel.packages.linux_6_1;
|
||||
|
||||
# this package should point to the latest release.
|
||||
version = "2.1.12";
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, kernel ? null
|
||||
, stdenv
|
||||
, linuxKernel
|
||||
, removeLinuxDRM ? false
|
||||
, ...
|
||||
} @ args:
|
||||
|
||||
|
@ -13,19 +14,22 @@ callPackage ./generic.nix args {
|
|||
# NOTE:
|
||||
# zfs-2.1.9<=x<=2.1.10 is broken with aarch64-linux-6.2
|
||||
# for future releases, please delete this condition.
|
||||
kernelCompatible = if stdenv'.isx86_64
|
||||
then kernel.kernelOlder "6.3"
|
||||
kernelCompatible = if stdenv'.isx86_64 || removeLinuxDRM
|
||||
then kernel.kernelOlder "6.4"
|
||||
else kernel.kernelOlder "6.2";
|
||||
latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_1;
|
||||
|
||||
latestCompatibleLinuxPackages = if stdenv'.isx86_64 || removeLinuxDRM then
|
||||
linuxKernel.packages.linux_6_3
|
||||
else
|
||||
linuxKernel.packages.linux_6_1;
|
||||
|
||||
# this package should point to a version / git revision compatible with the latest kernel release
|
||||
# IMPORTANT: Always use a tagged release candidate or commits from the
|
||||
# zfs-<version>-staging branch, because this is tested by the OpenZFS
|
||||
# maintainers.
|
||||
version = "2.1.12-staging-2023-04-18";
|
||||
rev = "e25f9131d679692704c11dc0c1df6d4585b70c35";
|
||||
version = "2.1.12";
|
||||
|
||||
sha256 = "tJLwyqUj1l5F0WKZDeMGrEFa8fc/axKqm31xtN51a5M=";
|
||||
sha256 = "eYUR5d4gpTrlFu6j1uL83DWL9uPGgAUDRdSEb73V5i4=";
|
||||
|
||||
isUnstable = true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue