diff mbox series

cxl/acpi: Do not fail cxl_acpi_probe() based on a missing CHBS

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

Commit Message

Alison Schofield Oct. 7, 2021, 9:34 p.m. UTC
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(-)

Comments

Ira Weiny Oct. 7, 2021, 10:08 p.m. UTC | #1
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
>
Verma, Vishal L Oct. 7, 2021, 10:51 p.m. UTC | #2
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) {
Dan Williams Oct. 8, 2021, 6:13 p.m. UTC | #3
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 mbox series

Patch

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) {