diff --git a/src/urma/tools/urma_perftest/perftest_resources.c b/src/urma/tools/urma_perftest/perftest_resources.c index ebbce5412185e9cd8aee8b3ca3bf2dccec4f9b09..7d3af418b7f43ecc7270d9ccd1dae15d5fce97e6 100644 --- a/src/urma/tools/urma_perftest/perftest_resources.c +++ b/src/urma/tools/urma_perftest/perftest_resources.c @@ -76,6 +76,17 @@ static int check_share_jfr(perftest_config_t *cfg, urma_device_t *urma_dev) return 0; } +static uint32_t max_power_of_two_less_than(uint32_t n) +{ + if (n <= 1) + return 0; + uint32_t res = 1; + while ((1U << res) < n) { + res += 1; + } + return res; +} + static int check_dev_cap(perftest_context_t *ctx, perftest_config_t *cfg) { struct urma_device *urma_dev = ctx->urma_ctx->dev; @@ -106,6 +117,12 @@ static int check_dev_cap(perftest_context_t *ctx, perftest_config_t *cfg) return -1; } + uint32_t max_order = max_power_of_two_less_than(ctx->dev_attr.dev_cap.max_msg_size); + if (cfg->order > max_order) { + (void)printf("Warning: order size out of range, max_order:%u.\n", max_order); + cfg->order = max_order; + } + if (cfg->jetty_mode == PERFTEST_JETTY_DUPLEX && cfg->jettys > ctx->dev_attr.dev_cap.max_jetty) { (void)printf("Error: jettys: %u out of range, max_jetty: %u.\n", cfg->jettys, ctx->dev_attr.dev_cap.max_jetty);