Page MenuHomeFreeBSD

D42660.id130272.diff
No OneTemporary

D42660.id130272.diff

diff --git a/sys/dev/ena/ena.h b/sys/dev/ena/ena.h
--- a/sys/dev/ena/ena.h
+++ b/sys/dev/ena/ena.h
@@ -487,6 +487,7 @@
struct ena_stats_dev dev_stats;
struct ena_hw_stats hw_stats;
struct ena_admin_eni_stats eni_metrics;
+ struct ena_admin_ena_srd_info ena_srd_info;
uint64_t *customer_metrics_array;
enum ena_regs_reset_reason_types reset_reason;
diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -166,6 +166,7 @@
static void ena_update_on_link_change(void *, struct ena_admin_aenq_entry *);
static void unimplemented_aenq_handler(void *, struct ena_admin_aenq_entry *);
static int ena_copy_eni_metrics(struct ena_adapter *);
+static int ena_copy_srd_metrics(struct ena_adapter *);
static int ena_copy_customer_metrics(struct ena_adapter *);
static void ena_timer_service(void *);
@@ -3306,6 +3307,12 @@
return (rc);
}
+static int
+ena_copy_srd_metrics(struct ena_adapter *adapter)
+{
+ return ena_com_get_ena_srd_info(adapter->ena_dev, &adapter->ena_srd_info);
+}
+
static int
ena_copy_customer_metrics(struct ena_adapter *adapter)
{
@@ -3566,6 +3573,9 @@
else if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_ENI_STATS))
(void)ena_copy_eni_metrics(adapter);
+ if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_ENA_SRD_INFO))
+ (void)ena_copy_srd_metrics(adapter);
+
ENA_LOCK_UNLOCK();
}
diff --git a/sys/dev/ena/ena_sysctl.c b/sys/dev/ena/ena_sysctl.c
--- a/sys/dev/ena/ena_sysctl.c
+++ b/sys/dev/ena/ena_sysctl.c
@@ -38,6 +38,7 @@
static void ena_sysctl_add_stats(struct ena_adapter *);
static void ena_sysctl_add_eni_metrics(struct ena_adapter *);
static void ena_sysctl_add_customer_metrics(struct ena_adapter *);
+static void ena_sysctl_add_srd_info(struct ena_adapter *);
static void ena_sysctl_add_tuneables(struct ena_adapter *);
static void ena_sysctl_add_irq_affinity(struct ena_adapter *);
/* Kernel option RSS prevents manipulation of key hash and indirection table. */
@@ -59,18 +60,40 @@
#define ENA_METRICS_MAX_SAMPLE_INTERVAL 3600
#define ENA_HASH_KEY_MSG_SIZE (ENA_HASH_KEY_SIZE * 2 + 1)
-#define SYSCTL_GSTRING_LEN 64
+#define SYSCTL_GSTRING_LEN 128
#define ENA_METRIC_ENI_ENTRY(stat, desc) { \
.name = #stat, \
.description = #desc, \
}
+#define ENA_STAT_ENTRY(stat, desc, stat_type) { \
+ .name = #stat, \
+ .description = #desc, \
+ .stat_offset = offsetof(struct ena_admin_##stat_type, stat) / sizeof(u64), \
+}
+
+#define ENA_STAT_ENA_SRD_ENTRY(stat, desc) \
+ ENA_STAT_ENTRY(stat, desc, ena_srd_stats)
+
struct ena_hw_metrics {
char name[SYSCTL_GSTRING_LEN];
char description[SYSCTL_GSTRING_LEN];
};
+struct ena_srd_metrics {
+ char name[SYSCTL_GSTRING_LEN];
+ char description[SYSCTL_GSTRING_LEN];
+ int stat_offset;
+};
+
+static const struct ena_srd_metrics ena_srd_stats_strings[] = {
+ ENA_STAT_ENA_SRD_ENTRY(ena_srd_tx_pkts, Number of packets transmitted over ENA SRD),
+ ENA_STAT_ENA_SRD_ENTRY(ena_srd_eligible_tx_pkts, Number of packets transmitted or could have been transmitted over ENA SRD),
+ ENA_STAT_ENA_SRD_ENTRY(ena_srd_rx_pkts, Number of packets received over ENA SRD),
+ ENA_STAT_ENA_SRD_ENTRY(ena_srd_resource_utilization, Percentage of the ENA SRD resources that are in use),
+};
+
static const struct ena_hw_metrics ena_hw_stats_strings[] = {
ENA_METRIC_ENI_ENTRY(bw_in_allowance_exceeded, Inbound BW allowance exceeded),
ENA_METRIC_ENI_ENTRY(bw_out_allowance_exceeded, Outbound BW allowance exceeded),
@@ -85,6 +108,7 @@
#endif
#define ENA_CUSTOMER_METRICS_ARRAY_SIZE ARRAY_SIZE(ena_hw_stats_strings)
+#define ENA_SRD_METRICS_ARRAY_SIZE ARRAY_SIZE(ena_srd_stats_strings)
static SYSCTL_NODE(_hw, OID_AUTO, ena, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
"ENA driver parameters");
@@ -147,6 +171,9 @@
else if (ena_com_get_cap(dev, ENA_ADMIN_ENI_STATS))
ena_sysctl_add_eni_metrics(adapter);
+ if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_ENA_SRD_INFO))
+ ena_sysctl_add_srd_info(adapter);
+
ena_sysctl_add_wd(adapter);
ena_sysctl_add_stats(adapter);
ena_sysctl_add_tuneables(adapter);
@@ -373,6 +400,37 @@
&admin_stats->no_completion, 0, "Commands not completed");
}
+static void
+ena_sysctl_add_srd_info(struct ena_adapter *adapter)
+{
+
+ struct sysctl_oid_list *srd_list;
+ struct sysctl_oid *ena_srd_info;
+ struct sysctl_oid_list *child;
+ device_t dev = adapter->pdev;
+ struct sysctl_ctx_list *ctx;
+ struct sysctl_oid *tree;
+ int i;
+
+ ctx = device_get_sysctl_ctx(dev);
+ tree = device_get_sysctl_tree(dev);
+ child = SYSCTL_CHILDREN(tree);
+
+ ena_srd_info = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "ena_srd_info",
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "ENA's SRD information");
+ srd_list = SYSCTL_CHILDREN(ena_srd_info);
+
+ SYSCTL_ADD_U64(ctx, srd_list, OID_AUTO, "ena_srd_mode",
+ CTLFLAG_RD, &adapter->ena_srd_info.flags, 0,
+ "Describes which ENA-express features are enabled");
+
+ for (i = 0; i < ENA_SRD_METRICS_ARRAY_SIZE; i++) {
+ SYSCTL_ADD_U64(ctx, srd_list, OID_AUTO, ena_srd_stats_strings[i].name,
+ CTLFLAG_RD, (u64 *)&adapter->ena_srd_info.ena_srd_stats + ena_srd_stats_strings[i].stat_offset, 0,
+ ena_srd_stats_strings[i].description);
+ }
+}
+
static void
ena_sysctl_add_customer_metrics(struct ena_adapter *adapter)
{

File Metadata

Mime Type
text/plain
Expires
Tue, Aug 18, 4:25 PM (20 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36899909
Default Alt Text
D42660.id130272.diff (5 KB)

Event Timeline