vhost: don't setup session coalescing on vdev init
We used to call potentially-asynchronous foreach_session() in vdev initialization path and that was perfectly fine because at that time there were no sessions created and foreach_session() was always finishing synchronously. We're about to refactor it to be always asynchronous, and for this coalescing case it could complicate the init error path. Once asynchronous thread msg is sent, we would need to wait for it to complete and we just don't want to do that. We want error handling to be simple. Since we know there are no sessions at the time of vdev creation, we just add a new function for setting coalescing params just for vdev (and not for its sessions) and we use that function in vdev init code. Change-Id: I44d204d03b5040525e4871693678d4b4a0204e63 Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/459196 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
d476d10665
commit
4b60bd1b59
@ -385,9 +385,9 @@ spdk_vhost_session_set_coalescing(struct spdk_vhost_dev *vdev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_vhost_set_coalescing(struct spdk_vhost_dev *vdev, uint32_t delay_base_us,
|
||||
uint32_t iops_threshold)
|
||||
static int
|
||||
vhost_dev_set_coalescing(struct spdk_vhost_dev *vdev, uint32_t delay_base_us,
|
||||
uint32_t iops_threshold)
|
||||
{
|
||||
uint64_t delay_time_base = delay_base_us * spdk_get_ticks_hz() / 1000000ULL;
|
||||
uint32_t io_rate = iops_threshold * SPDK_VHOST_STATS_CHECK_INTERVAL_MS / 1000U;
|
||||
@ -403,6 +403,19 @@ spdk_vhost_set_coalescing(struct spdk_vhost_dev *vdev, uint32_t delay_base_us,
|
||||
|
||||
vdev->coalescing_delay_us = delay_base_us;
|
||||
vdev->coalescing_iops_threshold = iops_threshold;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_vhost_set_coalescing(struct spdk_vhost_dev *vdev, uint32_t delay_base_us,
|
||||
uint32_t iops_threshold)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = vhost_dev_set_coalescing(vdev, delay_base_us, iops_threshold);
|
||||
if (rc != 0) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
spdk_vhost_dev_foreach_session(vdev, spdk_vhost_session_set_coalescing, NULL);
|
||||
return 0;
|
||||
@ -777,8 +790,8 @@ spdk_vhost_dev_register(struct spdk_vhost_dev *vdev, const char *name, const cha
|
||||
TAILQ_INIT(&vdev->vsessions);
|
||||
TAILQ_INSERT_TAIL(&g_spdk_vhost_devices, vdev, tailq);
|
||||
|
||||
spdk_vhost_set_coalescing(vdev, SPDK_VHOST_COALESCING_DELAY_BASE_US,
|
||||
SPDK_VHOST_VQ_IOPS_COALESCING_THRESHOLD);
|
||||
vhost_dev_set_coalescing(vdev, SPDK_VHOST_COALESCING_DELAY_BASE_US,
|
||||
SPDK_VHOST_VQ_IOPS_COALESCING_THRESHOLD);
|
||||
|
||||
spdk_vhost_dev_install_rte_compat_hooks(vdev);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user