From patchwork Mon May 22 10:27:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: tip-bot2 for Thomas Gleixner X-Patchwork-Id: 97250 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1353069vqo; Mon, 22 May 2023 03:52:05 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ60tFQVLVGJl2tV/1O9uj+nih8ziiZc6d0Tx8YGTeACSjlsYXITqaFtgd1PYhkuaBweTDZ7 X-Received: by 2002:a17:902:9b94:b0:1ae:153f:4cb with SMTP id y20-20020a1709029b9400b001ae153f04cbmr9705697plp.49.1684752724877; Mon, 22 May 2023 03:52:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684752724; cv=none; d=google.com; s=arc-20160816; b=MTGD96VMlSJ1ttaC0MucXv0k0CJgn/6gPl7/QlJGKGzhx/kGfyqv6NmsUiniRkrZSI Ml/s8+gcg+4UzsqoL7iQHE3fD+rvDit3QlI2EvB221uCemeCeHYbKnJf03qyEffgACRZ zHBDiUeTmH7zYZl+bvbNrGu5pYa9ZFGIDUDB0ffqeIyNSvMot7mzTUeOYOfbh/fLEfS7 Nv8tBAcpD6hYZZ+2F79VPXrsFQM2zGBdENrIt8p/BbKWKzH2+yvURzqQBKsZVfS+Erk9 0RsOEjtnBAGd/eqeOGrpH1rZKz2VpRAq2AK0ifcqUgfyLesqIQpG2/pECk0RC1Hiuw8d 2Sow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=kfjgleaAX3ezxYz5NiHreKN1+06F3nzIlYYYc1MIWMc=; b=iORtH4xFOTK0NlQqa/3VgrVLiRE2jBMZeHjah2DOgBKc792QIKots6UoHNdmjsnnSW Odz4/gyHMnOIBqK942Tz0E+dxo8kYehzw8++B4RoqCkpuJmXSXcJa22D5/8E9wjyHYfT 27MwAZU2N4cB2TFZshliTMIRBOyG3E94hgSl0CK588HQhqbj6vt5jTk2hnOLpjPELJZb gCtwZa8hS66h0s385QF01fofhXWXj6rXgs7CSle2TGzcqbacAterUat90v3CbkPMp7nF UNizNhXVhHKeNyrxqKQ8ETNAlebjcHIiVeSKwifro76wtuWM5/18oVS0tvZc+1Rzgo+E Ja3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=m1SHo7y7; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d13-20020a170902aa8d00b001afaae8a0a8si816024plr.8.2023.05.22.03.51.49; Mon, 22 May 2023 03:52:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=m1SHo7y7; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232839AbjEVK1w (ORCPT + 99 others); Mon, 22 May 2023 06:27:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57516 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232845AbjEVK1b (ORCPT ); Mon, 22 May 2023 06:27:31 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7AC77186; Mon, 22 May 2023 03:27:28 -0700 (PDT) Date: Mon, 22 May 2023 10:27:26 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1684751246; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kfjgleaAX3ezxYz5NiHreKN1+06F3nzIlYYYc1MIWMc=; b=m1SHo7y73ifgWBKblc6asXYO8EibVuuRGt4Ds3q7+21I2BafDFMaajWCMHOkd7E6iR/MqH c8r9BRyLUmBT6BcF7ojMF4w5uh0dV1+9sTv+BPQ83nMYYeKsROA1wwRXY1Q2irBvEGGMGD myFAkSnvpWc7w+ZLZIoRp1UYyxdGCQ3YGo4TMs0O8RvLsYFv2d2fuXcuY8G/CkGo5Vh1Dp ZSVIsxFXOYwVfkXzwQNWI4Bh6AgvsGay46+RlRT4uYXZbcbi2nQtreMdseefszd7qrpkXA ba+LgIYiMen0tj+xBju/85oKdurh8brxoWs29Vp61gQKOT5kuNCCSxNnmzNBbw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1684751246; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kfjgleaAX3ezxYz5NiHreKN1+06F3nzIlYYYc1MIWMc=; b=UqfRhGoqDC5WI6fFjtufGBuPEzr/V5GdQoMV/LbuslcLx5KFaQ8FBg5d+cN1ia/BbbLQu7 KJRuomLFkavIoqDQ== From: "tip-bot2 for Peter Zijlstra" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: locking/core] x86,intel_iommu: Replace cmpxchg_double() Cc: "Peter Zijlstra (Intel)" , Lu Baolu , Arnd Bergmann , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20230515080554.382778664@infradead.org> References: <20230515080554.382778664@infradead.org> MIME-Version: 1.0 Message-ID: <168475124641.404.951916622997470351.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765947967619932583?= X-GMAIL-MSGID: =?utf-8?q?1766591273201741829?= The following commit has been merged into the locking/core branch of tip: Commit-ID: 6d46dba6bb1cfb1885d9751fadc00ac247d9ccaf Gitweb: https://git.kernel.org/tip/6d46dba6bb1cfb1885d9751fadc00ac247d9ccaf Author: Peter Zijlstra AuthorDate: Mon, 15 May 2023 09:57:06 +02:00 Committer: Peter Zijlstra CommitterDate: Mon, 22 May 2023 10:49:50 +02:00 x86,intel_iommu: Replace cmpxchg_double() Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Lu Baolu Reviewed-by: Arnd Bergmann Link: https://lore.kernel.org/r/20230515080554.382778664@infradead.org --- drivers/iommu/intel/irq_remapping.c | 8 +-- include/linux/dmar.h | 125 ++++++++++++++------------- 2 files changed, 68 insertions(+), 65 deletions(-) diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c index a1b9873..08f5632 100644 --- a/drivers/iommu/intel/irq_remapping.c +++ b/drivers/iommu/intel/irq_remapping.c @@ -175,18 +175,14 @@ static int modify_irte(struct irq_2_iommu *irq_iommu, irte = &iommu->ir_table->base[index]; if ((irte->pst == 1) || (irte_modified->pst == 1)) { - bool ret; - - ret = cmpxchg_double(&irte->low, &irte->high, - irte->low, irte->high, - irte_modified->low, irte_modified->high); /* * We use cmpxchg16 to atomically update the 128-bit IRTE, * and it cannot be updated by the hardware or other processors * behind us, so the return value of cmpxchg16 should be the * same as the old value. */ - WARN_ON(!ret); + u128 old = irte->irte; + WARN_ON(!try_cmpxchg128(&irte->irte, &old, irte_modified->irte)); } else { WRITE_ONCE(irte->low, irte_modified->low); WRITE_ONCE(irte->high, irte_modified->high); diff --git a/include/linux/dmar.h b/include/linux/dmar.h index 725d5e6..27dbd4c 100644 --- a/include/linux/dmar.h +++ b/include/linux/dmar.h @@ -202,67 +202,74 @@ static inline void detect_intel_iommu(void) struct irte { union { - /* Shared between remapped and posted mode*/ struct { - __u64 present : 1, /* 0 */ - fpd : 1, /* 1 */ - __res0 : 6, /* 2 - 6 */ - avail : 4, /* 8 - 11 */ - __res1 : 3, /* 12 - 14 */ - pst : 1, /* 15 */ - vector : 8, /* 16 - 23 */ - __res2 : 40; /* 24 - 63 */ + union { + /* Shared between remapped and posted mode*/ + struct { + __u64 present : 1, /* 0 */ + fpd : 1, /* 1 */ + __res0 : 6, /* 2 - 6 */ + avail : 4, /* 8 - 11 */ + __res1 : 3, /* 12 - 14 */ + pst : 1, /* 15 */ + vector : 8, /* 16 - 23 */ + __res2 : 40; /* 24 - 63 */ + }; + + /* Remapped mode */ + struct { + __u64 r_present : 1, /* 0 */ + r_fpd : 1, /* 1 */ + dst_mode : 1, /* 2 */ + redir_hint : 1, /* 3 */ + trigger_mode : 1, /* 4 */ + dlvry_mode : 3, /* 5 - 7 */ + r_avail : 4, /* 8 - 11 */ + r_res0 : 4, /* 12 - 15 */ + r_vector : 8, /* 16 - 23 */ + r_res1 : 8, /* 24 - 31 */ + dest_id : 32; /* 32 - 63 */ + }; + + /* Posted mode */ + struct { + __u64 p_present : 1, /* 0 */ + p_fpd : 1, /* 1 */ + p_res0 : 6, /* 2 - 7 */ + p_avail : 4, /* 8 - 11 */ + p_res1 : 2, /* 12 - 13 */ + p_urgent : 1, /* 14 */ + p_pst : 1, /* 15 */ + p_vector : 8, /* 16 - 23 */ + p_res2 : 14, /* 24 - 37 */ + pda_l : 26; /* 38 - 63 */ + }; + __u64 low; + }; + + union { + /* Shared between remapped and posted mode*/ + struct { + __u64 sid : 16, /* 64 - 79 */ + sq : 2, /* 80 - 81 */ + svt : 2, /* 82 - 83 */ + __res3 : 44; /* 84 - 127 */ + }; + + /* Posted mode*/ + struct { + __u64 p_sid : 16, /* 64 - 79 */ + p_sq : 2, /* 80 - 81 */ + p_svt : 2, /* 82 - 83 */ + p_res3 : 12, /* 84 - 95 */ + pda_h : 32; /* 96 - 127 */ + }; + __u64 high; + }; }; - - /* Remapped mode */ - struct { - __u64 r_present : 1, /* 0 */ - r_fpd : 1, /* 1 */ - dst_mode : 1, /* 2 */ - redir_hint : 1, /* 3 */ - trigger_mode : 1, /* 4 */ - dlvry_mode : 3, /* 5 - 7 */ - r_avail : 4, /* 8 - 11 */ - r_res0 : 4, /* 12 - 15 */ - r_vector : 8, /* 16 - 23 */ - r_res1 : 8, /* 24 - 31 */ - dest_id : 32; /* 32 - 63 */ - }; - - /* Posted mode */ - struct { - __u64 p_present : 1, /* 0 */ - p_fpd : 1, /* 1 */ - p_res0 : 6, /* 2 - 7 */ - p_avail : 4, /* 8 - 11 */ - p_res1 : 2, /* 12 - 13 */ - p_urgent : 1, /* 14 */ - p_pst : 1, /* 15 */ - p_vector : 8, /* 16 - 23 */ - p_res2 : 14, /* 24 - 37 */ - pda_l : 26; /* 38 - 63 */ - }; - __u64 low; - }; - - union { - /* Shared between remapped and posted mode*/ - struct { - __u64 sid : 16, /* 64 - 79 */ - sq : 2, /* 80 - 81 */ - svt : 2, /* 82 - 83 */ - __res3 : 44; /* 84 - 127 */ - }; - - /* Posted mode*/ - struct { - __u64 p_sid : 16, /* 64 - 79 */ - p_sq : 2, /* 80 - 81 */ - p_svt : 2, /* 82 - 83 */ - p_res3 : 12, /* 84 - 95 */ - pda_h : 32; /* 96 - 127 */ - }; - __u64 high; +#ifdef CONFIG_IRQ_REMAP + __u128 irte; +#endif }; };