oops, merged two conflicting patch sets
This commit is contained in:
parent
8f5463a535
commit
957ac44988
8 changed files with 0 additions and 19606 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,475 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
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 c9338f9..6974fbf 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -62,7 +62,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
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
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 f449584..c994d24 100644
|
||||
--- a/drivers/idle/intel_idle.c
|
||||
+++ b/drivers/idle/intel_idle.c
|
||||
@@ -531,7 +531,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, },
|
||||
{
|
||||
@@ -539,7 +539,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, },
|
||||
{
|
||||
@@ -547,7 +547,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, },
|
||||
{
|
||||
@@ -555,7 +555,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, },
|
||||
{
|
||||
@@ -563,7 +563,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, },
|
||||
{
|
||||
@@ -571,7 +571,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, },
|
||||
{
|
||||
@@ -579,7 +579,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, },
|
||||
{
|
||||
@@ -599,7 +599,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, },
|
||||
{
|
||||
@@ -607,7 +607,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, },
|
||||
{
|
||||
@@ -615,7 +615,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, },
|
||||
{
|
||||
@@ -623,7 +623,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, },
|
||||
{
|
||||
@@ -631,7 +631,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, },
|
||||
{
|
||||
@@ -639,7 +639,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, },
|
||||
{
|
||||
@@ -647,7 +647,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, },
|
||||
{
|
||||
@@ -668,7 +668,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, },
|
||||
{
|
||||
@@ -676,7 +676,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, },
|
||||
{
|
||||
@@ -684,7 +684,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, },
|
||||
{
|
||||
@@ -692,7 +692,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, },
|
||||
{
|
||||
@@ -700,7 +700,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, },
|
||||
{
|
||||
@@ -708,7 +708,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, },
|
||||
{
|
||||
@@ -716,7 +716,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, },
|
||||
{
|
||||
@@ -737,7 +737,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
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
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 30c1142..4345075 100644
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -4201,8 +4201,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
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
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 f11b9bd..1bbfcc1 100644
|
||||
--- a/kernel/locking/rwsem.c
|
||||
+++ b/kernel/locking/rwsem.c
|
||||
@@ -717,6 +717,7 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
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, nonspinnable);
|
||||
@@ -750,7 +751,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
break;
|
||||
}
|
||||
|
||||
- cpu_relax();
|
||||
+ if (i++ > 1000)
|
||||
+ cpu_relax();
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
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 c0cd1b9..af1e2fb 100644
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -59,14 +59,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 depends on char/agp/
|
||||
-obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
-
|
||||
obj-$(CONFIG_PARPORT) += parport/
|
||||
obj-y += base/ block/ misc/ mfd/ nfc/
|
||||
obj-$(CONFIG_LIBNVDIMM) += nvdimm/
|
||||
@@ -80,6 +73,14 @@ obj-$(CONFIG_IDE) += ide/
|
||||
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
|
||||
|
||||
From 676c2dc63592f52b716515573a3a825582a371e9 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sat, 8 Dec 2018 18:21:32 +0000
|
||||
Subject: [PATCH 1/9] x86/vdso: Use lfence instead of rep and nop
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
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)
|
||||
--
|
||||
2.39.1
|
||||
|
||||
From 48dc9669f8db68adc480ffc2698ed8204440e45b Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Thu, 13 Dec 2018 01:00:49 +0000
|
||||
Subject: [PATCH 2/9] sched/wait: Do accept() in LIFO order for cache
|
||||
efficiency
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
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 a0307b516b09..edc21128f387 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);
|
||||
|
||||
@@ -1192,6 +1193,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 133b74730738..1647fb8662eb 100644
|
||||
--- a/kernel/sched/wait.c
|
||||
+++ b/kernel/sched/wait.c
|
||||
@@ -47,6 +47,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;
|
||||
@@ -293,6 +304,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 f2c43f67187d..9885bfb429a2 100644
|
||||
--- a/net/ipv4/inet_connection_sock.c
|
||||
+++ b/net/ipv4/inet_connection_sock.c
|
||||
@@ -606,7 +606,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))
|
||||
--
|
||||
2.39.1
|
|
@ -1,822 +0,0 @@
|
|||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: [PATCH 01/17] glitched
|
||||
|
||||
---
|
||||
init/Makefile | 2 +-
|
||||
1 file changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/init/Makefile b/init/Makefile
|
||||
index baf3ab8d9d49..854e32e6aec7 100755
|
||||
--- a/init/Makefile
|
||||
+++ b/init/Makefile
|
||||
@@ -19,7 +19,7 @@ else
|
||||
|
||||
# Maximum length of UTS_VERSION is 64 chars
|
||||
filechk_uts_version = \
|
||||
- utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "$(build-timestamp)" | cut -b -64); \
|
||||
+ utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "CriminallyCute" "$(build-timestamp)" | cut -b -64); \
|
||||
echo '$(pound)'define UTS_VERSION \""$${utsver}"\"
|
||||
|
||||
#
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From c304f43d14e98d4bf1215fc10bc5012f554bdd8a Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 16:59:22 +0000
|
||||
Subject: [PATCH 02/17] dcache: cache_pressure = 50 decreases the rate at which
|
||||
VFS caches are reclaimed
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
fs/dcache.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
||||
index 361ea7ab30ea..0c5cf69b241a 100644
|
||||
--- a/fs/dcache.c
|
||||
+++ b/fs/dcache.c
|
||||
@@ -71,7 +71,7 @@
|
||||
* If no ancestor relationship:
|
||||
* arbitrary, since it's serialized on rename_lock
|
||||
*/
|
||||
-int sysctl_vfs_cache_pressure __read_mostly = 100;
|
||||
+int sysctl_vfs_cache_pressure __read_mostly = 50;
|
||||
EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure);
|
||||
|
||||
__cacheline_aligned_in_smp DEFINE_SEQLOCK(rename_lock);
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
|
||||
index f788cd61df21..2bfbb4213707 100644
|
||||
--- a/kernel/sched/rt.c
|
||||
+++ b/kernel/sched/rt.c
|
||||
@@ -15,9 +15,9 @@ __read_mostly int scheduler_running;
|
||||
|
||||
/*
|
||||
* part of the period that we allow rt tasks to run in us.
|
||||
- * default: 0.95s
|
||||
+ * XanMod default: 0.98s
|
||||
*/
|
||||
-int sysctl_sched_rt_runtime = 950000;
|
||||
+int sysctl_sched_rt_runtime = 980000;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
static int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From acc49f33a10f61dc66c423888cbb883ba46710e4 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 17:41:29 +0000
|
||||
Subject: [PATCH 04/17] scripts: disable the localversion "+" tag of a git repo
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
scripts/setlocalversion | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
|
||||
index 20f2efd57b11..0552d8b9f582 100755
|
||||
--- a/scripts/setlocalversion
|
||||
+++ b/scripts/setlocalversion
|
||||
@@ -54,7 +54,7 @@ scm_version()
|
||||
# If only the short version is requested, don't bother
|
||||
# running further git commands
|
||||
if $short; then
|
||||
- echo "+"
|
||||
+ #echo "+"
|
||||
return
|
||||
fi
|
||||
# If we are past the tagged commit, we pretty print it.
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 360c6833e07cc9fdef5746f6bc45bdbc7212288d Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Fri, 26 Oct 2018 11:22:33 +0100
|
||||
Subject: [PATCH 06/17] infiniband: Fix __read_overflow2 error with -O3
|
||||
inlining
|
||||
|
||||
---
|
||||
drivers/infiniband/core/addr.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
|
||||
index 3a98439bba83..6efc4f907f58 100644
|
||||
--- a/drivers/infiniband/core/addr.c
|
||||
+++ b/drivers/infiniband/core/addr.c
|
||||
@@ -820,6 +820,7 @@ int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
|
||||
union {
|
||||
struct sockaddr_in _sockaddr_in;
|
||||
struct sockaddr_in6 _sockaddr_in6;
|
||||
+ struct sockaddr_ib _sockaddr_ib;
|
||||
} sgid_addr, dgid_addr;
|
||||
int ret;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From f85ed068b4d0e6c31edce8574a95757a60e58b87 Mon Sep 17 00:00:00 2001
|
||||
From: Etienne Juvigny <Ti3noU@gmail.com>
|
||||
Date: Mon, 3 Sep 2018 17:36:25 +0200
|
||||
Subject: [PATCH 07/17] Add Zenify option
|
||||
|
||||
---
|
||||
init/Kconfig | 32 ++++++++++++++++++++++++++++++++
|
||||
1 file changed, 32 insertions(+)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 3ae8678e1145..da708eed0f1e 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -92,6 +92,38 @@ config THREAD_INFO_IN_TASK
|
||||
|
||||
menu "General setup"
|
||||
|
||||
+config ZENIFY
|
||||
+ bool "A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience"
|
||||
+ default y
|
||||
+ help
|
||||
+ Tunes the kernel for responsiveness at the cost of throughput and power usage.
|
||||
+
|
||||
+ --- Virtual Memory Subsystem ---------------------------
|
||||
+
|
||||
+ Mem dirty before bg writeback..: 10 % -> 20 %
|
||||
+ Mem dirty before sync writeback: 20 % -> 50 %
|
||||
+
|
||||
+ --- Block Layer ----------------------------------------
|
||||
+
|
||||
+ Queue depth...............: 128 -> 512
|
||||
+ Default MQ scheduler......: mq-deadline -> bfq
|
||||
+
|
||||
+ --- CFS CPU Scheduler ----------------------------------
|
||||
+
|
||||
+ Scheduling latency.............: 6 -> 3 ms
|
||||
+ Minimal granularity............: 0.75 -> 0.3 ms
|
||||
+ Wakeup granularity.............: 1 -> 0.5 ms
|
||||
+ CPU migration cost.............: 0.5 -> 0.25 ms
|
||||
+ Bandwidth slice size...........: 5 -> 3 ms
|
||||
+ Ondemand fine upscaling limit..: 95 % -> 85 %
|
||||
+
|
||||
+ --- MuQSS CPU Scheduler --------------------------------
|
||||
+
|
||||
+ Scheduling interval............: 6 -> 3 ms
|
||||
+ ISO task max realtime use......: 70 % -> 25 %
|
||||
+ Ondemand coarse upscaling limit: 80 % -> 45 %
|
||||
+ Ondemand fine upscaling limit..: 95 % -> 45 %
|
||||
+
|
||||
config BROKEN
|
||||
bool
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From e92e67143385cf285851e12aa8b7f083dd38dd24 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <damentz@liquorix.net>
|
||||
Date: Sun, 16 Jan 2011 18:57:32 -0600
|
||||
Subject: [PATCH 08/17] ZEN: Allow TCP YeAH as default congestion control
|
||||
|
||||
4.4: In my tests YeAH dramatically slowed down transfers over a WLAN,
|
||||
reducing throughput from ~65Mbps (CUBIC) to ~7MBps (YeAH) over 10
|
||||
seconds (netperf TCP_STREAM) including long stalls.
|
||||
|
||||
Be careful when choosing this. ~heftig
|
||||
---
|
||||
net/ipv4/Kconfig | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
|
||||
index e64e59b536d3..bfb55ef7ebbe 100644
|
||||
--- a/net/ipv4/Kconfig
|
||||
+++ b/net/ipv4/Kconfig
|
||||
@@ -691,6 +691,9 @@ choice
|
||||
config DEFAULT_VEGAS
|
||||
bool "Vegas" if TCP_CONG_VEGAS=y
|
||||
|
||||
+ config DEFAULT_YEAH
|
||||
+ bool "YeAH" if TCP_CONG_YEAH=y
|
||||
+
|
||||
config DEFAULT_VENO
|
||||
bool "Veno" if TCP_CONG_VENO=y
|
||||
|
||||
@@ -724,6 +727,7 @@ config DEFAULT_TCP_CONG
|
||||
default "htcp" if DEFAULT_HTCP
|
||||
default "hybla" if DEFAULT_HYBLA
|
||||
default "vegas" if DEFAULT_VEGAS
|
||||
+ default "yeah" if DEFAULT_YEAH
|
||||
default "westwood" if DEFAULT_WESTWOOD
|
||||
default "veno" if DEFAULT_VENO
|
||||
default "reno" if DEFAULT_RENO
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 76dbe7477bfde1b5e8bf29a71b5af7ab2be9b98e Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Wed, 28 Nov 2018 19:01:27 -0600
|
||||
Subject: [PATCH 09/17] zen: Use [defer+madvise] as default khugepaged defrag
|
||||
strategy
|
||||
|
||||
For some reason, the default strategy to respond to THP fault fallbacks
|
||||
is still just madvise, meaning stall if the program wants transparent
|
||||
hugepages, but don't trigger a background reclaim / compaction if THP
|
||||
begins to fail allocations. This creates a snowball affect where we
|
||||
still use the THP code paths, but we almost always fail once a system
|
||||
has been active and busy for a while.
|
||||
|
||||
The option "defer" was created for interactive systems where THP can
|
||||
still improve performance. If we have to fallback to a regular page due
|
||||
to an allocation failure or anything else, we will trigger a background
|
||||
reclaim and compaction so future THP attempts succeed and previous
|
||||
attempts eventually have their smaller pages combined without stalling
|
||||
running applications.
|
||||
|
||||
We still want madvise to stall applications that explicitely want THP,
|
||||
so defer+madvise _does_ make a ton of sense. Make it the default for
|
||||
interactive systems, especially if the kernel maintainer left
|
||||
transparent hugepages on "always".
|
||||
|
||||
Reasoning and details in the original patch: https://lwn.net/Articles/711248/
|
||||
---
|
||||
mm/huge_memory.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
|
||||
index 74300e337c3c..9277f22c10a7 100644
|
||||
--- a/mm/huge_memory.c
|
||||
+++ b/mm/huge_memory.c
|
||||
@@ -53,7 +53,11 @@ unsigned long transparent_hugepage_flags __read_mostly =
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE_MADVISE
|
||||
(1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)|
|
||||
#endif
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+ (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG)|
|
||||
+#else
|
||||
(1<<TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG)|
|
||||
+#endif
|
||||
(1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG)|
|
||||
(1<<TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG);
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 2b65a1329cb220b43c19c4d0de5833fae9e2b22d Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Wed, 24 Oct 2018 16:58:52 -0300
|
||||
Subject: [PATCH 10/17] net/sched: allow configuring cake qdisc as default
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
net/sched/Kconfig | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/net/sched/Kconfig b/net/sched/Kconfig
|
||||
index 84badf00647e..6a922bca9f39 100644
|
||||
--- a/net/sched/Kconfig
|
||||
+++ b/net/sched/Kconfig
|
||||
@@ -471,6 +471,9 @@ choice
|
||||
config DEFAULT_SFQ
|
||||
bool "Stochastic Fair Queue" if NET_SCH_SFQ
|
||||
|
||||
+ config DEFAULT_CAKE
|
||||
+ bool "Common Applications Kept Enhanced" if NET_SCH_CAKE
|
||||
+
|
||||
config DEFAULT_PFIFO_FAST
|
||||
bool "Priority FIFO Fast"
|
||||
endchoice
|
||||
@@ -481,6 +484,7 @@ config DEFAULT_NET_SCH
|
||||
default "fq" if DEFAULT_FQ
|
||||
default "fq_codel" if DEFAULT_FQ_CODEL
|
||||
default "sfq" if DEFAULT_SFQ
|
||||
+ default "cake" if DEFAULT_CAKE
|
||||
default "pfifo_fast"
|
||||
endif
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 90240bcd90a568878738e66c0d45bed3e38e347b Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Fri, 19 Apr 2019 12:33:38 +0200
|
||||
Subject: [PATCH 12/17] Set vm.max_map_count to 262144 by default
|
||||
|
||||
The value is still pretty low, and AMD64-ABI and ELF extended numbering
|
||||
supports that, so we should be fine on modern x86 systems.
|
||||
|
||||
This fixes crashes in some applications using more than 65535 vmas (also
|
||||
affects some windows games running in wine, such as Star Citizen).
|
||||
---
|
||||
include/linux/mm.h | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index bc05c3588aa3..b0cefe94920d 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -190,8 +190,7 @@ static inline void __mm_zero_struct_page(struct page *page)
|
||||
* not a hard limit any more. Although some userspace tools can be surprised by
|
||||
* that.
|
||||
*/
|
||||
-#define MAPCOUNT_ELF_CORE_MARGIN (5)
|
||||
-#define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN)
|
||||
+#define DEFAULT_MAX_MAP_COUNT (262144)
|
||||
|
||||
extern int sysctl_max_map_count;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 3a34034dba5efe91bcec491efe8c66e8087f509b Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Mon, 27 Jul 2020 00:19:18 +0200
|
||||
Subject: [PATCH 13/17] mm: bump DEFAULT_MAX_MAP_COUNT
|
||||
|
||||
Some games such as Detroit: Become Human tend to be very crash prone with
|
||||
lower values.
|
||||
---
|
||||
include/linux/mm.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index b0cefe94920d..890165099b07 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -190,7 +190,7 @@ static inline void __mm_zero_struct_page(struct page *page)
|
||||
* not a hard limit any more. Although some userspace tools can be surprised by
|
||||
* that.
|
||||
*/
|
||||
-#define DEFAULT_MAX_MAP_COUNT (262144)
|
||||
+#define DEFAULT_MAX_MAP_COUNT (16777216)
|
||||
|
||||
extern int sysctl_max_map_count;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
From 977812938da7c7226415778c340832141d9278b7 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 25 Nov 2019 15:13:06 -0300
|
||||
Subject: [PATCH 14/17] elevator: set default scheduler to bfq for blk-mq
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
block/elevator.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/block/elevator.c b/block/elevator.c
|
||||
index 4eab3d70e880..79669aa39d79 100644
|
||||
--- a/block/elevator.c
|
||||
+++ b/block/elevator.c
|
||||
@@ -623,19 +623,19 @@ static inline bool elv_support_iosched(struct request_queue *q)
|
||||
}
|
||||
|
||||
/*
|
||||
- * For single queue devices, default to using mq-deadline. If we have multiple
|
||||
- * queues or mq-deadline is not available, default to "none".
|
||||
+ * For single queue devices, default to using bfq. If we have multiple
|
||||
+ * queues or bfq is not available, default to "none".
|
||||
*/
|
||||
static struct elevator_type *elevator_get_default(struct request_queue *q)
|
||||
{
|
||||
if (q->tag_set && q->tag_set->flags & BLK_MQ_F_NO_SCHED_BY_DEFAULT)
|
||||
return NULL;
|
||||
|
||||
if (q->nr_hw_queues != 1 &&
|
||||
!blk_mq_is_shared_tags(q->tag_set->flags))
|
||||
return NULL;
|
||||
|
||||
- return elevator_find_get(q, "mq-deadline");
|
||||
+ return elevator_find_get(q, "bfq");
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
2.28.0
|
||||
|
||||
From 3c229f434aca65c4ca61772bc03c3e0370817b92 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <kernel@xanmod.org>
|
||||
Date: Mon, 3 Aug 2020 17:05:04 +0000
|
||||
Subject: [PATCH 16/17] mm: set 2 megabytes for address_space-level file
|
||||
read-ahead pages size
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/linux/pagemap.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
|
||||
index cf2468da68e9..007dea784451 100644
|
||||
--- a/include/linux/pagemap.h
|
||||
+++ b/include/linux/pagemap.h
|
||||
@@ -655,7 +655,7 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask);
|
||||
void delete_from_page_cache_batch(struct address_space *mapping,
|
||||
struct pagevec *pvec);
|
||||
|
||||
-#define VM_READAHEAD_PAGES (SZ_128K / PAGE_SIZE)
|
||||
+#define VM_READAHEAD_PAGES (SZ_2M / PAGE_SIZE)
|
||||
|
||||
void page_cache_sync_readahead(struct address_space *, struct file_ra_state *,
|
||||
struct file *, pgoff_t index, unsigned long req_count);
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 716f41cf6631f3a85834dcb67b4ce99185b6387f Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Wed, 15 Jan 2020 20:43:56 -0600
|
||||
Subject: [PATCH 17/17] ZEN: intel-pstate: Implement "enable" parameter
|
||||
|
||||
If intel-pstate is compiled into the kernel, it will preempt the loading
|
||||
of acpi-cpufreq so you can take advantage of hardware p-states without
|
||||
any friction.
|
||||
|
||||
However, intel-pstate is not completely superior to cpufreq's ondemand
|
||||
for one reason. There's no concept of an up_threshold property.
|
||||
|
||||
In ondemand, up_threshold essentially reduces the maximum utilization to
|
||||
compare against, allowing you to hit max frequencies and turbo boost
|
||||
from a much lower core utilization.
|
||||
|
||||
With intel-pstate, you have the concept of minimum and maximum
|
||||
performance, but no tunable that lets you define, maximum frequency
|
||||
means 50% core utilization. For just this oversight, there's reasons
|
||||
you may want ondemand.
|
||||
|
||||
Lets support setting "enable" in kernel boot parameters. This lets
|
||||
kernel maintainers include "intel_pstate=disable" statically in the
|
||||
static boot parameters, but let users of the kernel override this
|
||||
selection.
|
||||
---
|
||||
Documentation/admin-guide/kernel-parameters.txt | 3 +++
|
||||
drivers/cpufreq/intel_pstate.c | 2 ++
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index fb95fad81c79..3e92fee81e33 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -1857,6 +1857,9 @@
|
||||
disable
|
||||
Do not enable intel_pstate as the default
|
||||
scaling driver for the supported processors
|
||||
+ enable
|
||||
+ Enable intel_pstate in-case "disable" was passed
|
||||
+ previously in the kernel boot parameters
|
||||
passive
|
||||
Use intel_pstate as a scaling driver, but configure it
|
||||
to work with generic cpufreq governors (instead of
|
||||
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
|
||||
index 36a469150ff9..aee891c9b78a 100644
|
||||
--- a/drivers/cpufreq/intel_pstate.c
|
||||
+++ b/drivers/cpufreq/intel_pstate.c
|
||||
@@ -2845,6 +2845,8 @@ static int __init intel_pstate_setup(char *str)
|
||||
if (!strcmp(str, "no_hwp"))
|
||||
no_hwp = 1;
|
||||
|
||||
+ if (!strcmp(str, "enable"))
|
||||
+ no_load = 0;
|
||||
if (!strcmp(str, "force"))
|
||||
force_load = 1;
|
||||
if (!strcmp(str, "hwp_only"))
|
||||
--
|
||||
2.28.0
|
||||
|
||||
From 379cbab18b5c75c622b93e2c5abdfac141fe9654 Mon Sep 17 00:00:00 2001
|
||||
From: Kenny Levinsen <kl@kl.wtf>
|
||||
Date: Sun, 27 Dec 2020 14:43:13 +0000
|
||||
Subject: [PATCH] ZEN: Input: evdev - use call_rcu when detaching client
|
||||
|
||||
Significant time was spent on synchronize_rcu in evdev_detach_client
|
||||
when applications closed evdev devices. Switching VT away from a
|
||||
graphical environment commonly leads to mass input device closures,
|
||||
which could lead to noticable delays on systems with many input devices.
|
||||
|
||||
Replace synchronize_rcu with call_rcu, deferring reclaim of the evdev
|
||||
client struct till after the RCU grace period instead of blocking the
|
||||
calling application.
|
||||
|
||||
While this does not solve all slow evdev fd closures, it takes care of a
|
||||
good portion of them, including this simple test:
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int idx, fd;
|
||||
const char *path = "/dev/input/event0";
|
||||
for (idx = 0; idx < 1000; idx++) {
|
||||
if ((fd = open(path, O_RDWR)) == -1) {
|
||||
return -1;
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Time to completion of above test when run locally:
|
||||
|
||||
Before: 0m27.111s
|
||||
After: 0m0.018s
|
||||
|
||||
Signed-off-by: Kenny Levinsen <kl@kl.wtf>
|
||||
---
|
||||
drivers/input/evdev.c | 19 +++++++++++--------
|
||||
1 file changed, 11 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
|
||||
index 95f90699d2b17b..2b10fe29d2c8d9 100644
|
||||
--- a/drivers/input/evdev.c
|
||||
+++ b/drivers/input/evdev.c
|
||||
@@ -46,6 +46,7 @@ struct evdev_client {
|
||||
struct fasync_struct *fasync;
|
||||
struct evdev *evdev;
|
||||
struct list_head node;
|
||||
+ struct rcu_head rcu;
|
||||
enum input_clock_type clk_type;
|
||||
bool revoked;
|
||||
unsigned long *evmasks[EV_CNT];
|
||||
@@ -377,13 +378,22 @@ static void evdev_attach_client(struct evdev *evdev,
|
||||
spin_unlock(&evdev->client_lock);
|
||||
}
|
||||
|
||||
+static void evdev_reclaim_client(struct rcu_head *rp)
|
||||
+{
|
||||
+ struct evdev_client *client = container_of(rp, struct evdev_client, rcu);
|
||||
+ unsigned int i;
|
||||
+ for (i = 0; i < EV_CNT; ++i)
|
||||
+ bitmap_free(client->evmasks[i]);
|
||||
+ kvfree(client);
|
||||
+}
|
||||
+
|
||||
static void evdev_detach_client(struct evdev *evdev,
|
||||
struct evdev_client *client)
|
||||
{
|
||||
spin_lock(&evdev->client_lock);
|
||||
list_del_rcu(&client->node);
|
||||
spin_unlock(&evdev->client_lock);
|
||||
- synchronize_rcu();
|
||||
+ call_rcu(&client->rcu, evdev_reclaim_client);
|
||||
}
|
||||
|
||||
static int evdev_open_device(struct evdev *evdev)
|
||||
@@ -436,7 +446,6 @@ static int evdev_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct evdev_client *client = file->private_data;
|
||||
struct evdev *evdev = client->evdev;
|
||||
- unsigned int i;
|
||||
|
||||
mutex_lock(&evdev->mutex);
|
||||
|
||||
@@ -448,11 +457,6 @@ static int evdev_release(struct inode *inode, struct file *file)
|
||||
|
||||
evdev_detach_client(evdev, client);
|
||||
|
||||
- for (i = 0; i < EV_CNT; ++i)
|
||||
- bitmap_free(client->evmasks[i]);
|
||||
-
|
||||
- kvfree(client);
|
||||
-
|
||||
evdev_close_device(evdev);
|
||||
|
||||
return 0;
|
||||
@@ -495,7 +499,6 @@ static int evdev_open(struct inode *inode, struct file *file)
|
||||
|
||||
err_free_client:
|
||||
evdev_detach_client(evdev, client);
|
||||
- kvfree(client);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
From 2aafb56f20e4b63d8c4af172fe9d017c64bc4129 Mon Sep 17 00:00:00 2001
|
||||
From: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
Date: Wed, 20 Oct 2021 20:50:11 -0700
|
||||
Subject: [PATCH] ZEN: mm: Lower the non-hugetlbpage pageblock size to reduce
|
||||
scheduling delays
|
||||
|
||||
The page allocator processes free pages in groups of pageblocks, where
|
||||
the size of a pageblock is typically quite large (1024 pages without
|
||||
hugetlbpage support). Pageblocks are processed atomically with the zone
|
||||
lock held, which can cause severe scheduling delays on both the CPU
|
||||
going through the pageblock and any other CPUs waiting to acquire the
|
||||
zone lock. A frequent offender is move_freepages_block(), which is used
|
||||
by rmqueue() for page allocation.
|
||||
|
||||
As it turns out, there's no requirement for pageblocks to be so large,
|
||||
so the pageblock order can simply be reduced to ease the scheduling
|
||||
delays and zone lock contention. PAGE_ALLOC_COSTLY_ORDER is used as a
|
||||
reasonable setting to ensure non-costly page allocation requests can
|
||||
still be serviced without always needing to free up more than one
|
||||
pageblock's worth of pages at a time.
|
||||
|
||||
This has a noticeable effect on overall system latency when memory
|
||||
pressure is elevated. The various mm functions which operate on
|
||||
pageblocks no longer appear in the preemptoff tracer, where previously
|
||||
they would spend up to 100 ms on a mobile arm64 CPU processing a
|
||||
pageblock with preemption disabled and the zone lock held.
|
||||
|
||||
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
---
|
||||
include/linux/pageblock-flags.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h
|
||||
index 5f1ae07d724b88..97cda629c9e909 100644
|
||||
--- a/include/linux/pageblock-flags.h
|
||||
+++ b/include/linux/pageblock-flags.h
|
||||
@@ -48,7 +48,7 @@ extern unsigned int pageblock_order;
|
||||
#else /* CONFIG_HUGETLB_PAGE */
|
||||
|
||||
/* If huge pages are not used, group by MAX_ORDER_NR_PAGES */
|
||||
-#define pageblock_order MAX_PAGE_ORDER
|
||||
+#define pageblock_order PAGE_ALLOC_COSTLY_ORDER
|
||||
|
||||
#endif /* CONFIG_HUGETLB_PAGE */
|
||||
|
||||
|
||||
From f22bc56be85e69c71c8e36041193856bb8b01525 Mon Sep 17 00:00:00 2001
|
||||
From: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
Date: Wed, 20 Oct 2021 20:50:32 -0700
|
||||
Subject: [PATCH] ZEN: mm: Don't hog the CPU and zone lock in rmqueue_bulk()
|
||||
|
||||
There is noticeable scheduling latency and heavy zone lock contention
|
||||
stemming from rmqueue_bulk's single hold of the zone lock while doing
|
||||
its work, as seen with the preemptoff tracer. There's no actual need for
|
||||
rmqueue_bulk() to hold the zone lock the entire time; it only does so
|
||||
for supposed efficiency. As such, we can relax the zone lock and even
|
||||
reschedule when IRQs are enabled in order to keep the scheduling delays
|
||||
and zone lock contention at bay. Forward progress is still guaranteed,
|
||||
as the zone lock can only be relaxed after page removal.
|
||||
|
||||
With this change, rmqueue_bulk() no longer appears as a serious offender
|
||||
in the preemptoff tracer, and system latency is noticeably improved.
|
||||
|
||||
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
---
|
||||
mm/page_alloc.c | 23 ++++++++++++++++++-----
|
||||
1 file changed, 18 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index a0b0397e29ee4c..87a983a356530c 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -3118,15 +3119,16 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype,
|
||||
}
|
||||
|
||||
/*
|
||||
- * Obtain a specified number of elements from the buddy allocator, all under
|
||||
- * a single hold of the lock, for efficiency. Add them to the supplied list.
|
||||
- * Returns the number of new pages which were placed at *list.
|
||||
+ * Obtain a specified number of elements from the buddy allocator, and relax the
|
||||
+ * zone lock when needed. Add them to the supplied list. Returns the number of
|
||||
+ * new pages which were placed at *list.
|
||||
*/
|
||||
static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
unsigned long count, struct list_head *list,
|
||||
int migratetype, unsigned int alloc_flags)
|
||||
{
|
||||
unsigned long flags;
|
||||
- int i;
|
||||
+ const bool can_resched = !preempt_count() && !irqs_disabled();
|
||||
+ int i, allocated = 0, last_mod = 0;
|
||||
|
||||
/* Caller must hold IRQ-safe pcp->lock so IRQs are disabled. */
|
||||
spin_lock(&zone->lock);
|
||||
@@ -3137,6 +3138,18 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
if (unlikely(page == NULL))
|
||||
break;
|
||||
|
||||
+ /* Reschedule and ease the contention on the lock if needed */
|
||||
+ if (i + 1 < count && ((can_resched && need_resched()) ||
|
||||
+ spin_needbreak(&zone->lock))) {
|
||||
+ __mod_zone_page_state(zone, NR_FREE_PAGES,
|
||||
+ -((i + 1 - last_mod) << order));
|
||||
+ last_mod = i + 1;
|
||||
+ spin_unlock(&zone->lock);
|
||||
+ if (can_resched)
|
||||
+ cond_resched();
|
||||
+ spin_lock(&zone->lock);
|
||||
+ }
|
||||
+
|
||||
if (unlikely(check_pcp_refill(page, order)))
|
||||
continue;
|
||||
|
||||
@@ -3163,7 +3176,7 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
* on i. Do not confuse with 'allocated' which is the number of
|
||||
* pages added to the pcp list.
|
||||
*/
|
||||
- __mod_zone_page_state(zone, NR_FREE_PAGES, -(i << order));
|
||||
+ __mod_zone_page_state(zone, NR_FREE_PAGES, -((i - last_mod) << order));
|
||||
spin_unlock(&zone->lock);
|
||||
return allocated;
|
||||
}
|
||||
|
||||
From 6329525a0fa10cd13f39b76948b1296150f75c95 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <kernel@xanmod.org>
|
||||
Date: Mon, 29 Aug 2022 16:47:26 +0000
|
||||
Subject: [PATCH 14/16] XANMOD: Makefile: Disable GCC vectorization on trees
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
Makefile | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 3f6628780eb2..35a5ae1ede42 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1069,6 +1069,9 @@ endif
|
||||
KBUILD_CFLAGS-$(call gcc-min-version, 90100) += -Wno-alloc-size-larger-than
|
||||
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
|
||||
|
||||
+# disable GCC vectorization on trees
|
||||
+KBUILD_CFLAGS += $(call cc-option, -fno-tree-vectorize)
|
||||
+
|
||||
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||
KBUILD_CFLAGS += -fno-strict-overflow
|
||||
|
||||
--
|
||||
2.39.1
|
||||
|
||||
From f997578464b2c4c63e7bd1afbfef56212ee44f2d Mon Sep 17 00:00:00 2001
|
||||
From: Etienne JUVIGNY <ti3nou@gmail.com>
|
||||
Date: Mon, 6 Mar 2023 13:54:09 +0100
|
||||
Subject: Don't add -dirty versioning on unclean trees
|
||||
|
||||
|
||||
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
|
||||
index ca5795e16..ad0d94477 100755
|
||||
--- a/scripts/setlocalversion
|
||||
+++ b/scripts/setlocalversion
|
||||
@@ -85,12 +85,12 @@ scm_version()
|
||||
# git-diff-index does not refresh the index, so it may give misleading
|
||||
# results.
|
||||
# See git-update-index(1), git-diff-index(1), and git-status(1).
|
||||
- if {
|
||||
- git --no-optional-locks status -uno --porcelain 2>/dev/null ||
|
||||
- git diff-index --name-only HEAD
|
||||
- } | read dummy; then
|
||||
- printf '%s' -dirty
|
||||
- fi
|
||||
+ #if {
|
||||
+ # git --no-optional-locks status -uno --porcelain 2>/dev/null ||
|
||||
+ # git diff-index --name-only HEAD
|
||||
+ #} | read dummy; then
|
||||
+ # printf '%s' -dirty
|
||||
+ #fi
|
||||
}
|
||||
|
||||
collect_files()
|
||||
|
||||
From 1cf70fdd26245554ab30234722338d8160dff394 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Sat, 21 May 2022 15:15:09 -0500
|
||||
Subject: [PATCH] ZEN: INTERACTIVE: dm-crypt: Disable workqueues for crypto ops
|
||||
|
||||
Queueing in dm-crypt for crypto operations reduces performance on modern
|
||||
systems. As discussed in an article from Cloudflare, they discovered
|
||||
that queuing was introduced because the crypto subsystem used to be
|
||||
synchronous. Since it's now asynchronous, we get double queueing when
|
||||
using the subsystem through dm-crypt. This is obviously undesirable and
|
||||
reduces throughput and increases latency.
|
||||
|
||||
Disable queueing when using our Zen Interactive configuration.
|
||||
|
||||
Fixes: https://github.com/zen-kernel/zen-kernel/issues/282
|
||||
|
||||
tkg: Config switch changed to our local "ZENIFY" toggle
|
||||
---
|
||||
drivers/md/dm-crypt.c | 5 +++++
|
||||
init/Kconfig | 1 +
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
|
||||
index 2ae8560b6a14ad..cb49218030c88b 100644
|
||||
--- a/drivers/md/dm-crypt.c
|
||||
+++ b/drivers/md/dm-crypt.c
|
||||
@@ -3242,6 +3242,11 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
||||
goto bad;
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+ set_bit(DM_CRYPT_NO_READ_WORKQUEUE, &cc->flags);
|
||||
+ set_bit(DM_CRYPT_NO_WRITE_WORKQUEUE, &cc->flags);
|
||||
+#endif
|
||||
+
|
||||
ret = crypt_ctr_cipher(ti, argv[0], argv[1]);
|
||||
if (ret < 0)
|
||||
goto bad;
|
|
@ -1,88 +0,0 @@
|
|||
diff -Naur vlinux-6.6.1/kernel/sched/fair.c linux-6.6.1/kernel/sched/fair.c
|
||||
--- vlinux-6.6.1/kernel/sched/fair.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/fair.c 2023-11-11 15:51:09.630279108 +0100
|
||||
@@ -75,10 +75,19 @@
|
||||
*
|
||||
* (default: 0.75 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_base_slice = 400000ULL;
|
||||
+static unsigned int normalized_sysctl_sched_base_slice = 400000ULL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_base_slice = 750000ULL;
|
||||
static unsigned int normalized_sysctl_sched_base_slice = 750000ULL;
|
||||
-
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+const_debug unsigned int sysctl_sched_migration_cost = 250000UL;
|
||||
+#else
|
||||
const_debug unsigned int sysctl_sched_migration_cost = 500000UL;
|
||||
+#endif
|
||||
|
||||
int sched_thermal_decay_shift;
|
||||
static int __init setup_sched_thermal_decay_shift(char *str)
|
||||
@@ -135,8 +143,12 @@
|
||||
*
|
||||
* (default: 5 msec, units: microseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static unsigned int sysctl_sched_cfs_bandwidth_slice = 3000UL;
|
||||
+#else
|
||||
static unsigned int sysctl_sched_cfs_bandwidth_slice = 5000UL;
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#ifdef CONFIG_NUMA_BALANCING
|
||||
/* Restrict the NUMA promotion throughput (MB/s) for each target node. */
|
||||
diff -Naur vlinux-6.6.1/kernel/sched/sched.h linux-6.6.1/kernel/sched/sched.h
|
||||
--- vlinux-6.6.1/kernel/sched/sched.h 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/sched.h 2023-11-11 15:52:03.241725632 +0100
|
||||
@@ -2515,7 +2515,7 @@
|
||||
|
||||
extern void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags);
|
||||
|
||||
-#ifdef CONFIG_PREEMPT_RT
|
||||
+#if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_ZENIFY)
|
||||
#define SCHED_NR_MIGRATE_BREAK 8
|
||||
#else
|
||||
#define SCHED_NR_MIGRATE_BREAK 32
|
||||
diff -Naur vlinux-6.6.1/kernel/sched/topology.c linux-6.6.1/kernel/sched/topology.c
|
||||
--- vlinux-6.6.1/kernel/sched/topology.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/topology.c 2023-11-11 15:56:54.602473894 +0100
|
||||
@@ -208,7 +208,7 @@
|
||||
|
||||
#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)
|
||||
DEFINE_STATIC_KEY_FALSE(sched_energy_present);
|
||||
-static unsigned int sysctl_sched_energy_aware = 1;
|
||||
+static unsigned int sysctl_sched_energy_aware = 0;
|
||||
static DEFINE_MUTEX(sched_energy_mutex);
|
||||
static bool sched_energy_update;
|
||||
|
||||
diff -Naur vlinux-6.6.1/mm/page-writeback.c linux-6.6.1/mm/page-writeback.c
|
||||
--- vlinux-6.6.1/mm/page-writeback.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/mm/page-writeback.c 2023-11-11 16:07:22.214222902 +0100
|
||||
@@ -71,7 +71,11 @@
|
||||
/*
|
||||
* Start background writeback (via writeback threads) at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static int dirty_background_ratio = 20;
|
||||
+#else
|
||||
static int dirty_background_ratio = 10;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* dirty_background_bytes starts at 0 (disabled) so that it is a function of
|
||||
@@ -88,7 +92,11 @@
|
||||
/*
|
||||
* The generator of dirty data starts writeback at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static int vm_dirty_ratio = 50;
|
||||
+#else
|
||||
static int vm_dirty_ratio = 20;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* vm_dirty_bytes starts at 0 (disabled) so that it is a function of
|
File diff suppressed because it is too large
Load diff
|
@ -1,166 +0,0 @@
|
|||
From b70e738f08403950aa3053c36b98c6b0eeb0eb90 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Andr=C3=A9=20Almeida?= <andrealmeid@collabora.com>
|
||||
Date: Mon, 25 Oct 2021 09:49:42 -0300
|
||||
Subject: [PATCH] futex: Add entry point for FUTEX_WAIT_MULTIPLE (opcode 31)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add an option to wait on multiple futexes using the old interface, that
|
||||
uses opcode 31 through futex() syscall. Do that by just translation the
|
||||
old interface to use the new code. This allows old and stable versions
|
||||
of Proton to still use fsync in new kernel releases.
|
||||
|
||||
Signed-off-by: André Almeida <andrealmeid@collabora.com>
|
||||
---
|
||||
include/uapi/linux/futex.h | 13 +++++++
|
||||
kernel/futex/syscalls.c | 75 +++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 87 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index 71a5df8d2689..d375ab21cbf8 100644
|
||||
--- a/include/uapi/linux/futex.h
|
||||
+++ b/include/uapi/linux/futex.h
|
||||
@@ -22,6 +22,7 @@
|
||||
#define FUTEX_WAIT_REQUEUE_PI 11
|
||||
#define FUTEX_CMP_REQUEUE_PI 12
|
||||
#define FUTEX_LOCK_PI2 13
|
||||
+#define FUTEX_WAIT_MULTIPLE 31
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
@@ -68,6 +69,18 @@ struct futex_waitv {
|
||||
__u32 __reserved;
|
||||
};
|
||||
|
||||
+/**
|
||||
+ * struct futex_wait_block - Block of futexes to be waited for
|
||||
+ * @uaddr: User address of the futex
|
||||
+ * @val: Futex value expected by userspace
|
||||
+ * @bitset: Bitset for the optional bitmasked wakeup
|
||||
+ */
|
||||
+struct futex_wait_block {
|
||||
+ __u32 __user *uaddr;
|
||||
+ __u32 val;
|
||||
+ __u32 bitset;
|
||||
+};
|
||||
+
|
||||
/*
|
||||
* Support for robust futexes: the kernel cleans up held futexes at
|
||||
* thread exit time.
|
||||
diff --git a/kernel/futex/syscalls.c b/kernel/futex/syscalls.c
|
||||
index 6f91a07a6a83..2f4d4c04ede2 100644
|
||||
--- a/kernel/futex/syscalls.c
|
||||
+++ b/kernel/futex/syscalls.c
|
||||
@@ -158,6 +158,7 @@ static __always_inline bool futex_cmd_has_timeout(u32 cmd)
|
||||
case FUTEX_LOCK_PI2:
|
||||
case FUTEX_WAIT_BITSET:
|
||||
case FUTEX_WAIT_REQUEUE_PI:
|
||||
+ case FUTEX_WAIT_MULTIPLE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -170,13 +171,79 @@ futex_init_timeout(u32 cmd, u32 op, struct timespec64 *ts, ktime_t *t)
|
||||
return -EINVAL;
|
||||
|
||||
*t = timespec64_to_ktime(*ts);
|
||||
- if (cmd == FUTEX_WAIT)
|
||||
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
|
||||
*t = ktime_add_safe(ktime_get(), *t);
|
||||
else if (cmd != FUTEX_LOCK_PI && !(op & FUTEX_CLOCK_REALTIME))
|
||||
*t = timens_ktime_to_host(CLOCK_MONOTONIC, *t);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * futex_read_wait_block - Read an array of futex_wait_block from userspace
|
||||
+ * @uaddr: Userspace address of the block
|
||||
+ * @count: Number of blocks to be read
|
||||
+ *
|
||||
+ * This function creates and allocate an array of futex_q (we zero it to
|
||||
+ * initialize the fields) and then, for each futex_wait_block element from
|
||||
+ * userspace, fill a futex_q element with proper values.
|
||||
+ */
|
||||
+inline struct futex_vector *futex_read_wait_block(u32 __user *uaddr, u32 count)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ struct futex_vector *futexv;
|
||||
+ struct futex_wait_block fwb;
|
||||
+ struct futex_wait_block __user *entry =
|
||||
+ (struct futex_wait_block __user *)uaddr;
|
||||
+
|
||||
+ if (!count || count > FUTEX_WAITV_MAX)
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
+ futexv = kcalloc(count, sizeof(*futexv), GFP_KERNEL);
|
||||
+ if (!futexv)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (copy_from_user(&fwb, &entry[i], sizeof(fwb))) {
|
||||
+ kfree(futexv);
|
||||
+ return ERR_PTR(-EFAULT);
|
||||
+ }
|
||||
+
|
||||
+ futexv[i].w.flags = FUTEX_32;
|
||||
+ futexv[i].w.val = fwb.val;
|
||||
+ futexv[i].w.uaddr = (uintptr_t) (fwb.uaddr);
|
||||
+ futexv[i].q = futex_q_init;
|
||||
+ }
|
||||
+
|
||||
+ return futexv;
|
||||
+}
|
||||
+
|
||||
+int futex_wait_multiple(struct futex_vector *vs, unsigned int count,
|
||||
+ struct hrtimer_sleeper *to);
|
||||
+
|
||||
+int futex_opcode_31(ktime_t *abs_time, u32 __user *uaddr, int count)
|
||||
+{
|
||||
+ int ret;
|
||||
+ struct futex_vector *vs;
|
||||
+ struct hrtimer_sleeper *to = NULL, timeout;
|
||||
+
|
||||
+ to = futex_setup_timer(abs_time, &timeout, 0, 0);
|
||||
+
|
||||
+ vs = futex_read_wait_block(uaddr, count);
|
||||
+
|
||||
+ if (IS_ERR(vs))
|
||||
+ return PTR_ERR(vs);
|
||||
+
|
||||
+ ret = futex_wait_multiple(vs, count, abs_time ? to : NULL);
|
||||
+ kfree(vs);
|
||||
+
|
||||
+ if (to) {
|
||||
+ hrtimer_cancel(&to->timer);
|
||||
+ destroy_hrtimer_on_stack(&to->timer);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
const struct __kernel_timespec __user *, utime,
|
||||
u32 __user *, uaddr2, u32, val3)
|
||||
@@ -196,6 +263,9 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
tp = &t;
|
||||
}
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE)
|
||||
+ return futex_opcode_31(tp, uaddr, val);
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, (unsigned long)utime, val3);
|
||||
}
|
||||
|
||||
@@ -392,6 +462,9 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
tp = &t;
|
||||
}
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE)
|
||||
+ return futex_opcode_31(tp, uaddr, val);
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, (unsigned long)utime, val3);
|
||||
}
|
||||
#endif /* CONFIG_COMPAT_32BIT_TIME */
|
||||
--
|
||||
2.33.1
|
||||
|
Loading…
Reference in a new issue