aboutsummaryrefslogtreecommitdiff
path: root/include/block
diff options
context:
space:
mode:
authorzhenwei pi <pizhenwei@bytedance.com>2021-01-15 11:27:01 +0800
committerKlaus Jensen <k.jensen@samsung.com>2021-02-08 21:15:53 +0100
commit4714791b66ae39bea6b6e3c3e84aaed8dcb005c7 (patch)
treea51153b89bdf15428ca9338242e55c20209ab240 /include/block
parentc6d1b5c13bf937d3314f4bad596ced52f32106c5 (diff)
downloadqemu-4714791b66ae39bea6b6e3c3e84aaed8dcb005c7.zip
qemu-4714791b66ae39bea6b6e3c3e84aaed8dcb005c7.tar.gz
qemu-4714791b66ae39bea6b6e3c3e84aaed8dcb005c7.tar.bz2
hw/block/nvme: add smart_critical_warning property
There is a very low probability that hitting physical NVMe disk hardware critical warning case, it's hard to write & test a monitor agent service. For debugging purposes, add a new 'smart_critical_warning' property to emulate this situation. The orignal version of this change is implemented by adding a fixed property which could be initialized by QEMU command line. Suggested by Philippe & Klaus, rework like current version. Test with this patch: 1, change smart_critical_warning property for a running VM: #virsh qemu-monitor-command nvme-upstream '{ "execute": "qom-set", "arguments": { "path": "/machine/peripheral-anon/device[0]", "property": "smart_critical_warning", "value":16 } }' 2, run smartctl in guest #smartctl -H -l error /dev/nvme0n1 === START OF SMART DATA SECTION === SMART overall-health self-assessment test result: FAILED! - volatile memory backup device has failed Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: zhenwei pi <pizhenwei@bytedance.com> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
Diffstat (limited to 'include/block')
-rw-r--r--include/block/nvme.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/block/nvme.h b/include/block/nvme.h
index 41614c5..88af3b4 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -60,6 +60,7 @@ enum NvmeCapMask {
#define NVME_CAP_CSS(cap) (((cap) >> CAP_CSS_SHIFT) & CAP_CSS_MASK)
#define NVME_CAP_MPSMIN(cap)(((cap) >> CAP_MPSMIN_SHIFT) & CAP_MPSMIN_MASK)
#define NVME_CAP_MPSMAX(cap)(((cap) >> CAP_MPSMAX_SHIFT) & CAP_MPSMAX_MASK)
+#define NVME_CAP_PMR(cap) (((cap) >> CAP_PMR_SHIFT) & CAP_PMR_MASK)
#define NVME_CAP_SET_MQES(cap, val) (cap |= (uint64_t)(val & CAP_MQES_MASK) \
<< CAP_MQES_SHIFT)