nvmf: allow to override KAS
Useful for transport specific layer to inform that Keep Alive is not supported or to adjust granularity. Signed-off-by: Jacek Kalwas <jacek.kalwas@intel.com> Change-Id: I636fda3eadcb96cd8a4b79570fc4e3cc6a58fe93 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1545 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
538f1354e0
commit
f74fdce93d
@ -173,6 +173,7 @@ struct spdk_nvmf_listener {
|
|||||||
* A subset of struct spdk_nvme_ctrlr_data that are emulated by a fabrics device.
|
* A subset of struct spdk_nvme_ctrlr_data that are emulated by a fabrics device.
|
||||||
*/
|
*/
|
||||||
struct spdk_nvmf_ctrlr_data {
|
struct spdk_nvmf_ctrlr_data {
|
||||||
|
uint16_t kas;
|
||||||
struct spdk_nvme_cdata_nvmf_specific nvmf_specific;
|
struct spdk_nvme_cdata_nvmf_specific nvmf_specific;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -304,12 +304,15 @@ spdk_nvmf_ctrlr_create(struct spdk_nvmf_subsystem *subsystem,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* KAS: this field indicates the granularity of the Keep Alive Timer in 100ms units
|
* KAS: This field indicates the granularity of the Keep Alive Timer in 100ms units.
|
||||||
* keep-alive timeout in milliseconds
|
* If this field is cleared to 0h, then Keep Alive is not supported.
|
||||||
*/
|
*/
|
||||||
ctrlr->feat.keep_alive_timer.bits.kato = spdk_divide_round_up(connect_cmd->kato,
|
if (transport->cdata.kas) {
|
||||||
KAS_DEFAULT_VALUE * KAS_TIME_UNIT_IN_MS) *
|
ctrlr->feat.keep_alive_timer.bits.kato = spdk_divide_round_up(connect_cmd->kato,
|
||||||
KAS_DEFAULT_VALUE * KAS_TIME_UNIT_IN_MS;
|
KAS_DEFAULT_VALUE * KAS_TIME_UNIT_IN_MS) *
|
||||||
|
KAS_DEFAULT_VALUE * KAS_TIME_UNIT_IN_MS;
|
||||||
|
}
|
||||||
|
|
||||||
ctrlr->feat.async_event_configuration.bits.ns_attr_notice = 1;
|
ctrlr->feat.async_event_configuration.bits.ns_attr_notice = 1;
|
||||||
ctrlr->feat.volatile_write_cache.bits.wce = 1;
|
ctrlr->feat.volatile_write_cache.bits.wce = 1;
|
||||||
|
|
||||||
@ -1816,6 +1819,7 @@ nvmf_ctrlr_populate_oacs(struct spdk_nvmf_ctrlr *ctrlr,
|
|||||||
void
|
void
|
||||||
spdk_nvmf_ctrlr_data_init(struct spdk_nvmf_transport_opts *opts, struct spdk_nvmf_ctrlr_data *cdata)
|
spdk_nvmf_ctrlr_data_init(struct spdk_nvmf_transport_opts *opts, struct spdk_nvmf_ctrlr_data *cdata)
|
||||||
{
|
{
|
||||||
|
cdata->kas = KAS_DEFAULT_VALUE;
|
||||||
cdata->nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16;
|
cdata->nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16;
|
||||||
cdata->nvmf_specific.ioccsz += opts->in_capsule_data_size / 16;
|
cdata->nvmf_specific.ioccsz += opts->in_capsule_data_size / 16;
|
||||||
cdata->nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16;
|
cdata->nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16;
|
||||||
@ -1857,7 +1861,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c
|
|||||||
if (subsystem->subtype == SPDK_NVMF_SUBTYPE_NVME) {
|
if (subsystem->subtype == SPDK_NVMF_SUBTYPE_NVME) {
|
||||||
spdk_strcpy_pad(cdata->mn, spdk_nvmf_subsystem_get_mn(subsystem), sizeof(cdata->mn), ' ');
|
spdk_strcpy_pad(cdata->mn, spdk_nvmf_subsystem_get_mn(subsystem), sizeof(cdata->mn), ' ');
|
||||||
spdk_strcpy_pad(cdata->sn, spdk_nvmf_subsystem_get_sn(subsystem), sizeof(cdata->sn), ' ');
|
spdk_strcpy_pad(cdata->sn, spdk_nvmf_subsystem_get_sn(subsystem), sizeof(cdata->sn), ' ');
|
||||||
cdata->kas = KAS_DEFAULT_VALUE;
|
cdata->kas = transport->cdata.kas;
|
||||||
|
|
||||||
cdata->rab = 6;
|
cdata->rab = 6;
|
||||||
cdata->cmic.multi_port = 1;
|
cdata->cmic.multi_port = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user