diff options
| author | Michael Brown | 2021-02-01 00:29:45 +0100 |
|---|---|---|
| committer | Michael Brown | 2021-02-01 00:29:45 +0100 |
| commit | def46cf344dc9981a0901a1293d4513efafe14d2 (patch) | |
| tree | 4957930e4abe8c053559ce3d2955b607d862dd3f /src/drivers/infiniband/hermon.h | |
| parent | [build] Avoid using awk to format build ID as hexadecimal (diff) | |
| download | ipxe-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.h | 9 |
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 * |
