From nobody Fri Oct 31 04:18:57 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1751646884; cv=none; d=zohomail.com; s=zohoarc; b=Ex1Zgv1lU17Bprn9cypvZn8uZvnA9HAqmz6xxaDRdl6+bzsaxhv+DvxLBZw8dX4ADcaWzdKaOtcSaUagptLhndtJYWotp4hFWinkXyxcGILIElMKDu/qBYS7UwI95gw1H1IXf0geEZBtu1IWLSYHe/UqGied26cap3LUUnO2Omk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646884; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YO+Mvsl7T4wCFNFbuv0DlhNSF3ioM+Cmaq7CZFYbXdE=; b=BeFYIhs8Z1PsNhSH69EuYFf1YqCHt1ABrVu0mbNd7Bxw4yfR3dwO1TyVA88iIkkGa0VlH4BolfgXe3C1KUYEol12nFQ3gplPCOqz83OzXng+phuzOveNJDBLblxkkIFbjEErD3T0llavJruV8ASxuwwZ7fQ9bfELvnk0zMkH8A8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1751646884355939.7351935052034; Fri, 4 Jul 2025 09:34:44 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1033544.1406923 (Exim 4.92) (envelope-from ) id 1uXjMk-0006Vl-V6; Fri, 04 Jul 2025 16:34:22 +0000 Received: by outflank-mailman (output) from mailman id 1033544.1406923; Fri, 04 Jul 2025 16:34:22 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uXjMk-0006Tz-Np; Fri, 04 Jul 2025 16:34:22 +0000 Received: by outflank-mailman (input) for mailman id 1033544; Fri, 04 Jul 2025 16:34:20 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uXjMi-0005FA-Pd for xen-devel@lists.xenproject.org; Fri, 04 Jul 2025 16:34:20 +0000 Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [2a00:1450:4864:20::331]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id bb1b1a91-58f4-11f0-b894-0df219b8e170; Fri, 04 Jul 2025 18:34:18 +0200 (CEST) Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-454ac069223so11402595e9.1 for ; Fri, 04 Jul 2025 09:34:18 -0700 (PDT) Received: from localhost.localdomain (host-92-26-98-202.as13285.net. [92.26.98.202]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-454a9989fcesm59199345e9.16.2025.07.04.09.34.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:34:17 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: bb1b1a91-58f4-11f0-b894-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1751646858; x=1752251658; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YO+Mvsl7T4wCFNFbuv0DlhNSF3ioM+Cmaq7CZFYbXdE=; b=tMNWO0DfFlXx2U0P/0b1rThrfB8ZZmkY5r1eaBJZ1VDIKmPwXL73LqGGxAP/dWFX/p CPurcNZsbPHoYrVIssPHx9sYFz4JGTG5SRLOC6mNB5gZlToyY3q2ZW5z9YtFwwaciQE6 er+BZ5VsMCtgPQTA4VwKJuuHCoIqH7wc1I5To= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646858; x=1752251658; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YO+Mvsl7T4wCFNFbuv0DlhNSF3ioM+Cmaq7CZFYbXdE=; b=GPdBZt/VzYajvApE00MMTq3y8Ysa5PtitHLWxi0p6ViJKoL8u2Sm6oAR40LqbEtktw 7Kj89KGLG/LqV9KYz9iWtJFgJoLkOFfwNhPof2gEUMlp6WlOZKckT4FynJ0pGRmQk1pR 9+64Z6VTd/Mmwoqpww9AyPviuj70RT/5hliEbvO7RsVVXQQtnNOsVjX3WcvxGcfIZSwE IFzw/+tLrOUi3XN9ODC7NbP9gaIGItDoeoPW6uIX0ChQ6W6N1OP80oB9/fZZFGP5csrl TreS4S1C/rj9fv3SYuleIvhnkm5AOZQR9gO92D7LJT7vV1gqGV7B8KTd0cI0haSZZ2OS TsgQ== X-Gm-Message-State: AOJu0Yzw5GYePPJVpj6+6NZDoWrH3nIUyFjOT9/J1XrZPrV5T9H+s9bC gTqOLC2H/Xandhs6//a+o4tE9p1uD7oPIJ4dgVyIl2LD/G0BgzdTiUNBjHSwqVu8bz01w4PR8TA gigqaxmFehg== X-Gm-Gg: ASbGncszI+tL9I06bqDQV66J1IDDBE6J833BtXq8FwAvgeKX8FGrr5sED2MWvxgKFJF 87Xhy5txXVuXDpQuut30PhuAJKyAkJ1b4qTOcOqXF/bQW34uHcvUUM7jXrGfAYAy1/9TmSVpcYU MOMEX8byXiBqHbdQfbF/40nqkpNGNgPdZn3uD0af0UZv2By587dZXXoSGxzHV0JMsdeUna/MSbD 9entOm7WfpMn6doVUqNVadCQw0Ky4whdZkulXIMnnM5YZrggXXKf/fK2baalWECQmbyxbOYFzTl fQ2BPIet+xlTH5V3qbD31vEUcp49kSl97JQLoPG4xzXHL6O6j+NOTyzBUhsIoY9350xkjQ1V+3y Bg+lwPMv39eJ1J01Vfw99woVcdH0r/7b+z9c= X-Google-Smtp-Source: AGHT+IE2d/OampR6SLtstlBq6hmveCWj/rNyeENkROaUbFT4K4SfTi1e0fXMFWyVMIv6wvHs+240Ew== X-Received: by 2002:a05:600c:1da0:b0:453:835a:db with SMTP id 5b1f17b1804b1-454b1f471fdmr32877685e9.4.1751646857639; Fri, 04 Jul 2025 09:34:17 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Anthony PERARD , Michal Orzel , Julien Grall , Stefano Stabellini Subject: [PATCH v2 6/6] x86/idle: Fix buggy "x86/mwait-idle: enable interrupts before C1 on Xeons" Date: Fri, 4 Jul 2025 17:34:10 +0100 Message-Id: <20250704163410.1412367-7-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250704163410.1412367-1-andrew.cooper3@citrix.com> References: <20250704163410.1412367-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1751646884995116600 The check of this_softirq_pending must be performed with irqs disabled, but this property was broken by an attempt to optimise entry/exit latency. Commit c227233ad64c in Linux (which we copied into Xen) was fixed up by edc8fc01f608 in Linux, which we have so far missed. Going to sleep without waking on interrupts is nonsensical outside of play_dead(), so overload this to select between two possible MWAITs, the second using the STI shadow to cover MWAIT for exactly the same reason as we do in safe_halt(). Fixes: b17e0ec72ede ("x86/mwait-idle: enable interrupts before C1 on Xeons") Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Anthony PERARD CC: Michal Orzel CC: Julien Grall CC: Stefano Stabellini --- xen/arch/x86/acpi/cpu_idle.c | 16 +++++++++++++++- xen/arch/x86/cpu/mwait-idle.c | 8 ++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/xen/arch/x86/acpi/cpu_idle.c b/xen/arch/x86/acpi/cpu_idle.c index c5d7a6c6fe2a..e50a9234a0d4 100644 --- a/xen/arch/x86/acpi/cpu_idle.c +++ b/xen/arch/x86/acpi/cpu_idle.c @@ -80,6 +80,13 @@ static always_inline void mwait(unsigned int eax, unsign= ed int ecx) :: "a" (eax), "c" (ecx) ); } =20 +static always_inline void sti_mwait_cli(unsigned int eax, unsigned int ecx) +{ + /* STI shadow covers MWAIT. */ + asm volatile ( "sti; mwait; cli" + :: "a" (eax), "c" (ecx) ); +} + #define GET_HW_RES_IN_NS(msr, val) \ do { rdmsrl(msr, val); val =3D tsc_ticks2ns(val); } while( 0 ) #define GET_MC6_RES(val) GET_HW_RES_IN_NS(0x664, val) @@ -461,12 +468,19 @@ void mwait_idle_with_hints(unsigned int eax, unsigned= int ecx) =20 monitor(this_softirq_pending, 0, 0); =20 + ASSERT(!local_irq_is_enabled()); + if ( !*this_softirq_pending ) { struct cpu_info *info =3D get_cpu_info(); =20 spec_ctrl_enter_idle(info); - mwait(eax, ecx); + + if ( ecx & MWAIT_ECX_INTERRUPT_BREAK ) + mwait(eax, ecx); + else + sti_mwait_cli(eax, ecx); + spec_ctrl_exit_idle(info); } =20 diff --git a/xen/arch/x86/cpu/mwait-idle.c b/xen/arch/x86/cpu/mwait-idle.c index 5c16f5ad3a82..5e98011bfd0c 100644 --- a/xen/arch/x86/cpu/mwait-idle.c +++ b/xen/arch/x86/cpu/mwait-idle.c @@ -946,12 +946,8 @@ static void cf_check mwait_idle(void) =20 update_last_cx_stat(power, cx, before); =20 - if (cx->irq_enable_early) - local_irq_enable(); - - mwait_idle_with_hints(cx->address, MWAIT_ECX_INTERRUPT_BREAK); - - local_irq_disable(); + mwait_idle_with_hints(cx->address, + cx->irq_enable_early ? 0 : MWAIT_ECX_INTERRUPT_BREAK); =20 after =3D alternative_call(cpuidle_get_tick); =20 --=20 2.39.5