Message ID | 20211007213426.392644-1-alison.schofield@intel.com |
---|---|
State | Accepted |
Commit | 91a45b12d49e2b43d86caba25ed59fae43344ab8 |
Headers | show |
Series | cxl/acpi: Do not fail cxl_acpi_probe() based on a missing CHBS | expand |
On Thu, Oct 07, 2021 at 02:34:26PM -0700, Schofield, Alison wrote: > From: Alison Schofield <alison.schofield@intel.com> > > 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> Reviewed-by: Ira Weiny <ira.weiny@intel.com> > --- > drivers/cxl/acpi.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/cxl/acpi.c b/drivers/cxl/acpi.c > index af1c6c1875ac..dadc7f64b9ff 100644 > --- a/drivers/cxl/acpi.c > +++ b/drivers/cxl/acpi.c > @@ -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, > @@ -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) { > -- > 2.31.1 >
On Thu, 2021-10-07 at 14:34 -0700, alison.schofield@intel.com wrote: > From: Alison Schofield <alison.schofield@intel.com> > > 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> > --- > drivers/cxl/acpi.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) Tested with a non-compliant system, and works as expected (remaining roots and decoders still show up). You can add: Tested-by: Vishal Verma <vishal.l.verma@intel.com> > > diff --git a/drivers/cxl/acpi.c b/drivers/cxl/acpi.c > index af1c6c1875ac..dadc7f64b9ff 100644 > --- a/drivers/cxl/acpi.c > +++ b/drivers/cxl/acpi.c > @@ -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, > @@ -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) {
On Thu, Oct 7, 2021 at 3:51 PM Verma, Vishal L <vishal.l.verma@intel.com> wrote: > > On Thu, 2021-10-07 at 14:34 -0700, alison.schofield@intel.com wrote: > > From: Alison Schofield <alison.schofield@intel.com> > > > > 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> > > --- > > drivers/cxl/acpi.c | 10 ++++++---- > > 1 file changed, 6 insertions(+), 4 deletions(-) > > Tested with a non-compliant system, and works as expected (remaining > roots and decoders still show up). You can add: > > Tested-by: Vishal Verma <vishal.l.verma@intel.com> Applied to cxl/pending. Thanks!
diff --git a/drivers/cxl/acpi.c b/drivers/cxl/acpi.c index af1c6c1875ac..dadc7f64b9ff 100644 --- a/drivers/cxl/acpi.c +++ b/drivers/cxl/acpi.c @@ -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, @@ -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) {