Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright (C) 2019 Intel Corporation. 3 : : * All rights reserved. 4 : : */ 5 : : 6 : : #include "spdk/stdinc.h" 7 : : 8 : : #include "spdk/json.h" 9 : : #include "spdk/thread.h" 10 : : #include "spdk/likely.h" 11 : : #include "spdk/log.h" 12 : : 13 : : #include "spdk/vmd.h" 14 : : 15 : : #include "spdk_internal/init.h" 16 : : #include "event_vmd.h" 17 : : 18 : : static struct spdk_poller *g_hotplug_poller; 19 : : static bool g_enabled; 20 : : 21 : : void 22 : 1 : vmd_subsystem_enable(void) 23 : : { 24 : 1 : g_enabled = true; 25 : 1 : } 26 : : 27 : : bool 28 : 0 : vmd_subsystem_is_enabled(void) 29 : : { 30 [ # # ]: 0 : return g_enabled; 31 : : } 32 : : 33 : : static int 34 : 0 : vmd_hotplug_monitor(void *ctx) 35 : : { 36 : 0 : return spdk_vmd_hotplug_monitor(); 37 : : } 38 : : 39 : : static void 40 : 1910 : vmd_subsystem_init(void) 41 : : { 42 : 1910 : int rc = 0; 43 : : 44 [ + + + + ]: 1910 : if (!g_enabled) { 45 : 1909 : goto out; 46 : : } 47 : : 48 : 1 : rc = spdk_vmd_init(); 49 [ - + ]: 1 : if (spdk_likely(rc != 0)) { 50 : 0 : SPDK_ERRLOG("Failed to initialize the VMD library\n"); 51 : 0 : goto out; 52 : : } 53 : : 54 [ - + ]: 1 : assert(g_hotplug_poller == NULL); 55 : : 56 : 1 : g_hotplug_poller = SPDK_POLLER_REGISTER(vmd_hotplug_monitor, NULL, 1000000ULL); 57 [ + - ]: 1 : if (g_hotplug_poller == NULL) { 58 : 0 : SPDK_ERRLOG("Failed to register hotplug monitor poller\n"); 59 : 0 : rc = -ENOMEM; 60 : 0 : goto out; 61 : : } 62 : 1 : out: 63 : 1910 : spdk_subsystem_init_next(rc); 64 : 1910 : } 65 : : 66 : : static void 67 : 1910 : vmd_subsystem_fini(void) 68 : : { 69 : 1910 : spdk_poller_unregister(&g_hotplug_poller); 70 : : 71 : 1910 : spdk_vmd_fini(); 72 : : 73 : 1910 : spdk_subsystem_fini_next(); 74 : 1910 : } 75 : : 76 : : static void 77 : 120 : vmd_write_config_json(struct spdk_json_write_ctx *w) 78 : : { 79 : 120 : spdk_json_write_array_begin(w); 80 : : 81 [ - + - + ]: 120 : if (g_enabled) { 82 : 0 : spdk_json_write_object_begin(w); 83 : 0 : spdk_json_write_named_string(w, "method", "vmd_enable"); 84 : 0 : spdk_json_write_named_object_begin(w, "params"); 85 : 0 : spdk_json_write_object_end(w); 86 : 0 : spdk_json_write_object_end(w); 87 : : } 88 : : 89 : 120 : spdk_json_write_array_end(w); 90 : 120 : } 91 : : 92 : : static struct spdk_subsystem g_spdk_subsystem_vmd = { 93 : : .name = "vmd", 94 : : .init = vmd_subsystem_init, 95 : : .fini = vmd_subsystem_fini, 96 : : .write_config_json = vmd_write_config_json, 97 : : }; 98 : : 99 : 2027 : SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_vmd);