Received: by 2002:a05:6500:1b8f:b0:1fa:5c73:8e2d with SMTP id df15csp881389lqb; Wed, 29 May 2024 13:28:42 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUOUEAv34re6DunI3yDO28yQRYC9HPC+LGqxM4EGwIdw0LrNBotF1nOG1z5IQgIIKvfHQXAg2IgQe0lkOWHOUSgL+p2kQticgbFJlGqdg== X-Google-Smtp-Source: AGHT+IEXkHQGEOshYxW31Ja2mjJL5Yad4FmgNvbdaNWBbqy3SlByirfoBLBwyplIUoVtifXXYPf2 X-Received: by 2002:a05:6214:19e5:b0:6ad:6ece:aa7b with SMTP id 6a1803df08f44-6ad9f9e75f6mr50677786d6.30.1717014521971; Wed, 29 May 2024 13:28:41 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717014521; cv=pass; d=google.com; s=arc-20160816; b=bODK8cJE4e/CMqvYi6oY0LDzfChD8EYMCF9CW8nP84tIwYvbRb9ufOygyMPUj2zhBj N4K7erYLl8b0F74FfejEObS9tPID48xhSWSel8rUTVVXvWt8M4F6M17Nb9NKWGggbcP5 y2DC1xvBR5V6xHo+AoVXJoJUl0XpxAc4j8npUEyYlZ00WI8PZpyq7NPUpS0b5om5Il5e F1ZS5l/ROljrhvUimuVyAemJ69Rdo/+d83p+5z32OJatWXza3wSjF8BHR6KB9Q5Blwje sx6MyNBGkGpc6UGJd7VFLFWcVIWgnNzYCjTFe3xk0xFoTVjiDM3zJ1pJEvCWmCOHkQ5A li9A== 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:message-id:date:subject:cc:to :from:dkim-signature; bh=ITA26nmbpb0lT6gmeb0D6OXi3FBZc/72ZIpUCXfDZkg=; fh=fZepo/0slYBt9k/m8d9e8DJ82HBaU39Epa4sDwEDWNU=; b=an6tvU293bmDgkstjwpZt6I75ZzTXy610Oz3IqSV+vzI6Auhcj3fLsj62bIm2YWfcm 7YoFqkknyOnMs4DtafyeVUp9hugYv0EFpiS8xrNlzhH5jzVapRZwWfnmgSRcifNw3q1R kQAHBwCCpWpaGTReFQkb4dzZ3UQKwlarT4dYlTj0e8DPXyIucUuMuFNPBbSsLMONIcSL MEOUrYzujn9glSwiuCiKYwz0qdZRoXXwxApkeoScpGA7qNsrmMycfaUT4XX1MoFU+Lpb XKrQhmahcB65k3EnmPHEHnOdx0dw4/e/phgWtJgqZRbS1vHy6J/AjElR2IH5CElZQLr/ w8Zw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=AaoojB2+; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-194653-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-194653-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 6a1803df08f44-6ac162de2dbsi125084156d6.591.2024.05.29.13.28.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 May 2024 13:28:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-194653-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=AaoojB2+; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-194653-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-194653-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 AD64F1C2177B for ; Wed, 29 May 2024 20:28:41 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D9C341C68BE; Wed, 29 May 2024 20:28:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="AaoojB2+" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (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 298CE14534D; Wed, 29 May 2024 20:28:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717014515; cv=none; b=G4Le+g19btxA9nUIjk+nRz/CzIi+OJlr8ZEmAKw0zIfwN1EMpfDPu+tnKEkp8qS+xq3mW+UAXYHXd2oLQQT+tINRVj9h9C7GrKBcuV1dIhqQN/66pzbBxLC4c2KL1FaG2ZV71tjWd+naBXG7GLk2JcgbA4R3jzX5dAxSEHh4nzE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717014515; c=relaxed/simple; bh=yxO+RouaVjt4hpv26MKV9LGR+GrQJeATy9q/u2t1Va0=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=Bw4IAudmuTj/JNM/S/+PWGGC7pGakaDmfy6Zn7Qmzk+d5GKOC0MuGNX+oYy9lBp7IhtNcohyhttBAp7KQFHtdouPzYSR4NZLlMhUmuBnLRBfCpftth8j/e47zZ7BCurLQ5VzyUnGKSM97Z6orNzzEd6VbBy5mrikpQeOWFLFH6U= 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=AaoojB2+; arc=none smtp.client-ip=198.175.65.17 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=1717014513; x=1748550513; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=yxO+RouaVjt4hpv26MKV9LGR+GrQJeATy9q/u2t1Va0=; b=AaoojB2+gPMU0wRUBM/aaK/jsXP2EG1H/L7um2Hgy2aGKjgLC1aqivQ+ NUF2puYeraotqq3TQ6MrcIwVIBjbOopQshYWQDV4U0nzzAOylvzirqKqS FihRM+McEskVMdONdzKRtdUzbkqnlZ3fSHF12CxkIJIX5EF1poxO9TqDU zS2rcslI6Nz9NyTuiw4C5mB4yOgqW6md2K9slCRqk+zn2cunHyoXPIIFm a3SAZChf9/RdCTyX0vUz8DL46oySIAaJJPMujo0E7YSS6Gb9HmdgggUxk qdbJH6j5VSnrULNdi/gGYCdjbxme7EX0vDqXUtBEZ4RFJh+uLcEzugA7p Q==; X-CSE-ConnectionGUID: rsIHlPHmQAC361o5WTfTFw== X-CSE-MsgGUID: zUdlCGePRSGzdZZR/xsJzQ== X-IronPort-AV: E=McAfee;i="6600,9927,11087"; a="13574522" X-IronPort-AV: E=Sophos;i="6.08,199,1712646000"; d="scan'208";a="13574522" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 May 2024 13:28:32 -0700 X-CSE-ConnectionGUID: HbFkC3PJSHGq0tVkSLmGDg== X-CSE-MsgGUID: Olioliv0Sy2umeEC2/k42w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,199,1712646000"; d="scan'208";a="35491261" Received: from jacob-builder.jf.intel.com ([10.54.39.125]) by fmviesa007.fm.intel.com with ESMTP; 29 May 2024 13:28:32 -0700 From: Jacob Pan To: X86 Kernel , LKML , Thomas Gleixner , Dave Hansen , "H. Peter Anvin" , "Ingo Molnar" , "Borislav Petkov" , linux-perf-users@vger.kernel.org, Peter Zijlstra Cc: Andi Kleen , "Xin Li" , Jacob Pan Subject: [PATCH 0/6] Add support for NMI source reporting Date: Wed, 29 May 2024 13:33:19 -0700 Message-Id: <20240529203325.3039243-1-jacob.jun.pan@linux.intel.com> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Hi Thomas and all, Non-Maskable Interrupts (NMIs) are routed to the local Advanced Programmable Interrupt Controller (APIC) using vector #2. Before the advent of the Flexible Return and Event Delivery (FRED)[1], the vector information set by the NMI initiator was disregarded or lost within the hardware, compelling system software to poll every registered NMI handler to pinpoint the source of the NMI[2]. This approach led to several issues: 1. Inefficiency due to the CPU's time spent polling all handlers. 2. Increased latency from the additional time taken to poll all handlers. 3. The occurrence of unnecessary NMIs if they are triggered shortly after being processed by a different source. To tackle these challenges, Intel introduced NMI source reporting as a part of the FRED specification (detailed in Chapter 9). This CPU feature ensures that while all NMI sources are still aggregated into NMI vector (#2) for delivery, the source of the NMI is now conveyed through FRED event data (a 16-bit bitmap on the stack). This allows for the selective dispatch of the NMI source handler based on the bitmap, eliminating the need to invoke all NMI source handlers indiscriminately. In line with the hardware architecture, various interrupt sources can generate NMIs by encoding an NMI delivery mode. However, this patchset activates only the local NMI sources that are currently utilized by the Linux kernel, which includes: 1. Performance monitoring. 2. Inter-Processor Interrupts (IPIs) for functions like CPU backtrace, machine check, Kernel GNU Debugger (KGDB), reboot, panic stop, and self-test. Other NMI sources will continue to be handled as previously when the NMI source is not utilized or remains unidentified. [1] https://www.intel.com/content/www/us/en/content-details/779982/flexible-return-and-event-delivery-fred-specification.html [2] https://lore.kernel.org/lkml/171011362209.2468526.15187874627966416701.tglx@xen13/ Thanks, Jacob Jacob Pan (6): x86/irq: Add enumeration of NMI source reporting CPU feature x86/irq: Extend NMI handler registration interface to include source x86/irq: Factor out common NMI handling code x86/irq: Process nmi sources in NMI handler perf/x86: Enable NMI source reporting for perfmon x86/irq: Enable NMI source on IPIs delivered as NMI arch/x86/Kconfig | 9 +++ arch/x86/events/amd/ibs.c | 2 +- arch/x86/events/core.c | 11 ++- arch/x86/events/intel/core.c | 6 +- arch/x86/include/asm/apic.h | 1 + arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/disabled-features.h | 8 ++- arch/x86/include/asm/irq_vectors.h | 31 ++++++++ arch/x86/include/asm/nmi.h | 4 +- arch/x86/kernel/apic/hw_nmi.c | 5 +- arch/x86/kernel/apic/ipi.c | 4 +- arch/x86/kernel/apic/local.h | 18 +++-- arch/x86/kernel/cpu/cpuid-deps.c | 1 + arch/x86/kernel/cpu/mce/inject.c | 4 +- arch/x86/kernel/cpu/mshyperv.c | 2 +- arch/x86/kernel/kgdb.c | 6 +- arch/x86/kernel/nmi.c | 92 ++++++++++++++++++++---- arch/x86/kernel/nmi_selftest.c | 7 +- arch/x86/kernel/reboot.c | 4 +- arch/x86/kernel/smp.c | 4 +- arch/x86/kernel/traps.c | 4 +- arch/x86/platform/uv/uv_nmi.c | 4 +- drivers/acpi/apei/ghes.c | 2 +- drivers/char/ipmi/ipmi_watchdog.c | 2 +- drivers/edac/igen6_edac.c | 2 +- drivers/watchdog/hpwdt.c | 6 +- 26 files changed, 187 insertions(+), 53 deletions(-) -- 2.25.1