cxl: Add timeout to process element commands
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. Cc: stable@vger.kernel.org Signed-off-by: Ian Munsie <imunsie@au1.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
ee41d11d53
commit
a98e6e9f4e
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue