Skip to content

Commit

Permalink
powerpc/pseries: make max polling consistent for longer H_CALLs
Browse files Browse the repository at this point in the history
Currently, plpks_confirm_object_flushed() function polls for 5msec in
total instead of 5sec.

Keep max polling time consistent for all the H_CALLs, which take longer
than expected, to be 5sec. Also, make use of fsleep() everywhere to
insert delay.

Reported-by: Nageswara R Sastry <[email protected]>
Fixes: 2454a7a ("powerpc/pseries: define driver for Platform KeyStore")
Signed-off-by: Nayna Jain <[email protected]>
Tested-by: Nageswara R Sastry <[email protected]>
Reviewed-by: Andrew Donnellan <[email protected]>
Signed-off-by: Michael Ellerman <[email protected]>
Link: https://msgid.link/[email protected]
  • Loading branch information
naynajain authored and mpe committed Apr 22, 2024
1 parent 210cfef commit 7843543
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 8 deletions.
5 changes: 2 additions & 3 deletions arch/powerpc/include/asm/plpks.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,8 @@
#define PLPKS_MAX_DATA_SIZE 4000

// Timeouts for PLPKS operations
#define PLPKS_MAX_TIMEOUT 5000 // msec
#define PLPKS_FLUSH_SLEEP 10 // msec
#define PLPKS_FLUSH_SLEEP_RANGE 400
#define PLPKS_MAX_TIMEOUT (5 * USEC_PER_SEC)
#define PLPKS_FLUSH_SLEEP 10000 // usec

struct plpks_var {
char *component;
Expand Down
10 changes: 5 additions & 5 deletions arch/powerpc/platforms/pseries/plpks.c
Original file line number Diff line number Diff line change
Expand Up @@ -415,8 +415,7 @@ static int plpks_confirm_object_flushed(struct label *label,
break;
}

usleep_range(PLPKS_FLUSH_SLEEP,
PLPKS_FLUSH_SLEEP + PLPKS_FLUSH_SLEEP_RANGE);
fsleep(PLPKS_FLUSH_SLEEP);
timeout = timeout + PLPKS_FLUSH_SLEEP;
} while (timeout < PLPKS_MAX_TIMEOUT);

Expand Down Expand Up @@ -464,9 +463,10 @@ int plpks_signed_update_var(struct plpks_var *var, u64 flags)

continuetoken = retbuf[0];
if (pseries_status_to_err(rc) == -EBUSY) {
int delay_ms = get_longbusy_msecs(rc);
mdelay(delay_ms);
timeout += delay_ms;
int delay_us = get_longbusy_msecs(rc) * 1000;

fsleep(delay_us);
timeout += delay_us;
}
rc = pseries_status_to_err(rc);
} while (rc == -EBUSY && timeout < PLPKS_MAX_TIMEOUT);
Expand Down

0 comments on commit 7843543

Please sign in to comment.