diff --git a/app/nvmf_tgt/nvmf_tgt.c b/app/nvmf_tgt/nvmf_tgt.c index bada16770..e89a35383 100644 --- a/app/nvmf_tgt/nvmf_tgt.c +++ b/app/nvmf_tgt/nvmf_tgt.c @@ -123,11 +123,10 @@ _nvmf_tgt_start_subsystem(void *arg1, void *arg2) { struct nvmf_tgt_subsystem *app_subsys = arg1; struct spdk_nvmf_subsystem *subsystem = app_subsys->subsystem; - int lcore = spdk_env_get_current_core(); spdk_nvmf_subsystem_start(subsystem); - spdk_poller_register(&app_subsys->poller, subsystem_poll, app_subsys, lcore, 0); + spdk_poller_register(&app_subsys->poller, subsystem_poll, app_subsys, 0); } void @@ -276,9 +275,7 @@ nvmf_tgt_create_poll_group(void *arg1, void *arg2) SPDK_ERRLOG("Failed to create poll group for core %u\n", g_tgt.core); } - spdk_poller_register(&pg->poller, - nvmf_tgt_poll_group_poll, pg, - spdk_env_get_current_core(), 0); + spdk_poller_register(&pg->poller, nvmf_tgt_poll_group_poll, pg, 0); g_active_poll_groups++; spdk_event_call(event); @@ -346,7 +343,6 @@ nvmf_tgt_advance_state(void *arg1, void *arg2) } case NVMF_TGT_INIT_START_ACCEPTOR: spdk_poller_register(&g_acceptor_poller, acceptor_poll, g_tgt.tgt, - spdk_env_get_current_core(), g_spdk_nvmf_tgt_conf.acceptor_poll_rate); SPDK_NOTICELOG("Acceptor running\n"); g_tgt.state = NVMF_TGT_RUNNING; diff --git a/include/spdk/event.h b/include/spdk/event.h index db188441f..098c228e6 100644 --- a/include/spdk/event.h +++ b/include/spdk/event.h @@ -186,12 +186,11 @@ struct spdk_event *spdk_event_allocate(uint32_t lcore, spdk_event_fn fn, void spdk_event_call(struct spdk_event *event); /** - * \brief Register a poller on the given lcore. + * \brief Register a poller on the current lcore. */ void spdk_poller_register(struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, - uint32_t lcore, uint64_t period_microseconds); /** diff --git a/lib/copy/ioat/copy_engine_ioat.c b/lib/copy/ioat/copy_engine_ioat.c index 0e85c9033..e2815e303 100644 --- a/lib/copy/ioat/copy_engine_ioat.c +++ b/lib/copy/ioat/copy_engine_ioat.c @@ -203,8 +203,7 @@ ioat_create_cb(void *io_device, void *ctx_buf) ch->ioat_dev = ioat_dev; ch->ioat_ch = ioat_dev->ioat; - spdk_poller_register(&ch->poller, ioat_poll, ch->ioat_ch, - spdk_env_get_current_core(), 0); + spdk_poller_register(&ch->poller, ioat_poll, ch->ioat_ch, 0); return 0; } diff --git a/lib/event/reactor.c b/lib/event/reactor.c index 991ccb8b1..98daa4387 100644 --- a/lib/event/reactor.c +++ b/lib/event/reactor.c @@ -282,7 +282,7 @@ _spdk_reactor_context_switch_monitor_start(void *arg1, void *arg2) if (reactor->rusage_poller == NULL) { getrusage(RUSAGE_THREAD, &reactor->rusage); - spdk_poller_register(&reactor->rusage_poller, get_rusage, reactor, reactor->lcore, 1000000); + spdk_poller_register(&reactor->rusage_poller, get_rusage, reactor, 1000000); } } @@ -684,28 +684,9 @@ spdk_reactors_fini(void) } } -static void -_spdk_poller_register(struct spdk_reactor *reactor, struct spdk_poller *poller) -{ - if (poller->period_ticks) { - spdk_poller_insert_timer(reactor, poller, spdk_get_ticks()); - } else { - TAILQ_INSERT_TAIL(&reactor->active_pollers, poller, tailq); - } -} - -static void -_spdk_event_add_poller(void *arg1, void *arg2) -{ - struct spdk_reactor *reactor = arg1; - struct spdk_poller *poller = arg2; - - _spdk_poller_register(reactor, poller); -} - void spdk_poller_register(struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, - uint32_t lcore, uint64_t period_microseconds) + uint64_t period_microseconds) { struct spdk_poller *poller; struct spdk_reactor *reactor; @@ -716,7 +697,7 @@ spdk_poller_register(struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, abort(); } - poller->lcore = lcore; + poller->lcore = spdk_env_get_current_core(); poller->state = SPDK_POLLER_STATE_WAITING; poller->fn = fn; poller->arg = arg; @@ -732,27 +713,19 @@ spdk_poller_register(struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, abort(); } - if (lcore >= SPDK_MAX_REACTORS) { + if (poller->lcore >= SPDK_MAX_REACTORS) { SPDK_ERRLOG("Attempted to use lcore %u which is larger than max lcore %u\n", - lcore, SPDK_MAX_REACTORS - 1); + poller->lcore, SPDK_MAX_REACTORS - 1); abort(); } *ppoller = poller; - reactor = spdk_reactor_get(lcore); + reactor = spdk_reactor_get(poller->lcore); - if (lcore == spdk_env_get_current_core()) { - /* - * The poller is registered to run on the current core, so call the add function - * directly. - */ - _spdk_poller_register(reactor, poller); + if (poller->period_ticks) { + spdk_poller_insert_timer(reactor, poller, spdk_get_ticks()); } else { - /* - * The poller is registered to run on a different core. - * Schedule an event to run on the poller's core that will add the poller. - */ - spdk_event_call(spdk_event_allocate(lcore, _spdk_event_add_poller, reactor, poller)); + TAILQ_INSERT_TAIL(&reactor->active_pollers, poller, tailq); } } diff --git a/lib/event/rpc.c b/lib/event/rpc.c index 3b9a5232a..8d70cec68 100644 --- a/lib/event/rpc.c +++ b/lib/event/rpc.c @@ -84,7 +84,7 @@ spdk_rpc_initialize(const char *listen_addr) } /* Register a poller to periodically check for RPCs */ - spdk_poller_register(&g_rpc_poller, spdk_rpc_subsystem_poll, NULL, spdk_env_get_current_core(), + spdk_poller_register(&g_rpc_poller, spdk_rpc_subsystem_poll, NULL, RPC_SELECT_INTERVAL); } diff --git a/lib/event/subsystems/bdev/bdev.c b/lib/event/subsystems/bdev/bdev.c index c3792afae..96d27c7e4 100644 --- a/lib/event/subsystems/bdev/bdev.c +++ b/lib/event/subsystems/bdev/bdev.c @@ -54,7 +54,6 @@ spdk_bdev_subsystem_start_poller(struct spdk_bdev_poller **ppoller, spdk_poller_register((struct spdk_poller **)ppoller, fn, arg, - spdk_env_get_current_core(), period_microseconds); } diff --git a/lib/iscsi/acceptor.c b/lib/iscsi/acceptor.c index 7b72f3030..dfb588485 100644 --- a/lib/iscsi/acceptor.c +++ b/lib/iscsi/acceptor.c @@ -79,7 +79,7 @@ spdk_iscsi_portal_accept(void *arg) void spdk_iscsi_acceptor_start(struct spdk_iscsi_portal *p) { - spdk_poller_register(&p->acceptor_poller, spdk_iscsi_portal_accept, p, spdk_env_get_current_core(), + spdk_poller_register(&p->acceptor_poller, spdk_iscsi_portal_accept, p, ACCEPT_TIMEOUT_US); } diff --git a/lib/iscsi/conn.c b/lib/iscsi/conn.c index 08af1f36a..4db9146b4 100644 --- a/lib/iscsi/conn.c +++ b/lib/iscsi/conn.c @@ -391,8 +391,7 @@ int spdk_initialize_iscsi_conns(void) return -1; } - spdk_poller_register(&g_idle_conn_poller, spdk_iscsi_conn_idle_do_work, NULL, - spdk_env_get_current_core(), 0); + spdk_poller_register(&g_idle_conn_poller, spdk_iscsi_conn_idle_do_work, NULL, 0); return 0; } @@ -515,8 +514,7 @@ error_return: conn->lcore = spdk_env_get_current_core(); spdk_net_framework_clear_socket_association(conn->sock); __sync_fetch_and_add(&g_num_connections[conn->lcore], 1); - spdk_poller_register(&conn->poller, spdk_iscsi_conn_login_do_work, conn, - conn->lcore, 0); + spdk_poller_register(&conn->poller, spdk_iscsi_conn_login_do_work, conn, 0); return 0; } @@ -718,7 +716,7 @@ void spdk_iscsi_conn_destruct(struct spdk_iscsi_conn *conn) if (rc < 0) { /* The connection cannot be freed yet. Check back later. */ spdk_poller_register(&conn->shutdown_timer, _spdk_iscsi_conn_check_shutdown, conn, - spdk_env_get_current_core(), 1000); + 1000); } else { spdk_iscsi_conn_stop_poller(conn, _spdk_iscsi_conn_free, spdk_env_get_current_core()); } @@ -862,7 +860,7 @@ void spdk_shutdown_iscsi_conns(void) pthread_mutex_unlock(&g_conns_mutex); spdk_poller_register(&g_shutdown_timer, spdk_iscsi_conn_check_shutdown, NULL, - spdk_env_get_current_core(), 1000); + 1000); } int @@ -1426,7 +1424,7 @@ spdk_iscsi_conn_full_feature_migrate(void *arg1, void *arg2) /* The poller has been unregistered, so now we can re-register it on the new core. */ conn->lcore = spdk_env_get_current_core(); spdk_poller_register(&conn->poller, spdk_iscsi_conn_full_feature_do_work, conn, - conn->lcore, 0); + 0); } void @@ -1643,7 +1641,7 @@ void spdk_iscsi_conn_logout(struct spdk_iscsi_conn *conn) { conn->state = ISCSI_CONN_STATE_LOGGED_OUT; - spdk_poller_register(&conn->logout_timer, logout_timeout, conn, spdk_env_get_current_core(), + spdk_poller_register(&conn->logout_timer, logout_timeout, conn, ISCSI_LOGOUT_TIMEOUT * 1000000); } diff --git a/lib/scsi/lun.c b/lib/scsi/lun.c index 73dd02062..16078baf3 100644 --- a/lib/scsi/lun.c +++ b/lib/scsi/lun.c @@ -246,7 +246,7 @@ _spdk_scsi_lun_hot_remove(void *arg1, void *arg2) lun->hotremove_cb(lun, lun->hotremove_ctx); } - spdk_poller_register(&lun->hotplug_poller, spdk_scsi_lun_hotplug, lun, lun->lcore, 0); + spdk_poller_register(&lun->hotplug_poller, spdk_scsi_lun_hotplug, lun, 0); } static void diff --git a/lib/vhost/vhost_blk.c b/lib/vhost/vhost_blk.c index 19a9fb5f3..27ba9519a 100644 --- a/lib/vhost/vhost_blk.c +++ b/lib/vhost/vhost_blk.c @@ -397,7 +397,7 @@ _bdev_remove_cb(struct spdk_vhost_dev *vdev, void *arg) bvdev->vdev.name); if (bvdev->requestq_poller) { spdk_poller_unregister(&bvdev->requestq_poller, NULL); - spdk_poller_register(&bvdev->requestq_poller, no_bdev_vdev_worker, bvdev, bvdev->vdev.lcore, 0); + spdk_poller_register(&bvdev->requestq_poller, no_bdev_vdev_worker, bvdev, 0); } bvdev->bdev = NULL; @@ -508,7 +508,7 @@ spdk_vhost_blk_start(struct spdk_vhost_dev *vdev, void *event_ctx) } spdk_poller_register(&bvdev->requestq_poller, bvdev->bdev ? vdev_worker : no_bdev_vdev_worker, - bvdev, vdev->lcore, 0); + bvdev, 0); SPDK_NOTICELOG("Started poller for vhost controller %s on lcore %d\n", vdev->name, vdev->lcore); out: spdk_vhost_dev_backend_event_done(event_ctx, rc); @@ -573,7 +573,7 @@ spdk_vhost_blk_stop(struct spdk_vhost_dev *vdev, void *event_ctx) destroy_ctx->event_ctx = event_ctx; spdk_poller_unregister(&bvdev->requestq_poller, NULL); - spdk_poller_register(&destroy_ctx->poller, destroy_device_poller_cb, destroy_ctx, vdev->lcore, + spdk_poller_register(&destroy_ctx->poller, destroy_device_poller_cb, destroy_ctx, 1000); return 0; diff --git a/lib/vhost/vhost_scsi.c b/lib/vhost/vhost_scsi.c index 9e9fdc37b..5977c7440 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -1051,8 +1051,8 @@ spdk_vhost_scsi_start(struct spdk_vhost_dev *vdev, void *event_ctx) spdk_vhost_dev_mem_register(vdev); - spdk_poller_register(&svdev->requestq_poller, vdev_worker, svdev, vdev->lcore, 0); - spdk_poller_register(&svdev->mgmt_poller, vdev_mgmt_worker, svdev, vdev->lcore, + spdk_poller_register(&svdev->requestq_poller, vdev_worker, svdev, 0); + spdk_poller_register(&svdev->mgmt_poller, vdev_mgmt_worker, svdev, MGMT_POLL_PERIOD_US); out: spdk_vhost_dev_backend_event_done(event_ctx, rc); @@ -1120,7 +1120,7 @@ spdk_vhost_scsi_stop(struct spdk_vhost_dev *vdev, void *event_ctx) spdk_poller_unregister(&svdev->requestq_poller, NULL); spdk_poller_unregister(&svdev->mgmt_poller, NULL); - spdk_poller_register(&destroy_ctx->poller, destroy_device_poller_cb, destroy_ctx, vdev->lcore, + spdk_poller_register(&destroy_ctx->poller, destroy_device_poller_cb, destroy_ctx, 1000); return 0; diff --git a/test/lib/bdev/bdevperf/bdevperf.c b/test/lib/bdev/bdevperf/bdevperf.c index 7d6c5e3d9..32289773c 100644 --- a/test/lib/bdev/bdevperf/bdevperf.c +++ b/test/lib/bdev/bdevperf/bdevperf.c @@ -449,7 +449,7 @@ reset_cb(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg) rte_mempool_put(task_pool, task); spdk_bdev_free_io(bdev_io); - spdk_poller_register(&target->reset_timer, reset_target, target, target->lcore, + spdk_poller_register(&target->reset_timer, reset_target, target, 10 * 1000000); } @@ -485,11 +485,11 @@ bdevperf_submit_on_core(void *arg1, void *arg2) target->ch = spdk_bdev_get_io_channel(target->bdev_desc); /* Start a timer to stop this I/O chain when the run is over */ - spdk_poller_register(&target->run_timer, end_target, target, target->lcore, + spdk_poller_register(&target->run_timer, end_target, target, g_time_in_sec * 1000000); if (g_reset) { spdk_poller_register(&target->reset_timer, reset_target, target, - target->lcore, 10 * 1000000); + 10 * 1000000); } bdevperf_submit_io(target, g_queue_depth); target = target->next; @@ -585,7 +585,7 @@ bdevperf_run(void *arg1, void *arg2) /* Start a timer to dump performance numbers */ if (g_show_performance_real_time) { spdk_poller_register(&g_perf_timer, performance_statistics_thread, NULL, - spdk_env_get_current_core(), 1000000); + 1000000); } /* Send events to start all I/O */ diff --git a/test/lib/bdev/nbd/nbd.c b/test/lib/bdev/nbd/nbd.c index 0ba2a7c6f..5ec2e4068 100644 --- a/test/lib/bdev/nbd/nbd.c +++ b/test/lib/bdev/nbd/nbd.c @@ -88,7 +88,7 @@ nbd_start(void *arg1, void *arg2) return; } - spdk_poller_register(&g_nbd_poller, nbd_poll, NULL, spdk_env_get_current_core(), 0); + spdk_poller_register(&g_nbd_poller, nbd_poll, NULL, 0); } static void usage(char *program_name) diff --git a/test/lib/event/reactor/reactor.c b/test/lib/event/reactor/reactor.c index 193bd1805..c0fcfb809 100644 --- a/test/lib/event/reactor/reactor.c +++ b/test/lib/event/reactor/reactor.c @@ -76,14 +76,14 @@ test_start(void *arg1, void *arg2) printf("test_start\n"); /* Register a poller that will stop the test after the time has elapsed. */ - spdk_poller_register(&test_end_poller, test_end, NULL, 0, g_time_in_sec * 1000000ULL); + spdk_poller_register(&test_end_poller, test_end, NULL, g_time_in_sec * 1000000ULL); - spdk_poller_register(&poller_100ms, tick, (void *)100, 0, 100000); - spdk_poller_register(&poller_250ms, tick, (void *)250, 0, 250000); - spdk_poller_register(&poller_500ms, tick, (void *)500, 0, 500000); - spdk_poller_register(&poller_oneshot, oneshot, NULL, 0, 0); + spdk_poller_register(&poller_100ms, tick, (void *)100, 100000); + spdk_poller_register(&poller_250ms, tick, (void *)250, 250000); + spdk_poller_register(&poller_500ms, tick, (void *)500, 500000); + spdk_poller_register(&poller_oneshot, oneshot, NULL, 0); - spdk_poller_register(&poller_unregister, nop, NULL, 0, 0); + spdk_poller_register(&poller_unregister, nop, NULL, 0); spdk_poller_unregister(&poller_unregister, NULL); } diff --git a/test/lib/event/reactor_perf/reactor_perf.c b/test/lib/event/reactor_perf/reactor_perf.c index c8b3f84d6..ed8a25b00 100644 --- a/test/lib/event/reactor_perf/reactor_perf.c +++ b/test/lib/event/reactor_perf/reactor_perf.c @@ -69,7 +69,6 @@ test_start(void *arg1, void *arg2) /* Register a poller that will stop the test after the time has elapsed. */ spdk_poller_register(&test_end_poller, __test_end, NULL, - spdk_env_get_current_core(), g_time_in_sec * 1000000ULL); for (i = 0; i < g_queue_depth; i++) { diff --git a/test/unit/lib/scsi/lun.c/lun_ut.c b/test/unit/lib/scsi/lun.c/lun_ut.c index f55caed37..c11ea1748 100644 --- a/test/unit/lib/scsi/lun.c/lun_ut.c +++ b/test/unit/lib/scsi/lun.c/lun_ut.c @@ -56,7 +56,7 @@ static uint32_t g_task_count = 0; void spdk_poller_register(struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, - uint32_t lcore, uint64_t period_microseconds) + uint64_t period_microseconds) { } diff --git a/test/unit/lib/vhost/vhost.c/vhost_ut.c b/test/unit/lib/vhost/vhost.c/vhost_ut.c index c56de0e14..a2ed9b1f7 100644 --- a/test/unit/lib/vhost/vhost.c/vhost_ut.c +++ b/test/unit/lib/vhost/vhost.c/vhost_ut.c @@ -49,7 +49,7 @@ DEFINE_STUB(spdk_app_get_core_mask, uint64_t, (void), 0); DEFINE_STUB_V(spdk_app_stop, (int rc)); DEFINE_STUB_V(spdk_event_call, (struct spdk_event *event)); DEFINE_STUB_V(spdk_poller_register, (struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, - uint32_t lcore, uint64_t period_microseconds)); + uint64_t period_microseconds)); DEFINE_STUB_V(spdk_poller_unregister, (struct spdk_poller **ppoller, struct spdk_event *complete)); DEFINE_STUB(spdk_iommu_mem_unregister, int, (uint64_t addr, uint64_t len), 0); DEFINE_STUB(rte_vhost_get_mem_table, int, (int vid, struct rte_vhost_memory **mem), 0); diff --git a/test/unit/lib/vhost/vhost_blk.c/vhost_blk_ut.c b/test/unit/lib/vhost/vhost_blk.c/vhost_blk_ut.c index b49d83c34..15370da27 100644 --- a/test/unit/lib/vhost/vhost_blk.c/vhost_blk_ut.c +++ b/test/unit/lib/vhost/vhost_blk.c/vhost_blk_ut.c @@ -89,7 +89,7 @@ DEFINE_STUB(spdk_vhost_vq_avail_ring_get, uint16_t, (struct spdk_vhost_virtqueue uint16_t reqs_len), 0); DEFINE_STUB_V(spdk_vhost_dev_mem_register, (struct spdk_vhost_dev *vdev)); DEFINE_STUB_V(spdk_poller_register, (struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, - uint32_t lcore, uint64_t period_microseconds)); + uint64_t period_microseconds)); DEFINE_STUB_V(spdk_vhost_dev_mem_unregister, (struct spdk_vhost_dev *vdev)); DEFINE_STUB(spdk_env_get_current_core, uint32_t, (void), 0); DEFINE_STUB(spdk_vhost_event_send, int, (struct spdk_vhost_dev *vdev, spdk_vhost_event_fn cb_fn, diff --git a/test/unit/lib/vhost/vhost_scsi.c/vhost_scsi_ut.c b/test/unit/lib/vhost/vhost_scsi.c/vhost_scsi_ut.c index 80badeae2..0235ea5f9 100644 --- a/test/unit/lib/vhost/vhost_scsi.c/vhost_scsi_ut.c +++ b/test/unit/lib/vhost/vhost_scsi.c/vhost_scsi_ut.c @@ -88,7 +88,7 @@ DEFINE_STUB(spdk_vhost_vring_desc_to_iov, int, (struct spdk_vhost_dev *vdev, str DEFINE_STUB_V(spdk_scsi_task_process_null_lun, (struct spdk_scsi_task *task)); DEFINE_STUB_V(spdk_vhost_dev_mem_register, (struct spdk_vhost_dev *vdev)); DEFINE_STUB_V(spdk_poller_register, (struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, - uint32_t lcore, uint64_t period_microseconds)); + uint64_t period_microseconds)); DEFINE_STUB_V(spdk_ring_free, (struct spdk_ring *ring)); DEFINE_STUB(spdk_vhost_dev_has_feature, bool, (struct spdk_vhost_dev *vdev, unsigned feature_id), false);