Skip to content

Commit

Permalink
patch: include static call upstream patch
Browse files Browse the repository at this point in the history
  • Loading branch information
azenla committed Dec 26, 2024
1 parent 35c6ba5 commit 6245f10
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 37 deletions.
40 changes: 19 additions & 21 deletions config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,37 +31,35 @@ patches:
- '6.10'
- '6.11'
- patch: openpax-6.10-20240913112548.patch
series:
- '6.10'
series: '6.10'
flavors:
- zone-openpax
- patch: openpax-6.11.2-20241009165538.patch
series:
- '6.11'
series: '6.11'
flavors:
- zone-openpax
- patch: 0001-x86-topology-Tolerate-lack-of-APIC-when-booting-as-X_01.patch
lower: '6.10'
upper: '6.12.4'
- patch: 0001-x86-topology-Tolerate-lack-of-APIC-when-booting-as-X_01.patch
lower: '6.10'
upper: '6.12.4'
- patch: 0001-x86-topology-Tolerate-lack-of-APIC-when-booting-as-X_02.patch
lower: '6.12.5'
- patch: 9pfs-xen-hotplug-1.patch
lower: '6.3'
upper: '6.11.10'
- patch: 9pfs-xen-hotplug-2.patch
lower: '6.3'
upper: '6.11.10'
- patch: 9pfs-xen-hotplug-1.patch
series:
- '6.12'
upper: '6.12.1'
- patch: 9pfs-xen-hotplug-2.patch
series:
- '6.12'
upper: '6.12.1'
- patches:
- 9pfs-xen-hotplug-1.patch
- 9pfs-xen-hotplug-2.patch
any:
- series: '6.6'
upper: '6.6.63'
- series: '6.12'
upper: '6.12.1'
- patch: 0001-x86-static-call-Remove-early_boot_irqs_disabled-check.patch
any:
- series: '5.15'
lower: '5.15.175'
- series: '6.1'
lower: '6.1.121'
- series: '6.6'
lower: '6.6.67'
- lower: '6.12.6'
images:
- target: kernelsrc
name: kernel-src
Expand Down
27 changes: 12 additions & 15 deletions hack/build/patchlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from packaging.version import parse

from matrix import CONFIG
from util import matches_constraints
from util import matches_constraints, maybe

if len(sys.argv) != 3:
print("Usage: patchlist <KERNEL_VERSION> <KERNEL_FLAVOR>")
Expand All @@ -19,15 +19,11 @@
apply_patches = []


def maybe(m: dict[any, any], k: any) -> any:
if k in m:
return m[k]
else:
return None


for patch in patches:
file_name = patch["patch"]
if "patch" in patch:
file_names = [patch["patch"]]
else:
file_names = patch["patches"]
order = maybe(patch, "order")

if order is None:
Expand All @@ -36,12 +32,13 @@ def maybe(m: dict[any, any], k: any) -> any:
apply = matches_constraints(target_version, kernel_flavor, patch)

if apply:
apply_patches.append(
{
"patch": file_name,
"order": order,
}
)
for file_name in file_names:
apply_patches.append(
{
"patch": file_name,
"order": order,
}
)

apply_patches.sort(key=lambda p: p["order"])

Expand Down
10 changes: 9 additions & 1 deletion hack/build/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,15 @@ def maybe(m: dict[str, any], k: str, default_value: any = None) -> any:
else:
return default_value


def matches_constraints(
version: Version, flavor: str, constraints: dict[str, any], is_current_release=None
) -> bool:
if "any" in constraints:
for constraint in constraints["any"]:
if matches_constraints(version, flavor, constraint, is_current_release=is_current_release):
return True
return False

major_minor_series = "%s.%s" % (version.major, version.minor)
major_series = str(version.major)

Expand Down Expand Up @@ -65,6 +70,9 @@ def matches_constraints(
if version < lower or version > upper:
applies = False

if type(only_series) is str:
only_series = [only_series]

if only_series is not None and (
(major_minor_series not in only_series) and (major_series not in only_series)
):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
From a813654c781e10d906c5259d7b13bcd5237f05e6 Mon Sep 17 00:00:00 2001
From: Andrew Cooper <[email protected]>
Date: Thu, 26 Dec 2024 14:58:49 -0500
Subject: [PATCH] x86/static-call: Remove early_boot_irqs_disabled check to fix
Xen PVH dom0

__static_call_update_early() has a check for early_boot_irqs_disabled, but
is used before early_boot_irqs_disabled is set up in start_kernel().

Xen PV has always special cased early_boot_irqs_disabled, but Xen PVH does
not and falls over the BUG when booting as dom0.

It is very suspect that early_boot_irqs_disabled starts as 0, becomes 1 for
a time, then becomes 0 again, but as this needs backporting to fix a
breakage in a security fix, dropping the BUG_ON() is the far safer option.

Fixes: 0ef8047b737d ("x86/static-call: provide a way to do very early static-call updates")
Reported-by: Alex Zenla <[email protected]>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219620
Suggested-by: Peter Zijlstra <[email protected]>
Tested-by: Alex Zenla <[email protected]>
Signed-off-by: Andrew Cooper <[email protected]>
---
arch/x86/kernel/static_call.c | 1 -
1 file changed, 1 deletion(-)

diff --git a/arch/x86/kernel/static_call.c b/arch/x86/kernel/static_call.c
index 9eed0c144dad..9e51242ed125 100644
--- a/arch/x86/kernel/static_call.c
+++ b/arch/x86/kernel/static_call.c
@@ -175,7 +175,6 @@ EXPORT_SYMBOL_GPL(arch_static_call_transform);
noinstr void __static_call_update_early(void *tramp, void *func)
{
BUG_ON(system_state != SYSTEM_BOOTING);
- BUG_ON(!early_boot_irqs_disabled);
BUG_ON(static_call_initialized);
__text_gen_insn(tramp, JMP32_INSN_OPCODE, tramp, func, JMP32_INSN_SIZE);
sync_core();
--
2.47.1

0 comments on commit 6245f10

Please sign in to comment.