From patchwork Mon Mar 4 09:08:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ethan Zhao X-Patchwork-Id: 209566 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1468188dyc; Mon, 4 Mar 2024 06:49:00 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUppiWNmg8N8E70UIF28LtRA2ulmaWbJVrv52PbzwgM2DDmakzPpugx05JZFtg4Ljyc4/7evdlTlqJf2lkgu6sZP9Au0Q== X-Google-Smtp-Source: AGHT+IH77Wq2JmUBS4zn/vO0W22DdC5wNLgf76uuvkkBF9JJ0kOdX/endRTKzbj0yT9acYzPsGAi X-Received: by 2002:a05:6a21:3a4a:b0:1a1:4487:ee28 with SMTP id zu10-20020a056a213a4a00b001a14487ee28mr4899849pzb.45.1709563739843; Mon, 04 Mar 2024 06:48:59 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709563739; cv=pass; d=google.com; s=arc-20160816; b=QOIMMskq0VwRrVPeuEv6T+3DJ3t2qiMKvK3cPLrBclbYVje6GP3ObaCMakgyftGIvu mN6jRkAqR9Q7UTxc34llkbg1XaOg7gfVCp/I3VRhHmeNp/pmWvTpW79aBz2L66WUaU3H 0mSOQtyY4OxAXxipui+oVdBnyP822UoYKgcPzJAflzgf6cRyingCnAfPXi9vMfpBESQA vRWEHWO8ellfV6457d7WJJrrq2+4Sb59TfDl94/ZwA1HAyjJUipQqTJP4uEn38ZjbnJk 6ZQ5OqNy0XvZrr1udrgivQj0DkzRnKo1tkpSMCDR6rlQAP2k51jyqb7Cbuo5I+3TKqD4 bXsg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=WhpuA0bBp3ncnv53MdwkwrldLWEBVA4WsHGPiL7DeVA=; fh=loX1VVwcQj6m0YNS034cZQxWcL06CdRbj2438h5x7iE=; b=aqnEcHp012m5YqrHgTR0QgvT53S8iOuOzezWFI+5/TZP9CdEpxc1A3tAAlDChzogBG CVUQ93hAbeUS7PM0krgT4WxxyoPV3kpaheg0CXwFfli4jnZgt5Op5Rc2dYAsZbwNsDe3 I1RwtPT0FGRy/609O3rJY8YfEEllTEk0CZPeUWeQe5GaAPNeqLjFyxWzHa93nD/tLJ5Y i5wpLsw3ZgE+d/1P2I+WLC5Q0Usf8QQ2iXdBjLlr9FwGQTgPEHlcBzmghKG6W77/PQpA NwM/kSLjJG72Bv+ckhrFovtigUcbSJ8ep17GfOJxwmjTsZv2ert0BPFiBW0kZDpMKE7K w+3Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BfJ+oBzf; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-90274-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90274-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id bx36-20020a056a02052400b005dccf9b1656si9074010pgb.414.2024.03.04.06.48.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 06:48:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90274-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BfJ+oBzf; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-90274-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90274-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 5D6B8B21558 for ; Mon, 4 Mar 2024 09:08:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B6DB220300; Mon, 4 Mar 2024 09:08:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="BfJ+oBzf" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (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 BAA451B5BB; Mon, 4 Mar 2024 09:08:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709543314; cv=none; b=n2Fl60uPaBhIYmpqZ6yV3iBJDyFtdFyJN3C3d1PmPOqoH1NhlJbXi/ibPPACbW8V+UhldrmuIJrf+LhKG0JAJdIdBejATwIA0VJ31+O4EgJ1jsAhXBD1Oskkv8Hp7njKv096XFLDoHfOmCajbSvASP1qH1lkuoS+oprfHS03rso= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709543314; c=relaxed/simple; bh=EA6ZR3Erkc94kHJhtNv8APoWSvKBml3K5BTGuia7NoM=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=gl4Qv1m2hWK0PHwer3kJkSIgSMOpk19o6M3sNHT5ADChTwO7TSUkw3SONpf/njV3eovOHLCv8TRCltTfaYWmwWyftAcrY395ksnoyBKihR5ou4MDxoMgoWCn4z40nklQB8OchGpxqWVAaYGmy93lI1C6lPofLnJcEoRYC2vz54s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=BfJ+oBzf; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1709543313; x=1741079313; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=EA6ZR3Erkc94kHJhtNv8APoWSvKBml3K5BTGuia7NoM=; b=BfJ+oBzfv5oTzDpbOtO9Z9DDf3ymd/FnmZ73kiU5349Y8zSne3dQSgp3 NV/W5IRzenSiYAa+n6eGT/2epNdhvO666c+8MBgFOxbE4FzQ2mW+z4knq gjbEXLz1b8S0JmWEYR9kaxEeSVXNHt4SgeT6bSn7iZMz6YVqe9KbCLgJH EDFqOaPrT9/dS+A+regZgZObVuTKou837101/dPF8wONqv3vvqnbRPiqz 8vb7Xc+ZfQJXWWdAzZzk7Bh3WHHGCQd6+pvbkxTRLVX/KjLy+77PcTSQr VCuVCrDlKRzLElChvZGM+dX58MiLUo0qp8JoD6/lV8OXnOfWsilexBnjr Q==; X-IronPort-AV: E=McAfee;i="6600,9927,11002"; a="7840688" X-IronPort-AV: E=Sophos;i="6.06,203,1705392000"; d="scan'208";a="7840688" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Mar 2024 01:08:31 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.06,203,1705392000"; d="scan'208";a="32092854" Received: from unknown (HELO ply01-vm-store.amr.corp.intel.com) ([10.238.153.201]) by fmviesa002.fm.intel.com with ESMTP; 04 Mar 2024 01:08:27 -0800 From: Ethan Zhao To: bhelgaas@google.com, lukas@wunner.de Cc: Smita.KoralahalliChannabasappa@amd.com, ilpo.jarvinen@linux.intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, kbusch@kernel.org, Ethan Zhao Subject: [PATCH pci-next] pci/edr: Ignore Surprise Down error on hot removal Date: Mon, 4 Mar 2024 04:08:19 -0500 Message-Id: <20240304090819.3812465-1-haifeng.zhao@linux.intel.com> X-Mailer: git-send-email 2.31.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792596825574238218 X-GMAIL-MSGID: 1792607507983295582 Per PCI firmware spec r3.3 sec 4.6.12, for firmware first mode DPC handling path, FW should clear UC errors logged by port and bring link out of DPC, but because of ambiguity of wording in the spec, some BIOSes doesn't clear the surprise down error and the error bits in pci status, still notify OS to handle it. thus following trick is needed in EDR when double reporting (hot removal interrupt && dpc notification) is hit. https://patchwork.kernel.org/project/linux-pci/patch/20240207181854. 121335-1-Smita.KoralahalliChannabasappa@amd.com/ Signed-off-by: Ethan Zhao --- drivers/pci/pci.h | 1 + drivers/pci/pcie/dpc.c | 9 +++++---- drivers/pci/pcie/edr.c | 3 +++ 3 files changed, 9 insertions(+), 4 deletions(-) base-commit: a66f2b4a4d365dc4bac35576f3a9d4f5982f1d63 diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 50134b5e3235..3787bb32e724 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -443,6 +443,7 @@ void pci_save_dpc_state(struct pci_dev *dev); void pci_restore_dpc_state(struct pci_dev *dev); void pci_dpc_init(struct pci_dev *pdev); void dpc_process_error(struct pci_dev *pdev); +bool dpc_handle_surprise_removal(struct pci_dev *pdev); pci_ers_result_t dpc_reset_link(struct pci_dev *pdev); bool pci_dpc_recovered(struct pci_dev *pdev); #else diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index 98b42e425bb9..be79f205e04c 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -319,8 +319,10 @@ static void pci_clear_surpdn_errors(struct pci_dev *pdev) pcie_capability_write_word(pdev, PCI_EXP_DEVSTA, PCI_EXP_DEVSTA_FED); } -static void dpc_handle_surprise_removal(struct pci_dev *pdev) +bool dpc_handle_surprise_removal(struct pci_dev *pdev) { + if (!dpc_is_surprise_removal(pdev)) + return false; if (!pcie_wait_for_link(pdev, false)) { pci_info(pdev, "Data Link Layer Link Active not cleared in 1000 msec\n"); goto out; @@ -338,6 +340,7 @@ static void dpc_handle_surprise_removal(struct pci_dev *pdev) out: clear_bit(PCI_DPC_RECOVERED, &pdev->priv_flags); wake_up_all(&dpc_completed_waitqueue); + return true; } static bool dpc_is_surprise_removal(struct pci_dev *pdev) @@ -362,10 +365,8 @@ static irqreturn_t dpc_handler(int irq, void *context) * According to PCIe r6.0 sec 6.7.6, errors are an expected side effect * of async removal and should be ignored by software. */ - if (dpc_is_surprise_removal(pdev)) { - dpc_handle_surprise_removal(pdev); + if (dpc_handle_surprise_removal(pdev)) return IRQ_HANDLED; - } dpc_process_error(pdev); diff --git a/drivers/pci/pcie/edr.c b/drivers/pci/pcie/edr.c index 5f4914d313a1..556edfb2696a 100644 --- a/drivers/pci/pcie/edr.c +++ b/drivers/pci/pcie/edr.c @@ -184,6 +184,9 @@ static void edr_handle_event(acpi_handle handle, u32 event, void *data) goto send_ost; } + if (dpc_handle_surprise_removal(edev)) + goto send_ost; + dpc_process_error(edev); pci_aer_raw_clear_status(edev);