summaryrefslogtreecommitdiffstats
path: root/src/drivers/infiniband/hermon.h
diff options
context:
space:
mode:
authorMichael Brown2021-02-01 00:29:45 +0100
committerMichael Brown2021-02-01 00:29:45 +0100
commitdef46cf344dc9981a0901a1293d4513efafe14d2 (patch)
tree4957930e4abe8c053559ce3d2955b607d862dd3f /src/drivers/infiniband/hermon.h
parent[build] Avoid using awk to format build ID as hexadecimal (diff)
downloadipxe-def46cf344dc9981a0901a1293d4513efafe14d2.tar.gz
ipxe-def46cf344dc9981a0901a1293d4513efafe14d2.tar.xz
ipxe-def46cf344dc9981a0901a1293d4513efafe14d2.zip
[hermon] Limit link poll frequency in DOWN state
Some older versions of the hardware (and/or firmware) do not report an event when an Infiniband link reaches the INIT state. The driver works around this missing event by calling ib_smc_update() on each event queue poll while the link is in the DOWN state. Commit 6cb12ee ("[hermon] Increase polling rate for command completions") addressed this by speeding up the time taken to issue each command invoked by ib_smc_update(). Experimentation shows that the impact is still significant: for example, in a situation where an unplugged port is opened, the throughput on the other port can be reduced by over 99%. Fix by throttling the rate at which link polling is attempted. Debugged-by: Christian Iversen <ci@iversenit.dk> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/infiniband/hermon.h')
-rw-r--r--src/drivers/infiniband/hermon.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/drivers/infiniband/hermon.h b/src/drivers/infiniband/hermon.h
index 61f3b0418..6d7471dfd 100644
--- a/src/drivers/infiniband/hermon.h
+++ b/src/drivers/infiniband/hermon.h
@@ -894,6 +894,8 @@ struct hermon {
/** Event queue */
struct hermon_event_queue eq;
+ /** Last unsolicited link state poll */
+ unsigned long last_poll;
/** Unrestricted LKey
*
* Used to get unrestricted memory access.
@@ -930,6 +932,13 @@ struct hermon {
/** Memory key prefix */
#define HERMON_MKEY_PREFIX 0x77000000UL
+/** Link poll interval
+ *
+ * Used when we need to poll for link state (rather than relying upon
+ * receiving an event).
+ */
+#define HERMON_LINK_POLL_INTERVAL ( TICKS_PER_SEC / 2 )
+
/*
* HCA commands
*