155b047a7SKonrad Sztyber /* SPDX-License-Identifier: BSD-3-Clause 255b047a7SKonrad Sztyber * Copyright (C) 2022 Intel Corporation. 355b047a7SKonrad Sztyber * All rights reserved. 455b047a7SKonrad Sztyber */ 555b047a7SKonrad Sztyber 655b047a7SKonrad Sztyber #include "spdk/stdinc.h" 755b047a7SKonrad Sztyber #include "spdk/bdev.h" 855b047a7SKonrad Sztyber #include "spdk/log.h" 955b047a7SKonrad Sztyber #include "spdk/thread.h" 1055b047a7SKonrad Sztyber #include "spdk_internal/init.h" 1155b047a7SKonrad Sztyber 1255b047a7SKonrad Sztyber static void 1355b047a7SKonrad Sztyber iobuf_subsystem_initialize(void) 1455b047a7SKonrad Sztyber { 1555b047a7SKonrad Sztyber int rc; 1655b047a7SKonrad Sztyber 1755b047a7SKonrad Sztyber rc = spdk_iobuf_initialize(); 1855b047a7SKonrad Sztyber if (rc != 0) { 1955b047a7SKonrad Sztyber SPDK_ERRLOG("Failed to initialize iobuf\n"); 2055b047a7SKonrad Sztyber } 21d040ae7eSKonrad Sztyber 2255b047a7SKonrad Sztyber spdk_subsystem_init_next(rc); 2355b047a7SKonrad Sztyber } 2455b047a7SKonrad Sztyber 2555b047a7SKonrad Sztyber static void 2655b047a7SKonrad Sztyber iobuf_finish_cb(void *ctx) 2755b047a7SKonrad Sztyber { 2855b047a7SKonrad Sztyber spdk_subsystem_fini_next(); 2955b047a7SKonrad Sztyber } 3055b047a7SKonrad Sztyber 3155b047a7SKonrad Sztyber static void 3255b047a7SKonrad Sztyber iobuf_subsystem_finish(void) 3355b047a7SKonrad Sztyber { 3455b047a7SKonrad Sztyber spdk_iobuf_finish(iobuf_finish_cb, NULL); 3555b047a7SKonrad Sztyber } 3655b047a7SKonrad Sztyber 3755b047a7SKonrad Sztyber static void 3855b047a7SKonrad Sztyber iobuf_write_config_json(struct spdk_json_write_ctx *w) 3955b047a7SKonrad Sztyber { 4055b047a7SKonrad Sztyber struct spdk_iobuf_opts opts; 4155b047a7SKonrad Sztyber 42194983eeSJohn Levon spdk_iobuf_get_opts(&opts, sizeof(opts)); 4355b047a7SKonrad Sztyber 4455b047a7SKonrad Sztyber spdk_json_write_array_begin(w); 45d040ae7eSKonrad Sztyber 4655b047a7SKonrad Sztyber spdk_json_write_object_begin(w); 4755b047a7SKonrad Sztyber spdk_json_write_named_string(w, "method", "iobuf_set_options"); 4855b047a7SKonrad Sztyber 4955b047a7SKonrad Sztyber spdk_json_write_named_object_begin(w, "params"); 5055b047a7SKonrad Sztyber spdk_json_write_named_uint64(w, "small_pool_count", opts.small_pool_count); 5155b047a7SKonrad Sztyber spdk_json_write_named_uint64(w, "large_pool_count", opts.large_pool_count); 5255b047a7SKonrad Sztyber spdk_json_write_named_uint32(w, "small_bufsize", opts.small_bufsize); 5355b047a7SKonrad Sztyber spdk_json_write_named_uint32(w, "large_bufsize", opts.large_bufsize); 54*42d1bd28SJim Harris spdk_json_write_named_bool(w, "enable_numa", opts.enable_numa); 5555b047a7SKonrad Sztyber spdk_json_write_object_end(w); 5655b047a7SKonrad Sztyber spdk_json_write_object_end(w); 57d040ae7eSKonrad Sztyber 5855b047a7SKonrad Sztyber spdk_json_write_array_end(w); 5955b047a7SKonrad Sztyber } 6055b047a7SKonrad Sztyber 6155b047a7SKonrad Sztyber static struct spdk_subsystem g_subsystem_iobuf = { 6255b047a7SKonrad Sztyber .name = "iobuf", 6355b047a7SKonrad Sztyber .init = iobuf_subsystem_initialize, 6455b047a7SKonrad Sztyber .fini = iobuf_subsystem_finish, 6555b047a7SKonrad Sztyber .write_config_json = iobuf_write_config_json, 6655b047a7SKonrad Sztyber }; 6755b047a7SKonrad Sztyber 6855b047a7SKonrad Sztyber SPDK_SUBSYSTEM_REGISTER(g_subsystem_iobuf); 69