get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2219769/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2219769,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2219769/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260404-fix_pci_access-v1-1-416f32c6f7ec@oss.qualcomm.com/",
    "project": {
        "id": 28,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/28/?format=api",
        "name": "Linux PCI development",
        "link_name": "linux-pci",
        "list_id": "linux-pci.vger.kernel.org",
        "list_email": "linux-pci@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null
    },
    "msgid": "<20260404-fix_pci_access-v1-1-416f32c6f7ec@oss.qualcomm.com>",
    "date": "2026-04-04T08:52:59",
    "name": "[1/2] PCI: Add pcie_link_is_active() to determine if the link is active",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "3702dfc8a67a5982baf712adbfec1f98f4361e74",
    "submitter": {
        "id": 89908,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/89908/?format=api",
        "name": "Krishna Chaitanya Chundru",
        "email": "krishna.chundru@oss.qualcomm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260404-fix_pci_access-v1-1-416f32c6f7ec@oss.qualcomm.com/mbox/",
    "series": [
        {
            "id": 498709,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/498709/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=498709",
            "date": "2026-04-04T08:52:58",
            "name": "PCI: Fix NULL pointer access in pci_store_saved_state()",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/498709/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2219769/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2219769/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-51869-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-pci@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=WvkKoBXT;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=EuiXWe18;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-51869-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com\n header.b=\"WvkKoBXT\";\n\tdkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=\"EuiXWe18\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=205.220.168.131",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=oss.qualcomm.com"
        ],
        "Received": [
            "from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fnqFz0K03z1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 04 Apr 2026 19:56:39 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id DEA913062236\n\tfor <incoming@patchwork.ozlabs.org>; Sat,  4 Apr 2026 08:53:14 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id B0C753126D6;\n\tSat,  4 Apr 2026 08:53:14 +0000 (UTC)",
            "from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n [205.220.168.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 315963451BA\n\tfor <linux-pci@vger.kernel.org>; Sat,  4 Apr 2026 08:53:13 +0000 (UTC)",
            "from pps.filterd (m0279867.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 6340h3kq1345813\n\tfor <linux-pci@vger.kernel.org>; Sat, 4 Apr 2026 08:53:12 GMT",
            "from mail-pl1-f200.google.com (mail-pl1-f200.google.com\n [209.85.214.200])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4darbfgrak-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <linux-pci@vger.kernel.org>; Sat, 04 Apr 2026 08:53:12 +0000 (GMT)",
            "by mail-pl1-f200.google.com with SMTP id\n d9443c01a7336-2b2489af602so24097775ad.1\n        for <linux-pci@vger.kernel.org>; Sat, 04 Apr 2026 01:53:12 -0700 (PDT)",
            "from hu-krichai-hyd.qualcomm.com ([202.46.23.25])\n        by smtp.gmail.com with ESMTPSA id\n d9443c01a7336-2b2749e2e97sm106883085ad.82.2026.04.04.01.53.08\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Sat, 04 Apr 2026 01:53:10 -0700 (PDT)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775292794; cv=none;\n b=GGqFqtk1F3PITYZ63D9wcOoZ06YDnlHsHVZf8CQUdnSSaJ8j7u2WrMDvtAjK01mjqaxGuLSrilwSJSTkMqeIjATAiKD5uvtnu63xIPvUejYDApszc+RIcXCY2GgMfSj23QYSb9Zrv6GF+meWpMWHrdj0lYOYKPPk8qVj3f5Vn5w=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775292794; c=relaxed/simple;\n\tbh=cLSMdyjO0adghxbWrzhTn9AZjVp8pKccOC2A/dtndtU=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=ONWWFn/asMnFUU0+1x1uLe2stbOS8r7lA6UVMjsaWACoL0vKPqvICn6OkJbsawM6XLpI9Pv3VtW7z2mxy0RSYwNjF2h96DUC0UfmfjiWPdXceNKJysLYXpXaYi1PC6Q6lVNguR1kvuW+7RzT/LWavZvzpRvvUCl8BlFsShVNdBk=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com;\n spf=pass smtp.mailfrom=oss.qualcomm.com;\n dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com\n header.b=WvkKoBXT;\n dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=EuiXWe18; arc=none smtp.client-ip=205.220.168.131",
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:content-type:date:from:in-reply-to\n\t:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n\tiUX5v+rwAN0X+mqB/JXSwM4VegcAMMvX06bkHKATt7E=; b=WvkKoBXTi3gfi1Kg\n\tJwHAIAhOEizVXJWWPd/YVufSzV2+W4pgr/iV8OTQCK0SHrPl7mPbmW+9Ru52x62Y\n\tAzng5k3bPhR3ICidSyZwTUWDpU1N0c92ozdnKSuAPe8O7QYtwEhhthiNYvNbxGZV\n\t4GW6Itnxy8L+DEJxAABrYA7uVX2kt5g2UDK27Syrvr5K7urRyST4zz5aq+KjS0b2\n\tZiyl4qQDdtJe3HDqIID3lMsJguvhUe7VV4BzYAejYJC1lGf98sUtnpTnujUGT5En\n\td2RpfCc7Jsa0wy3V7GURDakUkRZ6WksHAFmJy3BKxt+xjFZ4vCAFb9Daoap5UkY2\n\tPGz+lg==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=oss.qualcomm.com; s=google; t=1775292792; x=1775897592;\n darn=vger.kernel.org;\n        h=cc:to:in-reply-to:references:message-id:content-transfer-encoding\n         :mime-version:subject:date:from:from:to:cc:subject:date:message-id\n         :reply-to;\n        bh=iUX5v+rwAN0X+mqB/JXSwM4VegcAMMvX06bkHKATt7E=;\n        b=EuiXWe18lwtRqkA+GawkNgsCPVvBpBf2uBKoF0+XFjXYS+GMlIO/n+yvnyEWfaKsgR\n         omUyM4hS6YzOGlltHD27+RvCrtiCUobFCTuHmuWLZNHo/XcMKcInwoJOigmhCjvtuXR4\n         fjyxfBdiqDtoqF/K0B1n77o/V26jnj29BrSPSm1QvrTNGQ7uzJU3tN9vGNtW3YFxSLVQ\n         Us9XfkyhXDkzKjTtH1JFsl8yDNIrVP2ERDP/v3U5f9HhtvQdHgfNRJhZHWsEgvkBWc9C\n         wm40hBfKI5coYMaXjydi5R5zHUYUCVw2jn6XogC3ktGPAiOy7Lpj4A2sZ+5PaZpe3WKf\n         hJKA=="
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1775292792; x=1775897592;\n        h=cc:to:in-reply-to:references:message-id:content-transfer-encoding\n         :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to\n         :cc:subject:date:message-id:reply-to;\n        bh=iUX5v+rwAN0X+mqB/JXSwM4VegcAMMvX06bkHKATt7E=;\n        b=Omp1Vm1HorI3kimHLAwdc50g5MtbjhPzXsBsm7OIY3Hvvg9YR2HZkGSLH0i1W/LjuS\n         vUXrDb6ugNQXsGIh/jLR5Xov9jDno6KG7wrCbuAVQZwZGC82elaqtU2EjL6gdhRcUjkH\n         FB1D56RGjQY1B8xj8NeXqIy513oUQZvG/U+2TIJFpzy7kZir4lrjy2U0izamiVT4YWiF\n         knKtnKBUlUsrKJamt2jDpBDd9Gn71vAfrvfoZkG6Hoxz8Lzl2bxQoAa3Bwn4E6CWEk9A\n         dr06lU4TLuCpzg7ulOz9zPLHT0T5l8hS4FT/MxogJBQd/lKc2WVLDPbUOy7kqVKKS98Q\n         95cw==",
        "X-Gm-Message-State": "AOJu0YzMUJlK0UfHxH/P+3Fsvkdl97355BM3OhKlPnKoBCIOI+tKK0Dz\n\tWUwy6cc2vo0LObnIINO1pe4PhvoxcvhFNnA2l0bODDATtOsptdP89lzwqYE45bEkW2DDdEqe3qR\n\tdE+pccnmlPJQOf7N0uI0T+jPrbYlxqSJGceXc7nAmb7Kd0nIm0lKd8v/JIeAytpNaTIJiPak=",
        "X-Gm-Gg": "AeBDievIhbUARYJIPEZtImBRza+qgr6R+LpM4e9lMbI8r89viRf4ZsERMtoa2Ydd/Qx\n\tz5nautS0IgX0zt7al28FQ1AnSTicJ9AvkAfclgYiHBnXJHvqs1WsYPDvHSfUIl5M5ETO4VaVgl6\n\tj5EFpBxRa1Dkwg7q2cLpyENn9xSyeImaL5x1+E1/QKCFibV/IfHWzClFfoPEHa7CoC1LMdpoJGn\n\tD/gRFAg2ocg2jh67yKMo4Ad3Fj6QoFVoJ+1/LygI1Jbknh1zjv708yTPUDr+KIgQsgidXbh8dEn\n\tHGZbrPibw3kbNBMw15RzScnppGtMJ7JF3NpcApwIAOkzsh9HbNJrSIYW9S2k/ZKZU4YK1nGlHWn\n\t+vfA6rHJl3BctKTitRxof0KyZeHjR7e0/RCsusFf58ne5DjIeGR/KjhMk",
        "X-Received": [
            "by 2002:a17:903:b8e:b0:2b0:5450:a910 with SMTP id\n d9443c01a7336-2b28219df6emr58865635ad.17.1775292791597;\n        Sat, 04 Apr 2026 01:53:11 -0700 (PDT)",
            "by 2002:a17:903:b8e:b0:2b0:5450:a910 with SMTP id\n d9443c01a7336-2b28219df6emr58865375ad.17.1775292791080;\n        Sat, 04 Apr 2026 01:53:11 -0700 (PDT)"
        ],
        "From": "Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>",
        "Date": "Sat, 04 Apr 2026 14:22:59 +0530",
        "Subject": "[PATCH 1/2] PCI: Add pcie_link_is_active() to determine if the\n link is active",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-pci@vger.kernel.org",
        "List-Id": "<linux-pci.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "Message-Id": "<20260404-fix_pci_access-v1-1-416f32c6f7ec@oss.qualcomm.com>",
        "References": "<20260404-fix_pci_access-v1-0-416f32c6f7ec@oss.qualcomm.com>",
        "In-Reply-To": "<20260404-fix_pci_access-v1-0-416f32c6f7ec@oss.qualcomm.com>",
        "To": "Bjorn Helgaas <bhelgaas@google.com>,\n        manivannan.sadhasivam@oss.qualcomm.com",
        "Cc": "linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,\n        Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>,\n        Shawn Anastasio <sanastasio@raptorengineering.com>,\n        Timothy Pearson <tpearson@raptorengineering.com>,\n        Lukas Wunner <lukas@wunner.de>",
        "X-Mailer": "b4 0.14.2",
        "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1775292784; l=7261;\n i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id;\n bh=cLSMdyjO0adghxbWrzhTn9AZjVp8pKccOC2A/dtndtU=;\n b=mufd4JHPj+WA+ZXoNU0SlTovD+ERWWnIHb7zVuhEAoqrB4oi43o+/Md4HTDwTkHPwqaD1GnkB\n pkcAP1w+3olBkxJOpu1LLLpL3QLPldKoa8BoUxzqLgK2hnvaA7kZb9i",
        "X-Developer-Key": "i=krishna.chundru@oss.qualcomm.com; a=ed25519;\n pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg=",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDA0MDA3OCBTYWx0ZWRfXy40a5YsHDpHH\n gRsy1vvUSiux9xOFaZwQei03TNjO23q+x4seuHZ5x4Ap8LSaleNnrM0xfI9UF8457TUAGoXJm+T\n ier8ORGJafP4MJALShgHQ6mkKp77/e8Ga9HTipKF+S6uTFZNo1jXPoczk4aI+GSohCzT1MWKD5l\n w5UdkH1ei6R75N1kVEBc+MtE7i7lypD2dIFFC+5uCIIC/VF1iJ1Xjk2FlxtemIGUdPh7fwhxS2Z\n NVucI45Drw+BwfswT0GMf+mm3kUh/350UFpnBJumc8bDx7GMmjKYpTl6mo8sBKKeivctY7AokPV\n g0fPdqe47BdhOjfUvAgISSfADuubxW199C3pwOeAlayzs8KzGlksaK0MMultTXCj6EvmOW9Fn+h\n twTo63rrQ50yckeIdP2grPxt4Ke3gTjVaAF2xPdgwUuEIXRmiG1GxGvCWe5KYINzwEoYCADzCzO\n qrD+NSevsnAMViZb4yA==",
        "X-Proofpoint-ORIG-GUID": "5uiiXvDxui-mmc4jVh5fIRtxH2jG9kt2",
        "X-Proofpoint-GUID": "5uiiXvDxui-mmc4jVh5fIRtxH2jG9kt2",
        "X-Authority-Analysis": "v=2.4 cv=I6Zohdgg c=1 sm=1 tr=0 ts=69d0d178 cx=c_pps\n a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17\n a=DLE-xEQoUa54y48t:21 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10\n a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22\n a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=_AprYWD3AAAA:8 a=sQS_rdureY0rGLqyAPEA:9\n a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 a=fKH2wJO7VO9AkD4yHysb:22",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-03_07,2026-04-03_01,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n adultscore=0 impostorscore=0 suspectscore=0 spamscore=0 priorityscore=1501\n malwarescore=0 bulkscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604040078"
    },
    "content": "Add pcie_link_is_active() a common API to check if the PCIe link is active,\nreplacing duplicate code in multiple locations.\n\nSigned-off-by: Shawn Anastasio <sanastasio@raptorengineering.com>\nSigned-off-by: Timothy Pearson <tpearson@raptorengineering.com>\nSigned-off-by: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>\nReviewed-by: Lukas Wunner <lukas@wunner.de>\n---\nThis patch is already submitted as part of different series, but this\nis dropped from the series. we want to bring this now, to check null\npoint access issue at pci_store_saved_state() due to linkdown.\nLink to previous patch: https://lore.kernel.org/all/20250828-qps615_v4_1-v6-7-985f90a7dd03@oss.qualcomm.com/\n---\n drivers/pci/hotplug/pciehp.h      |  1 -\n drivers/pci/hotplug/pciehp_ctrl.c |  2 +-\n drivers/pci/hotplug/pciehp_hpc.c  | 35 ++++-------------------------------\n drivers/pci/pci.c                 | 28 +++++++++++++++++++++++++---\n drivers/pci/pci.h                 |  1 +\n 5 files changed, 31 insertions(+), 36 deletions(-)",
    "diff": "diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h\nindex debc79b0adfb2c8e06aabb765e1741572685100b..79df49cc99463829f563db1dc8014a51ccfac0af 100644\n--- a/drivers/pci/hotplug/pciehp.h\n+++ b/drivers/pci/hotplug/pciehp.h\n@@ -186,7 +186,6 @@ int pciehp_query_power_fault(struct controller *ctrl);\n int pciehp_card_present(struct controller *ctrl);\n int pciehp_card_present_or_link_active(struct controller *ctrl);\n int pciehp_check_link_status(struct controller *ctrl);\n-int pciehp_check_link_active(struct controller *ctrl);\n bool pciehp_device_replaced(struct controller *ctrl);\n void pciehp_release_ctrl(struct controller *ctrl);\n \ndiff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c\nindex 7805f697a02ceab33cc962587e0ad85c16c0d962..e165e6d810214f26451920976b1f11d32dd162aa 100644\n--- a/drivers/pci/hotplug/pciehp_ctrl.c\n+++ b/drivers/pci/hotplug/pciehp_ctrl.c\n@@ -269,7 +269,7 @@ void pciehp_handle_presence_or_link_change(struct controller *ctrl, u32 events)\n \t/* Turn the slot on if it's occupied or link is up */\n \tmutex_lock(&ctrl->state_lock);\n \tpresent = pciehp_card_present(ctrl);\n-\tlink_active = pciehp_check_link_active(ctrl);\n+\tlink_active = pcie_link_is_active(ctrl->pcie->port);\n \tif (present <= 0 && link_active <= 0) {\n \t\tif (ctrl->state == BLINKINGON_STATE) {\n \t\t\tctrl->state = OFF_STATE;\ndiff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c\nindex 4c62140a3cb444b1d29a378099d4c3d377b93d15..abfae48470ce44329d2bf84469e826ab4dea99af 100644\n--- a/drivers/pci/hotplug/pciehp_hpc.c\n+++ b/drivers/pci/hotplug/pciehp_hpc.c\n@@ -221,33 +221,6 @@ static void pcie_write_cmd_nowait(struct controller *ctrl, u16 cmd, u16 mask)\n \tpcie_do_write_cmd(ctrl, cmd, mask, false);\n }\n \n-/**\n- * pciehp_check_link_active() - Is the link active\n- * @ctrl: PCIe hotplug controller\n- *\n- * Check whether the downstream link is currently active. Note it is\n- * possible that the card is removed immediately after this so the\n- * caller may need to take it into account.\n- *\n- * If the hotplug controller itself is not available anymore returns\n- * %-ENODEV.\n- */\n-int pciehp_check_link_active(struct controller *ctrl)\n-{\n-\tstruct pci_dev *pdev = ctrl_dev(ctrl);\n-\tu16 lnk_status;\n-\tint ret;\n-\n-\tret = pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnk_status);\n-\tif (ret == PCIBIOS_DEVICE_NOT_FOUND || PCI_POSSIBLE_ERROR(lnk_status))\n-\t\treturn -ENODEV;\n-\n-\tret = !!(lnk_status & PCI_EXP_LNKSTA_DLLLA);\n-\tctrl_dbg(ctrl, \"%s: lnk_status = %x\\n\", __func__, lnk_status);\n-\n-\treturn ret;\n-}\n-\n static bool pci_bus_check_dev(struct pci_bus *bus, int devfn)\n {\n \tu32 l;\n@@ -468,7 +441,7 @@ int pciehp_card_present_or_link_active(struct controller *ctrl)\n \tif (ret)\n \t\treturn ret;\n \n-\treturn pciehp_check_link_active(ctrl);\n+\treturn pcie_link_is_active(ctrl_dev(ctrl));\n }\n \n int pciehp_query_power_fault(struct controller *ctrl)\n@@ -615,8 +588,8 @@ static void pciehp_ignore_link_change(struct controller *ctrl,\n \t * Synthesize it to ensure that it is acted on.\n \t */\n \tdown_read_nested(&ctrl->reset_lock, ctrl->depth);\n-\tif (!pciehp_check_link_active(ctrl) || pciehp_device_replaced(ctrl))\n-\t\tpciehp_request(ctrl, ignored_events);\n+\tif (!pcie_link_is_active(pdev) || pciehp_device_replaced(ctrl))\n+\t\tpciehp_request(ctrl, PCI_EXP_SLTSTA_DLLSC);\n \tup_read(&ctrl->reset_lock);\n }\n \n@@ -922,7 +895,7 @@ int pciehp_slot_reset(struct pcie_device *dev)\n \tpcie_capability_write_word(dev->port, PCI_EXP_SLTSTA,\n \t\t\t\t   PCI_EXP_SLTSTA_DLLSC);\n \n-\tif (!pciehp_check_link_active(ctrl))\n+\tif (!pcie_link_is_active(ctrl_dev(ctrl)))\n \t\tpciehp_request(ctrl, PCI_EXP_SLTSTA_DLLSC);\n \n \treturn 0;\ndiff --git a/drivers/pci/pci.c b/drivers/pci/pci.c\nindex 8479c2e1f74f1044416281aba11bf071ea89488a..1488c93d4e22371480165cb55afc7a0c3cae238e 100644\n--- a/drivers/pci/pci.c\n+++ b/drivers/pci/pci.c\n@@ -4756,7 +4756,6 @@ int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type)\n \t\treturn 0;\n \n \tif (pcie_get_speed_cap(dev) <= PCIE_SPEED_5_0GT) {\n-\t\tu16 status;\n \n \t\tpci_dbg(dev, \"waiting %d ms for downstream link\\n\", delay);\n \t\tmsleep(delay);\n@@ -4772,8 +4771,7 @@ int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type)\n \t\tif (!dev->link_active_reporting)\n \t\t\treturn -ENOTTY;\n \n-\t\tpcie_capability_read_word(dev, PCI_EXP_LNKSTA, &status);\n-\t\tif (!(status & PCI_EXP_LNKSTA_DLLLA))\n+\t\tif (pcie_link_is_active(dev) <= 0)\n \t\t\treturn -ENOTTY;\n \n \t\treturn pci_dev_wait(child, reset_type,\n@@ -6116,6 +6114,30 @@ void pcie_print_link_status(struct pci_dev *dev)\n }\n EXPORT_SYMBOL(pcie_print_link_status);\n \n+/**\n+ * pcie_link_is_active() - Checks if the link is active or not\n+ * @pdev: PCI device to query\n+ *\n+ * Check whether the downstream link is currently active. Note it is\n+ * possible that the card is removed immediately after this so the\n+ * caller may need to take it into account.\n+ *\n+ * Return: true if link is active, or -ENODEV if the config read fails.\n+ */\n+int pcie_link_is_active(struct pci_dev *pdev)\n+{\n+\tu16 lnk_status;\n+\tint ret;\n+\n+\tret = pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnk_status);\n+\tif (ret == PCIBIOS_DEVICE_NOT_FOUND || PCI_POSSIBLE_ERROR(lnk_status))\n+\t\treturn -ENODEV;\n+\n+\tpci_dbg(pdev, \"lnk_status = %#06x\\n\", lnk_status);\n+\treturn !!(lnk_status & PCI_EXP_LNKSTA_DLLLA);\n+}\n+EXPORT_SYMBOL(pcie_link_is_active);\n+\n /**\n  * pci_select_bars - Make BAR mask from the type of resource\n  * @dev: the PCI device for which BAR mask is made\ndiff --git a/drivers/pci/pci.h b/drivers/pci/pci.h\nindex 13d998fbacce6698514d92500dfea03cc562cdc2..c9a6e5d3de3aeab125d2e456456359aa857e7a19 100644\n--- a/drivers/pci/pci.h\n+++ b/drivers/pci/pci.h\n@@ -355,6 +355,7 @@ static inline int pci_proc_detach_bus(struct pci_bus *bus) { return 0; }\n /* Functions for PCI Hotplug drivers to use */\n int pci_hp_add_bridge(struct pci_dev *dev);\n bool pci_hp_spurious_link_change(struct pci_dev *pdev);\n+int pcie_link_is_active(struct pci_dev *dev);\n \n #if defined(CONFIG_SYSFS) && defined(HAVE_PCI_LEGACY)\n void pci_create_legacy_files(struct pci_bus *bus);\n",
    "prefixes": [
        "1/2"
    ]
}