mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
Introduces the DRM RAS infrastructure over generic netlink. The new interface allows drivers to expose RAS nodes and their associated error counters to userspace in a structured and extensible way. Each drm_ras node can register its own set of error counters, which are then discoverable and queryable through netlink operations. This lays the groundwork for reporting and managing hardware error states in a unified manner across different DRM drivers. Currently it only supports error-counter nodes. But it can be extended later. The registration is also not tied to any drm node, so it can be used by accel devices as well. It uses the new and mandatory YAML description format stored in Documentation/netlink/specs/. This forces a single generic netlink family namespace for the entire drm: "drm-ras". But multiple-endpoints are supported within the single family. Any modification to this API needs to be applied to Documentation/netlink/specs/drm_ras.yaml before regenerating the code: $ tools/net/ynl/pyynl/ynl_gen_c.py --spec \ Documentation/netlink/specs/drm_ras.yaml --mode uapi --header \ -o include/uapi/drm/drm_ras.h $ tools/net/ynl/pyynl/ynl_gen_c.py --spec \ Documentation/netlink/specs/drm_ras.yaml --mode kernel \ --header -o drivers/gpu/drm/drm_ras_nl.h $ tools/net/ynl/pyynl/ynl_gen_c.py --spec \ Documentation/netlink/specs/drm_ras.yaml \ --mode kernel --source -o drivers/gpu/drm/drm_ras_nl.c Cc: Zack McKevitt <zachary.mckevitt@oss.qualcomm.com> Cc: Lijo Lazar <lijo.lazar@amd.com> Cc: Hawking Zhang <Hawking.Zhang@amd.com> Cc: Jakub Kicinski <kuba@kernel.org> Cc: David S. Miller <davem@davemloft.net> Cc: Paolo Abeni <pabeni@redhat.com> Cc: Eric Dumazet <edumazet@google.com> Cc: netdev@vger.kernel.org Co-developed-by: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com> Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com> Signed-off-by: Riana Tauro <riana.tauro@intel.com> Reviewed-by: Zack McKevitt <zachary.mckevitt@oss.qualcomm.com> Acked-by: Jakub Kicinski <kuba@kernel.org> Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patch.msgid.link/20260304074412.464435-8-riana.tauro@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
57 lines
1.8 KiB
C
57 lines
1.8 KiB
C
// SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
|
/* Do not edit directly, auto-generated from: */
|
|
/* Documentation/netlink/specs/drm_ras.yaml */
|
|
/* YNL-GEN kernel source */
|
|
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
|
|
|
#include <net/netlink.h>
|
|
#include <net/genetlink.h>
|
|
|
|
#include "drm_ras_nl.h"
|
|
|
|
#include <uapi/drm/drm_ras.h>
|
|
|
|
/* DRM_RAS_CMD_GET_ERROR_COUNTER - do */
|
|
static const struct nla_policy drm_ras_get_error_counter_do_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
|
|
[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
|
|
[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
|
|
};
|
|
|
|
/* DRM_RAS_CMD_GET_ERROR_COUNTER - dump */
|
|
static const struct nla_policy drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID + 1] = {
|
|
[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
|
|
};
|
|
|
|
/* Ops table for drm_ras */
|
|
static const struct genl_split_ops drm_ras_nl_ops[] = {
|
|
{
|
|
.cmd = DRM_RAS_CMD_LIST_NODES,
|
|
.dumpit = drm_ras_nl_list_nodes_dumpit,
|
|
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
|
|
},
|
|
{
|
|
.cmd = DRM_RAS_CMD_GET_ERROR_COUNTER,
|
|
.doit = drm_ras_nl_get_error_counter_doit,
|
|
.policy = drm_ras_get_error_counter_do_nl_policy,
|
|
.maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
|
|
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
|
|
},
|
|
{
|
|
.cmd = DRM_RAS_CMD_GET_ERROR_COUNTER,
|
|
.dumpit = drm_ras_nl_get_error_counter_dumpit,
|
|
.policy = drm_ras_get_error_counter_dump_nl_policy,
|
|
.maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
|
|
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
|
|
},
|
|
};
|
|
|
|
struct genl_family drm_ras_nl_family __ro_after_init = {
|
|
.name = DRM_RAS_FAMILY_NAME,
|
|
.version = DRM_RAS_FAMILY_VERSION,
|
|
.netnsok = true,
|
|
.parallel_ops = true,
|
|
.module = THIS_MODULE,
|
|
.split_ops = drm_ras_nl_ops,
|
|
.n_split_ops = ARRAY_SIZE(drm_ras_nl_ops),
|
|
};
|