From patchwork Fri Sep 29 11:57:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 146777 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6359:6f87:b0:13f:353d:d1ed with SMTP id tl7csp3556299rwb; Fri, 29 Sep 2023 14:10:36 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFG1gCywpaBX15vi7cuFyFNyvblGXEpy207cr2tmpHfJ8ZqNPx/zA3SBBm1w+B1uvuhUu+h X-Received: by 2002:a17:90b:390d:b0:269:621e:a673 with SMTP id ob13-20020a17090b390d00b00269621ea673mr5202374pjb.1.1696021836593; Fri, 29 Sep 2023 14:10:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696021836; cv=none; d=google.com; s=arc-20160816; b=ktnfEq9JOFHiDEh6dnFJ05GodSMcrrcSKAa6x573rjCsLrjhIV8AGMoCZXrMI1M8SI x5OC1K7rJqUKUB8VQPfBzPpbtvqW6/wJArf/xkENlcoobhAdU+04mJs2AaiD6GPHGOWi XyxcYgYXzGKLx2+eZe5VoIqVMm2wRDsvo/djYoPjUTUgIqK3ijF3HxOecenDbLR2RBnn dP+0e8FNk5JdTh6q54dty5YiOVl0t+mnNfPU7LwPnSLYSk27sqjZ2UhKxRnsg2U81xzZ 5iD1NjukTHi2Qms9WjKSXgU6ffz7LrO0vvqXrMp+l2WzUKiWCaFAFONV3YlHITRBrixp M2fQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=RQg8SScCdQh24fMIyoS3nFnhYpQL0zfICQSZXY5HT0Q=; fh=EQ0ZbK9Vy/KsIBY82DxAU9xsXan7gkzuqiYJ8lQ6f64=; b=LW7NGXsHUs/DGJLnp1jCdVtJqybgQHUA8Q9JjsTnIrVISixvR3+K/3zpm9X7asT+ss p2G2BUxwBNx0sIGzaH/Br7ymqK5SjxEebTdk4Thxis5OZGWECIFZlJhBmMyaM7NhmwKk LdzSKPNRZkiWJoMRxpccn0OEQbuwv4g0RF0pEtgVh+1l3jsRvkx3lMZXyz+mqURwM2jg YiQwiAr8AAQKH7rbFL6RocE43tnAsBgiOiCFJ8nim2GjLCE46aH/lVBQ9fcTspTiPFtM CrLWfqIqDHeEAW4pjP50ZC8/F8PhxpgKXTgKX879GcaFJv5Vg4QqiLN8r9Inp/H1cI3Y cwsQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=GAnpoq3i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id nu11-20020a17090b1b0b00b00277751629e4si2422289pjb.121.2023.09.29.14.10.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Sep 2023 14:10:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=GAnpoq3i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 32C8F82A95F0; Fri, 29 Sep 2023 04:59:07 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233174AbjI2L6q (ORCPT + 20 others); Fri, 29 Sep 2023 07:58:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233192AbjI2L6o (ORCPT ); Fri, 29 Sep 2023 07:58:44 -0400 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB5FFCCA; Fri, 29 Sep 2023 04:58:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1695988717; x=1727524717; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5JAXtYmb8T8PU8AF8jWO+axHjdebLbG0LfnuH9IHuvY=; b=GAnpoq3iHh+I2pUwv/fwODKvMJhUzPW+1maSmlkygudc9yPis5LhJu/I wes3TUzJrC5tDDl4EvBTT3gqwlYWUc/FIk+jh5MAQ0zgX0Td/Rgd2Zd50 FtLWEnKLuWHlc32y5hUgjJylquRNB3vq0Y/NAXezO0ccSYf7WUNOFq+WB 0VQ6hryeETspAJxS7M82GS2AShSLyfBkGhVF0HYPwHa1eVoQsZ/iheOe0 wUObYpPct6Ve8y4562TeLRbXp2s7+n0rl7yXZ/xpbgqoZEJ8nDGciAWyq M+uDAIuNpl6t7k4cRVLx6N1Thk1KhYBZ5/658cN+RLvcIzZOsohoSDuig g==; X-IronPort-AV: E=McAfee;i="6600,9927,10847"; a="379552923" X-IronPort-AV: E=Sophos;i="6.03,187,1694761200"; d="scan'208";a="379552923" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Sep 2023 04:58:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10847"; a="726573822" X-IronPort-AV: E=Sophos;i="6.03,187,1694761200"; d="scan'208";a="726573822" Received: from valeks2x-mobl.ger.corp.intel.com (HELO localhost) ([10.252.53.242]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Sep 2023 04:58:29 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Lukas Wunner , Alexandru Gagniuc , Krishna chaitanya chundru , Srinivas Pandruvada , "Rafael J . Wysocki" , linux-pm@vger.kernel.org, Dennis Dalessandro , Jason Gunthorpe , Leon Romanovsky , linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Alex Deucher , Daniel Lezcano , Amit Kucheria , Zhang Rui , =?utf-8?q?Ilpo_J=C3=A4rvinen?= Subject: [PATCH v3 04/10] RDMA/hfi1: Use RMW accessors for changing LNKCTL2 Date: Fri, 29 Sep 2023 14:57:17 +0300 Message-Id: <20230929115723.7864-5-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230929115723.7864-1-ilpo.jarvinen@linux.intel.com> References: <20230929115723.7864-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Fri, 29 Sep 2023 04:59:07 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778385314648810634 X-GMAIL-MSGID: 1778407793469467485 Don't assume that only the driver would be accessing LNKCTL2. In the case of upstream (parent), the driver does not even own the device it's changing the registers for. Use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register value. This change is also useful as a cleanup. Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen --- drivers/infiniband/hw/hfi1/pcie.c | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/drivers/infiniband/hw/hfi1/pcie.c b/drivers/infiniband/hw/hfi1/pcie.c index 08732e1ac966..4487a05bea04 100644 --- a/drivers/infiniband/hw/hfi1/pcie.c +++ b/drivers/infiniband/hw/hfi1/pcie.c @@ -1212,14 +1212,11 @@ int do_pcie_gen3_transition(struct hfi1_devdata *dd) (u32)lnkctl2); /* only write to parent if target is not as high as ours */ if ((lnkctl2 & PCI_EXP_LNKCTL2_TLS) < target_vector) { - lnkctl2 &= ~PCI_EXP_LNKCTL2_TLS; - lnkctl2 |= target_vector; - dd_dev_info(dd, "%s: ..new link control2: 0x%x\n", __func__, - (u32)lnkctl2); - ret = pcie_capability_write_word(parent, - PCI_EXP_LNKCTL2, lnkctl2); + ret = pcie_capability_clear_and_set_word(parent, PCI_EXP_LNKCTL2, + PCI_EXP_LNKCTL2_TLS, + target_vector); if (ret) { - dd_dev_err(dd, "Unable to write to PCI config\n"); + dd_dev_err(dd, "Unable to change parent PCI target speed\n"); return_error = 1; goto done; } @@ -1228,22 +1225,11 @@ int do_pcie_gen3_transition(struct hfi1_devdata *dd) } dd_dev_info(dd, "%s: setting target link speed\n", __func__); - ret = pcie_capability_read_word(dd->pcidev, PCI_EXP_LNKCTL2, &lnkctl2); + ret = pcie_capability_clear_and_set_word(dd->pcidev, PCI_EXP_LNKCTL2, + PCI_EXP_LNKCTL2_TLS, + target_vector); if (ret) { - dd_dev_err(dd, "Unable to read from PCI config\n"); - return_error = 1; - goto done; - } - - dd_dev_info(dd, "%s: ..old link control2: 0x%x\n", __func__, - (u32)lnkctl2); - lnkctl2 &= ~PCI_EXP_LNKCTL2_TLS; - lnkctl2 |= target_vector; - dd_dev_info(dd, "%s: ..new link control2: 0x%x\n", __func__, - (u32)lnkctl2); - ret = pcie_capability_write_word(dd->pcidev, PCI_EXP_LNKCTL2, lnkctl2); - if (ret) { - dd_dev_err(dd, "Unable to write to PCI config\n"); + dd_dev_err(dd, "Unable to change device PCI target speed\n"); return_error = 1; goto done; }