From nobody Tue May 14 05:33:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1574759052; cv=none; d=zohomail.com; s=zohoarc; b=YLauQaRk4+tG5h8znFQm00FTrkp5VkqVQq5kdwj6as65xhXH1JA8fBRpbfhfrYW0p0eWas644xmax48pRKWXVcBQiaJBUSFPSGKnDIdm0RzFjxAr0nzjqDsfcYHfS5GbDQl9/oQ3JD0bM0izGuKIHm5A+TzsVHtIZkVTuJbJOV0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1574759052; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nvwgnhJ1IncIfrBZs8zzFkY601J2cmeUNpe2I65/og4=; b=gaDIeoX011jq/ybrt8JYtcA3mppXb3bTnPF6cJs3xpeS+tj0I/93cQQ+CjhSvKLngNHESW5qMV2Te27yN9OH80fQjXRHTSTbI1RHP2/oq/jhLzXvWphaacn2fOtB5yvzAHgxcrI2X49BQ/GyEtFNr1kdPVhSRCFs9BAArni1Wx8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1574759052950886.9543770783976; Tue, 26 Nov 2019 01:04:12 -0800 (PST) Received: from localhost ([::1]:51714 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWlX-0005qC-7P for importer@patchew.org; Tue, 26 Nov 2019 04:04:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49957) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWhA-0001xU-TH for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iZWh9-000357-TZ for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:40 -0500 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:39942) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iZWh9-00034n-Mg for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:39 -0500 Received: by mail-wm1-x330.google.com with SMTP id y5so2302168wmi.5 for ; Tue, 26 Nov 2019 00:59:39 -0800 (PST) Received: from donizetti.lan ([2001:b07:6468:f312:5454:a592:5a0a:75c]) by smtp.gmail.com with ESMTPSA id a206sm2349172wmf.15.2019.11.26.00.59.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2019 00:59:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nvwgnhJ1IncIfrBZs8zzFkY601J2cmeUNpe2I65/og4=; b=UDmJ5hD7Mw3c/5cP76KU4Y4Q9DofP43OttL04RviUiu4CO/38uGTMHI3EZwrNEjcVT 9kJjWytHtEmtOASB33CM12nHv6qXcYDoNqfbL7TMCkZlE7ghpbIAVMaLlUcbZmeNIa7w kXbdKtAnCbrTyfEW1NwQ0bSvL9Ku2UIQX6AiFhWIguGsXR5Si8W75xeUloWrufXRi/iU 7Zflvbnqp3+ZNLL2Ggv5jIT8k9yoSAEcSjUsAQ3kYH82mdOL9qPF+1ZqbP1LBpGRuHTs Bne06epEH0Q61X5H2fnCgJohL8p3d/lEEymaJsKRGS4CnWOyL03QogGxEY80pBfpf9bG s/tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=nvwgnhJ1IncIfrBZs8zzFkY601J2cmeUNpe2I65/og4=; b=lMootm9Jg+oV8aHmo9ezFMkmiDOXSZwPfLo0qHeIBFuzWPSZGLRd2P4q7zWJJ/WHt8 5q9MWhOx3EHBYeWur0QfQl3E0REt3kGMdkTxRenm8y5kta+T+QvDz5vtttAXSrnD7Za0 qSwScltAVfYdizhqGK98VcNqvArSCAyEkAhjZdxVMryMPL+mFFg9vzOkRxecGm8fAbNu ZGit/J0SfiJCRBQVwCwZSngcXAORMejzs1vle4o4RsYt2/HvKRl0Oyuv5raNu57sttCX 97cHcuhMdHmpeRml1o7u9kQJS0sP7At5c4Zhgv6iKy2FhOnTw9BFxnKZ8Bibf+U0VjbV hKNA== X-Gm-Message-State: APjAAAXiUgoyWSSQ1ajdD6LFToCHhubvy1AcmYtgEcEyZy/KMfixArCn KzZznRqqvQxQTCUrxDcTCI1esDMC X-Google-Smtp-Source: APXvYqyD89KK5m6343w/mmFiLShWrWaq7bPrzte06rbCcy11S9Dqz9IKuL+QGYXErxIFXOivZVeCMA== X-Received: by 2002:a1c:998f:: with SMTP id b137mr3213514wme.104.1574758778276; Tue, 26 Nov 2019 00:59:38 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 1/5] target/i386: add two missing VMX features for Skylake and CascadeLake Server Date: Tue, 26 Nov 2019 09:59:32 +0100 Message-Id: <20191126085936.1689-2-pbonzini@redhat.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191126085936.1689-1-pbonzini@redhat.com> References: <20191126085936.1689-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::330 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Dr . David Alan Gilbert" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" They are present in client (Core) Skylake but pasted wrong into the server SKUs. Reported-by: Dr. David Alan Gilbert Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 730fb28b67..69f518a21a 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -3006,7 +3006,8 @@ static X86CPUDefinition builtin_x86_defs[] =3D { VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT | VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | VMX_SECONDARY_EXEC_RDRAND_EXITING | VMX_SECONDARY_EXEC_ENABLE= _INVPCID | - VMX_SECONDARY_EXEC_ENABLE_VMFUNC | VMX_SECONDARY_EXEC_SHADOW_= VMCS, + VMX_SECONDARY_EXEC_ENABLE_VMFUNC | VMX_SECONDARY_EXEC_SHADOW_= VMCS | + VMX_SECONDARY_EXEC_RDSEED_EXITING | VMX_SECONDARY_EXEC_ENABLE= _PML, .xlevel =3D 0x80000008, .model_id =3D "Intel Xeon Processor (Skylake)", .versions =3D (X86CPUVersionDefinition[]) { @@ -3131,7 +3132,8 @@ static X86CPUDefinition builtin_x86_defs[] =3D { VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT | VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | VMX_SECONDARY_EXEC_RDRAND_EXITING | VMX_SECONDARY_EXEC_ENABLE= _INVPCID | - VMX_SECONDARY_EXEC_ENABLE_VMFUNC | VMX_SECONDARY_EXEC_SHADOW_= VMCS, + VMX_SECONDARY_EXEC_ENABLE_VMFUNC | VMX_SECONDARY_EXEC_SHADOW_= VMCS | + VMX_SECONDARY_EXEC_RDSEED_EXITING | VMX_SECONDARY_EXEC_ENABLE= _PML, .xlevel =3D 0x80000008, .model_id =3D "Intel Xeon Processor (Cascadelake)", .versions =3D (X86CPUVersionDefinition[]) { --=20 2.21.0 From nobody Tue May 14 05:33:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1574758893; cv=none; d=zohomail.com; s=zohoarc; b=SxoiT+UHUOwz+aSPQpQBp9bc3JpaLTGsrP5A2fYTscoQD0xHYeURdy3pqAxA9apryH685yla+C4wMO2Deynsw9LceGJOrof3fowCfae0VU9+jTJaMZLaUulUI5jA48EnZclII/Wf7+AoOCZ0LKlzCAS2cYr9aGSc2lWzXeUaUG4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1574758893; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nabIz4ztOSzD1wm9cdtMam8zaml9Qa5oErUhfcY/D5U=; b=fjuzfr9+Et/+3kaJy3oLY6gD8WcUkY/1lwWizBenAIxkoy1r1EOxZA+iiwF4iHzQwVnzlLoGdKNffRERPWSZucOCLrAqGZbcoFERSpGMc1kw4u+yp0yxgAeatqkXB1eU7pG5wazjps1bTnXscVOsnWkAjmB9b4M4I6C94Nzt2Bc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1574758893671686.8329423275613; Tue, 26 Nov 2019 01:01:33 -0800 (PST) Received: from localhost ([::1]:51688 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWiy-0003LN-5Z for importer@patchew.org; Tue, 26 Nov 2019 04:01:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49969) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWhC-0001xe-A7 for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iZWhB-00035l-2X for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:42 -0500 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:33918) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iZWhA-00035L-SE for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:41 -0500 Received: by mail-wm1-x342.google.com with SMTP id j18so1857551wmk.1 for ; Tue, 26 Nov 2019 00:59:40 -0800 (PST) Received: from donizetti.lan ([2001:b07:6468:f312:5454:a592:5a0a:75c]) by smtp.gmail.com with ESMTPSA id a206sm2349172wmf.15.2019.11.26.00.59.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2019 00:59:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nabIz4ztOSzD1wm9cdtMam8zaml9Qa5oErUhfcY/D5U=; b=DCL/kT3LClOKw0XwW7Zovx8t6MgGvj8CAjEXStMGMRQgitYewIEYofZhKhtzfzHlMo rzuQ0V21sES9GVvTbQ8pu7sVrpofPGzAsf+7wcfjCORHcyv2UrZVGko5NAFWJrMFQ8Jz zGCRG+/SvYvbbGYGFHGVOeo0QtNo4e+gufMnxBc9PPEqMXXAD5679/JuLYlUnjVVwiOK o63WrNVOWxgBBIsH6LsrZ+cTzUu/3kK90fhavWOnWepGneSUZO7VyfWjXBUTPXahilKO ADsvgBbv5q0u2qBfwsd0eTKE5FWuXRdvP6gTCLjLnilLpeOEIutGfkbjIrCaVG5Uilxm fqUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=nabIz4ztOSzD1wm9cdtMam8zaml9Qa5oErUhfcY/D5U=; b=EKJvrRGj4uySxdbLIRUwKQQhz1BoR96bkURaPucgpVV188oPfy2zU7YFnP8xIsvWS8 Gs3oQvNd/y9stt6TNh3mgi04zFHVwXBLsAR8iNjY0RBAhdOfmZXpu7WaIfobaXcHJ/kL WyaR1wFZf6GkDCU4bVx+VUSVKjWPAL8/sHBKxDJLzz+hQRXWnryrdKDrJl7LQW8+yxsQ YaQ9WjGI07g2zDPHGtmNm2sk02hauiX3rIpkjDmZeacqnK4VziGeJsRFOnFlT6ZCJ9LC O1KaYHFvYo2fn7bzlPdnIiXN4hB/8k3ZcAgw/pNlA1E3elO5R2oSmzd1wMtWx7PKYtAc o0og== X-Gm-Message-State: APjAAAWpcKrYLC/5+UItI1zDiA7UJ5WcezMdSZR7V51QIdPqj3qRpE1r /eQ3tqvseF8pkr+F2dg1F7a7Ncov X-Google-Smtp-Source: APXvYqw0bAWsEiINCBxgaGYX+9pDZJm6axEpImS9Zx+MUE8yHaVqKt6IDW9cLZcyg0MmH+I+7pbtnQ== X-Received: by 2002:a1c:7419:: with SMTP id p25mr3192025wmc.111.1574758779480; Tue, 26 Nov 2019 00:59:39 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 2/5] hvf: non-RAM, non-ROMD memory ranges are now correctly mapped in Date: Tue, 26 Nov 2019 09:59:33 +0100 Message-Id: <20191126085936.1689-3-pbonzini@redhat.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191126085936.1689-1-pbonzini@redhat.com> References: <20191126085936.1689-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::342 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Cameron Esfahani Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Cameron Esfahani If an area is non-RAM and non-ROMD, then remove mappings so accesses will trap and can be emulated. Change hvf_find_overlap_slot() to take a size instead of an end address: it wouldn't return a slot because callers would pass the same address for start and end. Don't always map area as read/write/execute, respect area flags. Signed-off-by: Cameron Esfahani Message-Id: <1d8476c8f86959273fbdf23c86f8b4b611f5e2e1.1574625592.git.dirty@= apple.com> Signed-off-by: Paolo Bonzini --- target/i386/hvf/hvf.c | 50 ++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c index 231732aaf7..0b50cfcbc6 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -107,14 +107,14 @@ static void assert_hvf_ok(hv_return_t ret) } =20 /* Memory slots */ -hvf_slot *hvf_find_overlap_slot(uint64_t start, uint64_t end) +hvf_slot *hvf_find_overlap_slot(uint64_t start, uint64_t size) { hvf_slot *slot; int x; for (x =3D 0; x < hvf_state->num_slots; ++x) { slot =3D &hvf_state->slots[x]; if (slot->size && start < (slot->start + slot->size) && - end > slot->start) { + (start + size) > slot->start) { return slot; } } @@ -129,12 +129,10 @@ struct mac_slot { }; =20 struct mac_slot mac_slots[32]; -#define ALIGN(x, y) (((x) + (y) - 1) & ~((y) - 1)) =20 -static int do_hvf_set_memory(hvf_slot *slot) +static int do_hvf_set_memory(hvf_slot *slot, hv_memory_flags_t flags) { struct mac_slot *macslot; - hv_memory_flags_t flags; hv_return_t ret; =20 macslot =3D &mac_slots[slot->slot_id]; @@ -151,8 +149,6 @@ static int do_hvf_set_memory(hvf_slot *slot) return 0; } =20 - flags =3D HV_MEMORY_READ | HV_MEMORY_WRITE | HV_MEMORY_EXEC; - macslot->present =3D 1; macslot->gpa_start =3D slot->start; macslot->size =3D slot->size; @@ -165,14 +161,24 @@ void hvf_set_phys_mem(MemoryRegionSection *section, b= ool add) { hvf_slot *mem; MemoryRegion *area =3D section->mr; + bool writeable =3D !area->readonly && !area->rom_device; + hv_memory_flags_t flags; =20 if (!memory_region_is_ram(area)) { - return; + if (writeable) { + return; + } else if (!memory_region_is_romd(area)) { + /* + * If the memory device is not in romd_mode, then we actually = want + * to remove the hvf memory slot so all accesses will trap. + */ + add =3D false; + } } =20 mem =3D hvf_find_overlap_slot( section->offset_within_address_space, - section->offset_within_address_space + int128_get64(section->s= ize)); + int128_get64(section->size)); =20 if (mem && add) { if (mem->size =3D=3D int128_get64(section->size) && @@ -186,7 +192,7 @@ void hvf_set_phys_mem(MemoryRegionSection *section, boo= l add) /* Region needs to be reset. set the size to 0 and remap it. */ if (mem) { mem->size =3D 0; - if (do_hvf_set_memory(mem)) { + if (do_hvf_set_memory(mem, 0)) { error_report("Failed to reset overlapping slot"); abort(); } @@ -196,6 +202,13 @@ void hvf_set_phys_mem(MemoryRegionSection *section, bo= ol add) return; } =20 + if (area->readonly || + (!memory_region_is_ram(area) && memory_region_is_romd(area))) { + flags =3D HV_MEMORY_READ | HV_MEMORY_EXEC; + } else { + flags =3D HV_MEMORY_READ | HV_MEMORY_WRITE | HV_MEMORY_EXEC; + } + /* Now make a new slot. */ int x; =20 @@ -216,7 +229,7 @@ void hvf_set_phys_mem(MemoryRegionSection *section, boo= l add) mem->start =3D section->offset_within_address_space; mem->region =3D area; =20 - if (do_hvf_set_memory(mem)) { + if (do_hvf_set_memory(mem, flags)) { error_report("Error registering new memory slot"); abort(); } @@ -345,7 +358,14 @@ static bool ept_emulation_fault(hvf_slot *slot, uint64= _t gpa, uint64_t ept_qual) return false; } =20 - return !slot; + if (!slot) { + return true; + } + if (!memory_region_is_ram(slot->region) && + !(read && memory_region_is_romd(slot->region))) { + return true; + } + return false; } =20 static void hvf_set_dirty_tracking(MemoryRegionSection *section, bool on) @@ -354,7 +374,7 @@ static void hvf_set_dirty_tracking(MemoryRegionSection = *section, bool on) =20 slot =3D hvf_find_overlap_slot( section->offset_within_address_space, - section->offset_within_address_space + int128_get64(section->s= ize)); + int128_get64(section->size)); =20 /* protect region against writes; begin tracking it */ if (on) { @@ -720,7 +740,7 @@ int hvf_vcpu_exec(CPUState *cpu) ret =3D EXCP_INTERRUPT; break; } - /* Need to check if MMIO or unmmaped fault */ + /* Need to check if MMIO or unmapped fault */ case EXIT_REASON_EPT_FAULT: { hvf_slot *slot; @@ -731,7 +751,7 @@ int hvf_vcpu_exec(CPUState *cpu) vmx_set_nmi_blocking(cpu); } =20 - slot =3D hvf_find_overlap_slot(gpa, gpa); + slot =3D hvf_find_overlap_slot(gpa, 1); /* mmio */ if (ept_emulation_fault(slot, gpa, exit_qual)) { struct x86_decode decode; --=20 2.21.0 From nobody Tue May 14 05:33:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1574759064; cv=none; d=zohomail.com; s=zohoarc; b=bMIQoUavmbsLUuV/LnmsQK9pC10ij1E1LVs8SV3RZJrNiuP6VEbsoTzIbUr8BHqq3QNNpGVgLoWp8eQgh9WXIKVeZClFe8iHOPcbneK2w3324jGsQnQSDkOoVaRG9j2XnEuP4eJuEoW7oD/BaTj5q/qon1v7pfLBmYQz7pDsvB4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1574759064; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1aRvALnP398ABUJ0eW1IYZpL7dhiZ4eC2+LSX0yMJZQ=; b=VQ2AkisDyifAQxG8X9XLFLQYzscbwOjLY93vE2KFhJRaoZJBSozUecWUbTguntIikqKaQg8T2nqnDksuhRJ0ozDU6r0gOP8frsDX5Gf2ZPexQLLHy2wWVkBmWBOey/gYXvcarowdk9TTk9aZYgxp2O+C0tfnWsq8BT9mZzCsFBc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1574759064623660.5766807029906; Tue, 26 Nov 2019 01:04:24 -0800 (PST) Received: from localhost ([::1]:51716 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWlj-0005y0-7Q for importer@patchew.org; Tue, 26 Nov 2019 04:04:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49976) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWhD-0001y9-0N for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iZWhB-00036B-W6 for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:42 -0500 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]:56089) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iZWhB-00035t-Ph for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:41 -0500 Received: by mail-wm1-x329.google.com with SMTP id b11so2235874wmb.5 for ; Tue, 26 Nov 2019 00:59:41 -0800 (PST) Received: from donizetti.lan ([2001:b07:6468:f312:5454:a592:5a0a:75c]) by smtp.gmail.com with ESMTPSA id a206sm2349172wmf.15.2019.11.26.00.59.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2019 00:59:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1aRvALnP398ABUJ0eW1IYZpL7dhiZ4eC2+LSX0yMJZQ=; b=AicGphKu2ROG9WcDbclcUt88U0z8njY4tKz7vZTbWp0+2U3aW1idnPK2FdKekqdATA dS/aRrqLBy+CuhXSot16NHj9EAH2BhM+ZGVamkID0fkCuBuvSfOggS3jYIcp/Vj5yKxv L/0sTZv81iSSQ9wyaLGYx5EgA38LBGY+jB/DyfmM6ZsR4NJqRFFIDK/L9FP7S4Qjx5RT 8w50i1E4BvOQ6Gt5fFgg43mBSX94X6AT1SzI6v2KQy93Dx8JBZSqU0iAVw+LIXTsyUWI hyck4ennSbZNgzhxhDRljbpwMZ/77fC0k1mkQHdAMv4M7Cnpa6OkYbeR25KgAu25oxIR L0bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=1aRvALnP398ABUJ0eW1IYZpL7dhiZ4eC2+LSX0yMJZQ=; b=Lzwci0CN8p0O2yAJYi5N0q4bNx0H8sdUgiDRygasiEgWQbzp8EsNwqSNBRaxorrQV0 QGBBDHOx+e5GKGeX9lVW9QyZJ2DrchZPXTLLnlud4stUE+8rHmyAdLAKNC/CVchvh9mV OyhNUkdKmGNJlFrQAD0hzJHoE85QPdmAGQ8QS+YLqIMVMmq2X00FZKCxYZ6L4UMJ2vf4 yRK/Sj7I7Ek+k9P0+fZNmP0Xn7LTcXFLORce5/P++x1oPmCNYdGLBuNdC2rClDeEXc4T UFYbp/w5gw1ESyCgIXiM+uADw/I4pBn7y5P5+x6mzq5N7bEsbnBS5vL2YdKzJ4yA/lNd dQyw== X-Gm-Message-State: APjAAAVFe0GKZvw4lVV8i914/2hFnhCyPG2XwNlpPG4YrKHIGCpjTyj+ vYArCmbUQqeuUDQ+HLyVzfwiZXPI X-Google-Smtp-Source: APXvYqywPdeM6xF72r7EfA6KXx6SwMmiMLJfImeX5uTHG56XfJJXYLHgdjf94SagETfhlbzv/vZyMg== X-Received: by 2002:a1c:448a:: with SMTP id r132mr3204942wma.130.1574758780461; Tue, 26 Nov 2019 00:59:40 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 3/5] hvf: remove TSC synchronization code because it isn't fully complete Date: Tue, 26 Nov 2019 09:59:34 +0100 Message-Id: <20191126085936.1689-4-pbonzini@redhat.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191126085936.1689-1-pbonzini@redhat.com> References: <20191126085936.1689-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::329 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Cameron Esfahani Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Cameron Esfahani The existing code in QEMU's HVF support to attempt to synchronize TSC across multiple cores is not sufficient. TSC value on other cores can go backwards. Until implementation is fixed, remove calls to hv_vm_sync_tsc(). Pass through TSC to guest OS. Signed-off-by: Cameron Esfahani Message-Id: <44c4afd2301b8bf99682b229b0796d84edd6d66f.1574625592.git.dirty@= apple.com> Signed-off-by: Paolo Bonzini --- target/i386/hvf/hvf.c | 3 +-- target/i386/hvf/x86_emu.c | 3 --- target/i386/hvf/x86hvf.c | 4 ---- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c index 0b50cfcbc6..90fd50acfc 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -518,7 +518,6 @@ void hvf_reset_vcpu(CPUState *cpu) { wreg(cpu->hvf_fd, HV_X86_R8 + i, 0x0); } =20 - hv_vm_sync_tsc(0); hv_vcpu_invalidate_tlb(cpu->hvf_fd); hv_vcpu_flush(cpu->hvf_fd); } @@ -612,7 +611,7 @@ int hvf_init_vcpu(CPUState *cpu) hv_vcpu_enable_native_msr(cpu->hvf_fd, MSR_GSBASE, 1); hv_vcpu_enable_native_msr(cpu->hvf_fd, MSR_KERNELGSBASE, 1); hv_vcpu_enable_native_msr(cpu->hvf_fd, MSR_TSC_AUX, 1); - /*hv_vcpu_enable_native_msr(cpu->hvf_fd, MSR_IA32_TSC, 1);*/ + hv_vcpu_enable_native_msr(cpu->hvf_fd, MSR_IA32_TSC, 1); hv_vcpu_enable_native_msr(cpu->hvf_fd, MSR_IA32_SYSENTER_CS, 1); hv_vcpu_enable_native_msr(cpu->hvf_fd, MSR_IA32_SYSENTER_EIP, 1); hv_vcpu_enable_native_msr(cpu->hvf_fd, MSR_IA32_SYSENTER_ESP, 1); diff --git a/target/i386/hvf/x86_emu.c b/target/i386/hvf/x86_emu.c index 1b04bd7e94..3df767209d 100644 --- a/target/i386/hvf/x86_emu.c +++ b/target/i386/hvf/x86_emu.c @@ -772,9 +772,6 @@ void simulate_wrmsr(struct CPUState *cpu) =20 switch (msr) { case MSR_IA32_TSC: - /* if (!osx_is_sierra()) - wvmcs(cpu->hvf_fd, VMCS_TSC_OFFSET, data - rdtscp()); - hv_vm_sync_tsc(data);*/ break; case MSR_IA32_APICBASE: cpu_set_apic_base(X86_CPU(cpu)->apic_state, data); diff --git a/target/i386/hvf/x86hvf.c b/target/i386/hvf/x86hvf.c index e0ea02d631..1485b95776 100644 --- a/target/i386/hvf/x86hvf.c +++ b/target/i386/hvf/x86hvf.c @@ -152,10 +152,6 @@ void hvf_put_msrs(CPUState *cpu_state) =20 hv_vcpu_write_msr(cpu_state->hvf_fd, MSR_GSBASE, env->segs[R_GS].base); hv_vcpu_write_msr(cpu_state->hvf_fd, MSR_FSBASE, env->segs[R_FS].base); - - /* if (!osx_is_sierra()) - wvmcs(cpu_state->hvf_fd, VMCS_TSC_OFFSET, env->tsc - rdtscp());*/ - hv_vm_sync_tsc(env->tsc); } =20 =20 --=20 2.21.0 From nobody Tue May 14 05:33:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1574759173; cv=none; d=zohomail.com; s=zohoarc; b=kfhWcss+2eV0OHKrvXI8ZM2ZrzVcI2IxS8zED9UTZ1USEC4xrFREV0FEHXr0lkAap5EybK7YWNuBP+ibqJbgLrd43LSX8KKPoo92am2XvjS4RmM4kdQb5EubZYz1cM05FDYSe0nx1uzD4CPXEjf5O2ZeiA2BH0joqfkMwV9ST7c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1574759173; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zlo3vNzRp6z3EanSOjFlpKBYoVA1NruT4oaby34LW/4=; b=g90Etc5UxGe3iG8idXfg5ZH137jpslzQZbprzzLs3YC86BPpbHIQdG9+d820dAT70CE7cV3MR7m3r/TOHviRDdGdMrJ/NROA9WJ8P5OMDW7ytJYcK9Rt+29ok9mkioUbVcQBdlJKyUfEonZFczUQYUedUo61ccMfqAecHfzhMJs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1574759173079977.9196391575529; Tue, 26 Nov 2019 01:06:13 -0800 (PST) Received: from localhost ([::1]:51743 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWnU-00089q-1G for importer@patchew.org; Tue, 26 Nov 2019 04:06:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49992) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWhE-00020a-JU for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iZWhD-00036o-3z for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:44 -0500 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]:53113) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iZWhC-00036J-Td for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:43 -0500 Received: by mail-wm1-x32c.google.com with SMTP id l1so2260867wme.2 for ; Tue, 26 Nov 2019 00:59:42 -0800 (PST) Received: from donizetti.lan ([2001:b07:6468:f312:5454:a592:5a0a:75c]) by smtp.gmail.com with ESMTPSA id a206sm2349172wmf.15.2019.11.26.00.59.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2019 00:59:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zlo3vNzRp6z3EanSOjFlpKBYoVA1NruT4oaby34LW/4=; b=Hwg2t4mjO6rQWRpXbKIiGXrdqAWE9AiuTGQIAxJ4hosbtJJMyn7IksJ+M0KUuOSiQZ 2EKLsmEzhCKNERZ1vkOqkzs/9XJlV5PFcPOxKZOjxwxMOp02/Ki3+ZnvUsyWC77Ppj6U aG+NrAOaRllldv+iX9M29in3wVYaq19OLRybyjo6IDWyu0uz+PfIKhoUQRrFkNXYIVMA CwxsktD3oCLqBqtYYYwYKm3XM30necPyafJsXg+cShZQAq86AkuQn337BDweo5KwWyrr wcWMa0THznRYINgsUo7IoDphV5SmSJaFTM2TSVGU6HfjGmx3PfW9HIAHTURoQGFexZ7P 1HhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=zlo3vNzRp6z3EanSOjFlpKBYoVA1NruT4oaby34LW/4=; b=e8O1wL+7razx6LnH4qZGLFbmHj+n0dc5qDECpywGJ5g0p7jybjMV4mSxfxXLXUmGag NKdhDRhHDkXg55a+mk5WjDOW9O6Vjv7tGvweCWWMbKJRMQlSUA8feKzjsbTwOh5iSIe5 LmjVWWRcjNUi/mpHX2zJYq20drQft5XXt226GlRh7vPMRSonyIJSnLKBoFe3H9KFG8RX zWyo3TK7/LVUvnr3cL1dXV/kSvALxI/9o8O1EeP50YUP7lTok6smwEtL/3MRkumQ5+/q AnOGnMrdx1VCWVCeWdIqtNs65IhJGHKhV59ghF5rXt7EhP3Pb9HOEffDW5Xk+qT5D3n8 AYNA== X-Gm-Message-State: APjAAAVj7MyYXyb5nbyUX0VsnneBBXlMVcS7tKje4PlpTAsIO6i4BbKB 8xuj07irmKuqz04t3TcnLFqOJGfs X-Google-Smtp-Source: APXvYqxr4uNF/SUvr7CkSDiUTOm4K3dEY415kMZVxZpPbmruyHAkmsreLx2bOLcWqtskGZOi4ep1Vg== X-Received: by 2002:a7b:c357:: with SMTP id l23mr3099268wmj.152.1574758781462; Tue, 26 Nov 2019 00:59:41 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 4/5] hvf: correctly handle REX prefix in relation to legacy prefixes Date: Tue, 26 Nov 2019 09:59:35 +0100 Message-Id: <20191126085936.1689-5-pbonzini@redhat.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191126085936.1689-1-pbonzini@redhat.com> References: <20191126085936.1689-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::32c X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Cameron Esfahani Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Cameron Esfahani In real x86 processors, the REX prefix must come after legacy prefixes. REX before legacy is ignored. Update the HVF emulation code to properly handle this. Fix some spelling errors in constants. Fix some decoder table initialization issues found by Coverity. Signed-off-by: Cameron Esfahani Message-Id: Signed-off-by: Paolo Bonzini --- target/i386/hvf/x86_decode.c | 64 ++++++++++++++++++++---------------- target/i386/hvf/x86_decode.h | 20 +++++------ 2 files changed, 46 insertions(+), 38 deletions(-) diff --git a/target/i386/hvf/x86_decode.c b/target/i386/hvf/x86_decode.c index 822fa1866e..77c346605f 100644 --- a/target/i386/hvf/x86_decode.c +++ b/target/i386/hvf/x86_decode.c @@ -122,7 +122,8 @@ static void decode_rax(CPUX86State *env, struct x86_dec= ode *decode, { op->type =3D X86_VAR_REG; op->reg =3D R_EAX; - op->ptr =3D get_reg_ref(env, op->reg, decode->rex.rex, 0, + /* Since reg is always AX, REX prefix has no impact. */ + op->ptr =3D get_reg_ref(env, op->reg, false, 0, decode->operand_size); } =20 @@ -1687,40 +1688,37 @@ calc_addr: } } =20 -target_ulong get_reg_ref(CPUX86State *env, int reg, int rex, int is_extend= ed, - int size) +target_ulong get_reg_ref(CPUX86State *env, int reg, int rex_present, + int is_extended, int size) { target_ulong ptr =3D 0; - int which =3D 0; =20 if (is_extended) { reg |=3D R_R8; } =20 - switch (size) { case 1: - if (is_extended || reg < 4 || rex) { - which =3D 1; + if (is_extended || reg < 4 || rex_present) { ptr =3D (target_ulong)&RL(env, reg); } else { - which =3D 2; ptr =3D (target_ulong)&RH(env, reg - 4); } break; default: - which =3D 3; ptr =3D (target_ulong)&RRX(env, reg); break; } return ptr; } =20 -target_ulong get_reg_val(CPUX86State *env, int reg, int rex, int is_extend= ed, - int size) +target_ulong get_reg_val(CPUX86State *env, int reg, int rex_present, + int is_extended, int size) { target_ulong val =3D 0; - memcpy(&val, (void *)get_reg_ref(env, reg, rex, is_extended, size), si= ze); + memcpy(&val, + (void *)get_reg_ref(env, reg, rex_present, is_extended, size), + size); return val; } =20 @@ -1853,28 +1851,38 @@ void calc_modrm_operand(CPUX86State *env, struct x8= 6_decode *decode, static void decode_prefix(CPUX86State *env, struct x86_decode *decode) { while (1) { + /* + * REX prefix must come after legacy prefixes. + * REX before legacy is ignored. + * Clear rex to simulate this. + */ uint8_t byte =3D decode_byte(env, decode); switch (byte) { case PREFIX_LOCK: decode->lock =3D byte; + decode->rex.rex =3D 0; break; case PREFIX_REPN: case PREFIX_REP: decode->rep =3D byte; + decode->rex.rex =3D 0; break; - case PREFIX_CS_SEG_OVEERIDE: - case PREFIX_SS_SEG_OVEERIDE: - case PREFIX_DS_SEG_OVEERIDE: - case PREFIX_ES_SEG_OVEERIDE: - case PREFIX_FS_SEG_OVEERIDE: - case PREFIX_GS_SEG_OVEERIDE: + case PREFIX_CS_SEG_OVERRIDE: + case PREFIX_SS_SEG_OVERRIDE: + case PREFIX_DS_SEG_OVERRIDE: + case PREFIX_ES_SEG_OVERRIDE: + case PREFIX_FS_SEG_OVERRIDE: + case PREFIX_GS_SEG_OVERRIDE: decode->segment_override =3D byte; + decode->rex.rex =3D 0; break; case PREFIX_OP_SIZE_OVERRIDE: decode->op_size_override =3D byte; + decode->rex.rex =3D 0; break; case PREFIX_ADDR_SIZE_OVERRIDE: decode->addr_size_override =3D byte; + decode->rex.rex =3D 0; break; case PREFIX_REX ... (PREFIX_REX + 0xf): if (x86_is_long_mode(env_cpu(env))) { @@ -2111,14 +2119,14 @@ void init_decoder() { int i; =20 - for (i =3D 0; i < ARRAY_SIZE(_decode_tbl2); i++) { - memcpy(_decode_tbl1, &invl_inst, sizeof(invl_inst)); + for (i =3D 0; i < ARRAY_SIZE(_decode_tbl1); i++) { + memcpy(&_decode_tbl1[i], &invl_inst, sizeof(invl_inst)); } for (i =3D 0; i < ARRAY_SIZE(_decode_tbl2); i++) { - memcpy(_decode_tbl2, &invl_inst, sizeof(invl_inst)); + memcpy(&_decode_tbl2[i], &invl_inst, sizeof(invl_inst)); } for (i =3D 0; i < ARRAY_SIZE(_decode_tbl3); i++) { - memcpy(_decode_tbl3, &invl_inst, sizeof(invl_inst_x87)); + memcpy(&_decode_tbl3[i], &invl_inst_x87, sizeof(invl_inst_x87)); =20 } for (i =3D 0; i < ARRAY_SIZE(_1op_inst); i++) { @@ -2167,22 +2175,22 @@ target_ulong decode_linear_addr(CPUX86State *env, s= truct x86_decode *decode, target_ulong addr, X86Seg seg) { switch (decode->segment_override) { - case PREFIX_CS_SEG_OVEERIDE: + case PREFIX_CS_SEG_OVERRIDE: seg =3D R_CS; break; - case PREFIX_SS_SEG_OVEERIDE: + case PREFIX_SS_SEG_OVERRIDE: seg =3D R_SS; break; - case PREFIX_DS_SEG_OVEERIDE: + case PREFIX_DS_SEG_OVERRIDE: seg =3D R_DS; break; - case PREFIX_ES_SEG_OVEERIDE: + case PREFIX_ES_SEG_OVERRIDE: seg =3D R_ES; break; - case PREFIX_FS_SEG_OVEERIDE: + case PREFIX_FS_SEG_OVERRIDE: seg =3D R_FS; break; - case PREFIX_GS_SEG_OVEERIDE: + case PREFIX_GS_SEG_OVERRIDE: seg =3D R_GS; break; default: diff --git a/target/i386/hvf/x86_decode.h b/target/i386/hvf/x86_decode.h index bc574a7a44..ef7960113f 100644 --- a/target/i386/hvf/x86_decode.h +++ b/target/i386/hvf/x86_decode.h @@ -27,12 +27,12 @@ typedef enum x86_prefix { PREFIX_REPN =3D 0xf2, PREFIX_REP =3D 0xf3, /* group 2 */ - PREFIX_CS_SEG_OVEERIDE =3D 0x2e, - PREFIX_SS_SEG_OVEERIDE =3D 0x36, - PREFIX_DS_SEG_OVEERIDE =3D 0x3e, - PREFIX_ES_SEG_OVEERIDE =3D 0x26, - PREFIX_FS_SEG_OVEERIDE =3D 0x64, - PREFIX_GS_SEG_OVEERIDE =3D 0x65, + PREFIX_CS_SEG_OVERRIDE =3D 0x2e, + PREFIX_SS_SEG_OVERRIDE =3D 0x36, + PREFIX_DS_SEG_OVERRIDE =3D 0x3e, + PREFIX_ES_SEG_OVERRIDE =3D 0x26, + PREFIX_FS_SEG_OVERRIDE =3D 0x64, + PREFIX_GS_SEG_OVERRIDE =3D 0x65, /* group 3 */ PREFIX_OP_SIZE_OVERRIDE =3D 0x66, /* group 4 */ @@ -303,10 +303,10 @@ uint64_t sign(uint64_t val, int size); =20 uint32_t decode_instruction(CPUX86State *env, struct x86_decode *decode); =20 -target_ulong get_reg_ref(CPUX86State *env, int reg, int rex, int is_extend= ed, - int size); -target_ulong get_reg_val(CPUX86State *env, int reg, int rex, int is_extend= ed, - int size); +target_ulong get_reg_ref(CPUX86State *env, int reg, int rex_present, + int is_extended, int size); +target_ulong get_reg_val(CPUX86State *env, int reg, int rex_present, + int is_extended, int size); void calc_modrm_operand(CPUX86State *env, struct x86_decode *decode, struct x86_decode_op *op); target_ulong decode_linear_addr(CPUX86State *env, struct x86_decode *decod= e, --=20 2.21.0 From nobody Tue May 14 05:33:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1574758902; cv=none; d=zohomail.com; s=zohoarc; b=LHpiJjQd8eeiKl7T89LI+K6eSUno9zYIsi6GvAq5DYAI+tLfhsLN/3VZykZySIKd2LEuTep33Ex1Fh+6GUU8Ie8emHrF/Va1x6ltRGwpO06earSa83tbXGZCwFvNhtbzb8hdZDiGM/cuEIC8jUnakMBhU2iDnUAObXQB3c27YgQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1574758902; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=dmZ/MWljO9/7PIDmw2I60lQlo/07TU1Uam/BYY6gYeg=; b=Yz4bkUQHLl2p4C16Kh8HAEJ+q+r8dVdp/xPRubaNOIHdic2MLK4vv6Dx7FrFYe8zca2zcA73qaitscrRupvVUJxIKmffWI0yE61XEEtsVGjaBPI2rdT8UQ+fF7PUS1WjrIUIWMPwd9/hTWMn3Xgj6xJBpUush/jFAqujxPf+G6U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1574758902258423.07817200843533; Tue, 26 Nov 2019 01:01:42 -0800 (PST) Received: from localhost ([::1]:51690 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWj6-0003Wh-QF for importer@patchew.org; Tue, 26 Nov 2019 04:01:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49997) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iZWhF-00021c-6O for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iZWhE-00037A-0A for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:45 -0500 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]:39936) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iZWhD-00036v-QG for qemu-devel@nongnu.org; Tue, 26 Nov 2019 03:59:43 -0500 Received: by mail-wm1-x329.google.com with SMTP id y5so2302448wmi.5 for ; Tue, 26 Nov 2019 00:59:43 -0800 (PST) Received: from donizetti.lan ([2001:b07:6468:f312:5454:a592:5a0a:75c]) by smtp.gmail.com with ESMTPSA id a206sm2349172wmf.15.2019.11.26.00.59.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2019 00:59:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dmZ/MWljO9/7PIDmw2I60lQlo/07TU1Uam/BYY6gYeg=; b=uetKLGrR5RS0NrkqselYiyB93a6LmFbTNUuLi2ihlRE/fXsY3RJVAZzBq+asYQhVfM c0/3sJ6hrcMaRe3a5SrjpqC3JophyTtdmp+vQfh3qgo5YxsgffhJd9+N+7HvwQlzhLGe mpNgMM6jSKsyUKet+SnVG1VTLZwHhU/iyfsV/6eavl6XoJzhOAsIuOexq8gcAajrqfHT vMa96s9Df+OJFB2ooytLCXrA2aaedToPHfR89OBSp+ALe2AcRaXMbeVsHhbPdmIswFE2 pQBrOuSTfndLWbRzL7qtP8aULrQE5nJ+4+lILvE+6K6iUpstKzjSocClCcJpGlmiWTQj z4TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=dmZ/MWljO9/7PIDmw2I60lQlo/07TU1Uam/BYY6gYeg=; b=JBlXPh/zx2dX+hgM0E0vStk8XhckD+SndPf1iWoirc/133VDifSryMHZ2Cosz72jkh /1vZ4+13HEK1Tbj9vOXe7PzrrgKDOQ3gERfU0mOYEe3H2sQd6IMgeknM3kvw/ZLLRFCo EfkdB3J5TzOPY05Hk3lHQ1i5p4ulEFfd6ScfwzcxrS4BgfraW1oKW6D2UbUy8E1SUeL/ 8wF3iaRlmUxay7uBMd69lshrplmTc34lrnEItvS8XWj9cA7R2ijBgnSJRwgxlTBOkS8p A/loE5cUBpux8x2n1mTlunk0zHn0g6Kl/iHmJIMM3Aju7MXEx5yU5pzjQpEkQ0VgVxGs JEWA== X-Gm-Message-State: APjAAAXoF5Y9lykvgSFZcuqo4DKLGV9KpqR3zqPdH8i9MG3q6U6YyRaG TU4O/GPWnUaMgQSraWYqoLW4pZbO X-Google-Smtp-Source: APXvYqz1Pv06jyMP/q3aDbJRMixlvx00Q7s7eVLUOUWSZjrIfG/Ph3iisxGtYkZG6CXm/9U0B0uteQ== X-Received: by 2002:a05:600c:2919:: with SMTP id i25mr3025663wmd.158.1574758782613; Tue, 26 Nov 2019 00:59:42 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 5/5] hvf: more accurately match SDM when setting CR0 and PDPTE registers Date: Tue, 26 Nov 2019 09:59:36 +0100 Message-Id: <20191126085936.1689-6-pbonzini@redhat.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191126085936.1689-1-pbonzini@redhat.com> References: <20191126085936.1689-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::329 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Cameron Esfahani Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Cameron Esfahani More accurately match SDM when setting CR0 and PDPTE registers. Clear PDPTE registers when resetting vcpus. Signed-off-by: Cameron Esfahani Message-Id: <464adb39c8699fb8331d8ad6016fc3e2eff53dbc.1574625592.git.dirty@= apple.com> Signed-off-by: Paolo Bonzini --- target/i386/hvf/hvf.c | 8 ++++++++ target/i386/hvf/vmx.h | 18 ++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c index 90fd50acfc..784e67d77e 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -441,12 +441,20 @@ static MemoryListener hvf_memory_listener =3D { }; =20 void hvf_reset_vcpu(CPUState *cpu) { + uint64_t pdpte[4] =3D {0, 0, 0, 0}; + int i; =20 /* TODO: this shouldn't be needed; there is already a call to * cpu_synchronize_all_post_reset in vl.c */ wvmcs(cpu->hvf_fd, VMCS_ENTRY_CTLS, 0); wvmcs(cpu->hvf_fd, VMCS_GUEST_IA32_EFER, 0); + + /* Initialize PDPTE */ + for (i =3D 0; i < 4; i++) { + wvmcs(cpu->hvf_fd, VMCS_GUEST_PDPTE0 + i * 2, pdpte[i]); + } + macvm_set_cr0(cpu->hvf_fd, 0x60000010); =20 wvmcs(cpu->hvf_fd, VMCS_CR4_MASK, CR4_VMXE_MASK); diff --git a/target/i386/hvf/vmx.h b/target/i386/hvf/vmx.h index 5dc52ecad6..eb8894cd58 100644 --- a/target/i386/hvf/vmx.h +++ b/target/i386/hvf/vmx.h @@ -121,6 +121,7 @@ static inline void macvm_set_cr0(hv_vcpuid_t vcpu, uint= 64_t cr0) uint64_t pdpte[4] =3D {0, 0, 0, 0}; uint64_t efer =3D rvmcs(vcpu, VMCS_GUEST_IA32_EFER); uint64_t old_cr0 =3D rvmcs(vcpu, VMCS_GUEST_CR0); + uint64_t mask =3D CR0_PG | CR0_CD | CR0_NW | CR0_NE | CR0_ET; =20 if ((cr0 & CR0_PG) && (rvmcs(vcpu, VMCS_GUEST_CR4) & CR4_PAE) && !(efer & MSR_EFER_LME)) { @@ -128,18 +129,15 @@ static inline void macvm_set_cr0(hv_vcpuid_t vcpu, ui= nt64_t cr0) rvmcs(vcpu, VMCS_GUEST_CR3) & ~0x1f, MEMTXATTRS_UNSPECIFIED, (uint8_t *)pdpte, 32, 0); + /* Only set PDPTE when appropriate. */ + for (i =3D 0; i < 4; i++) { + wvmcs(vcpu, VMCS_GUEST_PDPTE0 + i * 2, pdpte[i]); + } } =20 - for (i =3D 0; i < 4; i++) { - wvmcs(vcpu, VMCS_GUEST_PDPTE0 + i * 2, pdpte[i]); - } - - wvmcs(vcpu, VMCS_CR0_MASK, CR0_CD | CR0_NE | CR0_PG); + wvmcs(vcpu, VMCS_CR0_MASK, mask); wvmcs(vcpu, VMCS_CR0_SHADOW, cr0); =20 - cr0 &=3D ~CR0_CD; - wvmcs(vcpu, VMCS_GUEST_CR0, cr0 | CR0_NE | CR0_ET); - if (efer & MSR_EFER_LME) { if (!(old_cr0 & CR0_PG) && (cr0 & CR0_PG)) { enter_long_mode(vcpu, cr0, efer); @@ -149,6 +147,10 @@ static inline void macvm_set_cr0(hv_vcpuid_t vcpu, uin= t64_t cr0) } } =20 + /* Filter new CR0 after we are finished examining it above. */ + cr0 =3D (cr0 & ~(mask & ~CR0_PG)); + wvmcs(vcpu, VMCS_GUEST_CR0, cr0 | CR0_NE | CR0_ET); + hv_vcpu_invalidate_tlb(vcpu); hv_vcpu_flush(vcpu); } --=20 2.21.0