Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
13e3a3ac21 | ||
|
4616e8a334 | ||
|
0669717533 | ||
|
3eb0fca482 | ||
|
3c4f81daa3 | ||
|
d465b7bbd0 |
@@ -3,7 +3,7 @@
|
|||||||
# Linux distribution you are using, options are "Arch", "Ubuntu", "Debian", "Fedora", "Suse", "Gentoo", "Generic".
|
# Linux distribution you are using, options are "Arch", "Ubuntu", "Debian", "Fedora", "Suse", "Gentoo", "Generic".
|
||||||
# It is automatically set to "Arch" when using PKGBUILD.
|
# It is automatically set to "Arch" when using PKGBUILD.
|
||||||
# If left empty, the script will prompt
|
# If left empty, the script will prompt
|
||||||
_distro=""
|
_distro="Arch"
|
||||||
|
|
||||||
# Kernel Version - Options are "5.4", and from "5.7" to "5.19"
|
# Kernel Version - Options are "5.4", and from "5.7" to "5.19"
|
||||||
# you can also set a specific kernel version, e.g. "6.0-rc4" or "5.10.51",
|
# you can also set a specific kernel version, e.g. "6.0-rc4" or "5.10.51",
|
||||||
@@ -46,7 +46,7 @@ CUSTOM_GCC_PATH=""
|
|||||||
CUSTOM_LLVM_PATH=""
|
CUSTOM_LLVM_PATH=""
|
||||||
|
|
||||||
# Set to true to bypass makepkg.conf and use all available threads for compilation. False will respect your makepkg.conf options.
|
# Set to true to bypass makepkg.conf and use all available threads for compilation. False will respect your makepkg.conf options.
|
||||||
_force_all_threads="true"
|
_force_all_threads="false"
|
||||||
|
|
||||||
# Set to true to prevent ccache from being used and set CONFIG_GCC_PLUGINS=y (which needs to be disabled for ccache to work properly)
|
# Set to true to prevent ccache from being used and set CONFIG_GCC_PLUGINS=y (which needs to be disabled for ccache to work properly)
|
||||||
_noccache="false"
|
_noccache="false"
|
||||||
@@ -60,10 +60,10 @@ _modprobeddb="false"
|
|||||||
_modprobeddb_db_path=~/.config/modprobed.db
|
_modprobeddb_db_path=~/.config/modprobed.db
|
||||||
|
|
||||||
# Set to "1" to call make menuconfig, "2" to call make nconfig, "3" to call make xconfig, before building the kernel. Set to false to disable and skip the prompt.
|
# Set to "1" to call make menuconfig, "2" to call make nconfig, "3" to call make xconfig, before building the kernel. Set to false to disable and skip the prompt.
|
||||||
_menunconfig=""
|
_menunconfig="false"
|
||||||
|
|
||||||
# Set to true to generate a kernel config fragment from your changes in menuconfig/nconfig. Set to false to disable and skip the prompt.
|
# Set to true to generate a kernel config fragment from your changes in menuconfig/nconfig. Set to false to disable and skip the prompt.
|
||||||
_diffconfig=""
|
_diffconfig="false"
|
||||||
|
|
||||||
# Set to the file name where the generated config fragment should be written to. Only used if _diffconfig is active.
|
# Set to the file name where the generated config fragment should be written to. Only used if _diffconfig is active.
|
||||||
_diffconfig_name=""
|
_diffconfig_name=""
|
||||||
@@ -97,11 +97,11 @@ _STRIP="true"
|
|||||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||||
|
|
||||||
# CPU scheduler - Options are "upds" (TkG's Undead PDS), "pds", "bmq", "muqss", "cacule", "tt", "bore" or "cfs" (kernel's default)
|
# CPU scheduler - Options are "upds" (TkG's Undead PDS), "pds", "bmq", "muqss", "cacule", "tt", "bore" or "cfs" (kernel's default)
|
||||||
_cpusched=""
|
_cpusched="pds"
|
||||||
|
|
||||||
# Compiler to use - Options are "gcc" or "llvm".
|
# Compiler to use - Options are "gcc" or "llvm".
|
||||||
# For advanced users.
|
# For advanced users.
|
||||||
_compiler=""
|
_compiler="gcc"
|
||||||
|
|
||||||
# Force the use of the LLVM Integrated Assembler whether using LLVM, LTO or not.
|
# Force the use of the LLVM Integrated Assembler whether using LLVM, LTO or not.
|
||||||
# Set to "1" to enable.
|
# Set to "1" to enable.
|
||||||
@@ -131,7 +131,7 @@ _preempt_rt_force=""
|
|||||||
# For BMQ: 0: No yield.
|
# For BMQ: 0: No yield.
|
||||||
# 1: Deboost and requeue task. (Default)
|
# 1: Deboost and requeue task. (Default)
|
||||||
# 2: Set rq skip task.
|
# 2: Set rq skip task.
|
||||||
_sched_yield_type=""
|
_sched_yield_type="0"
|
||||||
|
|
||||||
# Round Robin interval is the longest duration two tasks with the same nice level will be delayed for. When CPU time is requested by a task, it receives a time slice equal
|
# Round Robin interval is the longest duration two tasks with the same nice level will be delayed for. When CPU time is requested by a task, it receives a time slice equal
|
||||||
# to the rr_interval in addition to a virtual deadline. When using yield_type 2, a low value can help offset the disadvantages of rescheduling a process that has yielded.
|
# to the rr_interval in addition to a virtual deadline. When using yield_type 2, a low value can help offset the disadvantages of rescheduling a process that has yielded.
|
||||||
@@ -139,7 +139,7 @@ _sched_yield_type=""
|
|||||||
# PDS default: 4ms"
|
# PDS default: 4ms"
|
||||||
# BMQ default: 2ms"
|
# BMQ default: 2ms"
|
||||||
# Set to "1" for 2ms, "2" for 4ms, "3" for 6ms, "4" for 8ms, or "default" to keep the chosen scheduler defaults.
|
# Set to "1" for 2ms, "2" for 4ms, "3" for 6ms, "4" for 8ms, or "default" to keep the chosen scheduler defaults.
|
||||||
_rr_interval=""
|
_rr_interval="2"
|
||||||
|
|
||||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||||
_ftracedisable="false"
|
_ftracedisable="false"
|
||||||
@@ -154,10 +154,10 @@ _misc_adds="true"
|
|||||||
# Full tickless can give higher performances in case you use isolation of CPUs for tasks
|
# Full tickless can give higher performances in case you use isolation of CPUs for tasks
|
||||||
# and it works only when using the nohz_full kernel parameter, otherwise behaves like idle.
|
# and it works only when using the nohz_full kernel parameter, otherwise behaves like idle.
|
||||||
# Just tickless idle perform better for most platforms.
|
# Just tickless idle perform better for most platforms.
|
||||||
_tickless=""
|
_tickless="2"
|
||||||
|
|
||||||
# Set to "true" to use ACS override patch - https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Bypassing_the_IOMMU_groups_.28ACS_override_patch.29 - Kernel default is "false"
|
# Set to "true" to use ACS override patch - https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Bypassing_the_IOMMU_groups_.28ACS_override_patch.29 - Kernel default is "false"
|
||||||
_acs_override=""
|
_acs_override="false"
|
||||||
|
|
||||||
# Set to "true" to add Bcache filesystem support. You'll have to install bcachefs-tools-git from AUR for utilities - https://bcachefs.org/ - If in doubt, set to "false"
|
# Set to "true" to add Bcache filesystem support. You'll have to install bcachefs-tools-git from AUR for utilities - https://bcachefs.org/ - If in doubt, set to "false"
|
||||||
# This can be buggy and isn't recommended on a production machine, also enabling this option will not allow you to enable MGLRU.
|
# This can be buggy and isn't recommended on a production machine, also enabling this option will not allow you to enable MGLRU.
|
||||||
@@ -186,13 +186,13 @@ _futex_waitv="false"
|
|||||||
_winesync="false"
|
_winesync="false"
|
||||||
|
|
||||||
# Set to "true" to enable Binder and Ashmem, the kernel modules required to use the android emulator Anbox. ! This doesn't apply to 5.4.y !
|
# Set to "true" to enable Binder and Ashmem, the kernel modules required to use the android emulator Anbox. ! This doesn't apply to 5.4.y !
|
||||||
_anbox=""
|
_anbox="false"
|
||||||
|
|
||||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||||
_zenify="true"
|
_zenify="true"
|
||||||
|
|
||||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "1"
|
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "1"
|
||||||
_compileroptlevel="1"
|
_compileroptlevel="2"
|
||||||
|
|
||||||
# CPU compiler optimizations - Defaults to prompt at kernel config if left empty
|
# CPU compiler optimizations - Defaults to prompt at kernel config if left empty
|
||||||
# AMD CPUs : "k8" "k8sse3" "k10" "barcelona" "bobcat" "jaguar" "bulldozer" "piledriver" "steamroller" "excavator" "zen" "zen2" "zen3" "zen4" (zen3 opt support depends on GCC11) (zen4 opt support depends on GCC13)
|
# AMD CPUs : "k8" "k8sse3" "k10" "barcelona" "bobcat" "jaguar" "bulldozer" "piledriver" "steamroller" "excavator" "zen" "zen2" "zen3" "zen4" (zen3 opt support depends on GCC11) (zen4 opt support depends on GCC13)
|
||||||
@@ -206,7 +206,7 @@ _compileroptlevel="1"
|
|||||||
# - "generic_v2" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v2
|
# - "generic_v2" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v2
|
||||||
# - "generic_v3" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v3
|
# - "generic_v3" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v3
|
||||||
# - "generic_v4" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v4
|
# - "generic_v4" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v4
|
||||||
_processor_opt=""
|
_processor_opt="skylake"
|
||||||
|
|
||||||
# MuQSS only - Make IRQ threading compulsory (FORCE_IRQ_THREADING) - Default is "false"
|
# MuQSS only - Make IRQ threading compulsory (FORCE_IRQ_THREADING) - Default is "false"
|
||||||
_irq_threading="false"
|
_irq_threading="false"
|
||||||
@@ -222,7 +222,7 @@ _cacule_rdb_interval="19"
|
|||||||
_tt_high_hz="false"
|
_tt_high_hz="false"
|
||||||
|
|
||||||
# MuQSS and PDS only - SMT (Hyperthreading) aware nice priority and policy support (SMT_NICE) - Kernel default is "true" - You can disable this on non-SMT/HT CPUs for lower overhead
|
# MuQSS and PDS only - SMT (Hyperthreading) aware nice priority and policy support (SMT_NICE) - Kernel default is "true" - You can disable this on non-SMT/HT CPUs for lower overhead
|
||||||
_smt_nice=""
|
_smt_nice="true"
|
||||||
|
|
||||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||||
_random_trust_cpu="true"
|
_random_trust_cpu="true"
|
||||||
@@ -232,7 +232,7 @@ _random_trust_cpu="true"
|
|||||||
_runqueue_sharing=""
|
_runqueue_sharing=""
|
||||||
|
|
||||||
# Timer frequency - "100" "250" "300" "500" "750" "1000" ("2000" is available for cacule cpusched only) - More options available in kernel config prompt when left empty depending on selected cpusched with the default option pointed with a ">" (2000 for cacule, 100 for muqss and 1000 for other cpu schedulers)
|
# Timer frequency - "100" "250" "300" "500" "750" "1000" ("2000" is available for cacule cpusched only) - More options available in kernel config prompt when left empty depending on selected cpusched with the default option pointed with a ">" (2000 for cacule, 100 for muqss and 1000 for other cpu schedulers)
|
||||||
_timer_freq=""
|
_timer_freq="500"
|
||||||
|
|
||||||
# Default CPU governor - "performance", "ondemand", "schedutil" or leave empty for default (schedutil)
|
# Default CPU governor - "performance", "ondemand", "schedutil" or leave empty for default (schedutil)
|
||||||
_default_cpu_gov="ondemand"
|
_default_cpu_gov="ondemand"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated file; DO NOT EDIT.
|
# Automatically generated file; DO NOT EDIT.
|
||||||
# Linux/x86 6.2.0-rc1 Kernel Configuration
|
# Linux/x86 6.2.0-rc4 Kernel Configuration
|
||||||
#
|
#
|
||||||
CONFIG_CC_VERSION_TEXT="gcc (GCC) 12.2.0"
|
CONFIG_CC_VERSION_TEXT="gcc (GCC) 12.2.0"
|
||||||
CONFIG_CC_IS_GCC=y
|
CONFIG_CC_IS_GCC=y
|
||||||
@@ -206,6 +206,7 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
|
|||||||
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
|
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
|
||||||
CONFIG_CC_HAS_INT128=y
|
CONFIG_CC_HAS_INT128=y
|
||||||
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
|
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
|
||||||
|
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
|
||||||
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
|
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
|
||||||
CONFIG_CC_NO_ARRAY_BOUNDS=y
|
CONFIG_CC_NO_ARRAY_BOUNDS=y
|
||||||
CONFIG_ARCH_SUPPORTS_INT128=y
|
CONFIG_ARCH_SUPPORTS_INT128=y
|
||||||
@@ -241,6 +242,7 @@ CONFIG_UTS_NS=y
|
|||||||
CONFIG_TIME_NS=y
|
CONFIG_TIME_NS=y
|
||||||
CONFIG_IPC_NS=y
|
CONFIG_IPC_NS=y
|
||||||
CONFIG_USER_NS=y
|
CONFIG_USER_NS=y
|
||||||
|
CONFIG_USER_NS_UNPRIVILEGED=y
|
||||||
CONFIG_PID_NS=y
|
CONFIG_PID_NS=y
|
||||||
CONFIG_NET_NS=y
|
CONFIG_NET_NS=y
|
||||||
CONFIG_CHECKPOINT_RESTORE=y
|
CONFIG_CHECKPOINT_RESTORE=y
|
||||||
@@ -2546,6 +2548,7 @@ CONFIG_BLK_DEV_NBD=m
|
|||||||
CONFIG_BLK_DEV_RAM=m
|
CONFIG_BLK_DEV_RAM=m
|
||||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||||
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
CONFIG_ATA_OVER_ETH=m
|
CONFIG_ATA_OVER_ETH=m
|
||||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
CONFIG_XEN_BLKDEV_FRONTEND=m
|
||||||
CONFIG_XEN_BLKDEV_BACKEND=m
|
CONFIG_XEN_BLKDEV_BACKEND=m
|
||||||
|
@@ -284,7 +284,8 @@ _set_cpu_scheduler() {
|
|||||||
elif [ "$_kver" = "601" ]; then
|
elif [ "$_kver" = "601" ]; then
|
||||||
_avail_cpu_scheds=("cfs" "pds" "bmq" "tt" "bore")
|
_avail_cpu_scheds=("cfs" "pds" "bmq" "tt" "bore")
|
||||||
elif [ "$_kver" = "602" ]; then
|
elif [ "$_kver" = "602" ]; then
|
||||||
_avail_cpu_scheds=("cfs" "tt" "bore")
|
_avail_cpu_scheds=("cfs" "pds" "bmq" "tt" "bore")
|
||||||
|
_projectc_unoff=1
|
||||||
else
|
else
|
||||||
_avail_cpu_scheds=("cfs")
|
_avail_cpu_scheds=("cfs")
|
||||||
fi
|
fi
|
||||||
@@ -722,7 +723,7 @@ _tkg_srcprep() {
|
|||||||
elif [ "$_kver" = "518" ]; then
|
elif [ "$_kver" = "518" ]; then
|
||||||
rev=2
|
rev=2
|
||||||
elif [ "$_kver" = "601" ]; then
|
elif [ "$_kver" = "601" ]; then
|
||||||
rev=1
|
rev=3
|
||||||
else
|
else
|
||||||
rev=0
|
rev=0
|
||||||
fi
|
fi
|
||||||
@@ -1572,9 +1573,13 @@ CONFIG_DEBUG_INFO_BTF_MODULES=y\r
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# NR_CPUS
|
# NR_CPUS
|
||||||
if [ -n "$_NR_CPUS_value" ]; then
|
if [ "$_basever" != "601" ]; then
|
||||||
scripts/config --set-val "NR_CPUS" "$_NR_CPUS_value"
|
if [ -n "$_NR_CPUS_value" ]; then
|
||||||
_enable "FORCE_NR_CPUS"
|
scripts/config --set-val "NR_CPUS" "$_NR_CPUS_value"
|
||||||
|
_enable "FORCE_NR_CPUS"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warning "NR_CPUS is bugged on 6.1.y, so your setting was ignored"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
@@ -632,10 +632,10 @@ index 976092b7bd45..31d587c16ec1 100644
|
|||||||
obj-y += build_utility.o
|
obj-y += build_utility.o
|
||||||
diff --git a/kernel/sched/alt_core.c b/kernel/sched/alt_core.c
|
diff --git a/kernel/sched/alt_core.c b/kernel/sched/alt_core.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000000..572eab74418f
|
index 000000000000..acb8657e811d
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/kernel/sched/alt_core.c
|
+++ b/kernel/sched/alt_core.c
|
||||||
@@ -0,0 +1,7961 @@
|
@@ -0,0 +1,7978 @@
|
||||||
+/*
|
+/*
|
||||||
+ * kernel/sched/alt_core.c
|
+ * kernel/sched/alt_core.c
|
||||||
+ *
|
+ *
|
||||||
@@ -665,7 +665,6 @@ index 000000000000..572eab74418f
|
|||||||
+#include <linux/init_task.h>
|
+#include <linux/init_task.h>
|
||||||
+#include <linux/kcov.h>
|
+#include <linux/kcov.h>
|
||||||
+#include <linux/kprobes.h>
|
+#include <linux/kprobes.h>
|
||||||
+#include <linux/profile.h>
|
|
||||||
+#include <linux/nmi.h>
|
+#include <linux/nmi.h>
|
||||||
+#include <linux/scs.h>
|
+#include <linux/scs.h>
|
||||||
+
|
+
|
||||||
@@ -706,7 +705,7 @@ index 000000000000..572eab74418f
|
|||||||
+#define sched_feat(x) (0)
|
+#define sched_feat(x) (0)
|
||||||
+#endif /* CONFIG_SCHED_DEBUG */
|
+#endif /* CONFIG_SCHED_DEBUG */
|
||||||
+
|
+
|
||||||
+#define ALT_SCHED_VERSION "v6.1-r1"
|
+#define ALT_SCHED_VERSION "v6.1-r3"
|
||||||
+
|
+
|
||||||
+/* rt_prio(prio) defined in include/linux/sched/rt.h */
|
+/* rt_prio(prio) defined in include/linux/sched/rt.h */
|
||||||
+#define rt_task(p) rt_prio((p)->prio)
|
+#define rt_task(p) rt_prio((p)->prio)
|
||||||
@@ -815,14 +814,14 @@ index 000000000000..572eab74418f
|
|||||||
+clear_recorded_preempt_mask(int pr, int low, int high, int cpu)
|
+clear_recorded_preempt_mask(int pr, int low, int high, int cpu)
|
||||||
+{
|
+{
|
||||||
+ if (low < pr && pr <= high)
|
+ if (low < pr && pr <= high)
|
||||||
+ cpumask_clear_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - 1 - pr);
|
+ cpumask_clear_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - pr);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static inline void
|
+static inline void
|
||||||
+set_recorded_preempt_mask(int pr, int low, int high, int cpu)
|
+set_recorded_preempt_mask(int pr, int low, int high, int cpu)
|
||||||
+{
|
+{
|
||||||
+ if (low < pr && pr <= high)
|
+ if (low < pr && pr <= high)
|
||||||
+ cpumask_set_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - 1 - pr);
|
+ cpumask_set_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - pr);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static atomic_t sched_prio_record = ATOMIC_INIT(0);
|
+static atomic_t sched_prio_record = ATOMIC_INIT(0);
|
||||||
@@ -1392,8 +1391,8 @@ index 000000000000..572eab74418f
|
|||||||
+ * Context: rq->lock
|
+ * Context: rq->lock
|
||||||
+ */
|
+ */
|
||||||
+#define __SCHED_DEQUEUE_TASK(p, rq, flags) \
|
+#define __SCHED_DEQUEUE_TASK(p, rq, flags) \
|
||||||
+ psi_dequeue(p, flags & DEQUEUE_SLEEP); \
|
|
||||||
+ sched_info_dequeue(rq, p); \
|
+ sched_info_dequeue(rq, p); \
|
||||||
|
+ psi_dequeue(p, flags & DEQUEUE_SLEEP); \
|
||||||
+ \
|
+ \
|
||||||
+ list_del(&p->sq_node); \
|
+ list_del(&p->sq_node); \
|
||||||
+ if (list_empty(&rq->queue.heads[p->sq_idx])) \
|
+ if (list_empty(&rq->queue.heads[p->sq_idx])) \
|
||||||
@@ -2030,11 +2029,13 @@ index 000000000000..572eab74418f
|
|||||||
+
|
+
|
||||||
+ WARN_ON_ONCE(is_migration_disabled(p));
|
+ WARN_ON_ONCE(is_migration_disabled(p));
|
||||||
+#endif
|
+#endif
|
||||||
+ if (task_cpu(p) == new_cpu)
|
|
||||||
+ return;
|
|
||||||
+ trace_sched_migrate_task(p, new_cpu);
|
+ trace_sched_migrate_task(p, new_cpu);
|
||||||
+ rseq_migrate(p);
|
+
|
||||||
+ perf_event_task_migrate(p);
|
+ if (task_cpu(p) != new_cpu)
|
||||||
|
+ {
|
||||||
|
+ rseq_migrate(p);
|
||||||
|
+ perf_event_task_migrate(p);
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ __set_task_cpu(p, new_cpu);
|
+ __set_task_cpu(p, new_cpu);
|
||||||
+}
|
+}
|
||||||
@@ -5110,15 +5111,15 @@ index 000000000000..572eab74418f
|
|||||||
+ if (src_rq->nr_running < 2)
|
+ if (src_rq->nr_running < 2)
|
||||||
+ cpumask_clear_cpu(i, &sched_rq_pending_mask);
|
+ cpumask_clear_cpu(i, &sched_rq_pending_mask);
|
||||||
+
|
+
|
||||||
|
+ spin_release(&src_rq->lock.dep_map, _RET_IP_);
|
||||||
|
+ do_raw_spin_unlock(&src_rq->lock);
|
||||||
|
+
|
||||||
+ rq->nr_running += nr_migrated;
|
+ rq->nr_running += nr_migrated;
|
||||||
+ if (rq->nr_running > 1)
|
+ if (rq->nr_running > 1)
|
||||||
+ cpumask_set_cpu(cpu, &sched_rq_pending_mask);
|
+ cpumask_set_cpu(cpu, &sched_rq_pending_mask);
|
||||||
+
|
+
|
||||||
+ cpufreq_update_util(rq, 0);
|
+ cpufreq_update_util(rq, 0);
|
||||||
+
|
+
|
||||||
+ spin_release(&src_rq->lock.dep_map, _RET_IP_);
|
|
||||||
+ do_raw_spin_unlock(&src_rq->lock);
|
|
||||||
+
|
|
||||||
+ return 1;
|
+ return 1;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -5147,7 +5148,7 @@ index 000000000000..572eab74418f
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static inline struct task_struct *
|
+static inline struct task_struct *
|
||||||
+choose_next_task(struct rq *rq, int cpu, struct task_struct *prev)
|
+choose_next_task(struct rq *rq, int cpu)
|
||||||
+{
|
+{
|
||||||
+ struct task_struct *next;
|
+ struct task_struct *next;
|
||||||
+
|
+
|
||||||
@@ -5334,7 +5335,7 @@ index 000000000000..572eab74418f
|
|||||||
+
|
+
|
||||||
+ check_curr(prev, rq);
|
+ check_curr(prev, rq);
|
||||||
+
|
+
|
||||||
+ next = choose_next_task(rq, cpu, prev);
|
+ next = choose_next_task(rq, cpu);
|
||||||
+ clear_tsk_need_resched(prev);
|
+ clear_tsk_need_resched(prev);
|
||||||
+ clear_preempt_need_resched();
|
+ clear_preempt_need_resched();
|
||||||
+#ifdef CONFIG_SCHED_DEBUG
|
+#ifdef CONFIG_SCHED_DEBUG
|
||||||
@@ -5764,6 +5765,7 @@ index 000000000000..572eab74418f
|
|||||||
+ return;
|
+ return;
|
||||||
+
|
+
|
||||||
+ rq = __task_access_lock(p, &lock);
|
+ rq = __task_access_lock(p, &lock);
|
||||||
|
+ update_rq_clock(rq);
|
||||||
+ /*
|
+ /*
|
||||||
+ * Set under pi_lock && rq->lock, such that the value can be used under
|
+ * Set under pi_lock && rq->lock, such that the value can be used under
|
||||||
+ * either lock.
|
+ * either lock.
|
||||||
@@ -6643,6 +6645,13 @@ index 000000000000..572eab74418f
|
|||||||
+ return retval;
|
+ return retval;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+#ifdef CONFIG_SMP
|
||||||
|
+int dl_task_check_affinity(struct task_struct *p, const struct cpumask *mask)
|
||||||
|
+{
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
+static int
|
+static int
|
||||||
+__sched_setaffinity(struct task_struct *p, const struct cpumask *mask)
|
+__sched_setaffinity(struct task_struct *p, const struct cpumask *mask)
|
||||||
+{
|
+{
|
||||||
@@ -8027,6 +8036,14 @@ index 000000000000..572eab74418f
|
|||||||
+
|
+
|
||||||
+ sched_smp_initialized = true;
|
+ sched_smp_initialized = true;
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
|
+static int __init migration_init(void)
|
||||||
|
+{
|
||||||
|
+ sched_cpu_starting(smp_processor_id());
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+early_initcall(migration_init);
|
||||||
|
+
|
||||||
+#else
|
+#else
|
||||||
+void __init sched_init_smp(void)
|
+void __init sched_init_smp(void)
|
||||||
+{
|
+{
|
||||||
@@ -8636,14 +8653,15 @@ index 000000000000..1212a031700e
|
|||||||
+{}
|
+{}
|
||||||
diff --git a/kernel/sched/alt_sched.h b/kernel/sched/alt_sched.h
|
diff --git a/kernel/sched/alt_sched.h b/kernel/sched/alt_sched.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000000..e3b6320a397a
|
index 000000000000..c32403ed82b6
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/kernel/sched/alt_sched.h
|
+++ b/kernel/sched/alt_sched.h
|
||||||
@@ -0,0 +1,667 @@
|
@@ -0,0 +1,668 @@
|
||||||
+#ifndef ALT_SCHED_H
|
+#ifndef ALT_SCHED_H
|
||||||
+#define ALT_SCHED_H
|
+#define ALT_SCHED_H
|
||||||
+
|
+
|
||||||
+#include <linux/context_tracking.h>
|
+#include <linux/context_tracking.h>
|
||||||
|
+#include <linux/profile.h>
|
||||||
+#include <linux/psi.h>
|
+#include <linux/psi.h>
|
||||||
+#include <linux/stop_machine.h>
|
+#include <linux/stop_machine.h>
|
||||||
+#include <linux/syscalls.h>
|
+#include <linux/syscalls.h>
|
@@ -2540,41 +2540,3 @@ index 41fd8352ab6561..1d2f77835de5f0 100644
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
From 07fa6df737871f5e491ec70f499963aedd679f2a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
||||||
Date: Wed, 11 Jan 2023 17:07:33 +0100
|
|
||||||
Subject: [PATCH] netfilter: nft_payload: incorrect arithmetics when fetching
|
|
||||||
VLAN header bits
|
|
||||||
|
|
||||||
commit 696e1a48b1a1b01edad542a1ef293665864a4dd0 upstream.
|
|
||||||
|
|
||||||
If the offset + length goes over the ethernet + vlan header, then the
|
|
||||||
length is adjusted to copy the bytes that are within the boundaries of
|
|
||||||
the vlan_ethhdr scratchpad area. The remaining bytes beyond ethernet +
|
|
||||||
vlan header are copied directly from the skbuff data area.
|
|
||||||
|
|
||||||
Fix incorrect arithmetic operator: subtract, not add, the size of the
|
|
||||||
vlan header in case of double-tagged packets to adjust the length
|
|
||||||
accordingly to address CVE-2023-0179.
|
|
||||||
|
|
||||||
Reported-by: Davide Ornaghi <d.ornaghi97@gmail.com>
|
|
||||||
Fixes: f6ae9f120dad ("netfilter: nft_payload: add C-VLAN support")
|
|
||||||
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
---
|
|
||||||
net/netfilter/nft_payload.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/net/netfilter/nft_payload.c b/net/netfilter/nft_payload.c
|
|
||||||
index 4edd899aeb9bb5..d7de2ecb287eba 100644
|
|
||||||
--- a/net/netfilter/nft_payload.c
|
|
||||||
+++ b/net/netfilter/nft_payload.c
|
|
||||||
@@ -62,7 +62,7 @@ nft_payload_copy_vlan(u32 *d, const struct sk_buff *skb, u8 offset, u8 len)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (offset + len > VLAN_ETH_HLEN + vlan_hlen)
|
|
||||||
- ethlen -= offset + len - VLAN_ETH_HLEN + vlan_hlen;
|
|
||||||
+ ethlen -= offset + len - VLAN_ETH_HLEN - vlan_hlen;
|
|
||||||
|
|
||||||
memcpy(dst_u8, vlanh + offset - vlan_hlen, ethlen);
|
|
||||||
|
|
||||||
|
90
linux-tkg-patches/6.2/0005-glitched-pds.patch
Normal file
90
linux-tkg-patches/6.2/0005-glitched-pds.patch
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
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: glitched - PDS
|
||||||
|
|
||||||
|
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||||
|
index 2a202a846757..1d9c7ed79b11 100644
|
||||||
|
--- a/kernel/Kconfig.hz
|
||||||
|
+++ b/kernel/Kconfig.hz
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "Timer frequency"
|
||||||
|
- default HZ_250
|
||||||
|
+ default HZ_500
|
||||||
|
help
|
||||||
|
Allows the configuration of the timer frequency. It is customary
|
||||||
|
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||||
|
@@ -39,6 +39,13 @@ choice
|
||||||
|
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||||
|
NTSC frame rates for video and multimedia work.
|
||||||
|
|
||||||
|
+ config HZ_500
|
||||||
|
+ bool "500 HZ"
|
||||||
|
+ help
|
||||||
|
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||||
|
+ on desktops with great smoothness without increasing CPU power
|
||||||
|
+ consumption and sacrificing the battery life on laptops.
|
||||||
|
+
|
||||||
|
config HZ_1000
|
||||||
|
bool "1000 HZ"
|
||||||
|
help
|
||||||
|
@@ -52,6 +59,7 @@ config HZ
|
||||||
|
default 100 if HZ_100
|
||||||
|
default 250 if HZ_250
|
||||||
|
default 300 if HZ_300
|
||||||
|
+ default 500 if HZ_500
|
||||||
|
default 1000 if HZ_1000
|
||||||
|
|
||||||
|
config SCHED_HRTICK
|
||||||
|
|
||||||
|
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||||
|
index 2a202a846757..1d9c7ed79b11 100644
|
||||||
|
--- a/kernel/Kconfig.hz
|
||||||
|
+++ b/kernel/Kconfig.hz
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "Timer frequency"
|
||||||
|
- default HZ_500
|
||||||
|
+ default HZ_750
|
||||||
|
help
|
||||||
|
Allows the configuration of the timer frequency. It is customary
|
||||||
|
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||||
|
@@ -46,6 +46,13 @@ choice
|
||||||
|
on desktops with great smoothness without increasing CPU power
|
||||||
|
consumption and sacrificing the battery life on laptops.
|
||||||
|
|
||||||
|
+ config HZ_750
|
||||||
|
+ bool "750 HZ"
|
||||||
|
+ help
|
||||||
|
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||||
|
+ interactivity with great smoothness without sacrificing too
|
||||||
|
+ much throughput.
|
||||||
|
+
|
||||||
|
config HZ_1000
|
||||||
|
bool "1000 HZ"
|
||||||
|
help
|
||||||
|
@@ -60,6 +67,7 @@ config HZ
|
||||||
|
default 250 if HZ_250
|
||||||
|
default 300 if HZ_300
|
||||||
|
default 500 if HZ_500
|
||||||
|
+ default 750 if HZ_750
|
||||||
|
default 1000 if HZ_1000
|
||||||
|
|
||||||
|
config SCHED_HRTICK
|
||||||
|
|
||||||
|
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||||
|
index 9270a4370d54..30d01e647417 100644
|
||||||
|
--- a/mm/vmscan.c
|
||||||
|
+++ b/mm/vmscan.c
|
||||||
|
@@ -169,7 +169,7 @@
|
||||||
|
/*
|
||||||
|
* From 0 .. 200. Higher means more swappy.
|
||||||
|
*/
|
||||||
|
-int vm_swappiness = 60;
|
||||||
|
+int vm_swappiness = 20;
|
||||||
|
|
||||||
|
static void set_task_reclaim_state(struct task_struct *task,
|
||||||
|
struct reclaim_state *rs)
|
10134
linux-tkg-patches/6.2/0009-prjc_v6.2-r0.patch
Normal file
10134
linux-tkg-patches/6.2/0009-prjc_v6.2-r0.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -64,253 +64,3 @@ index 2c7171e0b0010..85de313ddec29 100644
|
|||||||
select CPU_FREQ_GOV_PERFORMANCE
|
select CPU_FREQ_GOV_PERFORMANCE
|
||||||
help
|
help
|
||||||
|
|
||||||
From 0c079d3f88df5f8286cd5c91b54bdac7c819be85 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matthew Auld <matthew.auld@intel.com>
|
|
||||||
Date: Tue, 6 Dec 2022 16:11:41 +0000
|
|
||||||
Subject: [PATCH] drm/i915: improve the catch-all evict to handle lock
|
|
||||||
contention
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
The catch-all evict can fail due to object lock contention, since it
|
|
||||||
only goes as far as trylocking the object, due to us already holding the
|
|
||||||
vm->mutex. Doing a full object lock here can deadlock, since the
|
|
||||||
vm->mutex is always our inner lock. Add another execbuf pass which drops
|
|
||||||
the vm->mutex and then tries to grab the object will the full lock,
|
|
||||||
before then retrying the eviction. This should be good enough for now to
|
|
||||||
fix the immediate regression with userspace seeing -ENOSPC from execbuf
|
|
||||||
due to contended object locks during GTT eviction.
|
|
||||||
|
|
||||||
Testcase: igt@gem_ppgtt@shrink-vs-evict-*
|
|
||||||
Fixes: 7e00897be8bf ("drm/i915: Add object locking to i915_gem_evict_for_node and i915_gem_evict_something, v2.")
|
|
||||||
References: https://gitlab.freedesktop.org/drm/intel/-/issues/7627
|
|
||||||
References: https://gitlab.freedesktop.org/drm/intel/-/issues/7570
|
|
||||||
References: https://bugzilla.mozilla.org/show_bug.cgi?id=1779558
|
|
||||||
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
|
|
||||||
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
|
|
||||||
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
|
|
||||||
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
|
|
||||||
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
|
|
||||||
Cc: Mani Milani <mani@chromium.org>
|
|
||||||
Cc: <stable@vger.kernel.org> # v5.18+
|
|
||||||
|
|
||||||
Revision 1 of https://patchwork.freedesktop.org/series/111686/
|
|
||||||
---
|
|
||||||
.../gpu/drm/i915/gem/i915_gem_execbuffer.c | 25 +++++++++++--
|
|
||||||
drivers/gpu/drm/i915/gem/i915_gem_mman.c | 2 +-
|
|
||||||
drivers/gpu/drm/i915/i915_gem_evict.c | 37 ++++++++++++++-----
|
|
||||||
drivers/gpu/drm/i915/i915_gem_evict.h | 4 +-
|
|
||||||
drivers/gpu/drm/i915/i915_vma.c | 2 +-
|
|
||||||
.../gpu/drm/i915/selftests/i915_gem_evict.c | 4 +-
|
|
||||||
6 files changed, 56 insertions(+), 18 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
|
|
||||||
index 845023c14eb36f..094e92ed28db4f 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
|
|
||||||
@@ -741,25 +741,44 @@ static int eb_reserve(struct i915_execbuffer *eb)
|
|
||||||
*
|
|
||||||
* Defragmenting is skipped if all objects are pinned at a fixed location.
|
|
||||||
*/
|
|
||||||
- for (pass = 0; pass <= 2; pass++) {
|
|
||||||
+ for (pass = 0; pass <= 3; pass++) {
|
|
||||||
int pin_flags = PIN_USER | PIN_VALIDATE;
|
|
||||||
|
|
||||||
if (pass == 0)
|
|
||||||
pin_flags |= PIN_NONBLOCK;
|
|
||||||
|
|
||||||
if (pass >= 1)
|
|
||||||
- unpinned = eb_unbind(eb, pass == 2);
|
|
||||||
+ unpinned = eb_unbind(eb, pass >= 2);
|
|
||||||
|
|
||||||
if (pass == 2) {
|
|
||||||
err = mutex_lock_interruptible(&eb->context->vm->mutex);
|
|
||||||
if (!err) {
|
|
||||||
- err = i915_gem_evict_vm(eb->context->vm, &eb->ww);
|
|
||||||
+ err = i915_gem_evict_vm(eb->context->vm, &eb->ww, NULL);
|
|
||||||
mutex_unlock(&eb->context->vm->mutex);
|
|
||||||
}
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (pass == 3) {
|
|
||||||
+retry:
|
|
||||||
+ err = mutex_lock_interruptible(&eb->context->vm->mutex);
|
|
||||||
+ if (!err) {
|
|
||||||
+ struct drm_i915_gem_object *busy_bo = NULL;
|
|
||||||
+
|
|
||||||
+ err = i915_gem_evict_vm(eb->context->vm, &eb->ww, &busy_bo);
|
|
||||||
+ mutex_unlock(&eb->context->vm->mutex);
|
|
||||||
+ if (err && busy_bo) {
|
|
||||||
+ err = i915_gem_object_lock(busy_bo, &eb->ww);
|
|
||||||
+ i915_gem_object_put(busy_bo);
|
|
||||||
+ if (!err)
|
|
||||||
+ goto retry;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (err)
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
list_for_each_entry(ev, &eb->unbound, bind_link) {
|
|
||||||
err = eb_reserve_vma(eb, ev, pin_flags);
|
|
||||||
if (err)
|
|
||||||
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
|
|
||||||
index 73d9eda1d6b7a6..c83d98e1dc5da0 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
|
|
||||||
@@ -369,7 +369,7 @@ static vm_fault_t vm_fault_gtt(struct vm_fault *vmf)
|
|
||||||
if (vma == ERR_PTR(-ENOSPC)) {
|
|
||||||
ret = mutex_lock_interruptible(&ggtt->vm.mutex);
|
|
||||||
if (!ret) {
|
|
||||||
- ret = i915_gem_evict_vm(&ggtt->vm, &ww);
|
|
||||||
+ ret = i915_gem_evict_vm(&ggtt->vm, &ww, NULL);
|
|
||||||
mutex_unlock(&ggtt->vm.mutex);
|
|
||||||
}
|
|
||||||
if (ret)
|
|
||||||
diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c
|
|
||||||
index f025ee4fa52618..a4b4d9b7d26c7a 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/i915_gem_evict.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/i915_gem_evict.c
|
|
||||||
@@ -416,6 +416,11 @@ int i915_gem_evict_for_node(struct i915_address_space *vm,
|
|
||||||
* @vm: Address space to cleanse
|
|
||||||
* @ww: An optional struct i915_gem_ww_ctx. If not NULL, i915_gem_evict_vm
|
|
||||||
* will be able to evict vma's locked by the ww as well.
|
|
||||||
+ * @busy_bo: Optional pointer to struct drm_i915_gem_object. If not NULL, then
|
|
||||||
+ * in the event i915_gem_evict_vm() is unable to trylock an object for eviction,
|
|
||||||
+ * then @busy_bo will point to it. -EBUSY is also returned. The caller must drop
|
|
||||||
+ * the vm->mutex, before trying again to acquire the contended lock. The caller
|
|
||||||
+ * also owns a reference to the object.
|
|
||||||
*
|
|
||||||
* This function evicts all vmas from a vm.
|
|
||||||
*
|
|
||||||
@@ -425,7 +430,8 @@ int i915_gem_evict_for_node(struct i915_address_space *vm,
|
|
||||||
* To clarify: This is for freeing up virtual address space, not for freeing
|
|
||||||
* memory in e.g. the shrinker.
|
|
||||||
*/
|
|
||||||
-int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww)
|
|
||||||
+int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww,
|
|
||||||
+ struct drm_i915_gem_object **busy_bo)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
@@ -457,15 +463,22 @@ int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww)
|
|
||||||
* the resv is shared among multiple objects, we still
|
|
||||||
* need the object ref.
|
|
||||||
*/
|
|
||||||
- if (dying_vma(vma) ||
|
|
||||||
+ if (!i915_gem_object_get_rcu(vma->obj) ||
|
|
||||||
(ww && (dma_resv_locking_ctx(vma->obj->base.resv) == &ww->ctx))) {
|
|
||||||
__i915_vma_pin(vma);
|
|
||||||
list_add(&vma->evict_link, &locked_eviction_list);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!i915_gem_object_trylock(vma->obj, ww))
|
|
||||||
+ if (!i915_gem_object_trylock(vma->obj, ww)) {
|
|
||||||
+ if (busy_bo) {
|
|
||||||
+ *busy_bo = vma->obj; /* holds ref */
|
|
||||||
+ ret = -EBUSY;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ i915_gem_object_put(vma->obj);
|
|
||||||
continue;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
__i915_vma_pin(vma);
|
|
||||||
list_add(&vma->evict_link, &eviction_list);
|
|
||||||
@@ -473,25 +486,29 @@ int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww)
|
|
||||||
if (list_empty(&eviction_list) && list_empty(&locked_eviction_list))
|
|
||||||
break;
|
|
||||||
|
|
||||||
- ret = 0;
|
|
||||||
/* Unbind locked objects first, before unlocking the eviction_list */
|
|
||||||
list_for_each_entry_safe(vma, vn, &locked_eviction_list, evict_link) {
|
|
||||||
__i915_vma_unpin(vma);
|
|
||||||
|
|
||||||
- if (ret == 0)
|
|
||||||
+ if (ret == 0) {
|
|
||||||
ret = __i915_vma_unbind(vma);
|
|
||||||
- if (ret != -EINTR) /* "Get me out of here!" */
|
|
||||||
- ret = 0;
|
|
||||||
+ if (ret != -EINTR) /* "Get me out of here!" */
|
|
||||||
+ ret = 0;
|
|
||||||
+ }
|
|
||||||
+ if (!dying_vma(vma))
|
|
||||||
+ i915_gem_object_put(vma->obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
list_for_each_entry_safe(vma, vn, &eviction_list, evict_link) {
|
|
||||||
__i915_vma_unpin(vma);
|
|
||||||
- if (ret == 0)
|
|
||||||
+ if (ret == 0) {
|
|
||||||
ret = __i915_vma_unbind(vma);
|
|
||||||
- if (ret != -EINTR) /* "Get me out of here!" */
|
|
||||||
- ret = 0;
|
|
||||||
+ if (ret != -EINTR) /* "Get me out of here!" */
|
|
||||||
+ ret = 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
i915_gem_object_unlock(vma->obj);
|
|
||||||
+ i915_gem_object_put(vma->obj);
|
|
||||||
}
|
|
||||||
} while (ret == 0);
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/i915/i915_gem_evict.h b/drivers/gpu/drm/i915/i915_gem_evict.h
|
|
||||||
index e593c530f9bd7a..bf0ee0e4fe6088 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/i915_gem_evict.h
|
|
||||||
+++ b/drivers/gpu/drm/i915/i915_gem_evict.h
|
|
||||||
@@ -11,6 +11,7 @@
|
|
||||||
struct drm_mm_node;
|
|
||||||
struct i915_address_space;
|
|
||||||
struct i915_gem_ww_ctx;
|
|
||||||
+struct drm_i915_gem_object;
|
|
||||||
|
|
||||||
int __must_check i915_gem_evict_something(struct i915_address_space *vm,
|
|
||||||
struct i915_gem_ww_ctx *ww,
|
|
||||||
@@ -23,6 +24,7 @@ int __must_check i915_gem_evict_for_node(struct i915_address_space *vm,
|
|
||||||
struct drm_mm_node *node,
|
|
||||||
unsigned int flags);
|
|
||||||
int i915_gem_evict_vm(struct i915_address_space *vm,
|
|
||||||
- struct i915_gem_ww_ctx *ww);
|
|
||||||
+ struct i915_gem_ww_ctx *ww,
|
|
||||||
+ struct drm_i915_gem_object **busy_bo);
|
|
||||||
|
|
||||||
#endif /* __I915_GEM_EVICT_H__ */
|
|
||||||
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
|
|
||||||
index f17c09ead7d778..4d06875de14a14 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/i915_vma.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/i915_vma.c
|
|
||||||
@@ -1569,7 +1569,7 @@ static int __i915_ggtt_pin(struct i915_vma *vma, struct i915_gem_ww_ctx *ww,
|
|
||||||
* locked objects when called from execbuf when pinning
|
|
||||||
* is removed. This would probably regress badly.
|
|
||||||
*/
|
|
||||||
- i915_gem_evict_vm(vm, NULL);
|
|
||||||
+ i915_gem_evict_vm(vm, NULL, NULL);
|
|
||||||
mutex_unlock(&vm->mutex);
|
|
||||||
}
|
|
||||||
} while (1);
|
|
||||||
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
|
|
||||||
index 8c6517d29b8e0c..37068542aafe7f 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
|
|
||||||
@@ -344,7 +344,7 @@ static int igt_evict_vm(void *arg)
|
|
||||||
|
|
||||||
/* Everything is pinned, nothing should happen */
|
|
||||||
mutex_lock(&ggtt->vm.mutex);
|
|
||||||
- err = i915_gem_evict_vm(&ggtt->vm, NULL);
|
|
||||||
+ err = i915_gem_evict_vm(&ggtt->vm, NULL, NULL);
|
|
||||||
mutex_unlock(&ggtt->vm.mutex);
|
|
||||||
if (err) {
|
|
||||||
pr_err("i915_gem_evict_vm on a full GGTT returned err=%d]\n",
|
|
||||||
@@ -356,7 +356,7 @@ static int igt_evict_vm(void *arg)
|
|
||||||
|
|
||||||
for_i915_gem_ww(&ww, err, false) {
|
|
||||||
mutex_lock(&ggtt->vm.mutex);
|
|
||||||
- err = i915_gem_evict_vm(&ggtt->vm, &ww);
|
|
||||||
+ err = i915_gem_evict_vm(&ggtt->vm, &ww, NULL);
|
|
||||||
mutex_unlock(&ggtt->vm.mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user