diff mbox

cxl: Fix is_page_fault() for POWER9

Message ID 1499182912-26730-1-git-send-email-clombard@linux.vnet.ibm.com (mailing list archive)
State Changes Requested
Headers show

Commit Message

Christophe Lombard July 4, 2017, 3:41 p.m. UTC
From: Christophe Lombard <christophe_lombard@fr.ibm.cm>

The function is_page_fault(), for POWER9, lists the Translation Checkout
Responses where the page fault will be handled by copro_handle_mm_fault().
This list is too restrictive and not necessary.

This patches removes this restriction and all page faults, whatever the
reason, will be handled. In this case, the interruption is always
acknowledged.

Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>

---
This patch applies on top of this patch:
 https://git.kernel.org/powerpc/c/3ced8d73006321bd2a0412fa0ff4b0
---
 drivers/misc/cxl/fault.c | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

Comments

Vaibhav Jain July 6, 2017, 11:08 a.m. UTC | #1
Christophe Lombard <clombard@linux.vnet.ibm.com> writes:

> This patches removes this restriction and all page faults, whatever the
> reason, will be handled. In this case, the interruption is always
> acknowledged.

This can also be done with adding call to cxl_ack_ae(ctx) at the end of
cxl_handle_fault().

>  static bool cxl_is_page_fault(struct cxl_context *ctx, u64 dsisr)
>  {
> -	u64 crs; /* Translation Checkout Response Status */
> -
>  	if ((cxl_is_power8()) && (dsisr & CXL_PSL_DSISR_An_DM))
>  		return true;
>
> -	if (cxl_is_power9()) {
> -		crs = (dsisr & CXL_PSL9_DSISR_An_CO_MASK);
> -		if ((crs == CXL_PSL9_DSISR_An_PF_SLR) ||
> -		    (crs == CXL_PSL9_DSISR_An_PF_RGC) ||
> -		    (crs == CXL_PSL9_DSISR_An_PF_RGP) ||
> -		    (crs == CXL_PSL9_DSISR_An_PF_HRH) ||
> -		    (crs == CXL_PSL9_DSISR_An_PF_STEG) ||
> -		    (crs == CXL_PSL9_DSISR_An_URTCH)) {
> -			return true;
> -		}
> -	}
Removing this check will force call to copro_handle_mm_fault even for
nmmu reported errors that only need to be communicated to the AFU and
not handled by mm subsystem as such. 

> +	if (cxl_is_power9())
> +		return true;

Optional: With this change the function has become a good candidate for
being inlined or even converting to a macro.
diff mbox

Patch

diff --git a/drivers/misc/cxl/fault.c b/drivers/misc/cxl/fault.c
index 6eed7d0..0cf7f4a 100644
--- a/drivers/misc/cxl/fault.c
+++ b/drivers/misc/cxl/fault.c
@@ -204,22 +204,11 @@  static bool cxl_is_segment_miss(struct cxl_context *ctx, u64 dsisr)
 
 static bool cxl_is_page_fault(struct cxl_context *ctx, u64 dsisr)
 {
-	u64 crs; /* Translation Checkout Response Status */
-
 	if ((cxl_is_power8()) && (dsisr & CXL_PSL_DSISR_An_DM))
 		return true;
 
-	if (cxl_is_power9()) {
-		crs = (dsisr & CXL_PSL9_DSISR_An_CO_MASK);
-		if ((crs == CXL_PSL9_DSISR_An_PF_SLR) ||
-		    (crs == CXL_PSL9_DSISR_An_PF_RGC) ||
-		    (crs == CXL_PSL9_DSISR_An_PF_RGP) ||
-		    (crs == CXL_PSL9_DSISR_An_PF_HRH) ||
-		    (crs == CXL_PSL9_DSISR_An_PF_STEG) ||
-		    (crs == CXL_PSL9_DSISR_An_URTCH)) {
-			return true;
-		}
-	}
+	if (cxl_is_power9())
+		return true;
 
 	return false;
 }