diff mbox

[2/7] CXL: Add timeout to process element commands

Message ID 1418026681-14787-2-git-send-email-imunsie@au.ibm.com (mailing list archive)
State Accepted
Commit a98e6e9f4e0224d85b4d951edc44af16dfe6094a
Delegated to: Michael Ellerman
Headers show

Commit Message

Ian Munsie Dec. 8, 2014, 8:17 a.m. UTC
From: Ian Munsie <imunsie@au1.ibm.com>

In the event that something goes wrong in the hardware and it is unable
to complete a process element comment we would end up polling forever,
effectively making the associated process unkillable.

This patch adds a timeout to the process element command code path, so
that we will give up if the hardware does not respond in a reasonable
time.

Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
---
 drivers/misc/cxl/native.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Ian Munsie Dec. 9, 2014, 5:31 a.m. UTC | #1
This one needs to go to stable - I've hit it a couple of times while
testing bad AFUs and it results in an unkillable process.

Cheers,
-Ian
diff mbox

Patch

diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
index 1001cf4..f2b37b4 100644
--- a/drivers/misc/cxl/native.c
+++ b/drivers/misc/cxl/native.c
@@ -277,6 +277,7 @@  static int do_process_element_cmd(struct cxl_context *ctx,
 				  u64 cmd, u64 pe_state)
 {
 	u64 state;
+	unsigned long timeout = jiffies + (HZ * CXL_TIMEOUT);
 
 	WARN_ON(!ctx->afu->enabled);
 
@@ -286,6 +287,10 @@  static int do_process_element_cmd(struct cxl_context *ctx,
 	smp_mb();
 	cxl_p1n_write(ctx->afu, CXL_PSL_LLCMD_An, cmd | ctx->pe);
 	while (1) {
+		if (time_after_eq(jiffies, timeout)) {
+			dev_warn(&ctx->afu->dev, "WARNING: Process Element Command timed out!\n");
+			return -EBUSY;
+		}
 		state = be64_to_cpup(ctx->afu->sw_command_status);
 		if (state == ~0ULL) {
 			pr_err("cxl: Error adding process element to AFU\n");