bhyve: nvme controller obey async event setting when reporting critical temperature

Async event report is controlled by async event configuration feature
setting. When reporting a critical temperature warning, check the async
event configuration.

Approved by:		manu (mentor)
MFC after:		1 week
Differential Revision:	https://reviews.freebsd.org/D37355
This commit is contained in:
Wanpeng Qian 2022-11-14 14:08:52 +01:00 committed by Corvin Köhne
parent 05a21658eb
commit 10846c53c4
No known key found for this signature in database
GPG Key ID: D854DA56315E026A

View File

@ -1758,6 +1758,7 @@ nvme_feature_temperature(struct pci_nvme_softc *sc,
uint8_t tmpsel; /* Threshold Temperature Select */
uint8_t thsel; /* Threshold Type Select */
bool set_crit = false;
bool report_crit;
tmpth = command->cdw11 & 0xffff;
tmpsel = (command->cdw11 >> 16) & 0xf;
@ -1785,11 +1786,13 @@ nvme_feature_temperature(struct pci_nvme_softc *sc,
~NVME_CRIT_WARN_ST_TEMPERATURE;
pthread_mutex_unlock(&sc->mtx);
if (set_crit)
report_crit = sc->feat[NVME_FEAT_ASYNC_EVENT_CONFIGURATION].cdw11 &
NVME_CRIT_WARN_ST_TEMPERATURE;
if (set_crit && report_crit)
pci_nvme_aen_post(sc, PCI_NVME_AE_TYPE_SMART,
sc->health_log.critical_warning);
DPRINTF("%s: set_crit=%c critical_warning=%#x status=%#x", __func__, set_crit ? 'T':'F', sc->health_log.critical_warning, compl->status);
}