Lines Matching full:aer

51     struct nvme_async_event_request *aer);
685 struct nvme_async_event_request *aer = arg; in nvme_ctrlr_async_event_cb() local
702 memcpy(&aer->cpl, cpl, sizeof(*cpl)); in nvme_ctrlr_async_event_cb()
703 aer->log_page_id = NVMEV(NVME_ASYNC_EVENT_LOG_PAGE_ID, cpl->cdw0); in nvme_ctrlr_async_event_cb()
704 nvme_printf(aer->ctrlr, "async event occurred (type 0x%x, info 0x%02x," in nvme_ctrlr_async_event_cb()
707 aer->log_page_id); in nvme_ctrlr_async_event_cb()
708 taskqueue_enqueue(aer->ctrlr->taskqueue, &aer->task); in nvme_ctrlr_async_event_cb()
713 struct nvme_async_event_request *aer) in nvme_ctrlr_construct_and_submit_aer() argument
721 * time. Why would we get an AER in the middle of that just before we in nvme_ctrlr_construct_and_submit_aer()
727 aer->ctrlr = ctrlr; in nvme_ctrlr_construct_and_submit_aer()
729 aer); in nvme_ctrlr_construct_and_submit_aer()
730 aer->req = req; in nvme_ctrlr_construct_and_submit_aer()
731 aer->log_page_id = 0; /* Not a valid page */ in nvme_ctrlr_construct_and_submit_aer()
746 struct nvme_async_event_request *aer; in nvme_ctrlr_configure_aer() local
776 aer = &ctrlr->aer[i]; in nvme_ctrlr_configure_aer()
777 nvme_ctrlr_construct_and_submit_aer(ctrlr, aer); in nvme_ctrlr_configure_aer()
1110 struct nvme_async_event_request *aer = arg; in nvme_ctrlr_aer_done() local
1112 mtx_lock(&aer->mtx); in nvme_ctrlr_aer_done()
1114 aer->log_page_size = (uint32_t)-1; in nvme_ctrlr_aer_done()
1116 aer->log_page_size = nvme_ctrlr_get_log_page_size( in nvme_ctrlr_aer_done()
1117 aer->ctrlr, aer->log_page_id); in nvme_ctrlr_aer_done()
1118 wakeup(aer); in nvme_ctrlr_aer_done()
1119 mtx_unlock(&aer->mtx); in nvme_ctrlr_aer_done()
1125 struct nvme_async_event_request *aer = arg; in nvme_ctrlr_aer_task() local
1126 struct nvme_controller *ctrlr = aer->ctrlr; in nvme_ctrlr_aer_task()
1135 if (!is_log_page_id_valid(aer->log_page_id)) { in nvme_ctrlr_aer_task()
1140 nvme_notify_async_consumers(ctrlr, &aer->cpl, aer->log_page_id, in nvme_ctrlr_aer_task()
1142 nvme_ctrlr_construct_and_submit_aer(ctrlr, aer); in nvme_ctrlr_aer_task()
1146 aer->log_page_size = 0; in nvme_ctrlr_aer_task()
1147 len = nvme_ctrlr_get_log_page_size(aer->ctrlr, aer->log_page_id); in nvme_ctrlr_aer_task()
1148 nvme_ctrlr_cmd_get_log_page(aer->ctrlr, aer->log_page_id, in nvme_ctrlr_aer_task()
1149 NVME_GLOBAL_NAMESPACE_TAG, aer->log_page_buffer, len, in nvme_ctrlr_aer_task()
1150 nvme_ctrlr_aer_done, aer); in nvme_ctrlr_aer_task()
1151 mtx_lock(&aer->mtx); in nvme_ctrlr_aer_task()
1152 while (aer->log_page_size == 0) in nvme_ctrlr_aer_task()
1153 mtx_sleep(aer, &aer->mtx, PRIBIO, "nvme_pt", 0); in nvme_ctrlr_aer_task()
1154 mtx_unlock(&aer->mtx); in nvme_ctrlr_aer_task()
1156 if (aer->log_page_size != (uint32_t)-1) { in nvme_ctrlr_aer_task()
1162 nvme_notify_async_consumers(aer->ctrlr, &aer->cpl, in nvme_ctrlr_aer_task()
1163 aer->log_page_id, NULL, 0); in nvme_ctrlr_aer_task()
1168 switch (aer->log_page_id) { in nvme_ctrlr_aer_task()
1171 (struct nvme_error_information_entry *)aer->log_page_buffer; in nvme_ctrlr_aer_task()
1172 for (int i = 0; i < (aer->ctrlr->cdata.elpe + 1); i++) in nvme_ctrlr_aer_task()
1178 (struct nvme_health_information_page *)aer->log_page_buffer); in nvme_ctrlr_aer_task()
1182 (struct nvme_ns_list *)aer->log_page_buffer); in nvme_ctrlr_aer_task()
1186 (struct nvme_command_effects_page *)aer->log_page_buffer); in nvme_ctrlr_aer_task()
1190 (struct nvme_res_notification_page *)aer->log_page_buffer); in nvme_ctrlr_aer_task()
1194 (struct nvme_sanitize_status_page *)aer->log_page_buffer); in nvme_ctrlr_aer_task()
1200 if (aer->log_page_id == NVME_LOG_HEALTH_INFORMATION) { in nvme_ctrlr_aer_task()
1202 (struct nvme_health_information_page *)aer->log_page_buffer; in nvme_ctrlr_aer_task()
1210 nvme_ctrlr_log_critical_warnings(aer->ctrlr, in nvme_ctrlr_aer_task()
1212 aer->ctrlr->async_event_config &= in nvme_ctrlr_aer_task()
1214 nvme_ctrlr_cmd_set_async_event_config(aer->ctrlr, in nvme_ctrlr_aer_task()
1215 aer->ctrlr->async_event_config, NULL, NULL); in nvme_ctrlr_aer_task()
1216 } else if (aer->log_page_id == NVME_LOG_CHANGED_NAMESPACE) { in nvme_ctrlr_aer_task()
1218 (struct nvme_ns_list *)aer->log_page_buffer; in nvme_ctrlr_aer_task()
1222 nvme_notify_ns(aer->ctrlr, nsl->ns[i]); in nvme_ctrlr_aer_task()
1230 nvme_notify_async_consumers(aer->ctrlr, &aer->cpl, in nvme_ctrlr_aer_task()
1231 aer->log_page_id, aer->log_page_buffer, aer->log_page_size); in nvme_ctrlr_aer_task()
1238 nvme_ctrlr_construct_and_submit_aer(ctrlr, aer); in nvme_ctrlr_aer_task()
1612 * failed up the stack. The second thread is used for AER events, which in nvme_ctrlr_construct()
1624 struct nvme_async_event_request *aer = &ctrlr->aer[i]; in nvme_ctrlr_construct() local
1626 TASK_INIT(&aer->task, 0, nvme_ctrlr_aer_task, aer); in nvme_ctrlr_construct()
1627 mtx_init(&aer->mtx, "AER mutex", NULL, MTX_DEF); in nvme_ctrlr_construct()
1719 struct nvme_async_event_request *aer = &ctrlr->aer[i]; in nvme_ctrlr_destruct() local
1721 mtx_destroy(&aer->mtx); in nvme_ctrlr_destruct()