summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjc_gargma <jc_gargma@iserlohn-fortress.net>2019-02-16 02:18:41 -0800
committerjc_gargma <jc_gargma@iserlohn-fortress.net>2019-02-16 02:18:41 -0800
commit1a7311e392828a447776a8b14c39786a126090d3 (patch)
tree1a86053b222a0dd8f09af7965f19a99f38592192
parentUpdated to 4.20.10 (diff)
downloadlinux-libre-1a7311e392828a447776a8b14c39786a126090d3.tar.xz
Added raid6 preselected algorithm patch.
Anyone that uses raid6 and has avx2 should change it to avx2x4.
-rw-r--r--PKGBUILD11
-rw-r--r--config.x86_642
-rw-r--r--raid6-default-algo.patch70
3 files changed, 81 insertions, 2 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 90576ac..fe3bea2 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -6,7 +6,7 @@
# # I maintain this because:
# Parabola version patch script does not apply consistently
-# Parabola version lacks ath9k and greysky2 patches
+# Parabola version lacks ath9k, greysky2, and raid6 patches
# Parabola version allows SM3 and SM4
# Parabola version is 300 Hz
# Parabola version supports Intel ME
@@ -34,6 +34,7 @@ source=(https://linux-libre.fsfla.org/pub/linux-libre/releases/${_gnumajver}/lin
https://linux-libre.fsfla.org/pub/linux-libre/releases/${_gnupkgver}/patch-${_gnumajver}-${_gnupkgver}.xz{,.sign}
enable_additional_cpu_optimizations-$_gcc_more_v.tar.gz::https://github.com/graysky2/kernel_gcc_patch/archive/$_gcc_more_v.tar.gz
ath9k-regdom-hack.patch
+ raid6-default-algo.patch
config.x86_64 # the main kernel config files
60-linux.hook # pacman hook for depmod
90-linux.hook # pacman hook for initramfs regeneration
@@ -45,7 +46,8 @@ sha512sums=('a4a0a25fd490c051deb32ff84ba51e8807bfc8db1ad46c22c7807e9be2e5db5e1c2
'SKIP'
'a0f37a9b8dbd11f8ef4450b06afee0a6e5519cb5a5cd78f84896812b007ef645bcb9c733ae9817c24d1f4a4c2114258015abceb5a94c7e08d2bb00531a6f04c7'
'905beb3f47cccb161e1ee74f8d5ba324b7c2f72e86246d941dfb18c85ace9d32df1966b52d2be2e3ff1ebea74af3b868422aec5a3eebc29858ee9e7207dea226'
- '9bf3a1923ae7db968360f3f44f5b99f5fd612b51d6853c080ab6addb36cadcc10f2670ce14573582b2118021020cd4559fd23e18131e3581757240c41b3a3be4'
+ 'd6bec327f4f2c69f2fc2780d90cd5d057bc5e32b39e54a13fccb1f5a880a148fa322e54c372e38d3f453d06fd9ab54d653265f355bd61e08a416058bd4224167'
+ '36391d408aea29ef4259306a0ff1de421a40055fd62c386a094bac159eacfd30a077832788f80e32ba551881f37789f7040cbaa725fafb7d7a4a3da6db44fcc5'
'7ad5be75ee422dda3b80edd2eb614d8a9181e2c8228cd68b3881e2fb95953bf2dea6cbe7900ce1013c9de89b2802574b7b24869fc5d7a95d3cc3112c4d27063a'
'4a8b324aee4cccf3a512ad04ce1a272d14e5b05c8de90feb82075f55ea3845948d817e1b0c6f298f5816834ddd3e5ce0a0e2619866289f3c1ab8fd2f35f04f44'
'2dc6b0ba8f7dbf19d2446c5c5f1823587de89f4e28e9595937dd51a87755099656f2acec50e3e2546ea633ad1bfd1c722e0c2b91eef1d609103d8abdc0a7cbaf')
@@ -73,6 +75,10 @@ prepare() {
msg2 "Applying ath9k patch"
patch -p1 -i ../ath9k-regdom-hack.patch
+ # Set default raid6 algo patch
+ msg " Applying raid6 patch"
+ patch -p1 -i ../raid6-default-algo.patch
+
msg2 "Setting version..."
sed -e "/^EXTRAVERSION =/s/=.*/= /" -i Makefile
@@ -88,6 +94,7 @@ prepare() {
#else
cp ../config.x86_64 .config
#fi
+
make olddefconfig
make menuconfig
diff --git a/config.x86_64 b/config.x86_64
index 1f8474a..2c519fe 100644
--- a/config.x86_64
+++ b/config.x86_64
@@ -9499,6 +9499,8 @@ CONFIG_BINARY_PRINTF=y
# Library routines
#
CONFIG_RAID6_PQ=m
+CONFIG_RAID6_PQ_DEFAULT_ALG_BOOL=y
+CONFIG_RAID6_PQ_DEFAULT_ALG="sse2x4"
CONFIG_BITREVERSE=y
CONFIG_RATIONAL=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
diff --git a/raid6-default-algo.patch b/raid6-default-algo.patch
new file mode 100644
index 0000000..98bfd54
--- /dev/null
+++ b/raid6-default-algo.patch
@@ -0,0 +1,70 @@
+--- a/lib/Kconfig
++++ b/lib/Kconfig
+@@ -10,6 +10,23 @@ menu "Library routines"
+ config RAID6_PQ
+ tristate
+
++config RAID6_PQ_DEFAULT_ALG_BOOL
++ bool "Default RAID6 PQ algorithm"
++ default n
++ depends on RAID6_PQ
++ help
++ Allow for specifying a default algorithm via the kernel
++ parameter "raid6_pq_default_alg", which forces the performance
++ tests to be skipped. This can save between 500ms to 2s
++ during boot.
++
++config RAID6_PQ_DEFAULT_ALG
++ string "Default RAID6 PQ algorithm name"
++ default ""
++ depends on RAID6_PQ_DEFAULT_ALG_BOOL
++ help
++ The default algorithm name to be used by default.
++
+ config BITREVERSE
+ tristate
+
+diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c
+index d3b16f43c39f..480cbfbe293f 100644
+--- a/lib/raid6/algos.c
++++ b/lib/raid6/algos.c
+@@ -30,6 +30,12 @@ EXPORT_SYMBOL(raid6_empty_zero_page);
+ #endif
+ #endif
+
++#ifdef CONFIG_RAID6_PQ_DEFAULT_ALG_BOOL
++static char raid6_pq_default_alg[32] = CONFIG_RAID6_PQ_DEFAULT_ALG;
++module_param_string(raid6_pq_default_alg, raid6_pq_default_alg, sizeof(raid6_pq_default_alg), 0444);
++MODULE_PARM_DESC(raid6_pq_default_alg, "Default gen/xor() algorithm");
++#endif
++
+ struct raid6_calls raid6_call;
+ EXPORT_SYMBOL_GPL(raid6_call);
+
+@@ -157,6 +163,26 @@ static inline const struct raid6_calls *raid6_choose_gen(
+ const struct raid6_calls *const *algo;
+ const struct raid6_calls *best;
+
++#ifdef CONFIG_RAID6_PQ_DEFAULT_ALG_BOOL
++ if (strlen(raid6_pq_default_alg)) {
++ for (algo = raid6_algos; *algo; algo++) {
++ if (!strncmp(raid6_pq_default_alg, (*algo)->name, sizeof(raid6_pq_default_alg))) {
++ if ((*algo)->valid && !(*algo)->valid()) {
++ pr_info("raid6: default alg \"%s\" is invalid.\n",
++ raid6_pq_default_alg);
++ continue;
++ }
++ pr_info("raid6: using default algorithm %s gen() without performace tests.\n",
++ (*algo)->name);
++ raid6_call = **algo;
++ return *algo;
++ }
++ }
++ pr_info("raid6: default alg \"%s\" not found. Choosing the best alg as fallback...\n",
++ raid6_pq_default_alg);
++ }
++#endif
++
+ for (bestgenperf = 0, bestxorperf = 0, best = NULL, algo = raid6_algos; *algo; algo++) {
+ if (!best || (*algo)->prefer >= best->prefer) {
+ /* 2 ^ (RAID6_TIME_JIFFIES_LG2 - 0.5) */