From b0b2781b278a35d4480849081282ecf949693262 Mon Sep 17 00:00:00 2001 From: xdavidwu Date: Fri, 12 Nov 2021 22:28:16 +0800 Subject: [PATCH] add clr patches --- ...decrease-debug-message-level-to-info.patch | 65 ++++++ ...increase-the-ext4-default-commit-age.patch | 35 +++ 0103-silence-rapl.patch | 25 ++ 0104-pci-pme-wakeups.patch | 27 +++ 0105-ksm-wakeups.patch | 52 +++++ 0106-intel_idle-tweak-cpuidle-cstates.patch | 220 ++++++++++++++++++ 0108-smpboot-reuse-timer-calibration.patch | 28 +++ 0109-initialize-ata-before-graphics.patch | 50 ++++ 0110-give-rdrand-some-credit.patch | 30 +++ ...he-memory-tuning-for-tcp-to-go-a-lit.patch | 28 +++ ...it-wait-for-partition-and-retry-scan.patch | 53 +++++ 0115-enable-stateless-firmware-loading.patch | 28 +++ ...temd-defaults-to-the-kernel-defaults.patch | 45 ++++ ...ing-user.-attributes-on-symlinks-by-.patch | 56 +++++ 0118-add-scheduler-turbo3-patch.patch | 82 +++++++ 0119-use-lfence-instead-of-rep-and-nop.patch | 25 ++ ...t-in-LIFO-order-for-cache-efficiency.patch | 89 +++++++ 0121-locking-rwsem-spin-faster.patch | 35 +++ ...ata-libahci-ignore-staggered-spin-up.patch | 42 ++++ 0123-print-CPU-that-faults.patch | 29 +++ 0127-nvme-workaround.patch | 25 ++ ...error-if-PowerClamp-run-on-other-CPU.patch | 40 ++++ APKBUILD | 47 +++- pull-clr-patches.sh | 32 +++ raid6.patch | 26 +++ 25 files changed, 1213 insertions(+), 1 deletion(-) create mode 100644 0101-i8042-decrease-debug-message-level-to-info.patch create mode 100644 0102-increase-the-ext4-default-commit-age.patch create mode 100644 0103-silence-rapl.patch create mode 100644 0104-pci-pme-wakeups.patch create mode 100644 0105-ksm-wakeups.patch create mode 100644 0106-intel_idle-tweak-cpuidle-cstates.patch create mode 100644 0108-smpboot-reuse-timer-calibration.patch create mode 100644 0109-initialize-ata-before-graphics.patch create mode 100644 0110-give-rdrand-some-credit.patch create mode 100644 0111-ipv4-tcp-allow-the-memory-tuning-for-tcp-to-go-a-lit.patch create mode 100644 0112-init-wait-for-partition-and-retry-scan.patch create mode 100644 0115-enable-stateless-firmware-loading.patch create mode 100644 0116-migrate-some-systemd-defaults-to-the-kernel-defaults.patch create mode 100644 0117-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch create mode 100644 0118-add-scheduler-turbo3-patch.patch create mode 100644 0119-use-lfence-instead-of-rep-and-nop.patch create mode 100644 0120-do-accept-in-LIFO-order-for-cache-efficiency.patch create mode 100644 0121-locking-rwsem-spin-faster.patch create mode 100644 0122-ata-libahci-ignore-staggered-spin-up.patch create mode 100644 0123-print-CPU-that-faults.patch create mode 100644 0127-nvme-workaround.patch create mode 100644 0128-don-t-report-an-error-if-PowerClamp-run-on-other-CPU.patch create mode 100755 pull-clr-patches.sh create mode 100644 raid6.patch diff --git a/0101-i8042-decrease-debug-message-level-to-info.patch b/0101-i8042-decrease-debug-message-level-to-info.patch new file mode 100644 index 0000000..49113a2 --- /dev/null +++ b/0101-i8042-decrease-debug-message-level-to-info.patch @@ -0,0 +1,65 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Tue, 23 Jun 2015 01:26:52 -0500 +Subject: [PATCH] i8042: decrease debug message level to info + +Author: Arjan van de Ven + +Signed-off-by: Miguel Bernal Marin +Signed-off-by: Jose Carlos Venegas Munoz +--- + drivers/input/serio/i8042.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c +index 0b9f1d0a8f8b..fc5f6ac8d264 100644 +--- a/drivers/input/serio/i8042.c ++++ b/drivers/input/serio/i8042.c +@@ -617,7 +617,7 @@ static int i8042_enable_kbd_port(void) + if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { + i8042_ctr &= ~I8042_CTR_KBDINT; + i8042_ctr |= I8042_CTR_KBDDIS; +- pr_err("Failed to enable KBD port\n"); ++ pr_info("Failed to enable KBD port\n"); + return -EIO; + } + +@@ -636,7 +636,7 @@ static int i8042_enable_aux_port(void) + if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { + i8042_ctr &= ~I8042_CTR_AUXINT; + i8042_ctr |= I8042_CTR_AUXDIS; +- pr_err("Failed to enable AUX port\n"); ++ pr_info("Failed to enable AUX port\n"); + return -EIO; + } + +@@ -728,7 +728,7 @@ static int __init i8042_check_mux(void) + i8042_ctr &= ~I8042_CTR_AUXINT; + + if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { +- pr_err("Failed to disable AUX port, can't use MUX\n"); ++ pr_info("Failed to disable AUX port, can't use MUX\n"); + return -EIO; + } + +@@ -951,7 +951,7 @@ static int i8042_controller_selftest(void) + do { + + if (i8042_command(¶m, I8042_CMD_CTL_TEST)) { +- pr_err("i8042 controller selftest timeout\n"); ++ pr_info("i8042 controller selftest timeout\n"); + return -ENODEV; + } + +@@ -973,7 +973,7 @@ static int i8042_controller_selftest(void) + pr_info("giving up on controller selftest, continuing anyway...\n"); + return 0; + #else +- pr_err("i8042 controller selftest failed\n"); ++ pr_info("i8042 controller selftest failed\n"); + return -EIO; + #endif + } +-- +https://clearlinux.org + diff --git a/0102-increase-the-ext4-default-commit-age.patch b/0102-increase-the-ext4-default-commit-age.patch new file mode 100644 index 0000000..85a13d1 --- /dev/null +++ b/0102-increase-the-ext4-default-commit-age.patch @@ -0,0 +1,35 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Mon, 11 Jan 2016 10:01:44 -0600 +Subject: [PATCH] increase the ext4 default commit age + +Both the VM and EXT4 have a "commit to disk after X seconds" time. +Currently the EXT4 time is shorter than our VM time, which is a bit +suboptional, +it's better for performance to let the VM do the writeouts in bulk +rather than something deep in the journalling layer. + +(DISTRO TWEAK -- NOT FOR UPSTREAM) + +Signed-off-by: Arjan van de Ven +Signed-off-by: Jose Carlos Venegas Munoz +--- + include/linux/jbd2.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h +index fd933c45281a..e70409a77cfa 100644 +--- a/include/linux/jbd2.h ++++ b/include/linux/jbd2.h +@@ -45,7 +45,7 @@ + /* + * The default maximum commit age, in seconds. + */ +-#define JBD2_DEFAULT_MAX_COMMIT_AGE 5 ++#define JBD2_DEFAULT_MAX_COMMIT_AGE 30 + + #ifdef CONFIG_JBD2_DEBUG + /* +-- +https://clearlinux.org + diff --git a/0103-silence-rapl.patch b/0103-silence-rapl.patch new file mode 100644 index 0000000..1b990b0 --- /dev/null +++ b/0103-silence-rapl.patch @@ -0,0 +1,25 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Mon, 14 Mar 2016 11:22:09 -0600 +Subject: [PATCH] silence rapl + +--- + drivers/powercap/intel_rapl_common.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_rapl_common.c +index 7c0099e7a6d7..f0d65382806a 100644 +--- a/drivers/powercap/intel_rapl_common.c ++++ b/drivers/powercap/intel_rapl_common.c +@@ -1455,7 +1455,7 @@ static int __init rapl_init(void) + + id = x86_match_cpu(rapl_ids); + if (!id) { +- pr_err("driver does not support CPU family %d model %d\n", ++ pr_info("driver does not support CPU family %d model %d\n", + boot_cpu_data.x86, boot_cpu_data.x86_model); + + return -ENODEV; +-- +https://clearlinux.org + diff --git a/0104-pci-pme-wakeups.patch b/0104-pci-pme-wakeups.patch new file mode 100644 index 0000000..454c32e --- /dev/null +++ b/0104-pci-pme-wakeups.patch @@ -0,0 +1,27 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Mon, 14 Mar 2016 11:10:58 -0600 +Subject: [PATCH] pci pme wakeups + +Reduce wakeups for PME checks, which are a workaround for miswired +boards (sadly, too many of them) in laptops. +--- + drivers/pci/pci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c +index ce2ab62b64cf..feb0e07f465d 100644 +--- a/drivers/pci/pci.c ++++ b/drivers/pci/pci.c +@@ -60,7 +60,7 @@ struct pci_pme_device { + struct pci_dev *dev; + }; + +-#define PME_TIMEOUT 1000 /* How long between PME checks */ ++#define PME_TIMEOUT 4000 /* How long between PME checks */ + + static void pci_dev_d3_sleep(struct pci_dev *dev) + { +-- +https://clearlinux.org + diff --git a/0105-ksm-wakeups.patch b/0105-ksm-wakeups.patch new file mode 100644 index 0000000..d4c39c3 --- /dev/null +++ b/0105-ksm-wakeups.patch @@ -0,0 +1,52 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Mon, 6 May 2019 12:57:09 -0500 +Subject: [PATCH] ksm-wakeups + +reduce wakeups in ksm by adding rounding (aligning) when +the sleep times are 1 second or longer + +Signed-off-by: Arjan van de Ven +--- + kernel/watchdog.c | 2 +- + mm/ksm.c | 11 ++++++++--- + 2 files changed, 9 insertions(+), 4 deletions(-) + +diff --git a/kernel/watchdog.c b/kernel/watchdog.c +index ad912511a0c0..8ccb40284a24 100644 +--- a/kernel/watchdog.c ++++ b/kernel/watchdog.c +@@ -41,7 +41,7 @@ unsigned long __read_mostly watchdog_enabled; + int __read_mostly watchdog_user_enabled = 1; + int __read_mostly nmi_watchdog_user_enabled = NMI_WATCHDOG_DEFAULT; + int __read_mostly soft_watchdog_user_enabled = 1; +-int __read_mostly watchdog_thresh = 10; ++int __read_mostly watchdog_thresh = 40; + static int __read_mostly nmi_watchdog_available; + + struct cpumask watchdog_cpumask __read_mostly; +diff --git a/mm/ksm.c b/mm/ksm.c +index a5716fdec1aa..7d5ec01385c7 100644 +--- a/mm/ksm.c ++++ b/mm/ksm.c +@@ -2415,9 +2415,14 @@ static int ksm_scan_thread(void *nothing) + + if (ksmd_should_run()) { + sleep_ms = READ_ONCE(ksm_thread_sleep_millisecs); +- wait_event_interruptible_timeout(ksm_iter_wait, +- sleep_ms != READ_ONCE(ksm_thread_sleep_millisecs), +- msecs_to_jiffies(sleep_ms)); ++ if (sleep_ms >= 1000) ++ wait_event_interruptible_timeout(ksm_iter_wait, ++ sleep_ms != READ_ONCE(ksm_thread_sleep_millisecs), ++ msecs_to_jiffies(round_jiffies_relative(sleep_ms))); ++ else ++ wait_event_interruptible_timeout(ksm_iter_wait, ++ sleep_ms != READ_ONCE(ksm_thread_sleep_millisecs), ++ msecs_to_jiffies(sleep_ms)); + } else { + wait_event_freezable(ksm_thread_wait, + ksmd_should_run() || kthread_should_stop()); +-- +https://clearlinux.org + diff --git a/0106-intel_idle-tweak-cpuidle-cstates.patch b/0106-intel_idle-tweak-cpuidle-cstates.patch new file mode 100644 index 0000000..6621654 --- /dev/null +++ b/0106-intel_idle-tweak-cpuidle-cstates.patch @@ -0,0 +1,220 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Sat, 19 Mar 2016 21:32:19 -0400 +Subject: [PATCH] intel_idle: tweak cpuidle cstates + +Increase target_residency in cpuidle cstate + +Tune intel_idle to be a bit less agressive; +Clear linux is cleaner in hygiene (wakupes) than the average linux, +so we can afford changing these in a way that increases +performance while keeping power efficiency +--- + drivers/idle/intel_idle.c | 44 +++++++++++++++++++-------------------- + 1 file changed, 22 insertions(+), 22 deletions(-) + +diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c +index e6c543b5ee1d..b73df64b2925 100644 +--- a/drivers/idle/intel_idle.c ++++ b/drivers/idle/intel_idle.c +@@ -502,7 +502,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = { + .desc = "MWAIT 0x01", + .flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE, + .exit_latency = 10, +- .target_residency = 20, ++ .target_residency = 120, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -510,7 +510,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = { + .desc = "MWAIT 0x10", + .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 33, +- .target_residency = 100, ++ .target_residency = 900, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -518,7 +518,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = { + .desc = "MWAIT 0x20", + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 133, +- .target_residency = 400, ++ .target_residency = 1000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -526,7 +526,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = { + .desc = "MWAIT 0x32", + .flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 166, +- .target_residency = 500, ++ .target_residency = 1500, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -534,7 +534,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = { + .desc = "MWAIT 0x40", + .flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 300, +- .target_residency = 900, ++ .target_residency = 2000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -542,7 +542,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = { + .desc = "MWAIT 0x50", + .flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 600, +- .target_residency = 1800, ++ .target_residency = 5000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -550,7 +550,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = { + .desc = "MWAIT 0x60", + .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 2600, +- .target_residency = 7700, ++ .target_residency = 9000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -570,7 +570,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = { + .desc = "MWAIT 0x01", + .flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE, + .exit_latency = 10, +- .target_residency = 20, ++ .target_residency = 120, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -578,7 +578,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = { + .desc = "MWAIT 0x10", + .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 40, +- .target_residency = 100, ++ .target_residency = 1000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -586,7 +586,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = { + .desc = "MWAIT 0x20", + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 133, +- .target_residency = 400, ++ .target_residency = 1000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -594,7 +594,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = { + .desc = "MWAIT 0x32", + .flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 166, +- .target_residency = 500, ++ .target_residency = 2000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -602,7 +602,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = { + .desc = "MWAIT 0x40", + .flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 300, +- .target_residency = 900, ++ .target_residency = 4000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -610,7 +610,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = { + .desc = "MWAIT 0x50", + .flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 600, +- .target_residency = 1800, ++ .target_residency = 7000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -618,7 +618,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = { + .desc = "MWAIT 0x60", + .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 2600, +- .target_residency = 7700, ++ .target_residency = 9000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -639,7 +639,7 @@ static struct cpuidle_state skl_cstates[] __initdata = { + .desc = "MWAIT 0x01", + .flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE, + .exit_latency = 10, +- .target_residency = 20, ++ .target_residency = 120, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -647,7 +647,7 @@ static struct cpuidle_state skl_cstates[] __initdata = { + .desc = "MWAIT 0x10", + .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 70, +- .target_residency = 100, ++ .target_residency = 1000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -655,7 +655,7 @@ static struct cpuidle_state skl_cstates[] __initdata = { + .desc = "MWAIT 0x20", + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 85, +- .target_residency = 200, ++ .target_residency = 600, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -663,7 +663,7 @@ static struct cpuidle_state skl_cstates[] __initdata = { + .desc = "MWAIT 0x33", + .flags = MWAIT2flg(0x33) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 124, +- .target_residency = 800, ++ .target_residency = 3000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -671,7 +671,7 @@ static struct cpuidle_state skl_cstates[] __initdata = { + .desc = "MWAIT 0x40", + .flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 200, +- .target_residency = 800, ++ .target_residency = 3200, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -679,7 +679,7 @@ static struct cpuidle_state skl_cstates[] __initdata = { + .desc = "MWAIT 0x50", + .flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 480, +- .target_residency = 5000, ++ .target_residency = 9000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -687,7 +687,7 @@ static struct cpuidle_state skl_cstates[] __initdata = { + .desc = "MWAIT 0x60", + .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 890, +- .target_residency = 5000, ++ .target_residency = 9000, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +@@ -708,7 +708,7 @@ static struct cpuidle_state skx_cstates[] __initdata = { + .desc = "MWAIT 0x01", + .flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE, + .exit_latency = 10, +- .target_residency = 20, ++ .target_residency = 300, + .enter = &intel_idle, + .enter_s2idle = intel_idle_s2idle, }, + { +-- +https://clearlinux.org + diff --git a/0108-smpboot-reuse-timer-calibration.patch b/0108-smpboot-reuse-timer-calibration.patch new file mode 100644 index 0000000..381aee3 --- /dev/null +++ b/0108-smpboot-reuse-timer-calibration.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Wed, 11 Feb 2015 17:28:14 -0600 +Subject: [PATCH] smpboot: reuse timer calibration + +NO point recalibrating for known-constant tsc ... +saves 200ms+ of boot time. +--- + arch/x86/kernel/tsc.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c +index 2e076a459a0c..94bc1166476e 100644 +--- a/arch/x86/kernel/tsc.c ++++ b/arch/x86/kernel/tsc.c +@@ -1549,6 +1549,9 @@ unsigned long calibrate_delay_is_known(void) + if (!constant_tsc || !mask) + return 0; + ++ if (cpu != 0) ++ return cpu_data(0).loops_per_jiffy; ++ + sibling = cpumask_any_but(mask, cpu); + if (sibling < nr_cpu_ids) + return cpu_data(sibling).loops_per_jiffy; +-- +https://clearlinux.org + diff --git a/0109-initialize-ata-before-graphics.patch b/0109-initialize-ata-before-graphics.patch new file mode 100644 index 0000000..2714a53 --- /dev/null +++ b/0109-initialize-ata-before-graphics.patch @@ -0,0 +1,50 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Thu, 2 Jun 2016 23:36:32 -0500 +Subject: [PATCH] initialize ata before graphics + +ATA init is the long pole in the boot process, and its asynchronous. +move the graphics init after it so that ata and graphics initialize +in parallel +--- + drivers/Makefile | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/drivers/Makefile b/drivers/Makefile +index be5d40ae1488..5cf1c4a93708 100644 +--- a/drivers/Makefile ++++ b/drivers/Makefile +@@ -60,15 +60,8 @@ obj-y += char/ + # iommu/ comes before gpu as gpu are using iommu controllers + obj-y += iommu/ + +-# gpu/ comes after char for AGP vs DRM startup and after iommu +-obj-y += gpu/ +- + obj-$(CONFIG_CONNECTOR) += connector/ + +-# i810fb and intelfb depend on char/agp/ +-obj-$(CONFIG_FB_I810) += video/fbdev/i810/ +-obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/ +- + obj-$(CONFIG_PARPORT) += parport/ + obj-y += base/ block/ misc/ mfd/ nfc/ + obj-$(CONFIG_LIBNVDIMM) += nvdimm/ +@@ -80,6 +73,14 @@ obj-y += macintosh/ + obj-y += scsi/ + obj-y += nvme/ + obj-$(CONFIG_ATA) += ata/ ++ ++# gpu/ comes after char for AGP vs DRM startup and after iommu ++obj-y += gpu/ ++ ++# i810fb and intelfb depend on char/agp/ ++obj-$(CONFIG_FB_I810) += video/fbdev/i810/ ++obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/ ++ + obj-$(CONFIG_TARGET_CORE) += target/ + obj-$(CONFIG_MTD) += mtd/ + obj-$(CONFIG_SPI) += spi/ +-- +https://clearlinux.org + diff --git a/0110-give-rdrand-some-credit.patch b/0110-give-rdrand-some-credit.patch new file mode 100644 index 0000000..0402da7 --- /dev/null +++ b/0110-give-rdrand-some-credit.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Fri, 29 Jul 2016 19:10:52 +0000 +Subject: [PATCH] give rdrand some credit + +try to credit rdrand/rdseed with some entropy + +In VMs but even modern hardware, we're super starved for entropy, and while we can +and do wear a tin foil hat, it's very hard to argue that +rdrand and rdtsc add zero entropy. +--- + drivers/char/random.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/char/random.c b/drivers/char/random.c +index 605969ed0f96..1cab72339cba 100644 +--- a/drivers/char/random.c ++++ b/drivers/char/random.c +@@ -1757,6 +1757,8 @@ static void __init init_std_data(struct entropy_store *r) + if (!arch_get_random_seed_long(&rv) && + !arch_get_random_long(&rv)) + rv = random_get_entropy(); ++ else ++ credit_entropy_bits(r, 1); + mix_pool_bytes(r, &rv, sizeof(rv)); + } + mix_pool_bytes(r, utsname(), sizeof(*(utsname()))); +-- +https://clearlinux.org + diff --git a/0111-ipv4-tcp-allow-the-memory-tuning-for-tcp-to-go-a-lit.patch b/0111-ipv4-tcp-allow-the-memory-tuning-for-tcp-to-go-a-lit.patch new file mode 100644 index 0000000..838a77b --- /dev/null +++ b/0111-ipv4-tcp-allow-the-memory-tuning-for-tcp-to-go-a-lit.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Fri, 6 Jan 2017 15:34:09 +0000 +Subject: [PATCH] ipv4/tcp: allow the memory tuning for tcp to go a little + bigger than default + +--- + net/ipv4/tcp.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c +index f5c336f8b0c8..27aa106cac3f 100644 +--- a/net/ipv4/tcp.c ++++ b/net/ipv4/tcp.c +@@ -4557,8 +4557,8 @@ void __init tcp_init(void) + tcp_init_mem(); + /* Set per-socket limits to no more than 1/128 the pressure threshold */ + limit = nr_free_buffer_pages() << (PAGE_SHIFT - 7); +- max_wshare = min(4UL*1024*1024, limit); +- max_rshare = min(6UL*1024*1024, limit); ++ max_wshare = min(16UL*1024*1024, limit); ++ max_rshare = min(16UL*1024*1024, limit); + + init_net.ipv4.sysctl_tcp_wmem[0] = SK_MEM_QUANTUM; + init_net.ipv4.sysctl_tcp_wmem[1] = 16*1024; +-- +https://clearlinux.org + diff --git a/0112-init-wait-for-partition-and-retry-scan.patch b/0112-init-wait-for-partition-and-retry-scan.patch new file mode 100644 index 0000000..703894c --- /dev/null +++ b/0112-init-wait-for-partition-and-retry-scan.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Wed, 17 May 2017 01:52:11 +0000 +Subject: [PATCH] init: wait for partition and retry scan + +As Clear Linux boots fast the device is not ready when +the mounting code is reached, so a retry device scan will +be performed every 0.5 sec for at least 40 sec +and synchronize the async task. + +Signed-off-by: Miguel Bernal Marin +--- + init/do_mounts.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/init/do_mounts.c b/init/do_mounts.c +index 762b534978d9..107b96927049 100644 +--- a/init/do_mounts.c ++++ b/init/do_mounts.c +@@ -284,8 +284,18 @@ dev_t name_to_dev_t(const char *name) + if (strcmp(name, "/dev/ram") == 0) + return Root_RAM0; + #ifdef CONFIG_BLOCK +- if (strncmp(name, "PARTUUID=", 9) == 0) +- return devt_from_partuuid(name + 9); ++ if (strncmp(name, "PARTUUID=", 9) == 0) { ++ dev_t res; ++ int needtowait = 40<<1; ++ res = devt_from_partuuid(name + 9); ++ while (!res && needtowait) { ++ /* waiting 0.5 sec */ ++ msleep(500); ++ res = devt_from_partuuid(name + 9); ++ needtowait--; ++ } ++ return res; ++ } + if (strncmp(name, "PARTLABEL=", 10) == 0) + return devt_from_partlabel(name + 10); + if (strncmp(name, "/dev/", 5) == 0) +@@ -613,7 +623,9 @@ void __init prepare_namespace(void) + * For example, it is not atypical to wait 5 seconds here + * for the touchpad of a laptop to initialize. + */ ++ async_synchronize_full(); + wait_for_device_probe(); ++ async_synchronize_full(); + + md_run_setup(); + +-- +https://clearlinux.org + diff --git a/0115-enable-stateless-firmware-loading.patch b/0115-enable-stateless-firmware-loading.patch new file mode 100644 index 0000000..e654823 --- /dev/null +++ b/0115-enable-stateless-firmware-loading.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Douglas +Date: Wed, 20 Jun 2018 17:23:21 +0000 +Subject: [PATCH] enable stateless firmware loading + +Prefer the order of specific version before generic and /etc before +/lib to enable the user to give specific overrides for generic +firmware and distribution firmware. +--- + drivers/base/firmware_loader/main.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c +index bdbedc6660a8..53b254e5240b 100644 +--- a/drivers/base/firmware_loader/main.c ++++ b/drivers/base/firmware_loader/main.c +@@ -466,6 +466,8 @@ static int fw_decompress_xz(struct device *dev, struct fw_priv *fw_priv, + static char fw_path_para[256]; + static const char * const fw_path[] = { + fw_path_para, ++ "/etc/firmware/" UTS_RELEASE, ++ "/etc/firmware", + "/lib/firmware/updates/" UTS_RELEASE, + "/lib/firmware/updates", + "/lib/firmware/" UTS_RELEASE, +-- +https://clearlinux.org + diff --git a/0116-migrate-some-systemd-defaults-to-the-kernel-defaults.patch b/0116-migrate-some-systemd-defaults-to-the-kernel-defaults.patch new file mode 100644 index 0000000..5230806 --- /dev/null +++ b/0116-migrate-some-systemd-defaults-to-the-kernel-defaults.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Auke Kok +Date: Thu, 2 Aug 2018 12:03:22 -0700 +Subject: [PATCH] migrate some systemd defaults to the kernel defaults. + +These settings are needed to prevent networking issues when +the networking modules come up by default without explicit +settings, which breaks some cases. + +We don't want the modprobe settings to be read at boot time +if we're not going to do anything else ever. +--- + drivers/net/dummy.c | 2 +- + include/uapi/linux/if_bonding.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c +index f82ad7419508..5e8faa70aad6 100644 +--- a/drivers/net/dummy.c ++++ b/drivers/net/dummy.c +@@ -43,7 +43,7 @@ + + #define DRV_NAME "dummy" + +-static int numdummies = 1; ++static int numdummies = 0; + + /* fake multicast ability */ + static void set_multicast_list(struct net_device *dev) +diff --git a/include/uapi/linux/if_bonding.h b/include/uapi/linux/if_bonding.h +index d174914a837d..bf8e2af101a3 100644 +--- a/include/uapi/linux/if_bonding.h ++++ b/include/uapi/linux/if_bonding.h +@@ -82,7 +82,7 @@ + #define BOND_STATE_ACTIVE 0 /* link is active */ + #define BOND_STATE_BACKUP 1 /* link is backup */ + +-#define BOND_DEFAULT_MAX_BONDS 1 /* Default maximum number of devices to support */ ++#define BOND_DEFAULT_MAX_BONDS 0 /* Default maximum number of devices to support */ + + #define BOND_DEFAULT_TX_QUEUES 16 /* Default number of tx queues per device */ + +-- +https://clearlinux.org + diff --git a/0117-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch b/0117-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch new file mode 100644 index 0000000..d821bed --- /dev/null +++ b/0117-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch @@ -0,0 +1,56 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Alan Cox +Date: Thu, 10 Mar 2016 15:11:28 +0000 +Subject: [PATCH] xattr: allow setting user.* attributes on symlinks by owner + +Kvmtool and clear containers supports using user attributes to label host +files with the virtual uid/guid of the file in the container. This allows an +end user to manage their files and a complete uid space without all the ugly +namespace stuff. + +The one gap in the support is symlinks because an end user can change the +ownership of a symbolic link. We support attributes on these files as you +can already (as root) set security attributes on them. + +The current rules seem slightly over-paranoid and as we have a use case this +patch enables updating the attributes on a symbolic link IFF you are the +owner of the synlink (as permissions are not usually meaningful on the link +itself). + +Signed-off-by: Alan Cox +--- + fs/xattr.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/fs/xattr.c b/fs/xattr.c +index 5c8c5175b385..0f98df2ea2e2 100644 +--- a/fs/xattr.c ++++ b/fs/xattr.c +@@ -120,16 +120,17 @@ xattr_permission(struct user_namespace *mnt_userns, struct inode *inode, + } + + /* +- * In the user.* namespace, only regular files and directories can have +- * extended attributes. For sticky directories, only the owner and +- * privileged users can write attributes. ++ * In the user.* namespace, only regular files, symbolic links, and ++ * directories can have extended attributes. For symbolic links and ++ * sticky directories, only the owner and privileged users can write ++ * attributes. + */ + if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) { +- if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode)) ++ if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode) && !S_ISLNK(inode->i_mode)) + return (mask & MAY_WRITE) ? -EPERM : -ENODATA; +- if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) && +- (mask & MAY_WRITE) && +- !inode_owner_or_capable(mnt_userns, inode)) ++ if (((S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX)) ++ || S_ISLNK(inode->i_mode)) && (mask & MAY_WRITE) ++ && !inode_owner_or_capable(mnt_userns, inode)) + return -EPERM; + } + +-- +https://clearlinux.org + diff --git a/0118-add-scheduler-turbo3-patch.patch b/0118-add-scheduler-turbo3-patch.patch new file mode 100644 index 0000000..7f119d6 --- /dev/null +++ b/0118-add-scheduler-turbo3-patch.patch @@ -0,0 +1,82 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Wed, 21 Nov 2018 21:21:44 +0000 +Subject: [PATCH] add scheduler turbo3 patch + +Small scheduler tweak to make the scheduler more turbo3 aware +--- + arch/x86/kernel/itmt.c | 14 ++++++++++++++ + kernel/sched/fair.c | 19 +++++++++++++++++++ + 2 files changed, 33 insertions(+) + +diff --git a/arch/x86/kernel/itmt.c b/arch/x86/kernel/itmt.c +index 1afbdd1dd777..d828ecf6bce7 100644 +--- a/arch/x86/kernel/itmt.c ++++ b/arch/x86/kernel/itmt.c +@@ -172,6 +172,11 @@ int arch_asym_cpu_priority(int cpu) + return per_cpu(sched_core_priority, cpu); + } + ++extern int best_core; ++extern int second_best_core; ++static int best_core_score; ++static int second_best_core_score; ++ + /** + * sched_set_itmt_core_prio() - Set CPU priority based on ITMT + * @prio: Priority of cpu core +@@ -201,5 +206,14 @@ void sched_set_itmt_core_prio(int prio, int core_cpu) + smt_prio = prio * smp_num_siblings / i; + per_cpu(sched_core_priority, cpu) = smt_prio; + i++; ++ ++ if (smt_prio > best_core_score) { ++ best_core = cpu; ++ best_core_score = smt_prio; ++ } else ++ if (smt_prio > second_best_core_score) { ++ second_best_core = cpu; ++ second_best_core_score = smt_prio; ++ } + } + } +diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c +index 3889fee98d11..6d925f337add 100644 +--- a/kernel/sched/fair.c ++++ b/kernel/sched/fair.c +@@ -6836,6 +6836,10 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu) + * + * preempt must be disabled. + */ ++ ++int best_core = -1; ++int second_best_core = -1; ++ + static int + select_task_rq_fair(struct task_struct *p, int prev_cpu, int wake_flags) + { +@@ -6860,6 +6864,21 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int wake_flags) + want_affine = !wake_wide(p) && cpumask_test_cpu(cpu, p->cpus_ptr); + } + ++ if (prev_cpu != best_core && prev_cpu != second_best_core && ++ cpu_rq(prev_cpu)->nr_running != 0) { ++ if (second_best_core != -1 && cpu_rq(second_best_core)->nr_running == 0 && ++ nr_iowait_cpu(second_best_core) < 2 && cpu_to_node(prev_cpu) == cpu_to_node(second_best_core)) ++ prev_cpu = second_best_core; ++ if (best_core != -1 && cpu_rq(best_core)->nr_running == 0 && ++ nr_iowait_cpu(best_core) < 2 && cpu_to_node(prev_cpu) == cpu_to_node(best_core)) ++ prev_cpu = best_core; ++ } ++/* ++ if (prev_cpu > 0 && cpu_rq(prev_cpu)->nr_running != 0 && cpu_rq(prev_cpu - 1)->nr_running == 0) ++ prev_cpu = prev_cpu - 1; ++*/ ++ ++ + rcu_read_lock(); + for_each_domain(cpu, tmp) { + /* +-- +https://clearlinux.org + diff --git a/0119-use-lfence-instead-of-rep-and-nop.patch b/0119-use-lfence-instead-of-rep-and-nop.patch new file mode 100644 index 0000000..463f384 --- /dev/null +++ b/0119-use-lfence-instead-of-rep-and-nop.patch @@ -0,0 +1,25 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Sat, 8 Dec 2018 18:21:32 +0000 +Subject: [PATCH] use lfence instead of rep and nop + +--- + arch/x86/include/asm/vdso/processor.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/x86/include/asm/vdso/processor.h b/arch/x86/include/asm/vdso/processor.h +index 57b1a7034c64..e2c45674f989 100644 +--- a/arch/x86/include/asm/vdso/processor.h ++++ b/arch/x86/include/asm/vdso/processor.h +@@ -10,7 +10,7 @@ + /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ + static __always_inline void rep_nop(void) + { +- asm volatile("rep; nop" ::: "memory"); ++ asm volatile("lfence" ::: "memory"); + } + + static __always_inline void cpu_relax(void) +-- +https://clearlinux.org + diff --git a/0120-do-accept-in-LIFO-order-for-cache-efficiency.patch b/0120-do-accept-in-LIFO-order-for-cache-efficiency.patch new file mode 100644 index 0000000..7ff4ee1 --- /dev/null +++ b/0120-do-accept-in-LIFO-order-for-cache-efficiency.patch @@ -0,0 +1,89 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Thu, 13 Dec 2018 01:00:49 +0000 +Subject: [PATCH] do accept() in LIFO order for cache efficiency + +--- + include/linux/wait.h | 2 ++ + kernel/sched/wait.c | 24 ++++++++++++++++++++++++ + net/ipv4/inet_connection_sock.c | 2 +- + 3 files changed, 27 insertions(+), 1 deletion(-) + +diff --git a/include/linux/wait.h b/include/linux/wait.h +index 6598ae35e1b5..100dbbcd0df9 100644 +--- a/include/linux/wait.h ++++ b/include/linux/wait.h +@@ -165,6 +165,7 @@ static inline bool wq_has_sleeper(struct wait_queue_head *wq_head) + + extern void add_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry); + extern void add_wait_queue_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry); ++extern void add_wait_queue_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry); + extern void add_wait_queue_priority(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry); + extern void remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry); + +@@ -1137,6 +1138,7 @@ do { \ + */ + void prepare_to_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state); + bool prepare_to_wait_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state); ++void prepare_to_wait_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state); + long prepare_to_wait_event(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state); + void finish_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry); + long wait_woken(struct wait_queue_entry *wq_entry, unsigned mode, long timeout); +diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c +index 76577d1642a5..c33f48ed2bbb 100644 +--- a/kernel/sched/wait.c ++++ b/kernel/sched/wait.c +@@ -48,6 +48,17 @@ void add_wait_queue_priority(struct wait_queue_head *wq_head, struct wait_queue_ + } + EXPORT_SYMBOL_GPL(add_wait_queue_priority); + ++void add_wait_queue_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry) ++{ ++ unsigned long flags; ++ ++ wq_entry->flags |= WQ_FLAG_EXCLUSIVE; ++ spin_lock_irqsave(&wq_head->lock, flags); ++ __add_wait_queue(wq_head, wq_entry); ++ spin_unlock_irqrestore(&wq_head->lock, flags); ++} ++EXPORT_SYMBOL(add_wait_queue_exclusive_lifo); ++ + void remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry) + { + unsigned long flags; +@@ -283,6 +294,19 @@ prepare_to_wait_exclusive(struct wait_queue_head *wq_head, struct wait_queue_ent + } + EXPORT_SYMBOL(prepare_to_wait_exclusive); + ++void prepare_to_wait_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state) ++{ ++ unsigned long flags; ++ ++ wq_entry->flags |= WQ_FLAG_EXCLUSIVE; ++ spin_lock_irqsave(&wq_head->lock, flags); ++ if (list_empty(&wq_entry->entry)) ++ __add_wait_queue(wq_head, wq_entry); ++ set_current_state(state); ++ spin_unlock_irqrestore(&wq_head->lock, flags); ++} ++EXPORT_SYMBOL(prepare_to_wait_exclusive_lifo); ++ + void init_wait_entry(struct wait_queue_entry *wq_entry, int flags) + { + wq_entry->flags = flags; +diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c +index fd472eae4f5c..d85f68c9f4a6 100644 +--- a/net/ipv4/inet_connection_sock.c ++++ b/net/ipv4/inet_connection_sock.c +@@ -433,7 +433,7 @@ static int inet_csk_wait_for_connect(struct sock *sk, long timeo) + * having to remove and re-insert us on the wait queue. + */ + for (;;) { +- prepare_to_wait_exclusive(sk_sleep(sk), &wait, ++ prepare_to_wait_exclusive_lifo(sk_sleep(sk), &wait, + TASK_INTERRUPTIBLE); + release_sock(sk); + if (reqsk_queue_empty(&icsk->icsk_accept_queue)) +-- +https://clearlinux.org + diff --git a/0121-locking-rwsem-spin-faster.patch b/0121-locking-rwsem-spin-faster.patch new file mode 100644 index 0000000..cf973ff --- /dev/null +++ b/0121-locking-rwsem-spin-faster.patch @@ -0,0 +1,35 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Sun, 18 Feb 2018 23:35:41 +0000 +Subject: [PATCH] locking: rwsem: spin faster + +tweak rwsem owner spinning a bit +--- + kernel/locking/rwsem.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c +index 809b0016d344..2cc79a87c1ca 100644 +--- a/kernel/locking/rwsem.c ++++ b/kernel/locking/rwsem.c +@@ -668,6 +668,7 @@ rwsem_spin_on_owner(struct rw_semaphore *sem) + struct task_struct *new, *owner; + unsigned long flags, new_flags; + enum owner_state state; ++ int i = 0; + + owner = rwsem_owner_flags(sem, &flags); + state = rwsem_owner_state(owner, flags); +@@ -701,7 +702,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem) + break; + } + +- cpu_relax(); ++ if (i++ > 1000) ++ cpu_relax(); + } + rcu_read_unlock(); + +-- +https://clearlinux.org + diff --git a/0122-ata-libahci-ignore-staggered-spin-up.patch b/0122-ata-libahci-ignore-staggered-spin-up.patch new file mode 100644 index 0000000..970007e --- /dev/null +++ b/0122-ata-libahci-ignore-staggered-spin-up.patch @@ -0,0 +1,42 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Joe Konno +Date: Tue, 25 Jun 2019 10:35:54 -0700 +Subject: [PATCH] ata: libahci: ignore staggered spin-up + +Change libahci to ignore firmware's staggered spin-up flag. End-users +who wish to honor firmware's SSS flag can add the following kernel +parameter to a new file at /etc/kernel/cmdline.d/ignore_sss.conf: + libahci.ignore_sss=0 + +And then run + sudo clr-boot-manager update + +Signed-off-by: Joe Konno +--- + drivers/ata/libahci.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c +index fec2e9754aed..e339cb80f29b 100644 +--- a/drivers/ata/libahci.c ++++ b/drivers/ata/libahci.c +@@ -33,14 +33,14 @@ + #include "libata.h" + + static int ahci_skip_host_reset; +-int ahci_ignore_sss; ++int ahci_ignore_sss=1; + EXPORT_SYMBOL_GPL(ahci_ignore_sss); + + module_param_named(skip_host_reset, ahci_skip_host_reset, int, 0444); + MODULE_PARM_DESC(skip_host_reset, "skip global host reset (0=don't skip, 1=skip)"); + + module_param_named(ignore_sss, ahci_ignore_sss, int, 0444); +-MODULE_PARM_DESC(ignore_sss, "Ignore staggered spinup flag (0=don't ignore, 1=ignore)"); ++MODULE_PARM_DESC(ignore_sss, "Ignore staggered spinup flag (0=don't ignore, 1=ignore [default])"); + + static int ahci_set_lpm(struct ata_link *link, enum ata_lpm_policy policy, + unsigned hints); +-- +https://clearlinux.org + diff --git a/0123-print-CPU-that-faults.patch b/0123-print-CPU-that-faults.patch new file mode 100644 index 0000000..f8aee45 --- /dev/null +++ b/0123-print-CPU-that-faults.patch @@ -0,0 +1,29 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Sat, 10 Aug 2019 03:19:04 +0000 +Subject: [PATCH] print CPU that faults + +print cpu number when we print a crash +--- + arch/x86/mm/fault.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c +index 6bda7f67d737..cc37727abe98 100644 +--- a/arch/x86/mm/fault.c ++++ b/arch/x86/mm/fault.c +@@ -771,9 +771,9 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code, + if (!printk_ratelimit()) + return; + +- printk("%s%s[%d]: segfault at %lx ip %px sp %px error %lx", ++ printk("%s%s[%d]: segfault at %lx ip %px sp %px error %lx cpu %i", + loglvl, tsk->comm, task_pid_nr(tsk), address, +- (void *)regs->ip, (void *)regs->sp, error_code); ++ (void *)regs->ip, (void *)regs->sp, error_code, raw_smp_processor_id()); + + print_vma_addr(KERN_CONT " in ", regs->ip); + +-- +https://clearlinux.org + diff --git a/0127-nvme-workaround.patch b/0127-nvme-workaround.patch new file mode 100644 index 0000000..b897889 --- /dev/null +++ b/0127-nvme-workaround.patch @@ -0,0 +1,25 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Mon, 11 Nov 2019 23:12:11 +0000 +Subject: [PATCH] nvme workaround + +--- + drivers/nvme/host/core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c +index a13eec2fca5a..a53b2968370c 100644 +--- a/drivers/nvme/host/core.c ++++ b/drivers/nvme/host/core.c +@@ -48,7 +48,7 @@ static u8 nvme_max_retries = 5; + module_param_named(max_retries, nvme_max_retries, byte, 0644); + MODULE_PARM_DESC(max_retries, "max number of retries a command may have"); + +-static unsigned long default_ps_max_latency_us = 100000; ++static unsigned long default_ps_max_latency_us = 200; + module_param(default_ps_max_latency_us, ulong, 0644); + MODULE_PARM_DESC(default_ps_max_latency_us, + "max power saving latency for new devices; use PM QOS to change per device"); +-- +https://clearlinux.org + diff --git a/0128-don-t-report-an-error-if-PowerClamp-run-on-other-CPU.patch b/0128-don-t-report-an-error-if-PowerClamp-run-on-other-CPU.patch new file mode 100644 index 0000000..2f0e828 --- /dev/null +++ b/0128-don-t-report-an-error-if-PowerClamp-run-on-other-CPU.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Alexander Koskovich +Date: Wed, 12 Feb 2020 22:47:12 +0000 +Subject: [PATCH] don't report an error if PowerClamp run on other CPU + +--- + drivers/thermal/intel/intel_powerclamp.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/thermal/intel/intel_powerclamp.c b/drivers/thermal/intel/intel_powerclamp.c +index b0eb5ece9243..5dc056d31c36 100644 +--- a/drivers/thermal/intel/intel_powerclamp.c ++++ b/drivers/thermal/intel/intel_powerclamp.c +@@ -647,6 +647,11 @@ static struct thermal_cooling_device_ops powerclamp_cooling_ops = { + .set_cur_state = powerclamp_set_cur_state, + }; + ++static const struct x86_cpu_id amd_cpu[] = { ++ { X86_VENDOR_AMD }, ++ {}, ++}; ++ + static const struct x86_cpu_id __initconst intel_powerclamp_ids[] = { + X86_MATCH_VENDOR_FEATURE(INTEL, X86_FEATURE_MWAIT, NULL), + {} +@@ -656,6 +661,11 @@ MODULE_DEVICE_TABLE(x86cpu, intel_powerclamp_ids); + static int __init powerclamp_probe(void) + { + ++ if (x86_match_cpu(amd_cpu)){ ++ pr_info("Intel PowerClamp does not support AMD CPUs\n"); ++ return -ENODEV; ++ } ++ + if (!x86_match_cpu(intel_powerclamp_ids)) { + pr_err("CPU does not support MWAIT\n"); + return -ENODEV; +-- +https://clearlinux.org + diff --git a/APKBUILD b/APKBUILD index 8c29fab..b961f77 100644 --- a/APKBUILD +++ b/APKBUILD @@ -15,7 +15,29 @@ source="https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${pkgver}.tar.xz config fast_skylake.patch openwrt-402-ath_regd_optional.patch - " + 0101-i8042-decrease-debug-message-level-to-info.patch + 0102-increase-the-ext4-default-commit-age.patch + 0103-silence-rapl.patch + 0104-pci-pme-wakeups.patch + 0105-ksm-wakeups.patch + 0106-intel_idle-tweak-cpuidle-cstates.patch + 0108-smpboot-reuse-timer-calibration.patch + 0109-initialize-ata-before-graphics.patch + 0110-give-rdrand-some-credit.patch + 0111-ipv4-tcp-allow-the-memory-tuning-for-tcp-to-go-a-lit.patch + 0112-init-wait-for-partition-and-retry-scan.patch + 0115-enable-stateless-firmware-loading.patch + 0116-migrate-some-systemd-defaults-to-the-kernel-defaults.patch + 0117-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch + 0118-add-scheduler-turbo3-patch.patch + 0119-use-lfence-instead-of-rep-and-nop.patch + 0120-do-accept-in-LIFO-order-for-cache-efficiency.patch + 0121-locking-rwsem-spin-faster.patch + 0122-ata-libahci-ignore-staggered-spin-up.patch + 0123-print-CPU-that-faults.patch + 0127-nvme-workaround.patch + 0128-don-t-report-an-error-if-PowerClamp-run-on-other-CPU.patch + raid6.patch" builddir="$srcdir/linux-${pkgver}" build() { @@ -42,4 +64,27 @@ bfa8f7a4a742038ebf8f9a5b151554e268545543abca1ea1817fffcf388d6a5f3af3dce1c8279824 346ed2f9431c302e85642979e5779172edaa9ee7b4c6b751bd7a6fd77bb7073c4fd0655cb8b52f0b196ed90f1d9a6a1b82abb0d5e8fe118a9bcdc41ef7c7c353 config cb786c1fa30ab88020988929cfb71bac9164154bfe67f977654f14315d913e3c6dfa7c99c89b02ee7663d5c0817e22d4cc5c57288b7fa6c46333b0cac8acc618 fast_skylake.patch c0c5d023cac625dfe3086b37b5abb4be8981db301a468e93d495c08b7650debbf47b7a24c39293731951315658164e36783e5a46fb26fc51ed6fc72e3716307c openwrt-402-ath_regd_optional.patch +7a26ba37bd384da0f32c0b2f545357f010c2287601e9b5d6e3cfe7109f5eb21c9de221ba0d15df0fa190ca40062bc556ec98366dd40c1232992c2a6320dda3a1 0101-i8042-decrease-debug-message-level-to-info.patch +5c8b294f64465136a5c5b954b72c8fa21a7936254fe7ecd2e5d9b71e443a242dd44e9cb4022bb9bd906fb4c908300ada75e37766a74a74cac91c483bda707e9d 0102-increase-the-ext4-default-commit-age.patch +185c63f34dd8da41abefd836bdc2ca423de693104901a8b1c213f6456e8e1661c5f9ba46a93769fc635f0226275aac4127f9432c42c8532bed21da968179adee 0103-silence-rapl.patch +a9751892b7d1c30026d2f7e23c5493da71fe4a35a0899dccb64cdfff3e67a9dfeef95c2acbad2135d948b73b506f85adc20e9b118b841358e184ad5b99a21c5e 0104-pci-pme-wakeups.patch +f36030e3c00dc00e7b403750de9d2632a87e826feae62f439bf0a57132209610a9401c18c4247d0c51f082266f67a3771ce9db5363e9b639fc53deb2a283d76f 0105-ksm-wakeups.patch +2a97f3260f9bf6b1a9ae185d974c9537eb2c38045ef0fd3e7fb607b6815bf8fd6d9580c8517340e65b1845fd8eead20f32bbfb970f92f00a3eac7fd517325cc8 0106-intel_idle-tweak-cpuidle-cstates.patch +38a66f7899c0e28ec2a67b8d925a32e5a16de70bf3810dd95f3c4a43b641dc66aa96246584bffdaf4f1f3e22c29ddffff37909607cb020b890c5897957bb556c 0108-smpboot-reuse-timer-calibration.patch +7f25e7904061ba13daae95145a065a805a8b2b4d99166496f85f1d03d935560ecc089aca123009e1f34aa439c2e818ebc167dd4d8270749987815644860ff088 0109-initialize-ata-before-graphics.patch +931684c61eb68c1db790b07749b63706bb8bf142222ef5093dda7754d6b924aed3f02d2b589cdf7c4ac4e2e9d5a0932f20b7a87ae67cef38590cf0f28abf5ce5 0110-give-rdrand-some-credit.patch +855a1cc42943467e69978b108b89bbab03e7ebfa3f4d9c22dd64e6149087e37522808b2dbc70b6fdb3713ca66837a7124b6f96cb515d4c8a106f81c7d035f919 0111-ipv4-tcp-allow-the-memory-tuning-for-tcp-to-go-a-lit.patch +24bbbe7f2ac4d24efd4eda13d72931380ed7d02ffc4fef5b6fd5bb7f6870e22b434f840bd5e6129eaa7cae78b949a231c9e2f9f131263fdafc7e0c65b2393aab 0112-init-wait-for-partition-and-retry-scan.patch +3c22016715407c353d2f9b92b27a59e7d19e2b10a0a6752729566a847da5b05a938daaa60c3ff04367746381b6b362d0bdd3d9d37ea86664345c8a198af75fca 0115-enable-stateless-firmware-loading.patch +ead629b352126972268e96e6f0b34b558b96fbc9d0efbb7b6c560671fe61c97272492509f190b682c2b7db0da485886a941f58a502d72095c208e492f2f4ccd0 0116-migrate-some-systemd-defaults-to-the-kernel-defaults.patch +6d123b4de7a3dafd39838e648c5158c1153c759dcaaa5cc9812250908b90e0dc8e23fd0429251b1d4b687b278e140115abb70b5e127b163c842154e7debb8f74 0117-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch +7c1bafba0db4f0e35d8944f41a7eeccd8e5f26c4e7db4c11c0495595792939af108cc5c7813a972e632595bc7f02bf7e0e09c4895aea8975a06a25b0536b5c4d 0118-add-scheduler-turbo3-patch.patch +027832a5a2e671095460bf069d9a9c02dbf015956938f21bfa3c400aa53be81c75ce367fcc77a82e01bd10ce2f89f2df54bb8ca321ff9cca6d31d69c89dd4353 0119-use-lfence-instead-of-rep-and-nop.patch +4dd052eedea533f2fc399a661f95c0688fc33df765f939236a3c6e19e7f326f4417b5457faeee02348fa8b4b2b89fedee115272d1f79372dfb85b7322d181c68 0120-do-accept-in-LIFO-order-for-cache-efficiency.patch +62bc9eb104baf034d9fd37790bfcf6fb17c6fe1f6e1744fe8810a3a001a57ffb15e25215b4bf7eb8e14dd9183d28c66880f9bbc22b2af1d72ebb7777c7e5cf20 0121-locking-rwsem-spin-faster.patch +f0c56377b2b6677de9bdc8a56db8485272951fb2d5ef1c76fb65e5bbaffb49cebd1caf1283d5bfd4d883a54a82807c23aebcc7ec5dec19c55ddcf6d445a1a2de 0122-ata-libahci-ignore-staggered-spin-up.patch +1b18d54e9c036096f4e586d86b62b4144bf743177a504839c0f37f72555f4b5acc1791b940eece2e4b57b213390adebd4f86533e5e51220313d85437b9ff635b 0123-print-CPU-that-faults.patch +81a45dd801e88647e8ff69e089e9bbe3f37496bc0e558914958c67b44b3d29ce00cdb2bba54219708eb6882b1eb43355dec8ea6d1e5dd26470dc52551cdba97e 0127-nvme-workaround.patch +44b88ef3e60355e8f40f2d2ad9dea8522695f505bdeab425f3ff49b9bc5234a1bfc630b1ee0264845acc7f747cf53963620682d1953bf2352ce0776a291d3840 0128-don-t-report-an-error-if-PowerClamp-run-on-other-CPU.patch +f0ca097bc177ba78f77a02f36ff1226790f9c241a33c38a88d3efad37e5c03a0ce9ca66e97c3d7b49633f0cbabec66364e3e50459a4f1b38d11a1db0219d6669 raid6.patch " diff --git a/pull-clr-patches.sh b/pull-clr-patches.sh new file mode 100755 index 0000000..0088001 --- /dev/null +++ b/pull-clr-patches.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +set -e + +rm -f 01*.patch + +# CLR patches starts with 01 +curl -L https://github.com/clearlinux-pkgs/linux/archive/master.zip | busybox unzip - 'linux-master/01*' 'linux-master/raid6.patch' + +cd linux-master + +# remove unwanted patches + +## misc prints +rm *-bootstats-add-printk-s-to-measure-boot-time-in-more-.patch +rm *-print-fsync-count-for-bootchart.patch + +## wtf? +rm *-add-boot-option-to-allow-unsigned-modules.patch +rm *-x86-microcode-Force-update-a-uCode-even-if-the-rev-i.patch +rm *-x86-microcode-echo-2-reload-to-force-load-ucode.patch +rm *-fix-bug-in-ucode-force-reload-revision-check.patch + +for i in *;do + printf "\t%s\n" "$i" +done + +cp * ../ + +cd .. + +rm -rf linux-master diff --git a/raid6.patch b/raid6.patch new file mode 100644 index 0000000..77d1c40 --- /dev/null +++ b/raid6.patch @@ -0,0 +1,26 @@ +--- linux-5.14.7/lib/raid6/algos.c~ 2021-09-22 10:39:33.000000000 +0000 ++++ linux-5.14.7/lib/raid6/algos.c 2021-09-27 17:36:50.117114553 +0000 +@@ -128,8 +128,10 @@ + + for (best = NULL, algo = raid6_recov_algos; *algo; algo++) + if (!best || (*algo)->priority > best->priority) +- if (!(*algo)->valid || (*algo)->valid()) ++ if (!(*algo)->valid || (*algo)->valid()) { + best = *algo; ++ break; ++ } + + if (best) { + raid6_2data_recov = best->data2; +@@ -198,8 +200,10 @@ + } + preempt_enable(); + +- if (best == *algo) ++ if (best == *algo) { + bestxorperf = perf; ++ break; ++ } + + pr_info("raid6: %-8s xor() %5ld MB/s\n", (*algo)->name, + (perf * HZ * (disks-2)) >> -- 2.45.2