[PATCH 4/8] lib/igt_drm_netlink: add set_error_threshold command support
Ravi Kishore Koppuravuri <[email protected]> Wed, 29 Jul 2026 17:49:55 +0530
| Newsgroups | org.freedesktop.lists.igt-dev |
|---|---|
| Message-ID | <[email protected]> |
Add support for SET_ERROR_THRESHOLD to set the custom error threshold value Signed-off-by: Ravi Kishore Koppuravuri <[email protected]> --- lib/igt_drm_netlink.c | 39 +++++++++++++++++++++++++++++++++++++++ lib/igt_drm_netlink.h | 1 + 2 files changed, 40 insertions(+) diff --git a/lib/igt_drm_netlink.c b/lib/igt_drm_netlink.c index 036660a6a..4738090af 100644 --- a/lib/igt_drm_netlink.c +++ b/lib/igt_drm_netlink.c @@ -29,6 +29,8 @@ static int ras_command_cb(struct nl_msg *msg, void *arg) gnlh = nlmsg_data(nlh); switch (gnlh->cmd) { + case DRM_RAS_CMD_SET_ERROR_THRESHOLD: + break; case DRM_RAS_CMD_GET_ERROR_COUNTER: { struct nlattr *attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX + 1]; @@ -109,6 +111,7 @@ static int send_command(struct app_context *ctx, uint8_t cmd) } switch (cmd) { + case DRM_RAS_CMD_SET_ERROR_THRESHOLD: case DRM_RAS_CMD_GET_ERROR_THRESHOLD: case DRM_RAS_CMD_GET_ERROR_COUNTER: ret = nla_put_u32(msg, @@ -126,6 +129,16 @@ static int send_command(struct app_context *ctx, uint8_t cmd) nlmsg_free(msg); return ret; } + + if (cmd == DRM_RAS_CMD_SET_ERROR_THRESHOLD) { + ret = nla_put_u32(msg, + DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD, + ctx->error_threshold); + if (ret < 0) { + nlmsg_free(msg); + return ret; + } + } break; default: nlmsg_free(msg); @@ -238,6 +251,14 @@ static int validate_inputs(struct app_context *ctx, uint8_t cmd) return -EINVAL; } + if (cmd == DRM_RAS_CMD_SET_ERROR_THRESHOLD && + (ctx->error_threshold < 1 || ctx->error_threshold > 16)) { + igt_warn("Invalid error_threshold (%u) provided. " + "error_threshold should be >= 1 and <= 16.\n", + ctx->error_threshold); + return -EINVAL; + } + return 0; } @@ -280,3 +301,21 @@ int get_error_threshold(struct app_context *ctx) return 0; } + +int set_error_threshold(struct app_context *ctx) +{ + int ret; + + ret = validate_inputs(ctx, DRM_RAS_CMD_SET_ERROR_THRESHOLD); + if (ret < 0) + return ret; + + ret = send_command(ctx, DRM_RAS_CMD_SET_ERROR_THRESHOLD); + if (ret < 0) + return ret; + + igt_debug("Set error threshold: node_id=%u error_id=%u threshold=%u\n", + ctx->node_id, ctx->error_id, ctx->error_threshold); + + return 0; +} diff --git a/lib/igt_drm_netlink.h b/lib/igt_drm_netlink.h index fae9b0e06..c44486ffa 100644 --- a/lib/igt_drm_netlink.h +++ b/lib/igt_drm_netlink.h @@ -33,6 +33,7 @@ void cleanup_nl_socket(struct app_context *ctx); int init_nl_socket(struct app_context *ctx); int get_error_counter(struct app_context *ctx); int get_error_threshold(struct app_context *ctx); +int set_error_threshold(struct app_context *ctx); #endif /* IGT_DRM_NETLINK_H */ -- 2.34.1