Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F175192879
D46369.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D46369.id.diff
View Options
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
@@ -394,6 +394,7 @@
counter_u64_t rx_desc_malformed;
counter_u64_t missing_admin_interrupt;
counter_u64_t admin_to;
+ counter_u64_t device_request_reset;
};
struct ena_hw_stats {
@@ -556,6 +557,7 @@
ENA_RESET_STATS_ENTRY(ENA_REGS_RESET_TX_DESCRIPTOR_MALFORMED, tx_desc_malformed),
ENA_RESET_STATS_ENTRY(ENA_REGS_RESET_RX_DESCRIPTOR_MALFORMED, rx_desc_malformed),
ENA_RESET_STATS_ENTRY(ENA_REGS_RESET_MISSING_ADMIN_INTERRUPT, missing_admin_interrupt),
+ ENA_RESET_STATS_ENTRY(ENA_REGS_RESET_DEVICE_REQUEST, device_request_reset),
};
int ena_up(struct ena_adapter *adapter);
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
@@ -2990,7 +2990,8 @@
BIT(ENA_ADMIN_WARNING) |
BIT(ENA_ADMIN_NOTIFICATION) |
BIT(ENA_ADMIN_KEEP_ALIVE) |
- BIT(ENA_ADMIN_CONF_NOTIFICATIONS);
+ BIT(ENA_ADMIN_CONF_NOTIFICATIONS) |
+ BIT(ENA_ADMIN_DEVICE_REQUEST_RESET);
aenq_groups &= get_feat_ctx->aenq.supported_groups;
rc = ena_com_set_aenq_config(ena_dev, aenq_groups);
@@ -4193,12 +4194,22 @@
}
}
+static void ena_admin_device_request_reset(void *adapter_data,
+ struct ena_admin_aenq_entry *aenq_e)
+{
+ struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
+ ena_log(adapter->pdev, WARN,
+ "The device has detected an unhealthy state, reset is requested\n");
+ ena_trigger_reset(adapter, ENA_REGS_RESET_DEVICE_REQUEST);
+}
+
static struct ena_aenq_handlers aenq_handlers = {
.handlers = {
[ENA_ADMIN_LINK_CHANGE] = ena_update_on_link_change,
[ENA_ADMIN_NOTIFICATION] = ena_notification,
[ENA_ADMIN_KEEP_ALIVE] = ena_keep_alive_wd,
[ENA_ADMIN_CONF_NOTIFICATIONS] = ena_conf_notification,
+ [ENA_ADMIN_DEVICE_REQUEST_RESET] = ena_admin_device_request_reset,
},
.unimplemented_handler = unimplemented_aenq_handler
};
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
@@ -301,6 +301,8 @@
&dev_stats->missing_admin_interrupt, "Missing admin interrupts count");
SYSCTL_ADD_COUNTER_U64(ctx, child, OID_AUTO, "admin_to", CTLFLAG_RD,
&dev_stats->admin_to, "Admin queue timeouts count");
+ SYSCTL_ADD_COUNTER_U64(ctx, child, OID_AUTO, "device_request_reset", CTLFLAG_RD,
+ &dev_stats->device_request_reset, "Device reset requests count");
SYSCTL_ADD_COUNTER_U64(ctx, child, OID_AUTO, "total_resets", CTLFLAG_RD,
&dev_stats->total_resets, "Total resets count");
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Oct 10, 12:13 AM (8 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40513324
Default Alt Text
D46369.id.diff (2 KB)
Attached To
Mode
D46369: ena: Add support for device request reset message over AENQ
Attached
Detach File
Event Timeline
Log In to Comment