From patchwork Thu Jun 5 15:04:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 894386 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 CE6A9274674; Thu, 5 Jun 2025 15:10:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136203; cv=none; b=LsqgsNXQ59g0+YtSMn5YoNusJLdiYod1BpHM+Ji9KK4px2uZMuj51hphLIKwr8a1iRJCV9oZOFJ71ZSzCYSDx3MirQ9n0IyyBLtY4HMgZf/Hc/EeNN2uLE08OifAJaBI6WtJSf6ZgXtpq9QobWuy1S+pzFye3JJx0ctBJd2uUpI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136203; c=relaxed/simple; bh=bTK12/RHj2S92BeBsmXm3twq1jNQ51lI/Rv88YQ/aXQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=p2Tb0FZj7/z0+olQAwDxdOeUOefomr/q6ry+Hkyc8tGlu9n2/7BRhzqsPIRhJEzecxbwGiysO1P3b+YPJIuWd7tclGI1IA203eE6pUaZqDIBatorceZNoCJa1uLwP5HBHaZ+wZ6bXWMnUvtqHcaPLDizoxzRT2BbolyXKXqgUY0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=Rjei+jQE; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="Rjei+jQE" Received: from kreacher.localnet (unknown [5.63.189.50]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 3403866C03F; Thu, 5 Jun 2025 17:09:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1749136188; bh=bTK12/RHj2S92BeBsmXm3twq1jNQ51lI/Rv88YQ/aXQ=; h=From:Subject:Date; b=Rjei+jQEe4HRp5IYN5lQKpWnxOKZQPmGBOZizQ3mISC/WDYYpftXuTGHnZvuZefNy bhD81v2tnvxj/Lk+kWoqRzce323YCLFR5g6CS1dnXEnr4Ye9OPX/nt404QvBl2Nhdw FAdCk/1Uh8BpsUD5N4kO93uaopgN3YFGImTYoInIiZXpNdu4vUn8E/lDZYoXAWCvBY D9rRCyGPy1oRRlgYjL6Ewnq/c9pctfDXIEsBTLlZ31sQgKVQC454Nb7IUXnbbe20If /88kDgn5XP11lIwf69vDOCG6g2+xXQ9bNABi+0DTKYXAJuSuzUEdU8+SPlTFsPeHON NuBJJlwC8LnsQ== From: "Rafael J. Wysocki" To: x86 Maintainers , Linux PM Cc: LKML , Len Brown , Peter Zijlstra , Thomas Gleixner , Dave Hansen , Artem Bityutskiy , "Gautham R. Shenoy" , Ingo Molnar , Borislav Petkov , Linux ACPI Subject: [PATCH v1 1/5] intel_idle: Use subsys_initcall_sync() for initialization Date: Thu, 05 Jun 2025 17:04:11 +0200 Message-ID: <2994397.e9J7NaK4W3@rjwysocki.net> In-Reply-To: <2226957.irdbgypaU6@rjwysocki.net> References: <2226957.irdbgypaU6@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 5.63.189.50 X-CLIENT-HOSTNAME: 5.63.189.50 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: dmFkZTEzSEGzZ/ONVrWENr6vcXfS3S2jicISDIUk4t6WJg+Zjj/tMsiKrH6p/W9hVn65rDd2JKDd5uTYEHknKQT2r7pOoqF3rdVD5yhK7Rprhh7g9Zvcj23lpp2rY7UCLtUpLjrE40L5kP2ENOt7F7JFMQrsU0BxCSyD9ImwCg/5uHKqloLfTfX1B6buKhq24d5iBCDj1fuCRg5EDPCCcGoXCAG/xJ8DxnVxdLMqNeA6Murrcf5yV2bVSf0qD3cTb1ZGJEaagT8ZwEZw1hwmHq4GBUTZA/geTkMBRKK8IMyXCx4LjU27eYT2E9Bi7kPkpz1heTPAWpmaTKgTxzYdBmQllqRTqp5hI2qVAztydhuc9OIhrfm8tVkLl+tEEx8J57dNkSdDHBRibrbHQQ/dI1nVVxlucjsxGlJy0vLI1S/yWVtnHWCMEjwqTqBFmBlbwqpGp+7kB1mv4YNwdfjpgeNUHqaegGjT69Yztk+cYg4Hco9zEY88fIrtxTkFfC6hVJjMAT5Siu/nU09LsKTqeX9DFXJhpjdMA+LF4nKOfNh6BOUl7WPQGB+fbW7FpkY3RZ8eeIwfn3dr/W6U9qygDIGtGcE/7l9vrHxhgVZtOGNfpFw+eq+c81I0aPRpWPXvO2WJmSJVc0TnRblACqvysNtxP5Y8G+APxiFpJZOhkuE2JzL9Jg X-DCC--Metrics: v370.home.net.pl 1024; Body=12 Fuz1=12 Fuz2=12 From: Rafael J. Wysocki It is not necessary to wait until the device_initcall() stage with intel_idle initialization. All of its dependencies are met after all subsys_initcall()s have run, so subsys_initcall_sync() can be used for initializing it. It is also better to ensure that intel_idle will always initialize before the ACPI processor driver that uses module_init() for its initialization. Signed-off-by: Rafael J. Wysocki --- drivers/idle/intel_idle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/drivers/idle/intel_idle.c +++ b/drivers/idle/intel_idle.c @@ -2517,7 +2517,7 @@ return retval; } -device_initcall(intel_idle_init); +subsys_initcall_sync(intel_idle_init); /* * We are not really modular, but we used to support that. Meaning we also From patchwork Thu Jun 5 15:05:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 894892 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 43CC1213236; Thu, 5 Jun 2025 15:09:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136200; cv=none; b=n+CXeaxquDyHACNSSlrklGP0b1KcbY9NF6/5eUTdyCZBlhH7c+pdh83Vo8tKMbUyoG0ZLaF2U+NSqUiTCQwah7fzU/ufJ7uEbJx2XDhbLudvWg7qUHgCpE14Lghi+Crs0KEa+Lek82lQfJgHAKAW3xrpaMj6esTC5C++MT/VWyM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136200; c=relaxed/simple; bh=zn5CSctDyQsT/L2Pm39ZZn7bjDup1bfb5cvHM/imHRE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ffdbByc0sWGpp5Q58iJKargjog/crjVuDkpOmep0Wh5FOp74fNz4F8g1x8VCXszc15dU2JeuAwWKVrCj+va9a+Fv2OFPgT9OkeXqaMS+DjkxMelCZFu0GEvXFHVOEReWhS9S8sYy341+R2TGISdr8thgfWFN1ScOnvmnoCfxis0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=dGTjAS2Y; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="dGTjAS2Y" Received: from kreacher.localnet (unknown [5.63.189.50]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 2D30D66C03E; Thu, 5 Jun 2025 17:09:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1749136187; bh=zn5CSctDyQsT/L2Pm39ZZn7bjDup1bfb5cvHM/imHRE=; h=From:Subject:Date; b=dGTjAS2YScgoZkHJ+Oo4cWLkjAnDp9CEQxScjDah+ZFMDIOkRkmnhiqXTozBL66Ex +7Fe3jyfjEUV7pwOaR/TPXoIzCrkLYZJ7NetGsF9hTHeURnaL/CZMGtEOJp5zm+CNp gRi0kBLh0cQ2QCPlU+YGgUxADLzYyycXwliDfb09rIb7AaMxXKikrhp44waH5fa8PF pjdGwxuVHP1Ih9OBmlSOy3tHPpmDVG4083bueSU/P4ORIZYcBN3VIUx25dQ9ZnrBJr J0Zd2mB80d4neEVUMx9oLQ4G9CDmMxmM2JTWmZRroPOgBjfx/TgDwnOMev9XqDJloO B3biorch762ew== From: "Rafael J. Wysocki" To: x86 Maintainers , Linux PM Cc: LKML , Len Brown , Peter Zijlstra , Thomas Gleixner , Dave Hansen , Artem Bityutskiy , "Gautham R. Shenoy" , Ingo Molnar , Borislav Petkov , Linux ACPI Subject: [PATCH v1 2/5] x86/smp: PM/hibernate: Split arch_resume_nosmt() Date: Thu, 05 Jun 2025 17:05:24 +0200 Message-ID: <3361688.44csPzL39Z@rjwysocki.net> In-Reply-To: <2226957.irdbgypaU6@rjwysocki.net> References: <2226957.irdbgypaU6@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 5.63.189.50 X-CLIENT-HOSTNAME: 5.63.189.50 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: dmFkZTEzSEGzZ/ONVrWENr6vcXfS3S2jicISDIUk4t6WJg+Zjj/tMsiKrH6p/W9hVn65rDd2JKDd5uTYEHknKQT2r7pOoqF3rdVD5yhK7Rprhh7g9Zvcj23lpp2rY7UCLtUpLjrE40L5kP2ENOt7F7JFMQrsU0BxCSyD9ImwCg/5uHKqloLfTfX1B6buKhq24d5iBCDj1fuCRg5EDPCCcGoXCAG/xJ8DxnVxdLMqNeA6Murrcf5yV2bVSf0qD3cTb1ZGJEaagT8ZwEZw1hwmHq4GBUTZA/geTkMBRKK8IMyXCx4LjU27eYT2E9Bi7kPkpz1heTPAWpmaTKgTxzYdBmQllqRTTwMDfwG+Sgkl3X2bgxU9r4IS3Tl9pii23Hp2cX6urAKdnsGV9LGP7DU5W5jGFf6HL4d3qV/8+OUbV1vnRD1WTrNI/1taJTojkpvyIpTpGJr598cIfei46Yt7yXKH2jjvfwH2y+Vohnf+1tlwl8d4Z4jJHSwRKG/s2ZQ9tMVn65xIpQxXNqH70uNEPRDk+20vjoDMEX5rziCkuFqLWebbD9rpWMO58weWz/+XTOFEOuznvL8JE2KcGt8cpeqezge5Dnm7dGW4FUedskzCerp3+RxGsvY8c1UM7c1+p1++SGe5LJmpVlfifu+8OgJC3OJBqayA6D2IIkYdKO2HRzQ3VA X-DCC--Metrics: v370.home.net.pl 1024; Body=12 Fuz1=12 Fuz2=12 From: Rafael J. Wysocki Move the inner part of the arch_resume_nosmt() code into a separate function called arch_cpu_rescan_dead_smt_siblings(), so it can be used in other places where "dead" SMT siblings may need to be taken online and offline again in order to get into deep idle states. No intentional functional impact. Signed-off-by: Rafael J. Wysocki --- arch/x86/kernel/smp.c | 23 +++++++++++++++++++++++ arch/x86/power/hibernate.c | 17 +++++------------ include/linux/cpu.h | 1 + 3 files changed, 29 insertions(+), 12 deletions(-) --- a/arch/x86/kernel/smp.c +++ b/arch/x86/kernel/smp.c @@ -299,3 +299,26 @@ .send_call_func_single_ipi = native_send_call_func_single_ipi, }; EXPORT_SYMBOL_GPL(smp_ops); + +int arch_cpu_rescan_dead_smt_siblings(void) +{ + enum cpuhp_smt_control old = cpu_smt_control; + int ret; + + /* + * If SMT has been disabled and SMT siblings are in HLT, bring them back + * online and offline them again so that they end up in MWAIT proper. + * + * Called with hotplug enabled. + */ + if (old != CPU_SMT_DISABLED && old != CPU_SMT_FORCE_DISABLED) + return 0; + + ret = cpuhp_smt_enable(); + if (ret) + return ret; + + ret = cpuhp_smt_disable(old); + + return ret; +} --- a/arch/x86/power/hibernate.c +++ b/arch/x86/power/hibernate.c @@ -188,7 +188,8 @@ int arch_resume_nosmt(void) { - int ret = 0; + int ret; + /* * We reached this while coming out of hibernation. This means * that SMT siblings are sleeping in hlt, as mwait is not safe @@ -202,18 +203,10 @@ * Called with hotplug disabled. */ cpu_hotplug_enable(); - if (cpu_smt_control == CPU_SMT_DISABLED || - cpu_smt_control == CPU_SMT_FORCE_DISABLED) { - enum cpuhp_smt_control old = cpu_smt_control; - ret = cpuhp_smt_enable(); - if (ret) - goto out; - ret = cpuhp_smt_disable(old); - if (ret) - goto out; - } -out: + ret = arch_cpu_rescan_dead_smt_siblings(); + cpu_hotplug_disable(); + return ret; } --- a/include/linux/cpu.h +++ b/include/linux/cpu.h @@ -172,6 +172,7 @@ void arch_tick_broadcast_enter(void); void arch_tick_broadcast_exit(void); void __noreturn arch_cpu_idle_dead(void); +int arch_cpu_rescan_dead_smt_siblings(void); #ifdef CONFIG_ARCH_HAS_CPU_FINALIZE_INIT void arch_cpu_finalize_init(void); From patchwork Thu Jun 5 15:06:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 894387 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 85D6E21B91D; Thu, 5 Jun 2025 15:09:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136199; cv=none; b=Mlk0bdumg/Icf7GbuL+0DrskVR0L1D40G9PSnNGvjKvX5BSUKsxQ2J+6M3vXxOchGlHHiNHeRB661FPHgxThQxbgkPUu3FcSnIP6XvUVmykawnR7dhGFj6h1pfOthgXRBS2D/Y+ZKIwKLrJyljootNl66RLw+KvDsCQMAeCyZ18= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136199; c=relaxed/simple; bh=iSSuAuBGh82thOhg4pzQZ11bbFxV97kMb3qIoyS8P0A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WozjLk/mj3aPPHOT2+TatNBkU8Et7aotNMcM+btQzh82i2vvO5Q8MrSRvVLU04iRMsmiTgLp9a4RR14ooYdDZUgLDJFmW1ZVaQAWRWxX6Hmb80xAgc/GzXoe7I+XKiuaBFUzivVvmmoth9qkKB60B7mnvwyZiZH/PCXWM8c29T8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=eGVLB0tJ; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="eGVLB0tJ" Received: from kreacher.localnet (unknown [5.63.189.50]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 3E5E966C03D; Thu, 5 Jun 2025 17:09:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1749136186; bh=iSSuAuBGh82thOhg4pzQZ11bbFxV97kMb3qIoyS8P0A=; h=From:Subject:Date; b=eGVLB0tJyqmAsG4tVFxtuopKXVIuPNrSe3u4A4CrBtDgouZ8oDpN97yapfFCoAG/s abN28SaxfFKu18VA64HAvBVh7Fqif+CWyDoydXRwj/TcaVYf88qHcs01jkeY8E+ltt PQjCBO7WVQnAE5s5uvL93y2upH3SOPLPO0JXCRwN6iJquZ/IMXFCLpjeowByWTDETc dM3JdoGqz6GLVCSIDy1HBLgBg+XOGbnX5XPRaMTVogPDNEamOg3w+TdkHGwhH3F2YK TvlI1bEmiscCg/m2Oz1BcU/EQko7a1S3Nl8Nl5Xgpow+gTB69KuiDNLmu/WZf/yJOr Sn62fY5rvICEQ== From: "Rafael J. Wysocki" To: x86 Maintainers , Linux PM Cc: LKML , Len Brown , Peter Zijlstra , Thomas Gleixner , Dave Hansen , Artem Bityutskiy , "Gautham R. Shenoy" , Ingo Molnar , Borislav Petkov , Linux ACPI Subject: [PATCH v1 3/5] intel_idle: Rescan "dead" SMT siblings during initialization Date: Thu, 05 Jun 2025 17:06:08 +0200 Message-ID: <10669885.nUPlyArG6x@rjwysocki.net> In-Reply-To: <2226957.irdbgypaU6@rjwysocki.net> References: <2226957.irdbgypaU6@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 5.63.189.50 X-CLIENT-HOSTNAME: 5.63.189.50 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: dmFkZTEzSEGzZ/ONVrWENr6vcXfS3S2jicISDIUk4t6WJg+Zjj/tMsiKrH6p/W9hVn65rDd2JKDd5uTYEHknKQT2r7pOoqF3rdVD5yhK7Rprhh7g9Zvcj23lpp2rY7UCLtUpLjrE40L5kP2ENOt7F7JFMQrsU0BxCSyD9ImwCg/5uHKqloLfTfX1B6buKhq24d5iBCDj1fuCRg5EDPCCcGoXCAG/xJ8DxnVxdLMqNeA6Murrcf5yV2bVSf0qD3cTb1ZGJEaagT8ZwEZw1hwmHq4GBUTZA/geTkMBRKK8IMyXCx4LjU27eYT2E9Bi7kPkpz1heTPAWpmaTKgTxzYdBmQllqRTLWBelNPAhRVW4VwQLSx0e6PMhuUU5ambMzS8U+bwJv9/Cb+JdSWHenLDzZ5gIBEnagm6yX139s9sck0qGDMIC2y1VfZSq1I0HlNlzbDM9g+JEbxfAfNyfBUr1/iA4QPyC6xAxjLkgosUTidY1ZtgzdnnMqoSNyG1skerF62mk9N9bf0ZQL9SMZyX0pxlH5hCx1RhBz8fW0EtTwi1ytUVZmZzDcpv+j4s00gw5p2NEYVEEfbt+M/N+0uFCEdabEfzDPDSpo+BbtQQbTL7hidWb4l5Atz8WQc2QWNBHPyWMFhP7ehnyK7g2OAEFTH78IqVqkrHFk5a60Goa9VBB6cTlw X-DCC--Metrics: v370.home.net.pl 1024; Body=12 Fuz1=12 Fuz2=12 From: Rafael J. Wysocki Make intel_idle_init() call arch_cpu_rescan_dead_smt_siblings() after successfully registering intel_idle as the cpuidle driver so as to allow the "dead" SMT siblings (if any) to go into deep idle states. This is necessary for the processor to be able to reach deep package C-states (like PC10) going forward which is requisite for reducing power sufficiently in suspend-to-idle, among other things. Signed-off-by: Rafael J. Wysocki --- drivers/idle/intel_idle.c | 2 ++ 1 file changed, 2 insertions(+) --- a/drivers/idle/intel_idle.c +++ b/drivers/idle/intel_idle.c @@ -2506,6 +2506,8 @@ pr_debug("Local APIC timer is reliable in %s\n", boot_cpu_has(X86_FEATURE_ARAT) ? "all C-states" : "C1"); + arch_cpu_rescan_dead_smt_siblings(); + return 0; hp_setup_fail: From patchwork Thu Jun 5 15:07:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 894893 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 E5BAD194A60; Thu, 5 Jun 2025 15:09:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136196; cv=none; b=PwALTIqZSduJA8Hg3qfZ8LuWDilcw6ZyxLs59+szpa4VpGL6r/CGn8CheBp4dbucdQ7WJa5p0vcxur1UyQDbD1zvNatRzuisqGNv0MHElczbXrf8lMbqrMoAfhSOLvHVjtJ3woSxAJsOnJflGi1Ho/5rQ1cKneNmHajDlkoDwF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136196; c=relaxed/simple; bh=bUZAefnMoQ6GyPP0LPJ56AhGcZo1AvmNMwPv/Ep77s8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rC5ADN592nsjStMMvtf3S46WtArhoUGinlY7OHgAzt+pes4dj5iKTma5a779kFE1N/nA5OUqLlDv9WluM1JXKM/kNA6CTgZE5X/V03VUFev4BK9VlSoTLHL9MKLLV6hN0VzNlvjHHR7GFwNteubUf4V9bhGlb4qoMUMSb0/5VGI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=b/SLqO4d; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="b/SLqO4d" Received: from kreacher.localnet (unknown [5.63.189.50]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 25F0166C03A; Thu, 5 Jun 2025 17:09:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1749136185; bh=bUZAefnMoQ6GyPP0LPJ56AhGcZo1AvmNMwPv/Ep77s8=; h=From:Subject:Date; b=b/SLqO4dkgIS3CV1d41iGGnvVFhMbaQUmU7OjKM/ZhhMVeJtXoyHxMsz+jR/weZqg Vo8H9Dbm+Zly+mvWbOKm+7wvFfxjNGfGcs+49VZgueNCJUzhrgNksGZcihOUkW7vfT xGNeLYSVZ8t32YWM4yhE7JtpfPFT+IGcskIKOZihXs7NPH4NXisa68T7J6DjFwq66e 5gXgqoA477y8tUCQ9+Chs+B+Svq4MuqSAdAxQ2oGXIDULuV/F2iFUSLwrrP6c1Kh3x W+K9BozF/5fyw5+i4QzzUlK3iKLNh/wStkSOEK9uGI3YHdeWri6F0icoow10qaHQwD rJhw2txD083QA== From: "Rafael J. Wysocki" To: x86 Maintainers , Linux PM Cc: LKML , Len Brown , Peter Zijlstra , Thomas Gleixner , Dave Hansen , Artem Bityutskiy , "Gautham R. Shenoy" , Ingo Molnar , Borislav Petkov , Linux ACPI Subject: [PATCH v1 4/5] ACPI: processor: Rescan "dead" SMT siblings during initialization Date: Thu, 05 Jun 2025 17:07:31 +0200 Message-ID: <2005721.PYKUYFuaPT@rjwysocki.net> In-Reply-To: <2226957.irdbgypaU6@rjwysocki.net> References: <2226957.irdbgypaU6@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 5.63.189.50 X-CLIENT-HOSTNAME: 5.63.189.50 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: dmFkZTEzSEGzZ/ONVrWENr6vcXfS3S2jicISDIUk4t6WJg+Zjj/tMsiKrH6p/W9hVn65rDd2JKDd5uTYEHknKQT2r7pOoqF3rdVD5yhK7Rprhh7g9Zvcj23lpp2rY7UCLtUpLjrE40L5kP2ENOt7F7JFMQrsU0BxCSyD9ImwCg/5uHKqloLfTfX1B6buKhq24d5iBCDj1fuCRg5EDPCCcGoXCAG/xJ8DxnVxdLMqNeA6Murrcf5yV2bVSf0qD3cTb1ZGJEaagT8ZwEZw1hwmHq4GBUTZA/geTkMBRKK8IMyXCx4LjU27eYT2E9Bi7kPkpz1heTPAWpmaTKgTxzYdBmQllqRTWWWLh9bdarQACukaKKD1gzL4waUdt4/zs1VIPKSdqhTq/U/RVz897VTG9yYY8jkWxQq6PgqADFxzcZK1Xbl84dnPBPiNZZJp2JKO3TrdgQRIF0ftcWkGnuwtdjNGmbFzYx0xs6DyphKqnpfw0doJg/j4R9j02/CnAO0VHZgdc3XcoNq5AfMwnKkkfMlJ0VVvqv0agcecjwk98bxqwjhsD7SzajVr+ob2CJh5RClOTDUea/jBX/8ymupS2mmL96AXsULSd9hO9Jeu+zaC5gH8Q3nNw0PWwvWhQgNX6sclo7xfsl+qVxK82MnU768YcP4Apk++8jWA1uH4MOmnZrpnjw X-DCC--Metrics: v370.home.net.pl 1024; Body=12 Fuz1=12 Fuz2=12 From: Rafael J. Wysocki Make acpi_processor_driver_init() call arch_cpu_rescan_dead_smt_siblings(), via a new wrapper function called acpi_idle_rescan_dead_smt_siblings(), after successfully initializing the driver, to allow the "dead" SMT siblings to go into deep idle states, which is necessary for the processor to be able to reach deep package C-states (like PC10) going forward, so that power can be reduced sufficiently in suspend-to-idle, among other things. However, do it only if the ACPI idle driver is the current cpuidle driver (otherwise it is assumed that another cpuidle driver will take care of this) and avoid doing it on architectures other than x86. Signed-off-by: Rafael J. Wysocki --- drivers/acpi/internal.h | 6 ++++++ drivers/acpi/processor_driver.c | 3 +++ drivers/acpi/processor_idle.c | 8 ++++++++ 3 files changed, 17 insertions(+) --- a/drivers/acpi/internal.h +++ b/drivers/acpi/internal.h @@ -175,6 +175,12 @@ static inline void acpi_early_processor_control_setup(void) {} #endif +#ifdef CONFIG_ACPI_PROCESSOR_CSTATE +void acpi_idle_rescan_dead_smt_siblings(void); +#else +static inline void acpi_idle_rescan_dead_smt_siblings(void) {} +#endif + /* -------------------------------------------------------------------------- Embedded Controller -------------------------------------------------------------------------- */ --- a/drivers/acpi/processor_driver.c +++ b/drivers/acpi/processor_driver.c @@ -279,6 +279,9 @@ * after acpi_cppc_processor_probe() has been called for all online CPUs */ acpi_processor_init_invariance_cppc(); + + acpi_idle_rescan_dead_smt_siblings(); + return 0; err: driver_unregister(&acpi_processor_driver); --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c @@ -24,6 +24,8 @@ #include #include +#include "internal.h" + /* * Include the apic definitions for x86 to have the APIC timer related defines * available also for UP (on SMP it gets magically included via linux/smp.h). @@ -55,6 +57,12 @@ }; #ifdef CONFIG_ACPI_PROCESSOR_CSTATE +void acpi_idle_rescan_dead_smt_siblings(void) +{ + if (cpuidle_get_driver() == &acpi_idle_driver) + arch_cpu_rescan_dead_smt_siblings(); +} + static DEFINE_PER_CPU(struct acpi_processor_cx * [CPUIDLE_STATE_MAX], acpi_cstate); From patchwork Thu Jun 5 15:09:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 894388 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 E83EA1CCB40; Thu, 5 Jun 2025 15:09:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136195; cv=none; b=iCZvl0SHR6HGVnK7Cqw1MrH3egO1WVEXwjwtmogLc3Nz600uGlgUcSUelGgY895aE5kOQD9+fA2ev/PVVZRownEmdBPyEvfm1VfcsPQJQ74JXFoOg19LiZJz5xpCRKwZ6GIgwMzmJXUAz5jrUoxh3iRfqk/VSv5r5Ab7ClFKq/4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749136195; c=relaxed/simple; bh=5w6Yv93zAQ3ErcgdTrPiDO9Q9Wfrs45HpAf7J5N0gZQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=s9jeeM+0BV2LpBdI7T3+50OT127mbC+6zze6e641ohyQt09xgP6c53FaJS2llUWgClBgl0v274quT9LjIX9npW0GkNlFkjhueF+FoMF9Rgb0lR6EoemuY22m4J4THyO3lEbEe+ezLHFGHmH69yERNna937QXdX9GEZ4Yfi/jBG8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=qSH1k1Bt; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="qSH1k1Bt" Received: from kreacher.localnet (unknown [5.63.189.50]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 29D2566C036; Thu, 5 Jun 2025 17:09:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1749136184; bh=5w6Yv93zAQ3ErcgdTrPiDO9Q9Wfrs45HpAf7J5N0gZQ=; h=From:Subject:Date; b=qSH1k1BtkumQjRlAiVzukEKaymWbwSyIEpgjTJCKwbbWza9OEwLmY60+XkKsJH/yi 0eChstEywNEVUS5+ZcCor3NJkdVZxYWwedkT4EnfaDFc9WwPayV/zO1qhCbaU4CW9Z 2YwyJRFpzW+v0vHX7daAFV0kVPMH4kBfPzRB833qY3U20izZP7DPnF7v8+qZHyk3rC FM6RwjMcgrStNBR79iBAOTFmLToLPd/QbiXb5UqpH25bF3N86pgbMd4am7m35Uir/s Gl47N9xeatvxdHmtOYVRp3BrMGzadQyqAWCr8aKT0HqTChfLq4NQRz5mVL2JV8vv95 UnQEwyMZnDjKg== From: "Rafael J. Wysocki" To: x86 Maintainers , Linux PM Cc: LKML , Len Brown , Peter Zijlstra , Thomas Gleixner , Dave Hansen , Artem Bityutskiy , "Gautham R. Shenoy" , Ingo Molnar , Borislav Petkov , Linux ACPI Subject: [PATCH v1 5/5] Reapply "x86/smp: Eliminate mwait_play_dead_cpuid_hint()" Date: Thu, 05 Jun 2025 17:09:35 +0200 Message-ID: <7813065.EvYhyI6sBW@rjwysocki.net> In-Reply-To: <2226957.irdbgypaU6@rjwysocki.net> References: <2226957.irdbgypaU6@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 5.63.189.50 X-CLIENT-HOSTNAME: 5.63.189.50 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: dmFkZTEzSEGzZ/ONVrWENr6vcXfS3S2jicISDIUk4t6WJg+Zjj/tMsiKrH6p/W9hVn65rDd2JKDd5uTYEHknKQT2r7pOoqF3rdVD5yhK7Rprhh7g9Zvcj23lpp2rY7UCLtUpLjrE40L5kP2ENOt7F7JFMQrsU0BxCSyD9ImwCg/5uHKqloLfTfX1B6buKhq24d5iBCDj1fuCRg5EDPCCcGoXCAG/xJ8DxnVxdLMqNeA6Murrcf5yV2bVSf0qD3cTb1ZGJEaagT8ZwEZw1hwmHq4GBUTZA/geTkMBRKK8IMyXCx4LjU27eYT2E9Bi7kPkpz1heTPAWpmaTKgTxzYdBmQllqRTl/Yl2mbTQxvwrPd3I7zV7RAKW8lL8zC1Qqzv74Nqlxzwid9Qnd2k+6vzP8M8lTjbI3EUY48Qn0InRxGMdT0mI6F/wpdr91v91Wod4Xt1EmxclbwDJX2Is1vMQRh2U2mZLIDQN0M9sNrj+X3o5zkShMz+j9Z0XGTwte4UyGTpMainqH1zLPnxQEI/Cs8t6faBMja0m/aGPSYG7PZDZ0JZ8/fORk3jqIccuBkwbYmzOXwKB1kP9qI0b1DCJzVBeBsHtWzitHFlQ9cMDPKTooa6zSw9QtOGbQS78UXLSL9r4vruh1z2hDnMKDwCCPHN4KlkDj1wHu+122qK3UBoDbQH+w X-DCC--Metrics: v370.home.net.pl 1024; Body=12 Fuz1=12 Fuz2=12 From: "Rafael J. Wysocki" Revert commit 70523f335734 ("Revert "x86/smp: Eliminate mwait_play_dead_cpuid_hint()"") to reapply the changes from commit 96040f7273e2 ("x86/smp: Eliminate mwait_play_dead_cpuid_hint()") reverted by it. Previously, these changes caused idle power to rise on systems booting with "nosmt" in the kernel command line because they effectively caused "dead" SMT siblings to remain in idle state C1 after executing the HLT instruction, which prevented the processor from reaching package idle states deeper than PC2 going forward. Now, the "dead" SMT siblings are rescanned after initializing a proper cpuidle driver for the processor (either intel_idle or ACPI idle), at which point they are able to enter a sufficiently deep idle state in native_play_dead() via cpuidle, so the code changes in question can be reapplied. Signed-off-by: Rafael J. Wysocki --- arch/x86/kernel/smpboot.c | 54 +++++----------------------------------------- 1 file changed, 7 insertions(+), 47 deletions(-) --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1238,6 +1238,10 @@ local_irq_disable(); } +/* + * We need to flush the caches before going to sleep, lest we have + * dirty data in our caches when we come back up. + */ void __noreturn mwait_play_dead(unsigned int eax_hint) { struct mwait_cpu_dead *md = this_cpu_ptr(&mwait_cpu_dead); @@ -1284,50 +1288,6 @@ } /* - * We need to flush the caches before going to sleep, lest we have - * dirty data in our caches when we come back up. - */ -static inline void mwait_play_dead_cpuid_hint(void) -{ - unsigned int eax, ebx, ecx, edx; - unsigned int highest_cstate = 0; - unsigned int highest_subcstate = 0; - int i; - - if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD || - boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) - return; - if (!this_cpu_has(X86_FEATURE_MWAIT)) - return; - if (!this_cpu_has(X86_FEATURE_CLFLUSH)) - return; - - eax = CPUID_LEAF_MWAIT; - ecx = 0; - native_cpuid(&eax, &ebx, &ecx, &edx); - - /* - * eax will be 0 if EDX enumeration is not valid. - * Initialized below to cstate, sub_cstate value when EDX is valid. - */ - if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED)) { - eax = 0; - } else { - edx >>= MWAIT_SUBSTATE_SIZE; - for (i = 0; i < 7 && edx; i++, edx >>= MWAIT_SUBSTATE_SIZE) { - if (edx & MWAIT_SUBSTATE_MASK) { - highest_cstate = i; - highest_subcstate = edx & MWAIT_SUBSTATE_MASK; - } - } - eax = (highest_cstate << MWAIT_SUBSTATE_SIZE) | - (highest_subcstate - 1); - } - - mwait_play_dead(eax); -} - -/* * Kick all "offline" CPUs out of mwait on kexec(). See comment in * mwait_play_dead(). */ @@ -1377,9 +1337,9 @@ play_dead_common(); tboot_shutdown(TB_SHUTDOWN_WFS); - mwait_play_dead_cpuid_hint(); - if (cpuidle_play_dead()) - hlt_play_dead(); + /* Below returns only on error. */ + cpuidle_play_dead(); + hlt_play_dead(); } #else /* ... !CONFIG_HOTPLUG_CPU */