Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp4843216iob; Mon, 9 May 2022 03:00:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzE+RDMrvfKtsOcZahdkSdaxmJbU5ojuCAICAfv5N1BgWoAhit8hpSUuGUKkB2VStQtS8+3 X-Received: by 2002:a17:90b:1c92:b0:1dd:10ff:8f13 with SMTP id oo18-20020a17090b1c9200b001dd10ff8f13mr6289706pjb.54.1652090411491; Mon, 09 May 2022 03:00:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652090411; cv=none; d=google.com; s=arc-20160816; b=V8aYKDGHZepdCm6XoK0lhQwzGQWuLKy75dcv16+5XOn7DZkkJsokNdV4fZ4hcNk6Hg yvDaqswGYeOsrYaVdNX45B89cLPh4whoYqMmjra6FbMQPrzzbR4Bl7IccREAYsMXI3h+ I3/q9M9kow8Pf+zzIFCjCEfZ8AhSMaUtjrYnz81955WMQofZvwLsqBfZdWub4pOlQf5D 2CNgMc7cLqmbd0Mzl8MVSrGBGalJJf6jNqB8yjMy/N6i8PRaERf3I4y5gWJVPskCYhB0 8/cqlpZR3hK/JwSG92EgGsf3ZLoqPDeypIS84SQj+YxTy7yt9o/3QPbU+HQUbTkkBJJx wvRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dkim-signature; bh=EeIH4LLWZdTDgtBuSE5fQhQhx8Twlcr8Hmoz7S4lj6M=; b=fsNjmO8qeMdGDrP8T5NGXVorSy4DyR/KcMLNTwuPlJseY9fJADjtb8iqrG7Tj+55TV qkM8M4yX9jL9yVvBGA3PjCLfnTjXwa9YFZjZAff7pzl/THWetuO20CUhaLQRQKnYbAyD Wd0avaqjjeFGhwl9OEc1hc7SHqqnRtLq8XkxZl+4O7+ZH+KGpWmTUnFm6pG63/knGH1i cXDhohaCFBsYSL3mwTlLNQ2ZxE7ZbfeAXLg2YCyrEw+AdOpBCFfvRCX1Jdpnfjj7LB71 E751iUeaT6LP8D3HwROsM66FJUk+7mkq+WSVXIEtg8fs/03zAP92bv/Diy6+4hbdFQFa xtyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bsFDga76; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id d20-20020a631d14000000b003816043f0f2si13625318pgd.743.2022.05.09.03.00.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 May 2022 03:00:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bsFDga76; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 846AE19C01; Mon, 9 May 2022 02:42:39 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1387145AbiEFABy (ORCPT + 99 others); Thu, 5 May 2022 20:01:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1387045AbiEFAB3 (ORCPT ); Thu, 5 May 2022 20:01:29 -0400 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A271160DA8 for ; Thu, 5 May 2022 16:57:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651795067; x=1683331067; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=D+sZP1VTaO2AD2PX2fNF30e9SIwhyViy7LM9jGqhP5M=; b=bsFDga76t8yiZChb3uUw+latfT3p6I20MC2+fZHfDlCOAUBGkh1sfEnK kpA+4PHEQeJp2QKk2dmULVMptvy+0tugwMIlITxS1dXtNcHIr8TTLsb+R FBXUEP23YSB3msNH5hKY9OuEXCMmUFN26M95esj7vjiaHGZUNTdilajVW aOSwA/bIspzJKJ3jESRzQ4fy6uNOS+26V3UT8MoEd1NtqX7Dc3c5P6Abd +KzCkmzSOf+LnaKnCNi/zsWpQAxr0fqvN48Iy2djIyPkI4O3u9MiEkbCO iD93KjAxh94L0XD/d7VA5jJ1GHbUcusVnvr1Cxs0yOCXclfmlAgeNSQBY g==; X-IronPort-AV: E=McAfee;i="6400,9594,10338"; a="250283619" X-IronPort-AV: E=Sophos;i="5.91,203,1647327600"; d="scan'208";a="250283619" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 May 2022 16:57:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,203,1647327600"; d="scan'208";a="694914338" Received: from ranerica-svr.sc.intel.com ([172.25.110.23]) by orsmga004.jf.intel.com with ESMTP; 05 May 2022 16:57:45 -0700 From: Ricardo Neri To: Thomas Gleixner , x86@kernel.org Cc: Tony Luck , Andi Kleen , Stephane Eranian , Andrew Morton , Joerg Roedel , Suravee Suthikulpanit , David Woodhouse , Lu Baolu , Nicholas Piggin , "Ravi V. Shankar" , Ricardo Neri , iommu@lists.linux-foundation.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Ricardo Neri Subject: [PATCH v6 05/29] x86/apic/vector: Do not allocate vectors for NMIs Date: Thu, 5 May 2022 16:59:44 -0700 Message-Id: <20220506000008.30892-6-ricardo.neri-calderon@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220506000008.30892-1-ricardo.neri-calderon@linux.intel.com> References: <20220506000008.30892-1-ricardo.neri-calderon@linux.intel.com> X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Vectors are meaningless when allocating IRQs with NMI as the delivery mode. In such case, skip the reservation of IRQ vectors. Do it in the lowest- level functions where the actual IRQ reservation takes place. Since NMIs target specific CPUs, keep the functionality to find the best CPU. Cc: Andi Kleen Cc: "Ravi V. Shankar" Cc: Stephane Eranian Cc: iommu@lists.linux-foundation.org Cc: linuxppc-dev@lists.ozlabs.org Cc: x86@kernel.org Reviewed-by: Tony Luck Signed-off-by: Ricardo Neri --- Changes since v5: * Introduced this patch. Changes since v4: * N/A Changes since v3: * N/A Changes since v2: * N/A Changes since v1: * N/A --- arch/x86/kernel/apic/vector.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c index 838e220e8860..11f881f45cec 100644 --- a/arch/x86/kernel/apic/vector.c +++ b/arch/x86/kernel/apic/vector.c @@ -245,11 +245,20 @@ assign_vector_locked(struct irq_data *irqd, const struct cpumask *dest) if (apicd->move_in_progress || !hlist_unhashed(&apicd->clist)) return -EBUSY; + if (apicd->hw_irq_cfg.delivery_mode == APIC_DELIVERY_MODE_NMI) { + cpu = irq_matrix_find_best_cpu(vector_matrix, dest); + apicd->cpu = cpu; + vector = 0; + goto no_vector; + } + vector = irq_matrix_alloc(vector_matrix, dest, resvd, &cpu); trace_vector_alloc(irqd->irq, vector, resvd, vector); if (vector < 0) return vector; apic_update_vector(irqd, vector, cpu); + +no_vector: apic_update_irq_cfg(irqd, vector, cpu); return 0; @@ -321,12 +330,22 @@ assign_managed_vector(struct irq_data *irqd, const struct cpumask *dest) /* set_affinity might call here for nothing */ if (apicd->vector && cpumask_test_cpu(apicd->cpu, vector_searchmask)) return 0; + + if (apicd->hw_irq_cfg.delivery_mode == APIC_DELIVERY_MODE_NMI) { + cpu = irq_matrix_find_best_cpu_managed(vector_matrix, dest); + apicd->cpu = cpu; + vector = 0; + goto no_vector; + } + vector = irq_matrix_alloc_managed(vector_matrix, vector_searchmask, &cpu); trace_vector_alloc_managed(irqd->irq, vector, vector); if (vector < 0) return vector; apic_update_vector(irqd, vector, cpu); + +no_vector: apic_update_irq_cfg(irqd, vector, cpu); return 0; } @@ -376,6 +395,10 @@ static void x86_vector_deactivate(struct irq_domain *dom, struct irq_data *irqd) if (apicd->has_reserved) return; + /* NMI IRQs do not have associated vectors; nothing to do. */ + if (apicd->hw_irq_cfg.delivery_mode == APIC_DELIVERY_MODE_NMI) + return; + raw_spin_lock_irqsave(&vector_lock, flags); clear_irq_vector(irqd); if (apicd->can_reserve) @@ -472,6 +495,10 @@ static void vector_free_reserved_and_managed(struct irq_data *irqd) trace_vector_teardown(irqd->irq, apicd->is_managed, apicd->has_reserved); + /* NMI IRQs do not have associated vectors; nothing to do. */ + if (apicd->hw_irq_cfg.delivery_mode == APIC_DELIVERY_MODE_NMI) + return; + if (apicd->has_reserved) irq_matrix_remove_reserved(vector_matrix); if (apicd->is_managed) -- 2.17.1