From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 65901CD98CE for ; Sat, 13 Jun 2026 00:20:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:Cc:To: From:Subject:Message-ID:Mime-Version:Date:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=WmyzcKWN5sYZUTeYCc9CQUvIpkkw/cT2wO4LeW7OYQY=; b=1jDEmXfy3l3LoB7m+e+Utx1+UL OEekR5wYTH9+iPuaCmkKpDqENd1+386fVYAi5W19GLo7iJVh+6xZs7zBGkJxXc76f/Z60KMNlAxXb O0WLFJfeh+E2CTbXkrpUnGg05ARpVfgC0L1fXhuV4+iHUl/RhJrXcCIa2TmaHeBqVEtb16UFEjOKJ jau3FOoidNoKTnhC11D9JanH1Fa4rG/DHMFYQJjVfWF+k0arqDDa4hlmvroj5+0oI9lkU8s3Q5XA2 LRTMfXk6wn/4PKVWasRHqiaCxkU7RqMW/BeJ0xK/FdXC4KV5SvPqy0Zz56vpdRZ7Acmd2u+dtv6Rf PqwzvZww==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wYC74-0000000BnWK-12nw; Sat, 13 Jun 2026 00:20:38 +0000 Received: from mail-pf1-x44a.google.com ([2607:f8b0:4864:20::44a]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wYC71-0000000BnVF-1VZh for linux-arm-kernel@lists.infradead.org; Sat, 13 Jun 2026 00:20:36 +0000 Received: by mail-pf1-x44a.google.com with SMTP id d2e1a72fcca58-8423770d72dso1987811b3a.3 for ; Fri, 12 Jun 2026 17:20:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781310034; x=1781914834; darn=lists.infradead.org; h=cc:to:from:subject:message-id:mime-version:date:reply-to:from:to:cc :subject:date:message-id:reply-to; bh=WmyzcKWN5sYZUTeYCc9CQUvIpkkw/cT2wO4LeW7OYQY=; b=TTdHUx8fzRgWj0ywQ62Ky5Zuu4iAdFs8AXDvgdCes91XR6dz3P3dW4cQgq8XQZ1/lv 8TFQnF2bjgAl9AiI2LAqi1mp3aoWS9Md+ZBWw5crk3BBIDr/oOeatmfKmL5FuHDiZ8oG ao0rC+J0mpH/Mj/poXE/Qqi0XuSfiCUXdoDr8FRz7MSELuJdakPukTuIZto3g9cz4wyH 1Uv+b1KN4L0Ss7xsYB8T18B++s+IB0zvG0ieJedmv+5bLOGNxpPf9XbFLLOzR24PEOWq FicaOZownt1M56mDYEPuQvX0kZePy3sZfau9sdn7f/XH3S4Y8HKCfsX0Zfatddb+GmCq 1o2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781310034; x=1781914834; h=cc:to:from:subject:message-id:mime-version:date:reply-to :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WmyzcKWN5sYZUTeYCc9CQUvIpkkw/cT2wO4LeW7OYQY=; b=oUIzozdDQAkykciPXGRiMuYPW/QW/zJDFmJM3d169L2Ab/ZAV2gJQ+1L1FqRQUZpXA A9Q0Pdr662Ye869zYguXsUjxglJsrXcnQK9UCS4cZTpv9QvyxHD8TB39EiQNquRgcvuq aIql0ojf7KO0KOSmdJ+tHE8ScW97Tu8qMn+In5DgBkmBCBuw4yZSMmagF/4enwQZh/w9 LRSRsjcBWw9soYMIyap89D2K2gls2teRRZ3nEKqEkQLPxgDCOR+IkNxonL2ESDr0q72R lD0yidUG3AsFmFwwpk41kqVzX9RHAXbUaUZ2SpGU59t7wd1QuzHqMV/8KPaWjhTGP2or JNqA== X-Forwarded-Encrypted: i=1; AFNElJ9bWczWq5r/1S/O9Q7eIQfw6RdLh0BQ1tX25BNofWXa7OIz9qTI88whuUOKMaK1nRKVe1cSQWAKxnNmB4iEZtVR@lists.infradead.org X-Gm-Message-State: AOJu0YxvB4Tmoyz3mKG6IV/t5GnFKJqSoKQwhJvESzVMECBguslBIBLY 5xFQLB9dps+im0bsYkzRuoQIGz9y/+wM9X65XoquuizLWW5EbY3+6gMuDRvPWJiTUXngeWeCTSI 41ZjAKA== X-Received: from pfbk14.prod.google.com ([2002:a05:6a00:b00e:b0:82f:8cba:4285]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:9503:b0:842:3a3b:d6e7 with SMTP id d2e1a72fcca58-844e1a2c4e5mr2039973b3a.23.1781310033733; Fri, 12 Jun 2026 17:20:33 -0700 (PDT) Date: Fri, 12 Jun 2026 17:20:11 -0700 Mime-Version: 1.0 X-Mailer: git-send-email 2.54.0.1136.gdb2ca164c4-goog Message-ID: <20260613002031.745413-1-seanjc@google.com> Subject: [PATCH v7 00/20] KVM: selftests: Add eventfd+VFIO IRQ test From: Sean Christopherson To: Paolo Bonzini , Marc Zyngier , Oliver Upton , Sean Christopherson Cc: Joey Gouly , Steffen Eiden , Suzuki K Poulose , Zenghui Yu , kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, David Matlack , Josh Hilke Content-Type: text/plain; charset="UTF-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260612_172035_409516_0A951768 X-CRM114-Status: GOOD ( 19.18 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Sean Christopherson Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org David and Josh's series to add a selftest for verifying interrupt delivery via eventfd (via KVM_IRQFD), and also from a real device, wired up via VFIO. I originally wanted to get this into 7.2, but that's not going to happen. But I hope to get this applied early in the 7.3 cycle so that additional features and whatnot can be developed on top without too much pain (hopefully). Gory details in the patches, and in the v5 cover letter. v7: - Seed kvm_rng during kvm_selftest_init(). [Sashiko] - Seed libc's RNG during kvm_selftest_init(), so that the seed (from random()) that's printed and passed to kvm_rng isn't the same every time. - Init irq_cpu to -1 in all paths. [Sashiko] v6: - Massage most changelogs. - Fix SoB ordering issues. - Clean up KVM_SET_GSI_ROUTING helper. - Remove misleading "IRQ injection" and "emulated eventfd" terminology. - Add GUEST_RECEIVED_INTERRUPT() to simplifiy the core loop. - Use cpu_relax() in tight loops while waiting for interrupts. - Print as much information as possible in the actual assert, instead of printing to stdout separately. - Make a best guess as to the right VFIO vs. IOMMUFD mode instead of assuming IOMMUFD, and give the user the option to overide said guess. - Simplify open_proc_irq_smp_affinity_list() + write_proc_irq_smp_affinity_list() into proc_irq_set_smp_affinity(). - Drop print_proc_irq_file() and kvm_print_vcpu_affinity() (for now) to avoid potential issues on systems with high CPU counts. - Drop the blocking/HLT testing as it was at best broken. - Use -e for "empty", not -c for "clear", when completely tearing down GSI routing, because routing can be "cleared" without completely emptying the routing information. - Use the main task's CPU affinity as the available_cpus set. - Allow overcommiting vCPUs:pCPUs. - Set the target vCPU's affinity instead of batching when vCPU0 is targeted. - Add support for 256+ vCPUs with x2APIC. - Restrict xAPIC mode to 255 vCPUs. - Restrict the test to KVM selftest's max supported vCPUs. v5: - https://lore.kernel.org/all/20260604020143.748245-1-jrhilke@google.com - Rename get_proc_vfio_irq_number() to vfio_msix_to_host_irq() - Rename open_proc_irq_affinity() and write_proc_irq_affinity() to include "_smp_affinity_list" - Print /proc/irq//smp_affinity and effective_affinity on timeout failures - Convert IRQ type from 'int' to 'unsigned int' across helpers and the test - Fix compiler warnings for uninitialized variables in irq_test.c - Remove rate-limiting on affinity changes v4: https://lore.kernel.org/kvm/20260530002134.558837-1-jrhilke@google.com David Matlack (11): KVM: selftests: Build and link selftests/vfio/lib into KVM selftests KVM: selftests: Add macros to read/write+sync to/from guest memory KVM: selftests: Add an irqfd send+receive (and later IRQ bypass) test KVM: selftests: Add helper to get host IRQ from device MSI-X for IRQ bypass test KVM: selftests: Add VFIO device support to eventfd IRQ test KVM: selftests: Verify interrupts are received when IRQ affinity changes in IRQ test KVM: selftests: Add option to set empty routing between IRQs in eventfd IRQ test KVM: selftests: Make number of IRQs configurable in IRQ test KVM: selftests: Verify vCPU migration during IRQ delivery in IRQ test KVM: selftests: Make number of vCPUs configurable in IRQ test KVM: selftests: Add xAPIC support in eventfd IRQ test Josh Hilke (6): KVM: selftests: Rename guest_rng to kvm_rng KVM: selftests: Add helper to generate random u64 in range [min,max] KVM: selftests: Add a helper to set proc IRQ affinity for IRQ test KVM: selftests: Add kvm_gettid() wrapper and convert users KVM: selftests: Add kvm_sched_getaffinity() wrapper and convert users KVM: selftests: Add a utility to pin a task to a random CPU, given a CPU set Sean Christopherson (3): KVM: selftests: Initialize the default/global pRNG during kvm_selftest_init() KVM: selftests: Seed libc's RNG before using it to generate a seed for KVM's pRNG KVM: selftests: Verify non-postable IRQ remapping in IRQ test tools/testing/selftests/kvm/Makefile.kvm | 7 +- tools/testing/selftests/kvm/arch_timer.c | 2 +- .../kvm/arm64/arch_timer_edge_cases.c | 2 +- .../selftests/kvm/demand_paging_test.c | 2 +- .../selftests/kvm/dirty_log_perf_test.c | 4 +- tools/testing/selftests/kvm/dirty_log_test.c | 11 +- .../selftests/kvm/include/kvm_syscalls.h | 7 + .../testing/selftests/kvm/include/kvm_util.h | 12 + .../testing/selftests/kvm/include/proc_util.h | 11 + .../testing/selftests/kvm/include/test_util.h | 25 +- .../selftests/kvm/include/x86/kvm_util_arch.h | 4 +- tools/testing/selftests/kvm/irq_test.c | 350 ++++++++++++++++++ tools/testing/selftests/kvm/lib/assert.c | 8 +- tools/testing/selftests/kvm/lib/kvm_util.c | 53 ++- tools/testing/selftests/kvm/lib/memstress.c | 8 +- tools/testing/selftests/kvm/lib/proc_util.c | 54 +++ tools/testing/selftests/kvm/lib/test_util.c | 27 +- tools/testing/selftests/kvm/mmu_stress_test.c | 15 +- tools/testing/selftests/kvm/rseq_test.c | 6 +- tools/testing/selftests/kvm/steal_time.c | 22 +- .../testing/selftests/kvm/x86/sev_dbg_test.c | 2 +- 21 files changed, 548 insertions(+), 84 deletions(-) create mode 100644 tools/testing/selftests/kvm/include/proc_util.h create mode 100644 tools/testing/selftests/kvm/irq_test.c create mode 100644 tools/testing/selftests/kvm/lib/proc_util.c base-commit: c1f7303302927f9cbf4efedf70f0512cde168c65 -- 2.54.0.1136.gdb2ca164c4-goog