Re: [PATCH v2] hw/block/nvme: add missing mor/mar constraint checks
On Feb 8 00:13, Dmitry Fomichev wrote: > On Tue, 2021-01-26 at 13:15 +0100, Klaus Jensen wrote: > > From: Klaus Jensen > > > > Firstly, if zoned.max_active is non-zero, zoned.max_open must be less > > than or equal to zoned.max_active. > > > > Secondly, if only zones.max_active is set, we have to explicitly set > > zones.max_open or we end up with an invalid MAR/MOR configuration. This > > is an artifact of the parameters not being zeroes-based like in the > > spec. > > > > Cc: Dmitry Fomichev > > Reported-by: Gollu Appalanaidu > > Signed-off-by: Klaus Jensen > > Reviewed-by: Dmitry Fomichev > Thanks, applied! signature.asc Description: PGP signature
Re: [PATCH v2] hw/block/nvme: add missing mor/mar constraint checks
On Tue, 2021-01-26 at 13:15 +0100, Klaus Jensen wrote: > From: Klaus Jensen > > Firstly, if zoned.max_active is non-zero, zoned.max_open must be less > than or equal to zoned.max_active. > > Secondly, if only zones.max_active is set, we have to explicitly set > zones.max_open or we end up with an invalid MAR/MOR configuration. This > is an artifact of the parameters not being zeroes-based like in the > spec. > > Cc: Dmitry Fomichev > Reported-by: Gollu Appalanaidu > Signed-off-by: Klaus Jensen Reviewed-by: Dmitry Fomichev > --- > > v2: > > * Jumped the gun on removing the check on zoned.max_open. It should > still be done since the device might only have a constraint on open > zones, not active. > * Instead, added an explicit set of zoned.max_open if only > zoned.max_active is specifed. > > hw/block/nvme-ns.c | 12 > 1 file changed, 12 insertions(+) > > diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c > index 62b25cf69bfa..df514287b58f 100644 > --- a/hw/block/nvme-ns.c > +++ b/hw/block/nvme-ns.c > @@ -153,6 +153,18 @@ static int > nvme_ns_zoned_check_calc_geometry(NvmeNamespace *ns, Error **errp) > return -1; > } > > > > > +if (ns->params.max_active_zones) { > +if (ns->params.max_open_zones > ns->params.max_active_zones) { > +error_setg(errp, "max_open_zones (%u) exceeds max_active_zones > (%u)", > + ns->params.max_open_zones, > ns->params.max_active_zones); > +return -1; > +} > + > +if (!ns->params.max_open_zones) { > +ns->params.max_open_zones = ns->params.max_active_zones; > +} > +} > + > if (ns->params.zd_extension_size) { > if (ns->params.zd_extension_size & 0x3f) { > error_setg(errp,
[PATCH v2] hw/block/nvme: add missing mor/mar constraint checks
From: Klaus Jensen Firstly, if zoned.max_active is non-zero, zoned.max_open must be less than or equal to zoned.max_active. Secondly, if only zones.max_active is set, we have to explicitly set zones.max_open or we end up with an invalid MAR/MOR configuration. This is an artifact of the parameters not being zeroes-based like in the spec. Cc: Dmitry Fomichev Reported-by: Gollu Appalanaidu Signed-off-by: Klaus Jensen --- v2: * Jumped the gun on removing the check on zoned.max_open. It should still be done since the device might only have a constraint on open zones, not active. * Instead, added an explicit set of zoned.max_open if only zoned.max_active is specifed. hw/block/nvme-ns.c | 12 1 file changed, 12 insertions(+) diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c index 62b25cf69bfa..df514287b58f 100644 --- a/hw/block/nvme-ns.c +++ b/hw/block/nvme-ns.c @@ -153,6 +153,18 @@ static int nvme_ns_zoned_check_calc_geometry(NvmeNamespace *ns, Error **errp) return -1; } +if (ns->params.max_active_zones) { +if (ns->params.max_open_zones > ns->params.max_active_zones) { +error_setg(errp, "max_open_zones (%u) exceeds max_active_zones (%u)", + ns->params.max_open_zones, ns->params.max_active_zones); +return -1; +} + +if (!ns->params.max_open_zones) { +ns->params.max_open_zones = ns->params.max_active_zones; +} +} + if (ns->params.zd_extension_size) { if (ns->params.zd_extension_size & 0x3f) { error_setg(errp, -- 2.30.0