Skip to content

Commit

Permalink
cxl/acpi: Do not fail cxl_acpi_probe() based on a missing CHBS
Browse files Browse the repository at this point in the history
When an ACPI0016 Host Bridge device is present yet no corresponding
CEDT Host Bridge Structure (CHBS) exists, the ACPI probe method
fails.

Rather than fail, emit this warning and continue:
cxl_acpi ACPI0017:00: No CHBS found for Host Bridge: ACPI0016:02

This error may occur on systems that are not compliant with the
ACPI specification. Compliant systems include a CHBS entry for
every CXL host bridge that is present at boot.

Suggested-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
Tested-by: Vishal Verma <vishal.l.verma@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Link: https://lore.kernel.org/r/20211007213426.392644-1-alison.schofield@intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
  • Loading branch information
AlisonSchofield authored and djbw committed Oct 8, 2021
1 parent ed97afb commit 91a45b1
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions drivers/cxl/acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ static int add_host_bridge_uport(struct device *match, void *arg)
dport = find_dport_by_dev(root_port, match);
if (!dport) {
dev_dbg(host, "host bridge expected and not found\n");
return -ENODEV;
return 0;
}

port = devm_cxl_add_port(host, match, dport->component_reg_phys,
Expand Down Expand Up @@ -377,9 +377,11 @@ static int add_host_bridge_dport(struct device *match, void *arg)
}

chbs = cxl_acpi_match_chbs(host, uid);
if (IS_ERR(chbs))
dev_dbg(host, "No CHBS found for Host Bridge: %s\n",
dev_name(match));
if (IS_ERR(chbs)) {
dev_warn(host, "No CHBS found for Host Bridge: %s\n",
dev_name(match));
return 0;
}

rc = cxl_add_dport(root_port, match, uid, get_chbcr(chbs));
if (rc) {
Expand Down

0 comments on commit 91a45b1

Please sign in to comment.