[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 30/56] hw/block/nvme: open code for volatile write cache
From: |
Klaus Jensen |
Subject: |
[PULL 30/56] hw/block/nvme: open code for volatile write cache |
Date: |
Tue, 9 Feb 2021 08:30:35 +0100 |
From: Minwoo Im <minwoo.im.dev@gmail.com>
Volatile Write Cache(VWC) feature is set in nvme_ns_setup() in the
initial time. This feature is related to block device backed, but this
feature is controlled in controller level via Set/Get Features command.
This patch removed dependency between nvme and nvme-ns to manage the VWC
flag value. Also, it open coded the Get Features for VWC to check all
namespaces attached to the controller, and if false detected, return
directly false.
Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com>
[k.jensen: report write cache preset if present on ANY namespace]
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
hw/block/nvme.h | 1 -
hw/block/nvme-ns.c | 4 ----
hw/block/nvme.c | 15 ++++++++++++---
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/hw/block/nvme.h b/hw/block/nvme.h
index 65540b650e1d..347c149e7905 100644
--- a/hw/block/nvme.h
+++ b/hw/block/nvme.h
@@ -121,7 +121,6 @@ typedef struct NvmeFeatureVal {
uint16_t temp_thresh_low;
};
uint32_t async_config;
- uint32_t vwc;
} NvmeFeatureVal;
typedef struct NvmeCtrl {
diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c
index d35c2925ecb8..7a5a77983798 100644
--- a/hw/block/nvme-ns.c
+++ b/hw/block/nvme-ns.c
@@ -90,10 +90,6 @@ static int nvme_ns_init_blk(NvmeCtrl *n, NvmeNamespace *ns,
Error **errp)
return -1;
}
- if (blk_enable_write_cache(ns->blkconf.blk)) {
- n->features.vwc = 0x1;
- }
-
return 0;
}
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 35f39ecd9559..0b002cb2beab 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -3097,6 +3097,7 @@ static uint16_t nvme_get_feature(NvmeCtrl *n, NvmeRequest
*req)
NvmeGetFeatureSelect sel = NVME_GETFEAT_SELECT(dw10);
uint16_t iv;
NvmeNamespace *ns;
+ int i;
static const uint32_t nvme_feature_default[NVME_FID_MAX] = {
[NVME_ARBITRATION] = NVME_ARB_AB_NOLIMIT,
@@ -3172,7 +3173,17 @@ static uint16_t nvme_get_feature(NvmeCtrl *n,
NvmeRequest *req)
result = ns->features.err_rec;
goto out;
case NVME_VOLATILE_WRITE_CACHE:
- result = n->features.vwc;
+ for (i = 1; i <= n->num_namespaces; i++) {
+ ns = nvme_ns(n, i);
+ if (!ns) {
+ continue;
+ }
+
+ result = blk_enable_write_cache(ns->blkconf.blk);
+ if (result) {
+ break;
+ }
+ }
trace_pci_nvme_getfeat_vwcache(result ? "enabled" : "disabled");
goto out;
case NVME_ASYNCHRONOUS_EVENT_CONF:
@@ -3335,8 +3346,6 @@ static uint16_t nvme_set_feature(NvmeCtrl *n, NvmeRequest
*req)
ns->features.err_rec = dw11;
break;
case NVME_VOLATILE_WRITE_CACHE:
- n->features.vwc = dw11 & 0x1;
-
for (i = 1; i <= n->num_namespaces; i++) {
ns = nvme_ns(n, i);
if (!ns) {
--
2.30.0
- [PULL 22/56] hw/block/nvme: fix shutdown/reset logic, (continued)
- [PULL 22/56] hw/block/nvme: fix shutdown/reset logic, Klaus Jensen, 2021/02/09
- [PULL 18/56] hw/block/nvme: Support Zone Descriptor Extensions, Klaus Jensen, 2021/02/09
- [PULL 17/56] hw/block/nvme: Introduce max active and open zone limits, Klaus Jensen, 2021/02/09
- [PULL 23/56] hw/block/nvme: merge implicitly/explicitly opened processing masks, Klaus Jensen, 2021/02/09
- [PULL 24/56] hw/block/nvme: enum style fix, Klaus Jensen, 2021/02/09
- [PULL 19/56] hw/block/nvme: Document zoned parameters in usage text, Klaus Jensen, 2021/02/09
- [PULL 39/56] hw/block/nvme: fix 64 bit register hi/lo split writes, Klaus Jensen, 2021/02/09
- [PULL 26/56] hw/block/nvme: add missing string representations for commands, Klaus Jensen, 2021/02/09
- [PULL 28/56] hw/block/nvme: Correct error status for unaligned ZA, Klaus Jensen, 2021/02/09
- [PULL 27/56] hw/block/nvme: remove unnecessary check for append, Klaus Jensen, 2021/02/09
- [PULL 30/56] hw/block/nvme: open code for volatile write cache,
Klaus Jensen <=
- [PULL 33/56] hw/block/nvme: remove unused argument in nvme_ns_setup, Klaus Jensen, 2021/02/09
- [PULL 35/56] nvme: introduce bit 5 for critical warning, Klaus Jensen, 2021/02/09
- [PULL 38/56] hw/block/nvme: add size to mmio read/write trace events, Klaus Jensen, 2021/02/09
- [PULL 25/56] hw/block/nvme: zero out zones on reset, Klaus Jensen, 2021/02/09
- [PULL 45/56] hw/block/nvme: disable PMR at boot up, Klaus Jensen, 2021/02/09
- [PULL 29/56] hw/block/nvme: remove unused argument in nvme_ns_init_zoned, Klaus Jensen, 2021/02/09
- [PULL 37/56] hw/block/nvme: trigger async event during injecting smart warning, Klaus Jensen, 2021/02/09
- [PULL 44/56] hw/block/nvme: remove redundant zeroing of PMR registers, Klaus Jensen, 2021/02/09
- [PULL 48/56] hw/block/nvme: bump to v1.4, Klaus Jensen, 2021/02/09
- [PULL 34/56] hw/block/nvme: fix zone write finalize, Klaus Jensen, 2021/02/09