subsystem: make subsystem declaration macro just register subsystem

Don't do anything under the scene as adding/removing fields in struct
spdk_subsystem will require both macro change and C file changes.

Change-Id: I11bc0d5758edd7e0e0bd3f93e251d868cd9b1d2b
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/401850
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Pawel Wodkowski 2018-02-28 19:15:52 +01:00 committed by Jim Harris
parent 5333a632ce
commit 4294719ed7
9 changed files with 86 additions and 28 deletions

View File

@ -66,7 +66,6 @@ extern struct spdk_subsystem_list g_subsystems;
struct spdk_subsystem_depend { struct spdk_subsystem_depend {
const char *name; const char *name;
const char *depends_on; const char *depends_on;
struct spdk_subsystem *depends_on_subsystem;
TAILQ_ENTRY(spdk_subsystem_depend) tailq; TAILQ_ENTRY(spdk_subsystem_depend) tailq;
}; };
@ -88,27 +87,19 @@ void spdk_rpc_finish(void);
/** /**
* \brief Register a new subsystem * \brief Register a new subsystem
*/ */
#define SPDK_SUBSYSTEM_REGISTER(_name, _init, _fini, _config) \ #define SPDK_SUBSYSTEM_REGISTER(_name) \
struct spdk_subsystem __spdk_subsystem_ ## _name = { \
.name = #_name, \
.init = _init, \
.fini = _fini, \
.config = _config, \
}; \
__attribute__((constructor)) static void _name ## _register(void) \ __attribute__((constructor)) static void _name ## _register(void) \
{ \ { \
spdk_add_subsystem(&__spdk_subsystem_ ## _name); \ spdk_add_subsystem(&_name); \
} }
/** /**
* \brief Declare that a subsystem depends on another subsystem. * \brief Declare that a subsystem depends on another subsystem.
*/ */
#define SPDK_SUBSYSTEM_DEPEND(_name, _depends_on) \ #define SPDK_SUBSYSTEM_DEPEND(_name, _depends_on) \
extern struct spdk_subsystem __spdk_subsystem_ ## _depends_on; \
static struct spdk_subsystem_depend __subsystem_ ## _name ## _depend_on ## _depends_on = { \ static struct spdk_subsystem_depend __subsystem_ ## _name ## _depend_on ## _depends_on = { \
.name = #_name, \ .name = #_name, \
.depends_on = #_depends_on, \ .depends_on = #_depends_on, \
.depends_on_subsystem = &__spdk_subsystem_ ## _depends_on, \
}; \ }; \
__attribute__((constructor)) static void _name ## _depend_on ## _depends_on(void) \ __attribute__((constructor)) static void _name ## _depend_on ## _depends_on(void) \
{ \ { \

View File

@ -64,6 +64,12 @@ spdk_bdev_subsystem_finish(void)
spdk_bdev_finish(spdk_bdev_subsystem_finish_done, NULL); spdk_bdev_finish(spdk_bdev_subsystem_finish_done, NULL);
} }
SPDK_SUBSYSTEM_REGISTER(bdev, spdk_bdev_subsystem_initialize, static struct spdk_subsystem g_spdk_subsystem_bdev = {
spdk_bdev_subsystem_finish, spdk_bdev_config_text) .name = "bdev",
.init = spdk_bdev_subsystem_initialize,
.fini = spdk_bdev_subsystem_finish,
.config = spdk_bdev_config_text,
};
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_bdev);
SPDK_SUBSYSTEM_DEPEND(bdev, copy) SPDK_SUBSYSTEM_DEPEND(bdev, copy)

View File

@ -60,5 +60,11 @@ spdk_copy_engine_subsystem_finish(void)
spdk_copy_engine_finish(spdk_copy_engine_subsystem_finish_done, NULL); spdk_copy_engine_finish(spdk_copy_engine_subsystem_finish_done, NULL);
} }
SPDK_SUBSYSTEM_REGISTER(copy, spdk_copy_engine_subsystem_initialize, static struct spdk_subsystem g_spdk_subsystem_copy = {
spdk_copy_engine_subsystem_finish, NULL) .name = "copy",
.init = spdk_copy_engine_subsystem_initialize,
.fini = spdk_copy_engine_subsystem_finish,
.config = NULL,
};
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_copy);

View File

@ -61,6 +61,12 @@ spdk_iscsi_subsystem_fini(void)
spdk_iscsi_fini(spdk_iscsi_subsystem_fini_done, NULL); spdk_iscsi_fini(spdk_iscsi_subsystem_fini_done, NULL);
} }
SPDK_SUBSYSTEM_REGISTER(iscsi, spdk_iscsi_subsystem_init, spdk_iscsi_subsystem_fini, static struct spdk_subsystem g_spdk_subsystem_iscsi = {
spdk_iscsi_config_text) .name = "iscsi",
.init = spdk_iscsi_subsystem_init,
.fini = spdk_iscsi_subsystem_fini,
.config = spdk_iscsi_config_text,
};
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_iscsi);
SPDK_SUBSYSTEM_DEPEND(iscsi, scsi) SPDK_SUBSYSTEM_DEPEND(iscsi, scsi)

View File

@ -54,5 +54,12 @@ spdk_nbd_subsystem_fini(void)
spdk_subsystem_fini_next(); spdk_subsystem_fini_next();
} }
SPDK_SUBSYSTEM_REGISTER(nbd, spdk_nbd_subsystem_init, spdk_nbd_subsystem_fini, NULL) static struct spdk_subsystem g_spdk_subsystem_nbd = {
.name = "nbd",
.init = spdk_nbd_subsystem_init,
.fini = spdk_nbd_subsystem_fini,
.config = NULL,
};
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_nbd);
SPDK_SUBSYSTEM_DEPEND(nbd, bdev) SPDK_SUBSYSTEM_DEPEND(nbd, bdev)

View File

@ -54,8 +54,14 @@ spdk_interface_subsystem_destroy(void)
spdk_subsystem_fini_next(); spdk_subsystem_fini_next();
} }
SPDK_SUBSYSTEM_REGISTER(interface, spdk_interface_subsystem_init, static struct spdk_subsystem g_spdk_subsystem_interface = {
spdk_interface_subsystem_destroy, NULL) .name = "interface",
.init = spdk_interface_subsystem_init,
.fini = spdk_interface_subsystem_destroy,
.config = NULL,
};
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_interface);
static void static void
spdk_net_subsystem_start(void) spdk_net_subsystem_start(void)
@ -74,6 +80,12 @@ spdk_net_subsystem_fini(void)
spdk_subsystem_fini_next(); spdk_subsystem_fini_next();
} }
SPDK_SUBSYSTEM_REGISTER(net_framework, spdk_net_subsystem_start, static struct spdk_subsystem g_spdk_subsystem_net_framework = {
spdk_net_subsystem_fini, NULL) .name = "net_framework",
.init = spdk_net_subsystem_start,
.fini = spdk_net_subsystem_fini,
.config = NULL,
};
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_net_framework);
SPDK_SUBSYSTEM_DEPEND(net_framework, interface) SPDK_SUBSYSTEM_DEPEND(net_framework, interface)

View File

@ -54,5 +54,12 @@ spdk_scsi_subsystem_fini(void)
spdk_subsystem_fini_next(); spdk_subsystem_fini_next();
} }
SPDK_SUBSYSTEM_REGISTER(scsi, spdk_scsi_subsystem_init, spdk_scsi_subsystem_fini, NULL) static struct spdk_subsystem g_spdk_subsystem_scsi = {
.name = "scsi",
.init = spdk_scsi_subsystem_init,
.fini = spdk_scsi_subsystem_fini,
.config = NULL,
};
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_scsi);
SPDK_SUBSYSTEM_DEPEND(scsi, bdev) SPDK_SUBSYSTEM_DEPEND(scsi, bdev)

View File

@ -59,5 +59,12 @@ spdk_vhost_subsystem_fini(void)
spdk_vhost_fini(spdk_vhost_subsystem_fini_done); spdk_vhost_fini(spdk_vhost_subsystem_fini_done);
} }
SPDK_SUBSYSTEM_REGISTER(vhost, spdk_vhost_subsystem_init, spdk_vhost_subsystem_fini, NULL) static struct spdk_subsystem g_spdk_subsystem_vhost = {
.name = "vhost",
.init = spdk_vhost_subsystem_init,
.fini = spdk_vhost_subsystem_fini,
.config = NULL,
};
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_vhost);
SPDK_SUBSYSTEM_DEPEND(vhost, scsi) SPDK_SUBSYSTEM_DEPEND(vhost, scsi)

View File

@ -202,10 +202,26 @@ subsystem_sort_test_depends_on_multiple(void)
TAILQ_REMOVE(&g_subsystems, subsystem, tailq); TAILQ_REMOVE(&g_subsystems, subsystem, tailq);
} }
SPDK_SUBSYSTEM_REGISTER(subsystem1, NULL, NULL, NULL) struct spdk_subsystem subsystem1 = {
SPDK_SUBSYSTEM_REGISTER(subsystem2, NULL, NULL, NULL) .name = "subsystem1",
SPDK_SUBSYSTEM_REGISTER(subsystem3, NULL, NULL, NULL) };
SPDK_SUBSYSTEM_REGISTER(subsystem4, NULL, NULL, NULL)
struct spdk_subsystem subsystem2 = {
.name = "subsystem2",
};
struct spdk_subsystem subsystem3 = {
.name = "subsystem3",
};
struct spdk_subsystem subsystem4 = {
.name = "subsystem4",
};
SPDK_SUBSYSTEM_REGISTER(subsystem1);
SPDK_SUBSYSTEM_REGISTER(subsystem2);
SPDK_SUBSYSTEM_REGISTER(subsystem3);
SPDK_SUBSYSTEM_REGISTER(subsystem4);
SPDK_SUBSYSTEM_DEPEND(subsystem1, subsystem2) SPDK_SUBSYSTEM_DEPEND(subsystem1, subsystem2)
SPDK_SUBSYSTEM_DEPEND(subsystem2, subsystem3) SPDK_SUBSYSTEM_DEPEND(subsystem2, subsystem3)
SPDK_SUBSYSTEM_DEPEND(subsystem3, subsystem4) SPDK_SUBSYSTEM_DEPEND(subsystem3, subsystem4)