[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 00/16] x86/cpu: Cleanup for NX adjustments



Le 26/01/2026 à 18:56, Andrew Cooper a écrit :
> I was hoping this to be a patch or two, but it got out of hand...
>
> https://gitlab.com/xen-project/hardware/xen-staging/-/pipelines/2287078891
> https://gitlab.com/xen-project/hardware/xen-staging/-/commits/andrew/nx
>
> The branch has one extra patch to fake up the firmware settings being set to
> Gitlab CI, not included in this series.
>
> Julien: This ought to suitable to rebase your cleanup on to.  In the end, I
> did the AMD adjustment mostly because I needed it to test the correctness of
> the prior cleanup.
>
> The final 4 patches are tangential cleanup which I've kept out of the prior
> work in case we wish to backport it.  Everything prior is relevant to
> untangling, and mostly for the benefit of the AMD side.
>
> The early patches are hopefully non-controvertial.  Later patches are a little
> more RFC, and in need of further testing.
>
> Andrew Cooper (16):
>    x86/cpu: Fix boot time cache flushing
>    x86/cpu: Drop cpuid_level adjustment from generic_identify()
>    x86/intel: Drop the paddr_bits workaround for P4 Nocona/Prescott CPUs
>    x86/cpu: Fold generic_identify() into its single caller
>    x86/cpu: Move per-CPU actions out of the vendor early_init() hook
>    x86/cpu: Rework the vendor early_init() hooks to be __init
>    x86/cpu: Call the vendor early_init() hook in early_cpu_init()
>    xen/sysctl: Drop XEN_SYSCTL_get_cpu_levelling_caps
>    x86/intel: Always check MSR_MISC_ENABLE on all CPUs
>    x86/amd: Always probe and configure the masking MSRs
>    x86/amd: Fix re-activation of TopoExt on Fam15h CPUs
>    x86/amd: Probe for NX support and re-activate if possible
>    x86/cpu: Drop NOISY_CAPS
>    x86/cpu: Drop default_init() and default_cpu
>    x86/cpu: Clean up use of LCAP_* constants
>    x86/cpuid: Drop the include of public/sysctl.h
>
>   CHANGELOG.md                          |   2 +
>   tools/flask/policy/modules/dom0.te    |   1 -
>   tools/include/xenguest.h              |   1 -
>   tools/libs/guest/xg_cpuid_x86.c       |  14 ---
>   xen/arch/x86/boot/head.S              |   1 -
>   xen/arch/x86/boot/trampoline.S        |  29 +++---
>   xen/arch/x86/boot/wakeup.S            |  27 +++---
>   xen/arch/x86/cpu/amd.c                | 107 ++++++++++++++------
>   xen/arch/x86/cpu/common.c             | 135 +++++++++++++-------------
>   xen/arch/x86/cpu/cpu.h                |   7 +-
>   xen/arch/x86/cpu/hygon.c              |   2 +
>   xen/arch/x86/cpu/intel.c              |  74 ++++----------
>   xen/arch/x86/domain.c                 |  10 +-
>   xen/arch/x86/flushtlb.c               |  19 ++--
>   xen/arch/x86/include/asm/cpuid.h      |  17 ++--
>   xen/arch/x86/include/asm/hvm/hvm.h    |   2 +
>   xen/arch/x86/include/asm/hvm/vlapic.h |   2 +
>   xen/arch/x86/include/asm/hvm/vpt.h    |   2 +
>   xen/arch/x86/include/asm/trampoline.h |   7 +-
>   xen/arch/x86/sysctl.c                 |   6 --
>   xen/include/public/sysctl.h           |  22 +----
>   xen/xsm/flask/hooks.c                 |   4 -
>   xen/xsm/flask/policy/access_vectors   |   2 -
>   23 files changed, 238 insertions(+), 255 deletions(-)
>

Tested on a Intel machine with "DEP" disabled, and "Require NX support"
disabled, I get a pagefault in hpet code

> (XEN) Xen version 4.22-unstable (tsnake41@(none)) (gcc (Alpine 15.2.0) 
> 15.2.0) debug=y Tue Jan 27 12:06:46 CET 2026
> (XEN) Latest ChangeSet: Mon Jan 26 17:53:45 2026 +0000 git:6491616ddd
> (XEN) build-id: 035024497a4cadebf9e5a2ded61f63ac
> (XEN) re-enabled NX (Execute Disable) protection
> (XEN) CPU Vendor: Intel, Family 6 (0x6), Model 60 (0x3c), Stepping 3 (raw 
> 000306c3)
> (XEN) BSP microcode revision: 0x0000001a
> (XEN) microcode: Bad data in container
> (XEN) Microcode: Parse error -22
> (XEN) Bootloader: EFI
> (XEN) Command line: dom0_mem=2G iommu=verbose,debug console=com1 
> com1=115200,8n1 guest_loglvl=all loglvl=all
> (XEN) Xen image load base address: 0xc3a00000
> (XEN) Video information:
> (XEN)  VGA is graphics mode 1920x1080, 32 bpp
> (XEN)  VBE/DDC methods: none; EDID transfer time: 0 seconds
> (XEN) Disc information:
> (XEN)  Found 0 MBR signatures
> (XEN)  Found 1 EDD information structures
> (XEN) EFI RAM map:
> (XEN)  [0000000000000000, 000000000004efff] (usable)
> (XEN)  [000000000004f000, 000000000004ffff] (reserved)
> (XEN)  [0000000000050000, 000000000009dfff] (usable)
> (XEN)  [000000000009e000, 000000000009ffff] (reserved)
> (XEN)  [0000000000100000, 00000000c60c3fff] (usable)
> (XEN)  [00000000c60c4000, 00000000c60cafff] (ACPI NVS)
> (XEN)  [00000000c60cb000, 00000000c650ffff] (usable)
> (XEN)  [00000000c6510000, 00000000c68c6fff] (reserved)
> (XEN)  [00000000c68c7000, 00000000d9867fff] (usable)
> (XEN)  [00000000d9868000, 00000000d98f1fff] (reserved)
> (XEN)  [00000000d98f2000, 00000000d991bfff] (ACPI data)
> (XEN)  [00000000d991c000, 00000000d9a06fff] (ACPI NVS)
> (XEN)  [00000000d9a07000, 00000000d9ffefff] (reserved)
> (XEN)  [00000000d9fff000, 00000000d9ffffff] (usable)
> (XEN)  [00000000dc000000, 00000000de1fffff] (reserved)
> (XEN)  [00000000f8000000, 00000000fbffffff] (reserved)
> (XEN)  [00000000fec00000, 00000000fec00fff] (reserved)
> (XEN)  [00000000fed00000, 00000000fed03fff] (reserved)
> (XEN)  [00000000fed1c000, 00000000fed1ffff] (reserved)
> (XEN)  [00000000fee00000, 00000000fee00fff] (reserved)
> (XEN)  [00000000ff000000, 00000000ffffffff] (reserved)
> (XEN)  [0000000100000000, 000000041fdfffff] (usable)
> (XEN) ACPI: RSDP D9901298, 0024 (r2 HPQOEM)
> (XEN) ACPI: XSDT D99012BC, 00B4 (r1 HPQOEM SLIC-BPC 20170509 AMI     10013)
> (XEN) ACPI: FACP D9910018, 010C (r5 HPQOEM SLIC-BPC 20170509 AMI     10013)
> (XEN) ACPI: DSDT D99021D0, DE46 (r2 HPQOEM SLIC-BPC        1 INTL 20091112)
> (XEN) ACPI: FACS D9A05080, 0040
> (XEN) ACPI: APIC D9910128, 0072 (r3 HPQOEM SLIC-BPC 20170509 AMI     10013)
> (XEN) ACPI: FPDT D99101A0, 0044 (r1 HPQOEM SLIC-BPC 20170509 AMI     10013)
> (XEN) ACPI: SSDT D99101E8, 0539 (r1  PmRef  Cpu0Ist     3000 INTL 20120711)
> (XEN) ACPI: SSDT D9910728, 0AD8 (r1  PmRef    CpuPm     3000 INTL 20120711)
> (XEN) ACPI: SSDT D9911200, 01C7 (r1  PmRef LakeTiny     3000 INTL 20120711)
> (XEN) ACPI: MCFG D99113C8, 003C (r1 HPQOEM SLIC-BPC 20170509 MSFT       97)
> (XEN) ACPI: HPET D9911408, 0038 (r1 HPQOEM SLIC-BPC 20170509 AMI.        5)
> (XEN) ACPI: SSDT D9911440, 036D (r1 SataRe SataTabl     1000 INTL 20120711)
> (XEN) ACPI: SSDT D99117B0, 348C (r1 SaSsdt  SaSsdt      3000 INTL 20091112)
> (XEN) ACPI: SSDT D9914C40, 668F (r1 COMPAQ      WMI        1 MSFT  3000001)
> (XEN) ACPI: SLIC D991B2D0, 0176 (r1 HPQOEM SLIC-BPC        1             0)
> (XEN) ACPI: MSDM D991B448, 0055 (r3 HPQOEM SLIC-BPC 20170509 HPQ     10013)
> (XEN) ACPI: ASF! D991B4A0, 00A5 (r32 INTEL       HCG        1 TFSM    F4240)
> (XEN) ACPI: TCPA D991B548, 0032 (r2 APTIO4  NAPAASF        1 MSFT  1000013)
> (XEN) ACPI: BGRT D991B580, 0038 (r0 HPQOEM SLIC-BPC 20170509 AMI     10013)
> (XEN) ACPI: DMAR D991B5B8, 00B8 (r1 INTEL      HSW         1 INTL        1)
> (XEN) ACPI: WPBT D9901370, 0034 (r1 ABT-NT ABT-WPBT        1 ABTW 20120402)
> (XEN) System RAM: 16274MB (16664864kB)
> (XEN) No NUMA configuration found
> (XEN) Faking a node at 0000000000000000-000000041fe00000
> (XEN) Domain heap initialised
> (XEN) SMBIOS 2.7 present.
> (XEN) DMI 2.7 present.
> (XEN) PCI: MCFG configuration 0: base f8000000 segment 0000 buses 00 - 3f
> (XEN) PCI: MCFG area at f8000000 reserved in E820
> (XEN) PCI: Using MCFG for segment 0000 bus 00-3f
> (XEN) [VT-D]Host address width 39
> (XEN) [VT-D]found ACPI_DMAR_DRHD:
> (XEN) [VT-D]  dmaru->address = fed90000
> (XEN) [VT-D]drhd->address = fed90000 iommu->reg = ffff82c000209000
> (XEN) [VT-D]cap = c0000020660462 ecap = f0101a
> (XEN) [VT-D] endpoint: 0000:00:02.0
> (XEN) [VT-D]found ACPI_DMAR_DRHD:
> (XEN) [VT-D]  dmaru->address = fed91000
> (XEN) [VT-D]drhd->address = fed91000 iommu->reg = ffff82c00020b000
> (XEN) [VT-D]cap = d2008020660462 ecap = f010da
> (XEN) [VT-D] IOAPIC: 0000:f0:1f.0
> (XEN) [VT-D] MSI HPET: 0000:f0:0f.0
> (XEN) [VT-D]  flags: INCLUDE_ALL
> (XEN) [VT-D]found ACPI_DMAR_RMRR:
> (XEN) [VT-D] endpoint: 0000:00:1d.0
> (XEN) [VT-D] endpoint: 0000:00:1a.0
> (XEN) [VT-D] endpoint: 0000:00:14.0
> (XEN) [VT-D]drivers/passthrough/vtd/dmar.c:610:  RMRR: [d9888000,d9894fff]
> (XEN) [VT-D]found ACPI_DMAR_RMRR:
> (XEN) [VT-D] endpoint: 0000:00:02.0
> (XEN) [VT-D]drivers/passthrough/vtd/dmar.c:610:  RMRR: [dc000000,de1fffff]
> (XEN) Using APIC driver default
> (XEN) ACPI: PM-Timer IO Port: 0x408 (24 bits)
> (XEN) ACPI: v5 SLEEP INFO: control[0:0], status[0:0]
> (XEN) ACPI: SLEEP INFO: pm1x_cnt[1:404,1:0], pm1x_evt[1:400,1:0]
> (XEN) ACPI: 32/64X FACS address mismatch in FADT - d9a05080/0000000000000000, 
> using 32
> (XEN) ACPI:             wakeup_vec[d9a0508c], vec_size[20]
> (XEN) ACPI: Local APIC address 0xfee00000
> (XEN) ACPI: IOAPIC (id[0x08] address[0xfec00000] gsi_base[0])
> (XEN) IOAPIC[0]: apic_id 8, version 32, address 0xfec00000, GSI 0-23
> (XEN) ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
> (XEN) ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
> (XEN) ACPI: IRQ0 used by override.
> (XEN) ACPI: IRQ2 used by override.
> (XEN) ACPI: IRQ9 used by override.
> (XEN) ACPI: HPET id: 0x8086a701 base: 0xfed00000
> (XEN) ACPI: BGRT: invalidating v1 image at 0xcbc74018
> (XEN) Using ACPI (MADT) for SMP configuration information
> (XEN) SMP: Allowing 4 CPUs (0 hotplug CPUs)
> (XEN) IRQ limits: 24 GSI, 808 MSI/MSI-X
> (XEN) [VT-D]drivers/passthrough/vtd/qinval.c:520: QI: using 256-entry ring(s)
> (XEN) Switched to APIC driver x2apic_mixed
> (XEN) arch/x86/i8259.c:384: PIC aliasing mask: 1c
> (XEN) CPU0: 800 ... 3400 MHz
> (XEN) xstate: size: 0x340 and states: 0x7
> (XEN) arch/x86/cpu/mcheck/mce_intel.c:773: MCA Capability: firstbank 0, 
> extended MCE MSR 0, BCAST, CMCI
> (XEN) CPU0: Intel machine check reporting enabled
> (XEN) Speculative mitigation facilities:
> (XEN)   Hardware hints:
> (XEN)   Hardware features:
> (XEN)   Compiled-in support: INDIRECT_THUNK RETURN_THUNK SHADOW_PAGING 
> HARDEN_ARRAY HARDEN_BRANCH HARDEN_GUEST_ACCESS HARDEN_LOCK
> (XEN)   Xen settings: BTI-Thunk: RETPOLINE, SPEC_CTRL: No, Other: 
> BRANCH_HARDEN
> (XEN)   L1TF: believed vulnerable, maxphysaddr L1D 46, CPUID 39, Safe address 
> 8000000000
> (XEN)   Support for HVM VMs: RSB EAGER_FPU
> (XEN)   Support for PV VMs: EAGER_FPU
> (XEN)   XPTI (64-bit PV only): Dom0 enabled, DomU enabled (with PCID)
> (XEN)   PV L1TF shadowing: Dom0 disabled, DomU enabled
> (XEN) Using scheduler: SMP Credit Scheduler rev2 (credit2)
> (XEN) Initializing Credit2 scheduler
> (XEN)  load_precision_shift: 18
> (XEN)  load_window_shift: 30
> (XEN)  underload_balance_tolerance: 0
> (XEN)  overload_balance_tolerance: -3
> (XEN)  runqueues arrangement: socket
> (XEN)  cap enforcement granularity: 10ms
> (XEN) load tracking window length 1073741824 ns
> (XEN) Using IDT event delivery
> (XEN) arch/x86/time.c:495: PIT aliasing mask: 10
> (XEN) ----[ Xen-4.22-unstable  x86_64  debug=y  Not tainted ]----
> (XEN) CPU:    0
> (XEN) RIP:    e008:[<ffff82d04064a6f8>] hpet_setup+0x6b/0x120
> (XEN) RFLAGS: 0000000000010082   CONTEXT: hypervisor
> (XEN) rax: ffff82cffff3a000   rbx: 0000000000000000   rcx: 000000000000000c
> (XEN) rdx: ffff82fffffffffe   rsi: 8000000000000000   rdi: ffff8300c421fff8
> (XEN) rbp: ffff82d04065fd28   rsp: ffff82d04065fd18   r8:  0000000000000046
> (XEN) r9:  ffff82d04092e180   r10: ffff82d04092e188   r11: 0000000000000010
> (XEN) r12: ffff82d04069c0c0   r13: ffff82d040666530   r14: ffff82d04092f0a8
> (XEN) r15: ffff82d04069c0d8   cr0: 000000008005003b   cr4: 00000000001506e0
> (XEN) cr3: 00000000c4222000   cr2: ffff82cffff3a000
> (XEN) fsb: 0000000000000000   gsb: 0000000000000000   gss: 0000000000000000
> (XEN) ds: 0000   es: 0000   fs: 0000   gs: 0000   ss: 0000   cs: e008
> (XEN) Xen code around <ffff82d04064a6f8> (hpet_setup+0x6b/0x120):
> (XEN)  00 a0 f3 ff cf 82 ff ff <8b> 10 84 d2 0f 84 80 00 00 00 a1 04 a0 f3 ff 
> cf
> (XEN) Xen stack trace from rsp=ffff82d04065fd18:
> (XEN)    ffff82d040666530 ffff82d04092f0a8 ffff82d04065fd48 ffff82d04064963a
> (XEN)    ffff82d040666530 ffff82d04092f0a8 ffff82d04065fd78 ffff82d0406497c9
> (XEN)    0000000000000010 ffff82d04069c0c0 ffff82d040666530 ffff82d04092f0a8
> (XEN)    ffff82d04065fdb8 ffff82d040649fef 0000000000000000 ffff82d04092f1a0
> (XEN)    ffff82d04092f1a0 ffff82d040808208 0000000000000002 ffff83041a9b8000
> (XEN)    ffff82d04065ff00 ffff82d0406449d2 ffff82d04069b020 000000041a9c8000
> (XEN)    ffff82d04069b050 0000000100000000 ffff82d04093ff08 0000000001102000
> (XEN)    ffff82d040696014 ffff82d04069aff0 000000041dfe5400 0000000000100000
> (XEN)    0000000000000000 0000050000000000 ffffffff00000163 000000000041fe00
> (XEN)    0000000000000019 0000000601000000 00000001ffffffff ffff82d04065ff08
> (XEN)    ffff82d04069b020 0000000000000000 0000000000000000 0000000000000000
> (XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
> (XEN)    0000000000000000 0000000000000000 0000000800000000 000000010000006e
> (XEN)    0000000000000003 00000000000002f8 ffff82d040927000 ffff82d040927000
> (XEN)    ffffffffffffffff 0000000000000000 00000000cbcffe58 0000000000000000
> (XEN)    00000000c4068acb 00000000c29e2620 0000000000000000 0000000000000000
> (XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
> (XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
> (XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
> (XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
> (XEN) Xen call trace:
> (XEN)    [<ffff82d04064a6f8>] R hpet_setup+0x6b/0x120
> (XEN)    [<ffff82d04064963a>] F arch/x86/time.#init_hpet+0x30/0x119
> (XEN)    [<ffff82d0406497c9>] F arch/x86/time.#try_platform_timer+0x17/0x12b
> (XEN)    [<ffff82d040649fef>] F early_time_init+0x1e7/0x2ec
> (XEN)    [<ffff82d0406449d2>] F __start_xen+0x1f2e/0x25b1
> (XEN)
> (XEN) Pagetable walk from ffff82cffff3a000:
> (XEN)  L4[0x105] = 00000000c4221063 ffffffffffffffff
> (XEN)  L3[0x13f] = 00000000c421f063 ffffffffffffffff
> (XEN)  L2[0x1ff] = 00000000c432b063 ffffffffffffffff
> (XEN)  L1[0x13a] = 80000000fed00173 ffffffffffffffff
> (XEN)
> (XEN) ****************************************
> (XEN) Panic on CPU 0:
> (XEN) FATAL PAGE FAULT
> (XEN) [error_code=0009]
> (XEN) Faulting linear address: ffff82cffff3a000
> (XEN) ****************************************
> (XEN)
> (XEN) Reboot in five seconds...
> (XEN) Resetting with ACPI MEMORY or I/O RESET_REG.

With "require NX", I don't get anything on the serial console, and VGA
gives a black screen after loading Xen. I'm not sure what's going on in
this case.

If "DEP" is enabled in firmware, there are no issues so far.

Teddy


--
 | Vates

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech





 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.