Received: by 2002:ab2:69cc:0:b0:1f4:be93:e15a with SMTP id n12csp1679138lqp; Mon, 15 Apr 2024 13:40:17 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVIMjZfsf3bquGaHAJfLLl4ytPGcb6HsKdqVijxJYEsmXOyPRN8cW7Yn8f/uPmxZfek7j153yjPny/222ZIUtAUoptVGHD3oj7vqLaeTw== X-Google-Smtp-Source: AGHT+IHJseT19f1GHk+G4COzYeEWKTb1yt7TlIyohbBI+8L0g6nvz17ANZ0KTYUL+wzuSzf4Vt0s X-Received: by 2002:a05:6214:4b88:b0:69b:23fe:236a with SMTP id qf8-20020a0562144b8800b0069b23fe236amr11191740qvb.64.1713213617556; Mon, 15 Apr 2024 13:40:17 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713213617; cv=pass; d=google.com; s=arc-20160816; b=lhdNUqFLd1CxmbuxV9/OQHUgsIijyKYy0YCvwZ0eNJ/+NPhVDQp8PCjmnlRZZBATUr ZaPDdtUSFp35DkKkIUezSZqS1FKsskdMAeNEU49ZiwEtlqCnYKTBDiM7va1z7Upu3LkP E4V/XFxYQ2UZGJQ5r873NcbnUmnXRwAnLoWBSYLvsP4jy+51j+kHYbvYY/4sKmonL3Jd Lrsbm68/Wr7/Y17x3Qe5gjYM2JdGstDKJg3jf/rk6x4gnt5z+cE5EPuXsKSew06pbgMX PUV/URi019C1tnrLaiay0xM6TwgZrA7MHiJ+PijgfiXRnk50tzJ5T7P+dd1biHXq+5Oy c5sQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:organization:references :in-reply-to:message-id:subject:cc:to:from:date:dkim-signature; bh=IvZ1FbQhmiDRLukgpGNAeWCVhLbILVtCcYReLQ1wSYo=; fh=FOCJwMv0WZRVEIRpytBT34MZGvzyPvRxARb9XrToGfw=; b=bSWLaIX6fK0OFA9V9UVysKTF20APrVtnt5XuEaGhBWhRzivz4uqhpSY+eUGUMALl3l ZnjJLHT2GUp+Q0L+I2sk1sOFNRIvRiQYGrFXAQr7p0sfuxvi4iPKO3yDACRQZh2tATkU JvlsCiw9LJtS/evfUgyJjo8P7WAZ9FhP/uUeK+6lSyghJ5R0NRCpUF7Lp3wP0IWx/KZN xlg08jKj9VZgxIu1DQep5dkDjOGPximQGmq+LJKlfi7mbB/zYcGjqwY8POzZ3BrBeQ6I Q89Vf9CbrtK7b672Dtvgy7rQSHzKXoLjnN/Ni20a2kl2ZCibpgKxwgyEVrl1Yg5WRgFB 0QeA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="XT/gD6To"; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-145881-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-145881-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id cz8-20020a056214088800b0069b240d6cc7si10473013qvb.577.2024.04.15.13.40.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Apr 2024 13:40:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-145881-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="XT/gD6To"; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-145881-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-145881-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2B5FA1C21D44 for ; Mon, 15 Apr 2024 20:40:17 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E37EE156960; Mon, 15 Apr 2024 20:40:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="XT/gD6To" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 08CCF41C77; Mon, 15 Apr 2024 20:40:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.16 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713213606; cv=none; b=eJReLuNSn0R5AUywD+0N2mll+CscSkmeu6NMdzfJ5WP/pgNY3KX52GwScnrRGk16whtQnBEt58hyoAzu0Fa6BRBJ8Tj2vYWuBf8P81Q9v4HxP5Z6JBdgV4Ad39pYQVfWpzLXdXJU1fxOBOmyvQ5fH2fmgy8l+ugAcwN2V+nqoMw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713213606; c=relaxed/simple; bh=FcEt0XxkE8fSeSF3sT6N0uD/Tsiupni4uEmvhHUYB44=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=awN4Y59b+96t0VYu7FetCptqO5XonenPqgTHEl5Qp4V/vJ7W5zpB0xVp/Su9OZau0AUU/kY0MAscaLSY055wvRAyFgZ4anK5qR3aCIjNYOmOTmBjvRHLq+tJl5bUCOk6PuIHubszggpSCAeK8zVg+Yg/zp6wooNb6fQVQyOdcVw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=XT/gD6To; arc=none smtp.client-ip=198.175.65.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713213605; x=1744749605; h=date:from:to:cc:subject:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=FcEt0XxkE8fSeSF3sT6N0uD/Tsiupni4uEmvhHUYB44=; b=XT/gD6ToKqcTLnb8GCccyBp7D/zi2j06IaImQopPiZt4qCD4qOvxuf8b Hd9gn6NARqmLk3DKq3mpg0NZfpUGHsyq3ALQr8lCBIr2hCIgoCm95uY1a V0sUNniL9WbknDGloVKiP++21qSycVbMP/fcVaJRwgBTSu1HARomV/Sa5 kQ4Zf2P9yi4bFXPaAxsw/wjd87nZthbeXLYWqZI1TOt0vOe3DNvAwiwhs KtPzhM98z1TJaTG+NjAXmZCEySmWc9XMYLTrr+BTalZdgRZsImg2J5xGm UzG0iCKTjD+81gp42Qc9D4Wk+hMeR9oao32mvNldFsGu57L16Lpxjq7dV A==; X-CSE-ConnectionGUID: ByAY3ooORciGwgSd1iE0Pw== X-CSE-MsgGUID: mJu+/22BQ96r1jsuNM78vw== X-IronPort-AV: E=McAfee;i="6600,9927,11045"; a="8747725" X-IronPort-AV: E=Sophos;i="6.07,203,1708416000"; d="scan'208";a="8747725" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by orvoesa108.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2024 13:39:22 -0700 X-CSE-ConnectionGUID: 2+NnO0HTTBOzXdD/ihfV/g== X-CSE-MsgGUID: Z9eyk0xgSyC02nPriCsNOA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,203,1708416000"; d="scan'208";a="22027406" Received: from jacob-builder.jf.intel.com (HELO jacob-builder) ([10.54.39.125]) by orviesa009-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2024 13:39:21 -0700 Date: Mon, 15 Apr 2024 13:43:54 -0700 From: Jacob Pan To: Thomas Gleixner Cc: LKML , X86 Kernel , Peter Zijlstra , iommu@lists.linux.dev, Lu Baolu , kvm@vger.kernel.org, Dave Hansen , Joerg Roedel , "H. Peter Anvin" , Borislav Petkov , Ingo Molnar , Paul Luse , Dan Williams , Jens Axboe , Raj Ashok , "Tian, Kevin" , maz@kernel.org, seanjc@google.com, Robin Murphy , jim.harris@samsung.com, a.manzanares@samsung.com, Bjorn Helgaas , guang.zeng@intel.com, robert.hoo.linux@gmail.com, jacob.jun.pan@linux.intel.com, acme@kernel.org, kan.liang@intel.com, "Kleen, Andi" Subject: Re: [PATCH v2 05/13] x86/irq: Reserve a per CPU IDT vector for posted MSIs Message-ID: <20240415134354.67c9d1d1@jacob-builder> In-Reply-To: <20240415115358.04e04204@jacob-builder> References: <20240405223110.1609888-1-jacob.jun.pan@linux.intel.com> <20240405223110.1609888-6-jacob.jun.pan@linux.intel.com> <87edbb267x.ffs@tglx> <20240415115358.04e04204@jacob-builder> Organization: OTC X-Mailer: Claws Mail 3.17.5 (GTK+ 2.24.32; x86_64-pc-linux-gnu) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Mon, 15 Apr 2024 11:53:58 -0700, Jacob Pan wrote: > Hi Thomas, > > On Thu, 11 Apr 2024 18:51:14 +0200, Thomas Gleixner > wrote: > > > On Fri, Apr 05 2024 at 15:31, Jacob Pan wrote: > > > diff --git a/arch/x86/include/asm/irq_vectors.h > > > b/arch/x86/include/asm/irq_vectors.h index d18bfb238f66..1ee00be8218d > > > 100644 --- a/arch/x86/include/asm/irq_vectors.h > > > +++ b/arch/x86/include/asm/irq_vectors.h > > > @@ -97,9 +97,16 @@ > > > > > > #define LOCAL_TIMER_VECTOR 0xec > > > > > > +/* > > > + * Posted interrupt notification vector for all device MSIs delivered > > > to > > > + * the host kernel. > > > + */ > > > +#define POSTED_MSI_NOTIFICATION_VECTOR 0xeb > > > #define NR_VECTORS 256 > > > > > > -#ifdef CONFIG_X86_LOCAL_APIC > > > +#ifdef CONFIG_X86_POSTED_MSI > > > +#define FIRST_SYSTEM_VECTOR > > > POSTED_MSI_NOTIFICATION_VECTOR +#elif defined(CONFIG_X86_LOCAL_APIC) > > > #define FIRST_SYSTEM_VECTOR LOCAL_TIMER_VECTOR > > > #else > > > #define FIRST_SYSTEM_VECTOR NR_VECTORS > > > > This is horrible and we had attempts before to make the system vector > > space dense. They all did not work and making an exception for this is > > not what we want. > > > > If we really care then we do it proper for _all_ of them. Something like > > the uncompiled below. There is certainly a smarter way to do the build > > thing, but my kbuild foo is rusty. > I too had the concern of the wasting system vectors, but did not know how > to fix it. But now your code below works well. Tested without KVM in > .config to show the gaps: > > In VECTOR IRQ domain. > > BEFORE: > System: 46: 0-31,50,235-236,244,246-255 > > AFTER: > System: 46: 0-31,50,241-242,245-255 > > The only gap is MANAGED_IRQ_SHUTDOWN_VECTOR(243), which is expected on a > running system. > > Verified in irqvectors.s: .ascii "->MANAGED_IRQ_SHUTDOWN_VECTOR $243 > > POSTED MSI/first system vector moved up from 235 to 241 for this case. > > Will try to let tools/arch/x86/include/asm/irq_vectors.h also use it > instead of manually copy over each time. Any suggestions greatly > appreciated. > On a second thought, if we make system IRQ vector determined at compile time based on different CONFIG options, will it break userspace tools such as perf? More importantly the rule of not breaking userspace. +Arnaldo > > --- > > --- a/arch/x86/Makefile > > +++ b/arch/x86/Makefile > > @@ -245,6 +245,7 @@ archscripts: scripts_basic > > > > archheaders: > > $(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all > > + $(Q)$(MAKE) $(build)=arch/x86/kernel/irqvectors all > > > > ### > > # Kernel objects > > --- a/arch/x86/include/asm/irq_vectors.h > > +++ b/arch/x86/include/asm/irq_vectors.h > > @@ -43,59 +43,46 @@ > > */ > > #define ISA_IRQ_VECTOR(irq) (((FIRST_EXTERNAL_VECTOR + > > 16) & ~15) + irq) > > +#ifndef __ASSEMBLY__ > > /* > > - * Special IRQ vectors used by the SMP architecture, 0xf0-0xff > > - * > > - * some of the following vectors are 'rare', they are merged > > - * into a single vector (CALL_FUNCTION_VECTOR) to save vector space. > > - * TLB, reschedule and local APIC vectors are performance-critical. > > + * Special IRQ vectors used by the SMP architecture, 0xff and downwards > > */ > > +enum { > > + __SPURIOUS_APIC_VECTOR, > > + __ERROR_APIC_VECTOR, > > + __RESCHEDULE_VECTOR, > > + __CALL_FUNCTION_VECTOR, > > + __CALL_FUNCTION_SINGLE_VECTOR, > > + __THERMAL_APIC_VECTOR, > > + __THRESHOLD_APIC_VECTOR, > > + __REBOOT_VECTOR, > > + __X86_PLATFORM_IPI_VECTOR, > > + __IRQ_WORK_VECTOR, > > + __DEFERRED_ERROR_VECTOR, > > > > -#define SPURIOUS_APIC_VECTOR 0xff > > -/* > > - * Sanity check > > - */ > > -#if ((SPURIOUS_APIC_VECTOR & 0x0F) != 0x0F) > > -# error SPURIOUS_APIC_VECTOR definition error > > +#if IS_ENABLED(CONFIG_HYPERVISOR_GUEST) > > + __HYPERVISOR_CALLBACK_VECTOR, > > #endif > > > > -#define ERROR_APIC_VECTOR 0xfe > > -#define RESCHEDULE_VECTOR 0xfd > > -#define CALL_FUNCTION_VECTOR 0xfc > > -#define CALL_FUNCTION_SINGLE_VECTOR 0xfb > > -#define THERMAL_APIC_VECTOR 0xfa > > -#define THRESHOLD_APIC_VECTOR 0xf9 > > -#define REBOOT_VECTOR 0xf8 > > - > > -/* > > - * Generic system vector for platform specific use > > - */ > > -#define X86_PLATFORM_IPI_VECTOR 0xf7 > > - > > -/* > > - * IRQ work vector: > > - */ > > -#define IRQ_WORK_VECTOR 0xf6 > > - > > -/* 0xf5 - unused, was UV_BAU_MESSAGE */ > > -#define DEFERRED_ERROR_VECTOR 0xf4 > > - > > -/* Vector on which hypervisor callbacks will be delivered */ > > -#define HYPERVISOR_CALLBACK_VECTOR 0xf3 > > - > > -/* Vector for KVM to deliver posted interrupt IPI */ > > -#define POSTED_INTR_VECTOR 0xf2 > > -#define POSTED_INTR_WAKEUP_VECTOR 0xf1 > > -#define POSTED_INTR_NESTED_VECTOR 0xf0 > > - > > -#define MANAGED_IRQ_SHUTDOWN_VECTOR 0xef > > +#if IS_ENABLED(CONFIG_KVM) > > + /* Vector for KVM to deliver posted interrupt IPI */ > > + __POSTED_INTR_VECTOR, > > + __POSTED_INTR_WAKEUP_VECTOR, > > + __POSTED_INTR_NESTED_VECTOR, > > +#endif > > + __MANAGED_IRQ_SHUTDOWN_VECTOR, > > > > #if IS_ENABLED(CONFIG_HYPERV) > > -#define HYPERV_REENLIGHTENMENT_VECTOR 0xee > > -#define HYPERV_STIMER0_VECTOR 0xed > > + __HYPERV_REENLIGHTENMENT_VECTOR, > > + __HYPERV_STIMER0_VECTOR, > > #endif > > + __LOCAL_TIMER_VECTOR, > > +}; > > +#endif /* !__ASSEMBLY__ */ > > > > -#define LOCAL_TIMER_VECTOR 0xec > > +#ifndef COMPILE_OFFSETS > > +#include > > +#endif > > > > #define NR_VECTORS 256 > > > > --- /dev/null > > +++ b/arch/x86/kernel/irqvectors/Makefile > > @@ -0,0 +1,11 @@ > > +# SPDX-License-Identifier: GPL-2.0 > > + > > +irqvectors-file := > > arch/$(SRCARCH)/include/generated/asm/irqvectors.h +targets += > > arch/$(SRCARCH)/kernel/irqvectors/irqvectors.s + > > +$(irqvectors-file): arch/$(SRCARCH)/kernel/irqvectors/irqvectors.s > > FORCE > > + $(call filechk,offsets,__ASM_IRQVECTORS_H__) > > + > > +PHONY += all > > +all: $(irqvectors-file) > > + @: > > --- /dev/null > > +++ b/arch/x86/kernel/irqvectors/irqvectors.c > > @@ -0,0 +1,42 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +#define COMPILE_OFFSETS > > + > > +#include > > +#include > > + > > +#define VECNR(v) (0xFF - __##v) > > +#define VECTOR(v) DEFINE(v, VECNR(v)) > > + > > +static void __used common(void) > > +{ > > + VECTOR(SPURIOUS_APIC_VECTOR); > > + VECTOR(ERROR_APIC_VECTOR); > > + VECTOR(RESCHEDULE_VECTOR); > > + VECTOR(CALL_FUNCTION_VECTOR); > > + VECTOR(CALL_FUNCTION_SINGLE_VECTOR); > > + VECTOR(THERMAL_APIC_VECTOR); > > + VECTOR(THRESHOLD_APIC_VECTOR); > > + VECTOR(REBOOT_VECTOR); > > + VECTOR(X86_PLATFORM_IPI_VECTOR); > > + VECTOR(IRQ_WORK_VECTOR); > > + VECTOR(DEFERRED_ERROR_VECTOR); > > + > > +#if IS_ENABLED(CONFIG_HYPERVISOR_GUEST) > > + VECTOR(HYPERVISOR_CALLBACK_VECTOR); > > +#endif > > + > > +#if IS_ENABLED(CONFIG_KVM) > > + /* Vector for KVM to deliver posted interrupt IPI */ > > + VECTOR(POSTED_INTR_VECTOR); > > + VECTOR(POSTED_INTR_WAKEUP_VECTOR); > > + VECTOR(POSTED_INTR_NESTED_VECTOR); > > +#endif > > + VECTOR(MANAGED_IRQ_SHUTDOWN_VECTOR); > > + > > +#if IS_ENABLED(CONFIG_HYPERV) > > + VECTOR(HYPERV_REENLIGHTENMENT_VECTOR); > > + VECTOR(HYPERV_STIMER0_VECTOR); > > +#endif > > + VECTOR(LOCAL_TIMER_VECTOR); > > +} > > + > > > > > > > > > Thanks, > > Jacob Thanks, Jacob