FAILED: patch "[PATCH] cxl: Move cxl_await_media_ready() to before capacity info" failed to apply to 6.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x e764f12208b99ac7892c4e3f6bf88d71ca71036f
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023052826-shallow-paltry-04ed@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
e764f12208b9 ("cxl: Move cxl_await_media_ready() to before capacity info retrieval") fd35fdcbf75b ("cxl/test: Add mock test for set_timestamp") f8d22bf50ca5 ("tools/testing/cxl: Mock support for Get Poison List") a5fcd228ca1d ("Merge branch 'for-6.3/cxl-rr-emu' into cxl/next")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e764f12208b99ac7892c4e3f6bf88d71ca71036f Mon Sep 17 00:00:00 2001
From: Dave Jiang <[email protected]>
Date: Thu, 18 May 2023 16:38:20 -0700
Subject: [PATCH] cxl: Move cxl_await_media_ready() to before capacity info
retrieval
Move cxl_await_media_ready() to cxl_pci probe before driver starts issuing IDENTIFY and retrieving memory device information to ensure that the device is ready to provide the information. Allow cxl_pci_probe() to succeed even if media is not ready. Cache the media failure in cxlds and don't ask the device for any media information.
The rationale for proceeding in the !media_ready case is to allow for mailbox operations to interrogate and/or remediate the device. After media is repaired then rebinding the cxl_pci driver is expected to restart the capacity scan.
drivers/cxl/core/mbox.c +10 -5
@@ -1028,7 +1028,7 @@ static int cxl_mem_get_partition_info(struct cxl_dev_state *cxlds)* cxl_dev_state_identify() - Send the IDENTIFY command to the device. * @cxlds: The device data for the operation * -* Return: 0 if identify was executed successfully. +* Return: 0 if identify was executed successfully or media not ready. * * This will dispatch the identify command to the device and on success populate * structures to be exported to sysfs.
@@ -1041,6 +1041,9 @@ int cxl_dev_state_identify(struct cxl_dev_state *cxlds)u32 val;int rc; +if (!cxlds->media_ready) +return 0 ; + mbox_cmd = (struct cxl_mbox_cmd ) { .opcode =CXL_MBOX_OP_IDENTIFY , .size_out =sizeof (id),
@@ -1115,10 +1118,12 @@ int cxl_mem_create_range_info(struct cxl_dev_state *cxlds) cxlds->persistent_only_bytes, "pmem"); } - rc =cxl_mem_get_partition_info (cxlds); -if (rc) { -dev_err (dev,"Failed to query partition information\n" ); -return rc; +if (cxlds->media_ready) { + rc =cxl_mem_get_partition_info (cxlds); +if (rc) { +dev_err (dev,"Failed to query partition information\n" ); +return rc; + } } rc = add_dpa_res(dev, &cxlds->dpa_res, &cxlds->ram_res, 0,
drivers/cxl/cxlmem.h +2 -0
@@ -266,6 +266,7 @@ struct cxl_poison_state {* @regs: Parsed register blocks * @cxl_dvsec: Offset to the PCIe device DVSEC * @rcd: operating in RCD mode (CXL 3.0 9.11.8 CXL Devices Attached to an RCH) +* @media_ready: Indicate whether the device media is usable * @payload_size: Size of space for payload * (CXL 2.0 8.2.8.4.3 Mailbox Capabilities Register) * @lsa_size: Size of Label Storage Area
@@ -303,6 +304,7 @@ struct cxl_dev_state {int cxl_dvsec;bool rcd; +bool media_ready;size_t payload_size;size_t lsa_size;struct mutex mbox_mutex;/* Protects device mailbox and firmware */
drivers/cxl/mem.c +3 -0
@@ -124,6 +124,9 @@ static int cxl_mem_probe(struct device *dev)struct dentry *dentry;int rc; +if (!cxlds->media_ready) +return -EBUSY ; +/* * Someone is trying to reattach this device after it lost its port * connection (an endpoint port previously registered by this memdev was
drivers/cxl/pci.c +6 -0
@@ -708,6 +708,12 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)if (rc)dev_dbg (&pdev->dev,"Failed to map RAS capability.\n" ); + rc =cxl_await_media_ready (cxlds); +if (rc ==0 ) + cxlds->media_ready = true; +else +dev_warn (&pdev->dev,"Media not active (%d)\n" , rc); + rc =cxl_pci_setup_mailbox (cxlds);if (rc)return rc;
drivers/cxl/port.c +0 -6
@@ -117,12 +117,6 @@ static int cxl_endpoint_port_probe(struct cxl_port *port)if (rc)return rc; - rc =cxl_await_media_ready (cxlds); -if (rc) { -dev_err (&port->dev,"Media not active (%d)\n" , rc); -return rc; - } - rc =devm_cxl_enumerate_decoders (cxlhdm, &info);if (rc)return rc;
tools/testing/cxl/test/mem.c +1 -0
@@ -1256,6 +1256,7 @@ static int cxl_mock_mem_probe(struct platform_device *pdev)if (rc)return rc; + cxlds->media_ready = true; rc =cxl_dev_state_identify (cxlds);if (rc)return rc;