From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 F39AB208A6 for ; Sun, 28 Jan 2024 13:28:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706448500; cv=none; b=AfUoRKaogpvqrwNvQ5ouSDBwnXjNq3X/NgKUb4gngWlV+MOTkgeKqkpZ/wqc8ENzci3ylnKvcBhb2f2VkszA4IAyItqqkVE2qERK8kQFgdOBroBVzBasUDj0lFzOD61P0GtwvguUZ0L5lV9GxDSDQhto3GtdqSwVhp2B01vG1KA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706448500; c=relaxed/simple; bh=PGASfPJtetItxs75hHstoZLUjCt1u7M5lKj4Owasdfc=; h=Date:Message-ID:From:To:Cc:Subject:In-Reply-To:References: MIME-Version:Content-Type; b=ATjcrXuaABl2MKhjTXSP6h1AmU2Zf6/BJyyYuzJI1F0/cZmhiMo/WnBEnt1z+PBrDpDMc3NERIM1wLnE6pGMgW6APnF5xD0P28HL6r19gnLTYVWGcB7AYy7AasT8gWlNej3kMEth0jdNynV8IuS3lI7Vnk+JwcH0/4kGtsPKCmI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=J1+sxUVY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="J1+sxUVY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6050AC433C7; Sun, 28 Jan 2024 13:28:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706448499; bh=PGASfPJtetItxs75hHstoZLUjCt1u7M5lKj4Owasdfc=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=J1+sxUVYtx9s45y8oK7LKPBXjVczJgKivL0on1CROCwrAZ+6giQ33gp3EqLiGMPbu 51POfmO3BNP9DJFp3Udz+j7OY4sxx9CVDnu7KvDsua2x3UJkLOxd9smaB2oTvlxq+K uMLqm7/Q7w25iESId13rYWd8v5goZDoskMGMyW2Ol3338vR+JqddcaZ9cQJWY/Ejp6 Vok+XNNopGQUQA0m+uq0UQ+3ZyBuxH6OWWcArEq42Yfx+ZO0z/6fi7EL7OE8PFWC6M btssfE7BdIKk5D16hIyTKjLkEvDNdEsK2yGxo8mHO3N37XgWBswdg6QpA5mP5aOuqN f1aEIBvDkLb2Q== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1rU5Cq-00FWUq-VF; Sun, 28 Jan 2024 13:28:17 +0000 Date: Sun, 28 Jan 2024 13:28:16 +0000 Message-ID: <86r0i17fkf.wl-maz@kernel.org> From: Marc Zyngier To: Kunkun Jiang Cc: Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Thomas Gleixner , , , Subject: Re: [PATCH v2 1/2] irqchip/gic-v4.1: Fix GICv4.1 doorbell affinity In-Reply-To: <44051a41-f82e-57d9-001a-d4d195d59f2e@huawei.com> References: <20240126103012.1020-1-jiangkunkun@huawei.com> <20240126103012.1020-2-jiangkunkun@huawei.com> <86ttn074ev.wl-maz@kernel.org> <44051a41-f82e-57d9-001a-d4d195d59f2e@huawei.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/29.1 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: jiangkunkun@huawei.com, oliver.upton@linux.dev, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, wanghaibin.wang@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false On Sat, 27 Jan 2024 02:41:55 +0000, Kunkun Jiang wrote: >=20 > > At this stage, I think the VMOVP optimisation is wrong and that we > > should drop it. > This is the last resort. Maybe we can think of another way. I think the only other way is to never elide the VMOVP from set_affinity, but to only call into set_affinity when strictly necessary: - when making the VPE resident on a CPU that isn't part of the same affinity group (VPE migration outside of the affinity group) - when making the VPE non-resident on a CPU that isn't the doorbell delivery CPU *AND* that there is a need for a doorbell (VPE migration inside the affinity group) Which means it is the responsibility of the upper layers of the stack to make these decisions, and that we can keep the low-level driver as simple as possible. In the meantime, here's the patch I'm proposing to merge ASAP. Please let me know if that works for you. M. =46rom 00c338e91d3b6600f402f56cdb64c9d370f911c8 Mon Sep 17 00:00:00 2001 From: Marc Zyngier Date: Sun, 28 Jan 2024 13:05:24 +0000 Subject: [PATCH] irqchip/gic-v3-its: Fix GICv4.1 VPE affinity update When updating the affinity of a VPE, we currently skip the VMOVP command if the two CPUs are part of the same VPE affinity. But this is wrong, as the doorbell corresponding to this VPE is still delivered on the 'old' CPU, which screws up the balancing. Furthermore, offlining that 'old' CPU results in doorbell interrupts generated for this VPE being discarded. The harsh reality is that we cannot easily elide VMOVP when a set_affinity request occurs. It needs to be obeyed, and if an optimisation is to be made, it is at the point where the affinity change request is made (such as in KVM). Drop the VMOVP elision altogether, and only use the vpe_table_mask to try and stay within the same ITS affinity group if at all possible. Fixes: dd3f050a216e (irqchip/gic-v4.1: Implement the v4.1 flavour of VMOVP) Reported-by: Kunkun Jiang Signed-off-by: Marc Zyngier Cc: stable@vger.kernel.org --- drivers/irqchip/irq-gic-v3-its.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-= its.c index 250b4562f308..78aece62bff5 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -3826,8 +3826,9 @@ static int its_vpe_set_affinity(struct irq_data *d, bool force) { struct its_vpe *vpe =3D irq_data_get_irq_chip_data(d); - int from, cpu =3D cpumask_first(mask_val); + struct cpumask common; unsigned long flags; + int from, cpu; =20 /* * Changing affinity is mega expensive, so let's be as lazy as @@ -3843,19 +3844,22 @@ static int its_vpe_set_affinity(struct irq_data *d, * taken on any vLPI handling path that evaluates vpe->col_idx. */ from =3D vpe_to_cpuid_lock(vpe, &flags); - if (from =3D=3D cpu) - goto out; - - vpe->col_idx =3D cpu; =20 /* - * GICv4.1 allows us to skip VMOVP if moving to a cpu whose RD - * is sharing its VPE table with the current one. + * If we are offered another CPU in the same GICv4.1 ITS + * affinity, pick this one. Otherwise, any CPU will do. */ - if (gic_data_rdist_cpu(cpu)->vpe_table_mask && - cpumask_test_cpu(from, gic_data_rdist_cpu(cpu)->vpe_table_mask)) + if (gic_data_rdist_cpu(from)->vpe_table_mask && + cpumask_and(&common, mask_val, gic_data_rdist_cpu(from)->vpe_table_ma= sk)) + cpu =3D cpumask_first(&common); + else + cpu =3D cpumask_first(mask_val); + + if (from =3D=3D cpu) goto out; =20 + vpe->col_idx =3D cpu; + its_send_vmovp(vpe); its_vpe_db_proxy_move(vpe, from, cpu); =20 --=20 2.39.2 --=20 Without deviation from the norm, progress is not possible. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E7110C47258 for ; Sun, 28 Jan 2024 13:28:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Subject:Cc:To:From:Message-ID:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OEPnetVurMNlsUnegAHjUBBQ8MqJy/ruc270g7+IY/k=; b=ie7p1IQR3TTL3y BlgR5ug/PDPMSfn0bJIs4MExGSMAUNmhuwxHESidFTo55079Zzl+CfvAxsYpq+HCzKIq5rDSGQXNF l+/2edog1aPrRnnOO7XO67gHIoF5tcphKIn1d7u0H6exD01L8R95Mch502yjj/7cCcMoIAisVH2GG I2NfAblppfXKwMfAJSG9J2HZuPGr6NPMZ/coRWlY3+ZCc/yRoy0x4oRjBt/Q7stir04+6P/D8P7uf iSFXMXJlp74xcW9tWIpvJoIofuYCl23LbBtnHZ9y1EGMLBZR2146Bs3VL8HZlr+B3fIpXsypiplMV PR7XbKK3OI04blbtaLsw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rU5Cx-00000009Wn4-3iQG; Sun, 28 Jan 2024 13:28:23 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rU5Cv-00000009WlJ-06si for linux-arm-kernel@lists.infradead.org; Sun, 28 Jan 2024 13:28:22 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id B4E2261AC4; Sun, 28 Jan 2024 13:28:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6050AC433C7; Sun, 28 Jan 2024 13:28:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706448499; bh=PGASfPJtetItxs75hHstoZLUjCt1u7M5lKj4Owasdfc=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=J1+sxUVYtx9s45y8oK7LKPBXjVczJgKivL0on1CROCwrAZ+6giQ33gp3EqLiGMPbu 51POfmO3BNP9DJFp3Udz+j7OY4sxx9CVDnu7KvDsua2x3UJkLOxd9smaB2oTvlxq+K uMLqm7/Q7w25iESId13rYWd8v5goZDoskMGMyW2Ol3338vR+JqddcaZ9cQJWY/Ejp6 Vok+XNNopGQUQA0m+uq0UQ+3ZyBuxH6OWWcArEq42Yfx+ZO0z/6fi7EL7OE8PFWC6M btssfE7BdIKk5D16hIyTKjLkEvDNdEsK2yGxo8mHO3N37XgWBswdg6QpA5mP5aOuqN f1aEIBvDkLb2Q== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1rU5Cq-00FWUq-VF; Sun, 28 Jan 2024 13:28:17 +0000 Date: Sun, 28 Jan 2024 13:28:16 +0000 Message-ID: <86r0i17fkf.wl-maz@kernel.org> From: Marc Zyngier To: Kunkun Jiang Cc: Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Thomas Gleixner , , , Subject: Re: [PATCH v2 1/2] irqchip/gic-v4.1: Fix GICv4.1 doorbell affinity In-Reply-To: <44051a41-f82e-57d9-001a-d4d195d59f2e@huawei.com> References: <20240126103012.1020-1-jiangkunkun@huawei.com> <20240126103012.1020-2-jiangkunkun@huawei.com> <86ttn074ev.wl-maz@kernel.org> <44051a41-f82e-57d9-001a-d4d195d59f2e@huawei.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/29.1 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: jiangkunkun@huawei.com, oliver.upton@linux.dev, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, wanghaibin.wang@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240128_052821_197005_720F9FA3 X-CRM114-Status: GOOD ( 31.07 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Sat, 27 Jan 2024 02:41:55 +0000, Kunkun Jiang wrote: > > > At this stage, I think the VMOVP optimisation is wrong and that we > > should drop it. > This is the last resort. Maybe we can think of another way. I think the only other way is to never elide the VMOVP from set_affinity, but to only call into set_affinity when strictly necessary: - when making the VPE resident on a CPU that isn't part of the same affinity group (VPE migration outside of the affinity group) - when making the VPE non-resident on a CPU that isn't the doorbell delivery CPU *AND* that there is a need for a doorbell (VPE migration inside the affinity group) Which means it is the responsibility of the upper layers of the stack to make these decisions, and that we can keep the low-level driver as simple as possible. In the meantime, here's the patch I'm proposing to merge ASAP. Please let me know if that works for you. M. >From 00c338e91d3b6600f402f56cdb64c9d370f911c8 Mon Sep 17 00:00:00 2001 From: Marc Zyngier Date: Sun, 28 Jan 2024 13:05:24 +0000 Subject: [PATCH] irqchip/gic-v3-its: Fix GICv4.1 VPE affinity update When updating the affinity of a VPE, we currently skip the VMOVP command if the two CPUs are part of the same VPE affinity. But this is wrong, as the doorbell corresponding to this VPE is still delivered on the 'old' CPU, which screws up the balancing. Furthermore, offlining that 'old' CPU results in doorbell interrupts generated for this VPE being discarded. The harsh reality is that we cannot easily elide VMOVP when a set_affinity request occurs. It needs to be obeyed, and if an optimisation is to be made, it is at the point where the affinity change request is made (such as in KVM). Drop the VMOVP elision altogether, and only use the vpe_table_mask to try and stay within the same ITS affinity group if at all possible. Fixes: dd3f050a216e (irqchip/gic-v4.1: Implement the v4.1 flavour of VMOVP) Reported-by: Kunkun Jiang Signed-off-by: Marc Zyngier Cc: stable@vger.kernel.org --- drivers/irqchip/irq-gic-v3-its.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 250b4562f308..78aece62bff5 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -3826,8 +3826,9 @@ static int its_vpe_set_affinity(struct irq_data *d, bool force) { struct its_vpe *vpe = irq_data_get_irq_chip_data(d); - int from, cpu = cpumask_first(mask_val); + struct cpumask common; unsigned long flags; + int from, cpu; /* * Changing affinity is mega expensive, so let's be as lazy as @@ -3843,19 +3844,22 @@ static int its_vpe_set_affinity(struct irq_data *d, * taken on any vLPI handling path that evaluates vpe->col_idx. */ from = vpe_to_cpuid_lock(vpe, &flags); - if (from == cpu) - goto out; - - vpe->col_idx = cpu; /* - * GICv4.1 allows us to skip VMOVP if moving to a cpu whose RD - * is sharing its VPE table with the current one. + * If we are offered another CPU in the same GICv4.1 ITS + * affinity, pick this one. Otherwise, any CPU will do. */ - if (gic_data_rdist_cpu(cpu)->vpe_table_mask && - cpumask_test_cpu(from, gic_data_rdist_cpu(cpu)->vpe_table_mask)) + if (gic_data_rdist_cpu(from)->vpe_table_mask && + cpumask_and(&common, mask_val, gic_data_rdist_cpu(from)->vpe_table_mask)) + cpu = cpumask_first(&common); + else + cpu = cpumask_first(mask_val); + + if (from == cpu) goto out; + vpe->col_idx = cpu; + its_send_vmovp(vpe); its_vpe_db_proxy_move(vpe, from, cpu); -- 2.39.2 -- Without deviation from the norm, progress is not possible. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel