Viewing: efalnd_debugfs.c
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2024-2025, Amazon and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*
* DebugFS for EFA Lustre Network Driver
*
* Author: Timothy Day <timday@amazon.com>
*/
#define DEBUG_SUBSYSTEM S_LND
#include <linux/debugfs.h>
#include <linux/inet.h>
#include <lprocfs_status.h>
#include "kcompat.h"
#include "efalnd.h"
struct dentry *kefalnd_debug_dir;
static int gidmap_seq_show(struct seq_file *s, void *unused)
{
struct kefa_peer_ni *peer_ni;
char ip_str[INET_ADDRSTRLEN];
struct rhashtable_iter iter;
u16 *gid_raw;
rcu_read_lock();
if (kefalnd.shutdown || kefalnd.init_state == EFALND_INIT_NONE) {
rcu_read_unlock();
return 0;
}
rhashtable_walk_enter(&kefalnd.peer_ni, &iter);
rhashtable_walk_start(&iter);
while ((peer_ni = rhashtable_walk_next(&iter)) != NULL) {
if (IS_ERR(peer_ni))
continue;
gid_raw = (u16 *)peer_ni->gid.raw;
snprintf(ip_str, INET_ADDRSTRLEN, "%d.%d.%d.%d",
peer_ni->remote_nid_addr >> 24,
peer_ni->remote_nid_addr >> 16 & 0xFF,
peer_ni->remote_nid_addr >> 8 & 0xFF,
peer_ni->remote_nid_addr & 0xFF);
seq_printf(s, "%-15s %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x %i %x\n",
ip_str, be16_to_cpu(gid_raw[0]),
be16_to_cpu(gid_raw[1]),
be16_to_cpu(gid_raw[2]),
be16_to_cpu(gid_raw[3]),
be16_to_cpu(gid_raw[4]),
be16_to_cpu(gid_raw[5]),
be16_to_cpu(gid_raw[6]),
be16_to_cpu(gid_raw[7]),
peer_ni->cm_qp.qp_num,
peer_ni->cm_qp.qkey);
}
rhashtable_walk_stop(&iter);
rhashtable_walk_exit(&iter);
rcu_read_unlock();
return 0;
}
LDEBUGFS_SEQ_FOPS_RO(gidmap);
void kefalnd_debugfs_init(void)
{
kefalnd_debug_dir = debugfs_create_dir("kefalnd", NULL);
if (IS_ERR_OR_NULL(kefalnd_debug_dir))
return;
debugfs_create_atomic_t("peerni_count", 0444, kefalnd_debug_dir,
&kefalnd.peer_ni_count);
debugfs_create_file("gidmap", 0444, kefalnd_debug_dir, NULL,
&gidmap_fops);
}
void kefalnd_debugfs_exit(void)
{
debugfs_remove_recursive(kefalnd_debug_dir);
}