From nobody Mon May 20 15:26:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1689431373; cv=none; d=zohomail.com; s=zohoarc; b=WdZk5Pt5zzZ7ny2kc1EgWSv13yP2OIPIf0wZW5M8l6usQ6OwV7+Q370mThUn5QUFg+uxwpWC9IU+um3jTuelYRTHBrlWlVvlgzueQHoTvTwYy8AuJpOvFUT+RYgBnA7kx46a1bLDUiumbtwG84KlFzgZ9NtbdS26/pp0Xr8j1FM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1689431373; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=RQjz2TX0XB9TTP2cUF5BpTdR4/BZ7DC7wVHQTAjt1FE=; b=j4C5qVuomCuh8d6wssw+sRYfTnOXkQ4KwsVTILJSeIMxnFs9y/JogLDUC5MOSFVBEd3ayLY3EKe9WQz7fXlQMB13P56BPMbHh0BoiS5Zs0D9p//xDqnheg+wtXArcTg8n1KnjWoR3qy/Qu24QYFR4goeuEUeAqT5mNPJ7414k7U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1689431373709889.3103480811726; Sat, 15 Jul 2023 07:29:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qKgGK-0008N1-2Q; Sat, 15 Jul 2023 10:28:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qKgGI-0008Mj-Ov for qemu-devel@nongnu.org; Sat, 15 Jul 2023 10:28:42 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qKgGG-0006q3-Uh for qemu-devel@nongnu.org; Sat, 15 Jul 2023 10:28:42 -0400 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-55c85b5321dso1686026a12.3 for ; Sat, 15 Jul 2023 07:28:40 -0700 (PDT) Received: from localhost.localdomain ([2001:ee0:4fb3:b780:7c3c:1099:10bd:2e8b]) by smtp.googlemail.com with ESMTPSA id 95-20020a17090a0fe800b00263f6687690sm2741396pjz.18.2023.07.15.07.28.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Jul 2023 07:28:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689431318; x=1692023318; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=RQjz2TX0XB9TTP2cUF5BpTdR4/BZ7DC7wVHQTAjt1FE=; b=Y7z+zHo3DsbBR0gcaiJl0vvuUpX8gZ9PhL5j4k9t3M3xpzXqNGwzeYOfrMBPL0530A IhQNm5rr2/Jkek07QEaFlRjB7mYlUE88dNHq96LvryOY9lOzTF5isVJiJZIrIRqUpTei dtIja63X136lkdkdIQhXMmJ4fQVt/XfS3P7pzHleLlJagK2yTwDrBVKO84DOT9Ivkfbj uN7imcXM4wmnmhO+eNGlWyIrnCc5xyIftxnQdTo2n+7F/LB4sC1uRADAXYgFel958ERT DJbspm5ssY4jr5zoA/c9acisKy5sssZYAQzu0xM/Qx4SwYFKU+aOFE5eZNrgX8FQOqUo 8B3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689431318; x=1692023318; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RQjz2TX0XB9TTP2cUF5BpTdR4/BZ7DC7wVHQTAjt1FE=; b=hvgii7axhNziBouuLPCn3jo7TwGxPvZ2PV6hjl+YBaRGqBw7EoNlok++yVoYzLo7yZ i9mvCwxwTRvDOBIWBbBDO2VaSaj5Z+3kFydtmMbfRwtjk1urwiZGGT1Nnqr+yGxIShPa l+nXmPCjZXPx+3eKN1/bMUl4MKrvh4YIkub7U1gOD3+j14s5CKvWoS+Wc5XBsgFP6EA+ tXVjijG4BGEK2GswVaJnejBb/GCvwDyB9DwT1Ny5sqxEyr8zxG+WBkaTILhNuQ0L8DIX oLDZR9Tfjyn9zk4rmaLw7cETJ4FZ18ZnPq0Ea78UVY9Dn4gkvtbsYh5PWwnF5QA3hlfR FETw== X-Gm-Message-State: ABy/qLbzJO3Kj7ps/36W22yZxFtpBWSee9kin2H1vf984gMaGXyZthRj GTJZZn+dfGbJzGoJ4aq7WyKGZTIzcRsV+w== X-Google-Smtp-Source: APBJJlE+jUrFxpAcTa7AfhU7P2UR6Z2UAnHxp+iJwHUDIFwCLkrAnxkv7S17tKNB8FIC1wopMWyabQ== X-Received: by 2002:a17:90a:4109:b0:262:cb1c:a782 with SMTP id u9-20020a17090a410900b00262cb1ca782mr6239760pjf.37.1689431318411; Sat, 15 Jul 2023 07:28:38 -0700 (PDT) From: Bui Quang Minh To: qemu-devel@nongnu.org Cc: David Woodhouse , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S . Tsirkin" , Marcel Apfelbaum , Igor Mammedov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Bui Quang Minh Subject: [PATCH v5 0/5] Support x2APIC mode with TCG accelerator Date: Sat, 15 Jul 2023 21:28:15 +0700 Message-Id: <20230715142820.37120-1-minhquangbui99@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=minhquangbui99@gmail.com; helo=mail-pg1-x52a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1689431375580100009 Content-Type: text/plain; charset="utf-8" Hi everyone, This series implements x2APIC mode in userspace local APIC and the RDMSR/WRMSR helper to access x2APIC registers in x2APIC mode. Intel iommu and AMD iommu are adjusted to support x2APIC interrupt remapping. With this series, we can now boot Linux kernel into x2APIC mode with TCG accelerator using either Intel or AMD iommu. Testing to boot my own built Linux 6.3.0-rc2, the kernel successfully boot with enabled x2APIC and can enumerate CPU with APIC ID 257 Using Intel IOMMU qemu/build/qemu-system-x86_64 \ -smp 2,maxcpus=3D260 \ -cpu qemu64,x2apic=3Don \ -machine q35 \ -device intel-iommu,intremap=3Don,eim=3Don \ -device qemu64-x86_64-cpu,x2apic=3Don,core-id=3D257,socket-id=3D0,thread-= id=3D0 \ -m 2G \ -kernel $KERNEL_DIR \ -append "nokaslr console=3DttyS0 root=3D/dev/sda earlyprintk=3Dserial net= .ifnames=3D0" \ -drive file=3D$IMAGE_DIR,format=3Draw \ -nographic \ -s Using AMD IOMMU qemu/build/qemu-system-x86_64 \ -smp 2,maxcpus=3D260 \ -cpu qemu64,x2apic=3Don \ -machine q35 \ -device amd-iommu,intremap=3Don,xtsup=3Don \ -device qemu64-x86_64-cpu,x2apic=3Don,core-id=3D257,socket-id=3D0,thread-= id=3D0 \ -m 2G \ -kernel $KERNEL_DIR \ -append "nokaslr console=3DttyS0 root=3D/dev/sda earlyprintk=3Dserial net= .ifnames=3D0" \ -drive file=3D$IMAGE_DIR,format=3Draw \ -nographic \ -s Testing the emulated userspace APIC with kvm-unit-tests, disable test device with this patch diff --git a/lib/x86/fwcfg.c b/lib/x86/fwcfg.c index 1734afb..f56fe1c 100644 --- a/lib/x86/fwcfg.c +++ b/lib/x86/fwcfg.c @@ -27,6 +27,7 @@ static void read_cfg_override(void) =20 if ((str =3D getenv("TEST_DEVICE"))) no_test_device =3D !atol(str); + no_test_device =3D true; =20 if ((str =3D getenv("MEMLIMIT"))) fw_override[FW_CFG_MAX_RAM] =3D atol(str) * 1024 * 1024; ~ env QEMU=3D/home/minh/Desktop/oss/qemu/build/qemu-system-x86_64 ACCEL=3Dt= cg \ ./run_tests.sh -v -g apic=20 TESTNAME=3Dapic-split TIMEOUT=3D90s ACCEL=3Dtcg ./x86/run x86/apic.flat -sm= p 2 -cpu qemu64,+x2apic,+tsc-deadline -machine kernel_irqchip=3Dsplit FAIL apic-split (54 tests, 8 unexpected failures, 1 skipped) TESTNAME=3Dioapic-split TIMEOUT=3D90s ACCEL=3Dtcg ./x86/run x86/ioapic.flat= -smp 1 -cpu qemu64 -machine kernel_irqchip=3Dsplit PASS ioapic-split (19 tests) TESTNAME=3Dx2apic TIMEOUT=3D30 ACCEL=3Dtcg ./x86/run x86/apic.flat -smp 2 -= cpu qemu64,+x2apic,+tsc-deadline FAIL x2apic (54 tests, 8 unexpected failures, 1 skipped) TESTNAME=3Dxapic TIMEOUT=3D60 ACCEL=3Dtcg ./x86/run x86/apic.fla= t -smp 2 -cpu qemu64,-x2apic,+tsc-deadline -machine pit=3Doff FAIL xapic (43 tests, 6 unexpected failures, 2 skipped) FAIL: apic_disable: *0xfee00030: 50014 FAIL: apic_disable: *0xfee00080: f0 FAIL: apic_disable: *0xfee00030: 50014 FAIL: apic_disable: *0xfee00080: f0=20 FAIL: apicbase: relocate apic These errors are because we don't disable MMIO region when switching to x2APIC and don't support relocate MMIO region yet. This is a problem because, MMIO region is the same for all CPUs, in order to support these we need to figure out how to allocate and manage different MMIO regions for each CPUs. This can be an improvement in the future. FAIL: nmi-after-sti FAIL: multiple nmi These errors are in the way we handle CPU_INTERRUPT_NMI in core TCG. FAIL: TMCCT should stay at zero This error is related to APIC timer which should be addressed in separate patch. Version 5 changes, - Patch 3: + Rebase to master and fix conflict - Patch 5: + Create a helper function to get amdvi extended feature register instead of storing it in AMDVIState Version 4 changes, - Patch 5: + Instead of replacing IVHD type 0x10 with type 0x11, export both types for backward compatibility with old guest operating system + Flip the xtsup feature check condition in amdvi_int_remap_ga for readability Version 3 changes, - Patch 2: + Allow APIC ID > 255 only when x2APIC feature is supported on CPU + Make physical destination mode IPI which has destination id 0xffffffff a broadcast to xAPIC CPUs + Make cluster address 0xf in cluster model of xAPIC logical destination mode a broadcast to all clusters + Create new extended_log_dest to store APIC_LDR information in x2APIC instead of extending log_dest for backward compatibility in vmstate Version 2 changes, - Add support for APIC ID larger than 255 - Adjust AMD iommu for x2APIC suuport - Reorganize and split patch 1,2 into patch 1,2,3 in version 2 Thanks, Quang Minh. Bui Quang Minh (5): i386/tcg: implement x2APIC registers MSR access apic: add support for x2APIC mode apic, i386/tcg: add x2apic transitions intel_iommu: allow Extended Interrupt Mode when using userspace APIC amd_iommu: report x2APIC support to the operating system hw/i386/acpi-build.c | 127 +++++---- hw/i386/amd_iommu.c | 30 +- hw/i386/amd_iommu.h | 16 +- hw/i386/intel_iommu.c | 11 - hw/i386/x86.c | 8 +- hw/intc/apic.c | 395 +++++++++++++++++++++------ hw/intc/apic_common.c | 16 +- hw/intc/trace-events | 4 +- include/hw/i386/apic.h | 6 +- include/hw/i386/apic_internal.h | 7 +- target/i386/cpu-sysemu.c | 18 +- target/i386/cpu.c | 8 +- target/i386/cpu.h | 9 + target/i386/tcg/sysemu/misc_helper.c | 31 +++ 14 files changed, 510 insertions(+), 176 deletions(-) --=20 2.25.1