+7
−6
+2
−1
Loading
Aspects of bit fields are 'implementation defined'. On some platforms alignment will occur if two adjacent fields are of different types. This occurs in spdk_nvme_feat_async_event_configutation after the crit_warn member which is effectively an int8_t, followed by an int16_t. There isn't a generic way of changing the compiler's behaviour, so the best options are: - Change crit_warn to a uint32_t bit field and copy the value to/from a spdk_nvme_critical_warning_state variable to use it. This requires changes to code using the field. - Adjust the structure definition to use smaller types to avoid the problem. This preserves existing semantics, but the field order will need to be reviewed if big-endian support is ever added (other places in nvme_spec.h will need similar attention). A second reserved field is required. Use smaller types which seems the most straightforward option. Adjust the use of the spdk_nvme_feat_async_event_configuration reserved fields in lib/nvmf/ctrlr.c. The new structure is binary compatible and the fields behave in the same way, with the exception of an additional reserved field, so updating CHANGELOG.md probably isn't necessary. Signed-off-by:Nick Connolly <nick.connolly@mayadata.io> Change-Id: I7d8163c84b4f410fc95a5b7064506ad7b4b62c6c Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6340 Community-CI: Broadcom CI Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by:
Jim Harris <james.r.harris@intel.com> Reviewed-by:
Aleksey Marchuk <alexeymar@mellanox.com>