From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.210.70 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793925796; b=NZ/uQ4lmnDBmgKsu4IqmbVmG9Dzqi5Tq7KphPjycQ7IhSEuOTDj9Ow2kI585SP05IJNS NavrmgjAK+Eg5afWX7aK7hzdGdCgl8XeUT2uxY4IVWxtxkWzjofPxxAbWnszEI2Y03mur jQIwBFn5SkUTRmkOBzCeZ+DhNGyosVFpiIADuYcqNSrQRWSQHY+8VWx7lm2mzVj/L04w7 eai4yeWt2ctAPXNjOBrslKzm24oU6Md7ruYKXwk+3M+gDAE/9uys4RcJikQUpELAeRkjb c+goTCvFQG0tju7zDDW3nBS6Pi4M9AoVg7oZrwt9awuuWPPfD8HcpMdArKRa3ZWc5eA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793925796; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Received:Date:In-Reply-To: Mime-Version:References:X-Mailer:Message-ID:Subject:From:To:Cc: Content-Type; bh=VfIh1JSY3MeIq0CEtKa0epmsvwLqQj8oYtgMnnQZzbo=; b=C6P2n13GBBIFyhJdcOW8juMaU7fzKhV1YF3UovqttXyW1UWXdgjTgRdNNuvw3w9SMfEs okveBbMZy+3fe/ZhGXna4Je8BnkE8DbfIl08S60GEXVcEv5tiS2YC5RhfS0czqatizNkf buFM5TCqU+LmBRYuw1aX5pAcT7dam7UXlFOoJ2MXtPGF3ws6MQu31DIKG0VM+IpAURLq7 bYMI15ko9A8xDJcE6RLTIizi1GjnRhPrCCgY2b8MEgxCWoxbAclcsZRYGMZhkVuSfZj1h dQjg7ux3JluCrhRIwyhiamuWbkK7fr2V7srEzyO5xv1kwl6dwLM0kaAyZUGmqH4eq7w== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=google.com; spf=pass smtp.mailfrom=flex--dmatlack.bounces.google.com; dkim=pass header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20260707 header.b=p+nSHsB3; arc=none smtp.remote-ip=209.85.210.70 Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 862D8606EEBD for ; Fri, 6 Nov 2026 00:43:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 862D8606EEBD Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--dmatlack.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20260707 header.b=p+nSHsB3 Received: by mail-ot1-f70.google.com with SMTP id 46e09a7af769-844195cc415so304042a34.1 for ; Thu, 05 Nov 2026 16:43:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20260707; t=1793925790; x=1794530590; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=VfIh1JSY3MeIq0CEtKa0epmsvwLqQj8oYtgMnnQZzbo=; b=p+nSHsB3NVQ3/VN95+llHuQrwOSf9rabn1to0JLMo69u9oII+ko+BKDLNSxxg8aQQQ Keh6EvXI12h8ds93cvj8jDWZhLHgcPKL1nWrnOxV3QnEI8baNcksmI31Ptyl4jRmyMXm I0+nHgmB+x2jOovCBjRp2gaB0B36guv3bsx9azgkxvoiE2kkPNMtpudNu/axRRkm+ZBU dx/g4XMPLCKgGByzOc955d0LaXHbegZ2C3ZPYajpTBwXphKQeO2vQWFDQG9bC8YEHi1Q b6gjKyxu5LwzwkmuljzQg3J8SUkhF/quNbhyO8jV0ugz5iKh4vi3sDDJBGZpm9DgxJc2 C3Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793925790; x=1794530590; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=VfIh1JSY3MeIq0CEtKa0epmsvwLqQj8oYtgMnnQZzbo=; b=s89r7u/ny4sxbzXep8PP4hbEJJ62cqQu0sg+k6yboY1W77FQiNDxrii8o8Ti/P6O8r RU+at4DAA/8bD3PNH4MgVSCzhNQG+rWLPiXdRcyvpEhlprReXNgTdeAzdYWgfGIT3f4p 6mHoau0AotOl0euyJFRgGKN0iUAg/WFisEPDQvfrwUVOPd6OMu267oJtwI8Koe1fD/T/ +4H7Gz0VdGXLm7/P4xy7/qAfKFxELX8I6WScnUztZ/o62B106L7Ffbp/KvaVRA4zWp7G mPcOrjd0btOG9D/qkPatUnRbFF+MgkE8o6HA6kSRpzcg6NF1ASujEODWYKjWYvH+Rd2W IgRg== X-Forwarded-Encrypted: i=1; AKwUvBz4FoFhX+ck763H9R/Xp8HDS6F2h2fjFuz9xgunS2wcVKOLdzHXD56wFnKolou885/NqODtBnNpHb8=@vger.kernel.org X-Gm-Message-State: APuU4Z+Ujc5bWFNcNL/oLCgHfSdajpb/q+RkMkCRr9X5AXZNXSm/8f0z DYpzjHb4GOO/WPy8JJ0/lqz2jIXcqQkK5FkTYHkXTx0OBN5kaDtt1GyegDVAl3u7ZuSGoN71OGo DULUxte71XtuQNQ== X-Received: from ioo11-n1.prod.google.com ([2002:a05:6602:864b:10b0:9e2:221a:fd83]) (user=dmatlack job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6808:1a21:b0:561:fa43:1b2f with SMTP id 5614622812f47-567e0fc17c3mr657310b6e.20.1793925790093; Thu, 05 Nov 2026 16:43:10 -0800 (PST) Date: Fri, 6 Nov 2026 00:42:12 +0000 In-Reply-To: <20261106004218.604799-1-dmatlack@google.com> X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Mime-Version: 1.0 References: <20261106004218.604799-1-dmatlack@google.com> X-Mailer: git-send-email 2.56.0.455.g6c5a503b38-goog Message-ID: <20261106004218.604799-12-dmatlack@google.com> Subject: [PATCH v2 11/17] PCI/DPC: Save DPC state in the saved capability store From: David Matlack To: kexec@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-pci@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Cc: Alexander Graf , Alex Williamson , Bjorn Helgaas , David Matlack , Jason Gunthorpe , Jonathan Corbet , Josh Hilke , Lukas Wunner , Mahesh J Salgaonkar , Mike Rapoport , "Oliver O'Halloran" , Pasha Tatashin , Pratyush Yadav , Randy Dunlap , Samiullah Khawaja , Shuah Khan , Vipin Sharma Content-Type: text/plain; charset="UTF-8" Save and restore the DPC Control register through the per-device saved capability store instead of a private pci_cap_saved_state buffer. Key the save and restore paths off pdev->dpc_cap rather than pci_is_pcie(). The old code relied on the save buffer existing only when the capability did, and the store has no per-capability entry to check. Reserve the register in pci_reserve_dpc_state(), called from pci_dpc_init(). No functional change intended. Signed-off-by: David Matlack --- drivers/pci/pcie/dpc.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index b7f79266f66d..16203e9ef240 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -45,34 +45,18 @@ static const char * const rp_pio_error_string[] = { void pci_save_dpc_state(struct pci_dev *dev) { - struct pci_cap_saved_state *save_state; - u16 *cap; - - if (!pci_is_pcie(dev)) - return; - - save_state = pci_find_saved_ext_cap(dev, PCI_EXT_CAP_ID_DPC); - if (!save_state) + if (!dev->dpc_cap) return; - cap = (u16 *)&save_state->cap.data[0]; - pci_read_config_word(dev, dev->dpc_cap + PCI_EXP_DPC_CTL, cap); + pci_save_cap_word(dev, dev->dpc_cap + PCI_EXP_DPC_CTL); } void pci_restore_dpc_state(struct pci_dev *dev) { - struct pci_cap_saved_state *save_state; - u16 *cap; - - if (!pci_is_pcie(dev)) - return; - - save_state = pci_find_saved_ext_cap(dev, PCI_EXT_CAP_ID_DPC); - if (!save_state) + if (!dev->dpc_cap) return; - cap = (u16 *)&save_state->cap.data[0]; - pci_write_config_word(dev, dev->dpc_cap + PCI_EXP_DPC_CTL, *cap); + pci_restore_cap_word(dev, dev->dpc_cap + PCI_EXP_DPC_CTL); } static DECLARE_WAIT_QUEUE_HEAD(dpc_completed_waitqueue); @@ -400,6 +384,16 @@ static irqreturn_t dpc_irq(int irq, void *context) return IRQ_HANDLED; } +static void pci_reserve_dpc_state(struct pci_dev *pdev) +{ + int rc; + + rc = pci_reserve_saved_cap(pdev, pdev->dpc_cap + PCI_EXP_DPC_CTL, sizeof(u16)); + if (rc) + pci_err(pdev, "unable to reserve DPC save state (%pe)\n", + ERR_PTR(rc)); +} + void pci_dpc_init(struct pci_dev *pdev) { u16 cap; @@ -408,8 +402,7 @@ void pci_dpc_init(struct pci_dev *pdev) if (!pdev->dpc_cap) return; - if (pci_add_ext_cap_save_buffer(pdev, PCI_EXT_CAP_ID_DPC, sizeof(u16))) - pci_err(pdev, "unable to allocate suspend buffer for DPC\n"); + pci_reserve_dpc_state(pdev); pci_read_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_CAP, &cap); if (!(cap & PCI_EXP_DPC_CAP_RP_EXT)) -- 2.56.0.455.g6c5a503b38-goog