Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP2:Update
xen
xsa435-0-29.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xsa435-0-29.patch of Package xen
From 441b1b2a50ea3656954d75e06d42c96d619ea0fc Mon Sep 17 00:00:00 2001 From: Andrew Cooper <andrew.cooper3@citrix.com> Date: Mon, 3 Apr 2023 20:03:57 +0100 Subject: x86/emul: Switch x86_emulate_ctxt to cpu_policy As with struct domain, retain cpuid as a valid alias for local code clarity. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> # Commit 768846690d64bc730c1a1123e8de3af731bb2eb3 # Date 2023-04-19 11:02:47 +0200 # Author Jan Beulich <jbeulich@suse.com> # Committer Jan Beulich <jbeulich@suse.com> x86: fix build with old gcc after CPU policy changes Old gcc won't cope with initializers involving unnamed struct/union fields. Fixes: 441b1b2a50ea ("x86/emul: Switch x86_emulate_ctxt to cpu_policy") Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> --- a/tools/fuzz/x86_instruction_emulator/fuzz-emul.c +++ b/tools/fuzz/x86_instruction_emulator/fuzz-emul.c @@ -896,12 +896,14 @@ int LLVMFuzzerTestOneInput(const uint8_t struct x86_emulate_ctxt ctxt = { .data = &state, .regs = &input.regs, - .cpuid = &cp, .addr_size = 8 * sizeof(void *), .sp_size = 8 * sizeof(void *), }; int rc; + /* Not part of the initializer, for old gcc to cope. */ + ctxt.cpu_policy = &cp; + /* Reset all global state variables */ memset(&input, 0, sizeof(input)); --- a/tools/tests/x86_emulator/test_x86_emulator.c +++ b/tools/tests/x86_emulator/test_x86_emulator.c @@ -750,7 +750,7 @@ int main(int argc, char **argv) ctxt.regs = ®s; ctxt.force_writeback = 0; - ctxt.cpuid = &cp; + ctxt.cpu_policy = &cp; ctxt.lma = sizeof(void *) == 8; ctxt.addr_size = 8 * sizeof(void *); ctxt.sp_size = 8 * sizeof(void *); --- a/tools/tests/x86_emulator/x86-emulate.c +++ b/tools/tests/x86_emulator/x86-emulate.c @@ -32,7 +32,7 @@ #define put_stub(stb) ((stb).addr = 0) uint32_t mxcsr_mask = 0x0000ffbf; -struct cpuid_policy cp; +struct cpu_policy cp; static char fpu_save_area[4096] __attribute__((__aligned__((64)))); static bool use_xsave; --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2665,7 +2665,7 @@ int hvm_emulate_one_mmio(unsigned long m void hvm_emulate_one_vm_event(enum emul_kind kind, unsigned int trapnr, unsigned int errcode) { - struct hvm_emulate_ctxt ctx = {{ 0 }}; + struct hvm_emulate_ctxt ctx = {}; int rc; hvm_emulate_init_once(&ctx, NULL, guest_cpu_user_regs()); @@ -2740,7 +2740,7 @@ void hvm_emulate_init_once( hvmemul_ctxt->validate = validate; hvmemul_ctxt->ctxt.regs = regs; - hvmemul_ctxt->ctxt.cpuid = curr->domain->arch.cpuid; + hvmemul_ctxt->ctxt.cpu_policy = curr->domain->arch.cpu_policy; hvmemul_ctxt->ctxt.force_writeback = true; } --- a/xen/arch/x86/mm/shadow/hvm.c +++ b/xen/arch/x86/mm/shadow/hvm.c @@ -313,7 +313,7 @@ const struct x86_emulate_ops *shadow_ini memset(sh_ctxt, 0, sizeof(*sh_ctxt)); sh_ctxt->ctxt.regs = regs; - sh_ctxt->ctxt.cpuid = curr->domain->arch.cpuid; + sh_ctxt->ctxt.cpu_policy = curr->domain->arch.cpu_policy; sh_ctxt->ctxt.lma = hvm_long_mode_active(curr); /* Segment cache initialisation. Primed with CS. */ --- a/xen/arch/x86/pv/emul-priv-op.c +++ b/xen/arch/x86/pv/emul-priv-op.c @@ -1203,12 +1203,14 @@ int pv_emulate_privileged_op(struct cpu_ struct domain *currd = curr->domain; struct priv_op_ctxt ctxt = { .ctxt.regs = regs, - .ctxt.cpuid = currd->arch.cpuid, .ctxt.lma = !is_pv_32bit_domain(currd), }; int rc; unsigned int eflags, ar; + /* Not part of the initializer, for old gcc to cope. */ + ctxt.ctxt.cpu_policy = currd->arch.cpu_policy; + if ( !pv_emul_read_descriptor(regs->cs, curr, &ctxt.cs.base, &ctxt.cs.limit, &ar, 1) || !(ar & _SEGMENT_S) || --- a/xen/arch/x86/pv/ro-page-fault.c +++ b/xen/arch/x86/pv/ro-page-fault.c @@ -348,7 +348,6 @@ int pv_ro_page_fault(unsigned long addr, unsigned int addr_size = is_pv_32bit_domain(currd) ? 32 : BITS_PER_LONG; struct x86_emulate_ctxt ctxt = { .regs = regs, - .cpuid = currd->arch.cpuid, .addr_size = addr_size, .sp_size = addr_size, .lma = addr_size > 32, @@ -356,6 +356,9 @@ int pv_ro_page_fault(unsigned long addr, int rc; bool mmio_ro; + /* Not part of the initializer, for old gcc to cope. */ + ctxt.cpu_policy = currd->arch.cpu_policy; + /* Attempt to read the PTE that maps the VA being accessed. */ pte = guest_get_eff_l1e(addr); --- a/xen/arch/x86/x86_emulate/x86_emulate.h +++ b/xen/arch/x86/x86_emulate/x86_emulate.h @@ -550,8 +550,11 @@ struct x86_emulate_ctxt * Input-only state: */ - /* CPUID Policy for the domain. */ - const struct cpuid_policy *cpuid; + /* CPU policy for the domain. Allow aliases for local code clarity. */ + union { + struct cpu_policy *cpu_policy; + struct cpu_policy *cpuid; + }; /* Set this if writes may have side effects. */ bool force_writeback;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor