diff --git a/app/nvmf_tgt/nvmf_tgt.c b/app/nvmf_tgt/nvmf_tgt.c index e89a35383..3fe8b52e5 100644 --- a/app/nvmf_tgt/nvmf_tgt.c +++ b/app/nvmf_tgt/nvmf_tgt.c @@ -82,7 +82,7 @@ subsystem_unregister_poller(void *arg1, void *arg2) struct nvmf_tgt_subsystem *app_subsys = arg1; struct spdk_event *event = arg2; - spdk_poller_unregister(&app_subsys->poller, NULL); + spdk_poller_unregister(&app_subsys->poller); spdk_event_call(event); } @@ -235,7 +235,7 @@ nvmf_tgt_destroy_poll_group(void *arg1, void *arg2) pg = &g_poll_groups[g_tgt.core]; assert(pg != NULL); - spdk_poller_unregister(&pg->poller, NULL); + spdk_poller_unregister(&pg->poller); spdk_nvmf_poll_group_destroy(pg->group); pg->group = NULL; @@ -354,7 +354,7 @@ nvmf_tgt_advance_state(void *arg1, void *arg2) } break; case NVMF_TGT_FINI_STOP_ACCEPTOR: { - spdk_poller_unregister(&g_acceptor_poller, NULL); + spdk_poller_unregister(&g_acceptor_poller); g_tgt.core = spdk_env_get_first_core(); g_tgt.state = NVMF_TGT_FINI_DESTROY_POLL_GROUP; break; diff --git a/include/spdk/event.h b/include/spdk/event.h index 098c228e6..fd832a143 100644 --- a/include/spdk/event.h +++ b/include/spdk/event.h @@ -196,8 +196,7 @@ void spdk_poller_register(struct spdk_poller **ppoller, /** * \brief Unregister a poller on the given lcore. */ -void spdk_poller_unregister(struct spdk_poller **ppoller, - struct spdk_event *complete); +void spdk_poller_unregister(struct spdk_poller **ppoller); /** * \brief Enable or disable monitoring of context switches. diff --git a/lib/copy/ioat/copy_engine_ioat.c b/lib/copy/ioat/copy_engine_ioat.c index e2815e303..3a7e5f79c 100644 --- a/lib/copy/ioat/copy_engine_ioat.c +++ b/lib/copy/ioat/copy_engine_ioat.c @@ -213,7 +213,7 @@ ioat_destroy_cb(void *io_device, void *ctx_buf) struct ioat_io_channel *ch = ctx_buf; ioat_free_device(ch->ioat_dev); - spdk_poller_unregister(&ch->poller, NULL); + spdk_poller_unregister(&ch->poller); } static struct spdk_io_channel * diff --git a/lib/event/reactor.c b/lib/event/reactor.c index 98daa4387..7d8f70258 100644 --- a/lib/event/reactor.c +++ b/lib/event/reactor.c @@ -225,16 +225,6 @@ spdk_poller_insert_timer(struct spdk_reactor *reactor, struct spdk_poller *polle TAILQ_INSERT_HEAD(&reactor->timer_pollers, poller, tailq); } -static void -_spdk_poller_unregister_complete(struct spdk_poller *poller) -{ - if (poller->unregister_complete_event) { - spdk_event_call(poller->unregister_complete_event); - } - - free(poller); -} - static void _spdk_reactor_msg_passed(void *arg1, void *arg2) { @@ -292,7 +282,7 @@ _spdk_reactor_context_switch_monitor_stop(void *arg1, void *arg2) struct spdk_reactor *reactor = arg1; if (reactor->rusage_poller != NULL) { - spdk_poller_unregister(&reactor->rusage_poller, NULL); + spdk_poller_unregister(&reactor->rusage_poller); } } @@ -384,7 +374,7 @@ _spdk_reactor_run(void *arg) poller->state = SPDK_POLLER_STATE_RUNNING; poller->fn(poller->arg); if (poller->state == SPDK_POLLER_STATE_UNREGISTERED) { - _spdk_poller_unregister_complete(poller); + free(poller); } else { poller->state = SPDK_POLLER_STATE_WAITING; TAILQ_INSERT_TAIL(&reactor->active_pollers, poller, tailq); @@ -402,7 +392,7 @@ _spdk_reactor_run(void *arg) poller->state = SPDK_POLLER_STATE_RUNNING; poller->fn(poller->arg); if (poller->state == SPDK_POLLER_STATE_UNREGISTERED) { - _spdk_poller_unregister_complete(poller); + free(poller); } else { poller->state = SPDK_POLLER_STATE_WAITING; spdk_poller_insert_timer(reactor, poller, now); @@ -729,14 +719,23 @@ spdk_poller_register(struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, } } -static void -_spdk_poller_unregister(struct spdk_reactor *reactor, struct spdk_poller *poller, - struct spdk_event *next) +void +spdk_poller_unregister(struct spdk_poller **ppoller) { - assert(poller->lcore == reactor->lcore); + struct spdk_poller *poller; + struct spdk_reactor *reactor; + + poller = *ppoller; + + *ppoller = NULL; + + if (poller == NULL) { + return; + } + assert(poller->lcore == spdk_env_get_current_core()); - poller->unregister_complete_event = next; + reactor = spdk_reactor_get(poller->lcore); if (poller->state == SPDK_POLLER_STATE_RUNNING) { /* @@ -752,52 +751,7 @@ _spdk_poller_unregister(struct spdk_reactor *reactor, struct spdk_poller *poller TAILQ_REMOVE(&reactor->active_pollers, poller, tailq); } - _spdk_poller_unregister_complete(poller); - } -} - -static void -_spdk_event_remove_poller(void *arg1, void *arg2) -{ - struct spdk_poller *poller = arg1; - struct spdk_reactor *reactor = spdk_reactor_get(poller->lcore); - struct spdk_event *next = arg2; - - _spdk_poller_unregister(reactor, poller, next); -} - -void -spdk_poller_unregister(struct spdk_poller **ppoller, - struct spdk_event *complete) -{ - struct spdk_poller *poller; - uint32_t lcore; - - poller = *ppoller; - - *ppoller = NULL; - - if (poller == NULL) { - if (complete) { - spdk_event_call(complete); - } - return; - } - - lcore = poller->lcore; - - if (lcore == spdk_env_get_current_core()) { - /* - * The poller is registered on the current core, so call the remove function - * directly. - */ - _spdk_poller_unregister(spdk_reactor_get(lcore), poller, complete); - } else { - /* - * The poller is registered on a different core. - * Schedule an event to run on the poller's core that will remove the poller. - */ - spdk_event_call(spdk_event_allocate(lcore, _spdk_event_remove_poller, poller, complete)); + free(poller); } } diff --git a/lib/event/rpc.c b/lib/event/rpc.c index 8d70cec68..529bdecf0 100644 --- a/lib/event/rpc.c +++ b/lib/event/rpc.c @@ -92,7 +92,7 @@ void spdk_rpc_finish(void) { spdk_rpc_close(); - spdk_poller_unregister(&g_rpc_poller, NULL); + spdk_poller_unregister(&g_rpc_poller); } void diff --git a/lib/event/subsystems/bdev/bdev.c b/lib/event/subsystems/bdev/bdev.c index 96d27c7e4..3405f9111 100644 --- a/lib/event/subsystems/bdev/bdev.c +++ b/lib/event/subsystems/bdev/bdev.c @@ -60,7 +60,7 @@ spdk_bdev_subsystem_start_poller(struct spdk_bdev_poller **ppoller, static void spdk_bdev_subsystem_stop_poller(struct spdk_bdev_poller **ppoller) { - spdk_poller_unregister((struct spdk_poller **)ppoller, NULL); + spdk_poller_unregister((struct spdk_poller **)ppoller); } static void diff --git a/lib/iscsi/acceptor.c b/lib/iscsi/acceptor.c index dfb588485..4cc070236 100644 --- a/lib/iscsi/acceptor.c +++ b/lib/iscsi/acceptor.c @@ -86,5 +86,5 @@ spdk_iscsi_acceptor_start(struct spdk_iscsi_portal *p) void spdk_iscsi_acceptor_stop(struct spdk_iscsi_portal *p) { - spdk_poller_unregister(&p->acceptor_poller, NULL); + spdk_poller_unregister(&p->acceptor_poller); } diff --git a/lib/iscsi/conn.c b/lib/iscsi/conn.c index 4db9146b4..b5d73dfee 100644 --- a/lib/iscsi/conn.c +++ b/lib/iscsi/conn.c @@ -689,7 +689,7 @@ _spdk_iscsi_conn_check_shutdown(void *arg) return; } - spdk_poller_unregister(&conn->shutdown_timer, NULL); + spdk_poller_unregister(&conn->shutdown_timer); spdk_iscsi_conn_stop_poller(conn, _spdk_iscsi_conn_free, spdk_env_get_current_core()); } @@ -710,7 +710,7 @@ void spdk_iscsi_conn_destruct(struct spdk_iscsi_conn *conn) spdk_clear_all_transfer_task(conn, NULL); spdk_sock_close(conn->sock); - spdk_poller_unregister(&conn->logout_timer, NULL); + spdk_poller_unregister(&conn->logout_timer); rc = spdk_iscsi_conn_free_tasks(conn); if (rc < 0) { @@ -761,7 +761,7 @@ spdk_iscsi_conn_check_shutdown(void *arg) struct spdk_event *event; if (spdk_iscsi_get_active_conns() == 0) { - spdk_poller_unregister(&g_shutdown_timer, NULL); + spdk_poller_unregister(&g_shutdown_timer); event = spdk_event_allocate(spdk_env_get_current_core(), spdk_iscsi_conn_check_shutdown_cb, NULL, NULL); spdk_event_call(event); @@ -829,7 +829,7 @@ spdk_iscsi_conn_stop_poller(struct spdk_iscsi_conn *conn, spdk_event_fn fn_after } __sync_fetch_and_sub(&g_num_connections[spdk_env_get_current_core()], 1); spdk_net_framework_clear_socket_association(conn->sock); - spdk_poller_unregister(&conn->poller, NULL); + spdk_poller_unregister(&conn->poller); event = spdk_event_allocate(lcore, fn_after_stop, conn, NULL); spdk_event_call(event); } @@ -1448,7 +1448,7 @@ spdk_iscsi_conn_login_do_work(void *arg) __sync_fetch_and_sub(&g_num_connections[spdk_env_get_current_core()], 1); __sync_fetch_and_add(&g_num_connections[lcore], 1); spdk_net_framework_clear_socket_association(conn->sock); - spdk_poller_unregister(&conn->poller, NULL); + spdk_poller_unregister(&conn->poller); spdk_event_call(event); } } diff --git a/lib/scsi/lun.c b/lib/scsi/lun.c index 16078baf3..3bbd17aa8 100644 --- a/lib/scsi/lun.c +++ b/lib/scsi/lun.c @@ -328,7 +328,7 @@ int spdk_scsi_lun_destruct(struct spdk_scsi_lun *lun) { spdk_bdev_close(lun->bdev_desc); - spdk_poller_unregister(&lun->hotplug_poller, NULL); + spdk_poller_unregister(&lun->hotplug_poller); spdk_scsi_lun_db_delete(lun); free(lun); diff --git a/lib/vhost/vhost_blk.c b/lib/vhost/vhost_blk.c index 27ba9519a..e3fc16b88 100644 --- a/lib/vhost/vhost_blk.c +++ b/lib/vhost/vhost_blk.c @@ -396,7 +396,7 @@ _bdev_remove_cb(struct spdk_vhost_dev *vdev, void *arg) SPDK_WARNLOG("Controller %s: Hot-removing bdev - all further requests will fail.\n", bvdev->vdev.name); if (bvdev->requestq_poller) { - spdk_poller_unregister(&bvdev->requestq_poller, NULL); + spdk_poller_unregister(&bvdev->requestq_poller); spdk_poller_register(&bvdev->requestq_poller, no_bdev_vdev_worker, bvdev, 0); } @@ -547,7 +547,7 @@ destroy_device_poller_cb(void *arg) free_task_pool(bvdev); spdk_vhost_dev_mem_unregister(&bvdev->vdev); - spdk_poller_unregister(&ctx->poller, NULL); + spdk_poller_unregister(&ctx->poller); spdk_vhost_dev_backend_event_done(ctx->event_ctx, 0); } @@ -572,7 +572,7 @@ spdk_vhost_blk_stop(struct spdk_vhost_dev *vdev, void *event_ctx) destroy_ctx->bvdev = bvdev; destroy_ctx->event_ctx = event_ctx; - spdk_poller_unregister(&bvdev->requestq_poller, NULL); + spdk_poller_unregister(&bvdev->requestq_poller); 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 5977c7440..2923e2055 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -1093,7 +1093,7 @@ destroy_device_poller_cb(void *arg) free_task_pool(svdev); - spdk_poller_unregister(&ctx->poller, NULL); + spdk_poller_unregister(&ctx->poller); spdk_vhost_dev_backend_event_done(ctx->event_ctx, 0); } @@ -1118,8 +1118,8 @@ spdk_vhost_scsi_stop(struct spdk_vhost_dev *vdev, void *event_ctx) destroy_ctx->svdev = svdev; destroy_ctx->event_ctx = event_ctx; - spdk_poller_unregister(&svdev->requestq_poller, NULL); - spdk_poller_unregister(&svdev->mgmt_poller, NULL); + spdk_poller_unregister(&svdev->requestq_poller); + spdk_poller_unregister(&svdev->mgmt_poller); spdk_poller_register(&destroy_ctx->poller, destroy_device_poller_cb, destroy_ctx, 1000); diff --git a/test/lib/bdev/bdevperf/bdevperf.c b/test/lib/bdev/bdevperf/bdevperf.c index 32289773c..a5ecb9115 100644 --- a/test/lib/bdev/bdevperf/bdevperf.c +++ b/test/lib/bdev/bdevperf/bdevperf.c @@ -212,7 +212,7 @@ end_run(void *arg1, void *arg2) spdk_bdev_close(target->bdev_desc); if (--g_target_count == 0) { if (g_show_performance_real_time) { - spdk_poller_unregister(&g_perf_timer, NULL); + spdk_poller_unregister(&g_perf_timer); } if (g_run_failed) { spdk_app_stop(1); @@ -424,9 +424,9 @@ end_target(void *arg) { struct io_target *target = arg; - spdk_poller_unregister(&target->run_timer, NULL); + spdk_poller_unregister(&target->run_timer); if (g_reset) { - spdk_poller_unregister(&target->reset_timer, NULL); + spdk_poller_unregister(&target->reset_timer); } target->is_draining = true; @@ -460,7 +460,7 @@ reset_target(void *arg) struct bdevperf_task *task = NULL; int rc; - spdk_poller_unregister(&target->reset_timer, NULL); + spdk_poller_unregister(&target->reset_timer); /* Do reset. */ rte_mempool_get(task_pool, (void **)&task); diff --git a/test/lib/bdev/nbd/nbd.c b/test/lib/bdev/nbd/nbd.c index 5ec2e4068..269a28727 100644 --- a/test/lib/bdev/nbd/nbd.c +++ b/test/lib/bdev/nbd/nbd.c @@ -52,7 +52,7 @@ static char *g_nbd_name = "/dev/nbd0"; static void nbd_shutdown(void) { - spdk_poller_unregister(&g_nbd_poller, NULL); + spdk_poller_unregister(&g_nbd_poller); spdk_nbd_stop(g_nbd_disk); spdk_app_stop(0); diff --git a/test/lib/event/reactor/reactor.c b/test/lib/event/reactor/reactor.c index c0fcfb809..746a999c3 100644 --- a/test/lib/event/reactor/reactor.c +++ b/test/lib/event/reactor/reactor.c @@ -62,7 +62,7 @@ static void oneshot(void *arg) { printf("oneshot\n"); - spdk_poller_unregister(&poller_oneshot, NULL); + spdk_poller_unregister(&poller_oneshot); } static void @@ -84,7 +84,7 @@ test_start(void *arg1, void *arg2) spdk_poller_register(&poller_oneshot, oneshot, NULL, 0); spdk_poller_register(&poller_unregister, nop, NULL, 0); - spdk_poller_unregister(&poller_unregister, NULL); + spdk_poller_unregister(&poller_unregister); } static void @@ -92,10 +92,10 @@ test_cleanup(void) { printf("test_cleanup\n"); - spdk_poller_unregister(&test_end_poller, NULL); - spdk_poller_unregister(&poller_100ms, NULL); - spdk_poller_unregister(&poller_250ms, NULL); - spdk_poller_unregister(&poller_500ms, NULL); + spdk_poller_unregister(&test_end_poller); + spdk_poller_unregister(&poller_100ms); + spdk_poller_unregister(&poller_250ms); + spdk_poller_unregister(&poller_500ms); /* poller_oneshot unregisters itself */ } diff --git a/test/lib/event/reactor_perf/reactor_perf.c b/test/lib/event/reactor_perf/reactor_perf.c index ed8a25b00..2d1d9bdbb 100644 --- a/test/lib/event/reactor_perf/reactor_perf.c +++ b/test/lib/event/reactor_perf/reactor_perf.c @@ -81,7 +81,7 @@ test_cleanup(void) { printf("test_abort\n"); - spdk_poller_unregister(&test_end_poller, NULL); + spdk_poller_unregister(&test_end_poller); spdk_app_stop(0); } diff --git a/test/unit/lib/scsi/lun.c/lun_ut.c b/test/unit/lib/scsi/lun.c/lun_ut.c index c11ea1748..ff590fda1 100644 --- a/test/unit/lib/scsi/lun.c/lun_ut.c +++ b/test/unit/lib/scsi/lun.c/lun_ut.c @@ -61,8 +61,7 @@ spdk_poller_register(struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, } void -spdk_poller_unregister(struct spdk_poller **ppoller, - struct spdk_event *complete) +spdk_poller_unregister(struct spdk_poller **ppoller) { } diff --git a/test/unit/lib/vhost/vhost.c/vhost_ut.c b/test/unit/lib/vhost/vhost.c/vhost_ut.c index a2ed9b1f7..523bfbbdd 100644 --- a/test/unit/lib/vhost/vhost.c/vhost_ut.c +++ b/test/unit/lib/vhost/vhost.c/vhost_ut.c @@ -50,7 +50,7 @@ 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, uint64_t period_microseconds)); -DEFINE_STUB_V(spdk_poller_unregister, (struct spdk_poller **ppoller, struct spdk_event *complete)); +DEFINE_STUB_V(spdk_poller_unregister, (struct spdk_poller **ppoller)); 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); DEFINE_STUB(rte_vhost_get_negotiated_features, int, (int vid, uint64_t *features), 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 15370da27..8ee13cb25 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 @@ -94,7 +94,7 @@ 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, void *arg, unsigned timeout_sec, const char *errmsg), 0); -DEFINE_STUB_V(spdk_poller_unregister, (struct spdk_poller **ppoller, struct spdk_event *complete)); +DEFINE_STUB_V(spdk_poller_unregister, (struct spdk_poller **ppoller)); DEFINE_STUB_V(spdk_ring_free, (struct spdk_ring *ring)); DEFINE_STUB(spdk_env_get_socket_id, uint32_t, (uint32_t core), 0); DEFINE_STUB_P(spdk_bdev_get_name, const char, (const struct spdk_bdev *bdev), {0}); 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 0235ea5f9..fefaa8090 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 @@ -111,7 +111,7 @@ DEFINE_STUB_P(spdk_conf_section_get_name, const char, (const struct spdk_conf_se DEFINE_STUB(spdk_env_get_socket_id, uint32_t, (uint32_t core), 0); DEFINE_STUB(spdk_vhost_event_send, int, (struct spdk_vhost_dev *vdev, spdk_vhost_event_fn cb_fn, void *arg, unsigned timeout_sec, const char *errmsg), 0); -DEFINE_STUB_V(spdk_poller_unregister, (struct spdk_poller **ppoller, struct spdk_event *complete)); +DEFINE_STUB_V(spdk_poller_unregister, (struct spdk_poller **ppoller)); DEFINE_STUB(spdk_json_write_name, int, (struct spdk_json_write_ctx *w, const char *name), 0); DEFINE_STUB(spdk_json_write_object_begin, int, (struct spdk_json_write_ctx *w), 0); DEFINE_STUB(spdk_json_write_uint32, int, (struct spdk_json_write_ctx *w, uint32_t val), 0);