From nobody Tue Apr 7 05:44:54 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 406D33264D4 for ; Fri, 3 Apr 2026 04:08:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775189325; cv=none; b=pcjulDm0Ai9vQpc278yKheTP9vTTfU5uKyxvFXOZYNNI+ZGQ0NmzhUqVhdkqHxl7phRu7ObNnDZBd47cqeADRLgMBTJbsJtLG7zOOhNeG61Edhuti2lTSf9T1TnKflgLeYyRXtr/5YTPRhFZcMuwuMOcot0BRdlNIv59p7z1h64= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775189325; c=relaxed/simple; bh=thq3VzSFjwfIt01ulMHZCpwaLs0qWAz0pOOOeaVlRZ8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=BpJclcJQUPaerHCz8b1DLDTpt99MCEAEs5CTyOCOlYBA1If+RzATxF7Fx+k8cEgNu1tShyIARH378ZG16M1gbVBpoBB+nCMs2kxAFlnnN/W2k6JQ7TxygEIcXrPB9Ou073ZFCePcRy54SlfJeQ3Z2JVqMU87UeqNYymP0U8H88o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=gLsj0wd3; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=VYNnOZMb; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="gLsj0wd3"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="VYNnOZMb" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6333OHPe1525957 for ; Fri, 3 Apr 2026 04:08:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=pc7bw6RQRj5E6KmwuZe5xU g8kjZ/QHAV3XPbyk7ObnA=; b=gLsj0wd39DWcUxXTNFSXVY3+6WEMYXKEpARPZw 8KRTKHkjSRd+plcVHQtTMJLYG5Q6bb1gclBsKl10voc5+zQrhwg/keYOqANKAOX3 EbrLfw/9RBDbErtkWRCqlPMhqKjlfYwBA3fPgvJuwQtKWu7k5P5qGQY1n2N7U95+ suaZXzQwjZsTdMC3UFmR0Wt33y7ncX7zSdgVaI9AthBy9kf73nP2p4hxSWsxwNBq s8exVrZZCH7bD9xSNfDP90M40U8DghaXgnNjYYctP3M+2DHKlhpcaXkmRFIlzJQn C8+diy1o2Jo5bSNLHWEkzbzde4c/kYm1kmEBvJ22xL+N0gAQ== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d9jcucetf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 03 Apr 2026 04:08:43 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b0bf2b3879so39006855ad.1 for ; Thu, 02 Apr 2026 21:08:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775189322; x=1775794122; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=pc7bw6RQRj5E6KmwuZe5xUg8kjZ/QHAV3XPbyk7ObnA=; b=VYNnOZMbRbA7rnffvWOtV8h1NLDs4a47e6U894TNxufeiWls5yGJ3O69589KWD+gv3 /wfSTkGXhNVPoueOIm2Fk64/h847lz1Thk1+T/iUsEvDICzUlA02gqgf0Uzk7Wp26fH1 jUVLSFAUcKyr5wlmebuD5cvqQNXPbfC7vC/Ppp6LMno8p1nxw5FpfCzwQfpfFp9WTuuS OX+TjUmxCpvxsmIDrqg+khD8fEgM0eVlEnENOHDyZAsLR27wGtYjppF8tKuxTJKPs5Xf /rc4MUO7A799RDdMn84UTX68IIZdc13/spWpr219rwMPOHlYjTT4RYW9jPoZZyrg4qM5 NdaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775189322; x=1775794122; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=pc7bw6RQRj5E6KmwuZe5xUg8kjZ/QHAV3XPbyk7ObnA=; b=Tcgoe4MGSxpaxTt7L6kSLh0SQ/VluFC5EydjbbP3qqqWaHBdrAgwGQ+rC1kI85Jw5/ yQI5azhMjqOKAE18omn3jXiI8tDcXwEUyOQ5TOdfWjvqjxSsHsUBrwGz5zwEP9uPTIak iNsM1eMK1qwUny/pCA4wArhcrfZkmCQOQjayC78UpVXVdkAPjbfQIF+rjiWPI21z5apY A2D2S7Kyj+j7Thq650p3pNDRF2bqqp2aopr+fnrbQ5VD3spZvsveHS+FXS3GPbezFznU +xE9DXhnYqZ1XsDqIFcSCLHtddIRDDCucyGExhRIGk5evIMc0bAuwyetIPK698J4MRQU SJ0g== X-Forwarded-Encrypted: i=1; AJvYcCUyWbbeLiR/Th6mAF5bh6iuUnDA5QE2L/3qdgTtXdVcfqcokcwUIxeMDyM5Pzx1VUlmZbuO+A3k19QFRXE=@vger.kernel.org X-Gm-Message-State: AOJu0Yyfk0ibzH1la4ELL7v4qmcha3yR8YoPZ/mGeLxpEx+0rHdHOOMQ gdO+1D+xlTh8n8RBCVDt3xNDbu329DHT272F6tw4paG2EDugJg48PBjA9nb9kRGeW6EVwaM6jMM utONYXYTk8pR4jjkR/4dFv6+5tDLWzmG2YMXv6DvcsdZQR4D3jLnQ9wYcW2rdYKkyoSA= X-Gm-Gg: AeBDieueqQE3HW9e9dtw/Y3ntgEBO1B+Gli0SmVlJ3h71pOAxpKk6Z858pxaGaAuPfx O68Pen15FjRKxJt+E+QaK9+JvkrCLscKOnogGEeufFtbl2lydC/vy8uqUVa6PMaGmfGu3XqtEJt UIACZ9ydym1YwQgbSI3pXpUjpn/yTiOmiXd0fGkx+YZJ+Pwjkn2L1+5RfV04e/u/mtJ+6NumDm2 P/6djLJcpivqcYaeQR92qNF/WXDbqnFyz5o/41QkKjRkOw9SdNgUXhoMstL4bmhS7hfrWmqqF2H 21LV6PfEDXvT+glhWs8KbZ3DhLDh06OpPVKzMRdtWsBXPv7x6lx53LKnUEl1vW4urg3QwqJGQnK qab3xXLw8sCNV85jPpuF62wGGAcbUioi47heLQSoumfD7BfaMlw== X-Received: by 2002:a17:903:3b84:b0:2b2:71b4:a3cf with SMTP id d9443c01a7336-2b2816e4279mr18947535ad.19.1775189321655; Thu, 02 Apr 2026 21:08:41 -0700 (PDT) X-Received: by 2002:a17:903:3b84:b0:2b2:71b4:a3cf with SMTP id d9443c01a7336-2b2816e4279mr18947345ad.19.1775189321200; Thu, 02 Apr 2026 21:08:41 -0700 (PDT) Received: from hu-mkshah-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2749c38adsm56569065ad.69.2026.04.02.21.08.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 21:08:40 -0700 (PDT) From: Maulik Shah Date: Fri, 03 Apr 2026 09:38:36 +0530 Subject: [PATCH v2] cpuidle: Deny idle entry when CPU already have IPI interrupt pending 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260403-cpuidle_ipi-v2-1-b3e44b032e2c@oss.qualcomm.com> X-B4-Tracking: v=1; b=H4sIAEM9z2kC/22MUQvCIBRG/8q4zznUmVRP/Y8YIXptF7a5tEkx/ O/Znnv54HxwzgYJI2GCS7NBxEyJwlxBHhqwg5kfyMhVBsml5p3QzC4ruRHvtBBTViveaX826gT VWCJ6eu+1W195oPQK8bPHs/i9/ztZMMEc9153R+4VymtIqX2uZrRhmto60JdSvkIwwYCtAAAA X-Change-ID: 20260316-cpuidle_ipi-4c64036f9a48 To: "Rafael J. Wysocki" , Daniel Lezcano , Christian Loehle , Ulf Hansson Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Maulik Shah X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1775189318; l=2561; i=maulik.shah@oss.qualcomm.com; s=20240109; h=from:subject:message-id; bh=thq3VzSFjwfIt01ulMHZCpwaLs0qWAz0pOOOeaVlRZ8=; b=btk/eitDBbl5tw+fW5frTKJuCcLxLdei3fZAl4Nbg4YrEqx7WHxxakd+N92RA3zgX5b08zlNj 7sz07SNscqfCrnRYsEDj7znOUkVYJlaGAnrgh0doYScSPJJpbRBD/9h X-Developer-Key: i=maulik.shah@oss.qualcomm.com; a=ed25519; pk=bd9h5FIIliUddIk8p3BlQWBlzKEQ/YW5V+fe759hTWQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAzMDAzMyBTYWx0ZWRfX4XSQWny0/XVd yilj/swA9Zua+RUyUnYXg83Wz8Be16rPpjCGFs1bZCJOSxkESRIeTNPSpgsn5GmzI8xiEKFQoE5 x3ynDjFMbyL+4zbGpW2f7ygGKrDvPgTQSFUoZaVnU0NwhvvtIIsjX0AdBVjRTcUdRTZ2/3ThSCp motLq8eQV4zwGSVTH1Y9AUlvPXNpJlalYVRjEH417A6dDfyzfpOmK3KDUFkUpgsRKADDBXhMpJY R7vUZq3+MatRsQG8IIhPpYFwT/e1D4E0EW8bYk3oCw2654P6ISthXwvAvuEmuXs5uyebXnsCXlL gBNi1Y8r/sTG91SqURjqRz7NXYZnvheK6xJB3+d+2n2vzS9Qunt4cRaVL5j/Oo/0Cf9Cy8C0tOg 9GZAGI+4AnAEYvJafeZ4733IfV88ycWdMct45l7r1jtJWijr7aJ6E7q/wDuFcBLDOV0W9qbOfbg ZlPlk1OCOXdvscQFG/A== X-Proofpoint-GUID: zQVnPvtBONVnInSx9bNf43BaR264JhF0 X-Authority-Analysis: v=2.4 cv=eYYwvrEH c=1 sm=1 tr=0 ts=69cf3d4b cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=NEAV23lmAAAA:8 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=5VM2pUZDyY3GmIPixBcA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-ORIG-GUID: zQVnPvtBONVnInSx9bNf43BaR264JhF0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-03_01,2026-04-02_05,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 phishscore=0 impostorscore=0 malwarescore=0 bulkscore=0 adultscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604030033 CPU can get IPI interrupt from another CPU while it is executing cpuidle_select() or about to execute same. The selection do not account for pending interrupts and may continue to enter selected idle state only to exit immediately. Example trace collected when there is cross CPU IPI. [000] 154.892148: sched_waking: comm=3Dsugov:4 pid=3D491 prio=3D-1 target_= cpu=3D007 [000] 154.892148: ipi_raise: target_mask=3D00000000,00000080 (Function cal= l interrupts) [007] 154.892162: cpu_idle: state=3D2 cpu_id=3D7 [007] 154.892208: cpu_idle: state=3D4294967295 cpu_id=3D7 [007] 154.892211: irq_handler_entry: irq=3D2 name=3DIPI [007] 154.892211: ipi_entry: (Function call interrupts) [007] 154.892213: sched_wakeup: comm=3Dsugov:4 pid=3D491 prio=3D-1 target_= cpu=3D007 [007] 154.892214: ipi_exit: (Function call interrupts) This impacts performance and the above count increments. commit ccde6525183c ("smp: Introduce a helper function to check for pending IPIs") already introduced a helper function to check the pending IPIs and it is used in pmdomain governor to deny the cluster level idle state when there is a pending IPI on any of cluster CPUs. This however does not stop CPU to enter CPU level idle state. Make use of same at CPUidle to deny the idle entry when there is already IPI pending. With change observing glmark2 [1] off screen scores improving in the range of 25% to 30% on Qualcomm lemans-evk board which is arm64 based having two clusters each with 4 CPUs. [1] https://github.com/glmark2/glmark2 Signed-off-by: Maulik Shah --- Changes in v2: - Fix cpumask argument of cpus_peek_for_pending_ipi() to take single cpu - Link to v1: https://lore.kernel.org/r/20260316-cpuidle_ipi-v1-1-d0ff6350f= 4e2@oss.qualcomm.com --- drivers/cpuidle/cpuidle.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index c7876e9e024f9076663063ad21cfc69343fdbbe7..c01e57df64ca5af8c28da3d9715= 00b3f38306cdf 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -224,6 +224,9 @@ noinstr int cpuidle_enter_state(struct cpuidle_device *= dev, bool broadcast =3D !!(target_state->flags & CPUIDLE_FLAG_TIMER_STOP); ktime_t time_start, time_end; =20 + if (cpus_peek_for_pending_ipi(cpumask_of(dev->cpu))) + return -EBUSY; + instrumentation_begin(); =20 /* --- base-commit: b84a0ebe421ca56995ff78b66307667b62b3a900 change-id: 20260316-cpuidle_ipi-4c64036f9a48 Best regards, --=20 Maulik Shah