diff --git a/app/iscsi_tgt/Makefile b/app/iscsi_tgt/Makefile index 1a9254dd7..96b5587a5 100644 --- a/app/iscsi_tgt/Makefile +++ b/app/iscsi_tgt/Makefile @@ -46,7 +46,8 @@ CFLAGS += -I$(SPDK_ROOT_DIR)/lib C_SRCS := iscsi_tgt.c -SPDK_LIB_LIST = jsonrpc json rpc bdev_rpc bdev iscsi scsi net copy trace conf +SPDK_LIB_LIST = event_bdev +SPDK_LIB_LIST += jsonrpc json rpc bdev_rpc bdev iscsi scsi net copy trace conf SPDK_LIB_LIST += util log log_rpc event app_rpc LIBS += $(BLOCKDEV_MODULES_LINKER_ARGS) \ diff --git a/app/nvmf_tgt/Makefile b/app/nvmf_tgt/Makefile index ef044e40a..e07b2da6c 100644 --- a/app/nvmf_tgt/Makefile +++ b/app/nvmf_tgt/Makefile @@ -42,7 +42,8 @@ CFLAGS += $(ENV_CFLAGS) C_SRCS := conf.c nvmf_main.c nvmf_tgt.c nvmf_rpc.c -SPDK_LIB_LIST = nvmf event log trace conf util bdev copy rpc jsonrpc json +SPDK_LIB_LIST = event_bdev +SPDK_LIB_LIST += nvmf event log trace conf util bdev copy rpc jsonrpc json SPDK_LIB_LIST += app_rpc log_rpc bdev_rpc LIBS += $(BLOCKDEV_MODULES_LINKER_ARGS) \ diff --git a/app/vhost/Makefile b/app/vhost/Makefile index aff865fb5..8f3b79724 100644 --- a/app/vhost/Makefile +++ b/app/vhost/Makefile @@ -42,7 +42,8 @@ CFLAGS += $(ENV_CFLAGS) C_SRCS := vhost.c -SPDK_LIB_LIST = jsonrpc json rpc bdev_rpc bdev scsi net copy trace conf +SPDK_LIB_LIST = event_bdev +SPDK_LIB_LIST += jsonrpc json rpc bdev_rpc bdev scsi net copy trace conf SPDK_LIB_LIST += util log log_rpc event app_rpc SPDK_LIB_LIST += vhost rte_vhost diff --git a/include/spdk/bdev.h b/include/spdk/bdev.h index 48a555958..542c34082 100644 --- a/include/spdk/bdev.h +++ b/include/spdk/bdev.h @@ -107,6 +107,10 @@ struct spdk_bdev_io_stat { uint64_t num_write_ops; }; +void spdk_bdev_initialize(void); +int spdk_bdev_finish(void); +void spdk_bdev_config_text(FILE *fp); + struct spdk_bdev *spdk_bdev_get_by_name(const char *bdev_name); struct spdk_bdev *spdk_bdev_first(void); diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 0e6bf8695..f5b5bfc61 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -260,7 +260,7 @@ spdk_bdev_module_get_max_ctx_size(void) return max_bdev_module_size; } -static void +void spdk_bdev_config_text(FILE *fp) { struct spdk_bdev_module_if *bdev_module; @@ -344,7 +344,7 @@ spdk_vbdev_module_init_next(int rc) } } -static void +void spdk_bdev_initialize(void) { int cache_size; @@ -404,7 +404,7 @@ end: spdk_bdev_module_init_next(rc); } -static int +int spdk_bdev_finish(void) { struct spdk_bdev_module_if *bdev_module; @@ -1414,5 +1414,3 @@ spdk_vbdev_module_list_add(struct spdk_bdev_module_if *vbdev_module) { TAILQ_INSERT_TAIL(&g_bdev_mgr.vbdev_modules, vbdev_module, tailq); } -SPDK_SUBSYSTEM_REGISTER(bdev, spdk_bdev_initialize, spdk_bdev_finish, spdk_bdev_config_text) -SPDK_SUBSYSTEM_DEPEND(bdev, copy) diff --git a/lib/event/Makefile b/lib/event/Makefile index 0e6419fd1..6689067d2 100644 --- a/lib/event/Makefile +++ b/lib/event/Makefile @@ -38,6 +38,6 @@ CFLAGS += $(ENV_CFLAGS) LIBNAME = event C_SRCS = app.c reactor.c subsystem.c -DIRS-y = rpc +DIRS-y = rpc subsystems include $(SPDK_ROOT_DIR)/mk/spdk.lib.mk diff --git a/lib/event/subsystems/Makefile b/lib/event/subsystems/Makefile new file mode 100644 index 000000000..54be7c8c4 --- /dev/null +++ b/lib/event/subsystems/Makefile @@ -0,0 +1,44 @@ +# +# BSD LICENSE +# +# Copyright (c) Intel Corporation. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../..) +include $(SPDK_ROOT_DIR)/mk/spdk.common.mk + +DIRS-y += bdev + +.PHONY: all clean $(DIRS-y) + +all: $(DIRS-y) +clean: $(DIRS-y) + +include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk diff --git a/lib/event/subsystems/bdev/Makefile b/lib/event/subsystems/bdev/Makefile new file mode 100644 index 000000000..29087fa96 --- /dev/null +++ b/lib/event/subsystems/bdev/Makefile @@ -0,0 +1,41 @@ +# +# BSD LICENSE +# +# Copyright (c) Intel Corporation. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../../..) +include $(SPDK_ROOT_DIR)/mk/spdk.common.mk + +CFLAGS += $(ENV_CFLAGS) -I. +C_SRCS = bdev.c +LIBNAME = event_bdev + +include $(SPDK_ROOT_DIR)/mk/spdk.lib.mk diff --git a/lib/event/subsystems/bdev/bdev.c b/lib/event/subsystems/bdev/bdev.c new file mode 100644 index 000000000..e7d73b6aa --- /dev/null +++ b/lib/event/subsystems/bdev/bdev.c @@ -0,0 +1,41 @@ +/*- + * BSD LICENSE + * + * Copyright (c) Intel Corporation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "spdk/stdinc.h" + +#include "spdk/bdev.h" + +#include "spdk_internal/event.h" + +SPDK_SUBSYSTEM_REGISTER(bdev, spdk_bdev_initialize, spdk_bdev_finish, spdk_bdev_config_text) +SPDK_SUBSYSTEM_DEPEND(bdev, copy) diff --git a/lib/rocksdb/spdk.rocksdb.mk b/lib/rocksdb/spdk.rocksdb.mk index dda63b3d9..6b1e55bc2 100644 --- a/lib/rocksdb/spdk.rocksdb.mk +++ b/lib/rocksdb/spdk.rocksdb.mk @@ -49,12 +49,12 @@ CXXFLAGS += -fno-profile-arcs -fno-test-coverage CXXFLAGS += -fno-sanitize=undefined CXXFLAGS += -fno-sanitize=address -SPDK_LIB_LIST = bdev copy event conf trace log blobfs blob blob_bdev \ - util jsonrpc json rpc +SPDK_LIB_LIST = event_bdev +SPDK_LIB_LIST += blobfs blob bdev blob_bdev copy event util conf trace \ + log jsonrpc json rpc -AM_LINK += $(BLOCKDEV_MODULES_LINKER_ARGS) -AM_LINK += $(SPDK_LIB_LINKER_ARGS) -AM_LINK += $(ENV_LINKER_ARGS) +AM_LINK += $(COPY_MODULES_LINKER_ARGS) $(BLOCKDEV_MODULES_LINKER_ARGS) +AM_LINK += $(SPDK_LIB_LINKER_ARGS) $(ENV_LINKER_ARGS) ifeq ($(CONFIG_UBSAN),y) AM_LINK += -fsanitize=undefined diff --git a/mk/spdk.app.mk b/mk/spdk.app.mk index 5ae15f80d..a4a6afc40 100644 --- a/mk/spdk.app.mk +++ b/mk/spdk.app.mk @@ -31,24 +31,29 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # +# Event subsystems only export constructor functions, so wrap these +# in whole-archive linker args +SPDK_FILTER_LIB_LIST = $(filter event_%,$(SPDK_LIB_LIST)) + # RPC libraries only export constructor functions, so these need to be treated # separately and wrapped in whole-archive linker args -SPDK_RPC_LIB_LIST = $(filter %_rpc,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter %_rpc,$(SPDK_LIB_LIST)) # Currently some libraries contain their respective RPC methods # rather than breaking them out into separate libraries. So we must also include # these directories in the RPC library list. -SPDK_RPC_LIB_LIST += $(filter iscsi,$(SPDK_LIB_LIST)) -SPDK_RPC_LIB_LIST += $(filter net,$(SPDK_LIB_LIST)) -SPDK_RPC_LIB_LIST += $(filter scsi,$(SPDK_LIB_LIST)) -SPDK_RPC_LIB_LIST += $(filter vhost,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter iscsi,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter net,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter scsi,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter vhost,$(SPDK_LIB_LIST)) -SPDK_REMAINING_LIB_LIST = $(filter-out $(SPDK_RPC_LIB_LIST),$(SPDK_LIB_LIST)) +SPDK_WHOLE_ARCHIVE_LIB_LIST = $(sort $(SPDK_FILTER_LIB_LIST)) +SPDK_REMAINING_LIB_LIST = $(filter-out $(SPDK_WHOLE_ARCHIVE_LIB_LIST),$(SPDK_LIB_LIST)) SPDK_LIB_FILES = $(call spdk_lib_list_to_files,$(SPDK_LIB_LIST)) SPDK_LIB_LINKER_ARGS = \ -L$(SPDK_ROOT_DIR)/build/lib \ -Wl,--whole-archive \ - $(SPDK_RPC_LIB_LIST:%=-lspdk_%) \ + $(SPDK_WHOLE_ARCHIVE_LIB_LIST:%=-lspdk_%) \ -Wl,--no-whole-archive \ $(SPDK_REMAINING_LIB_LIST:%=-lspdk_%) diff --git a/test/lib/bdev/bdevio/Makefile b/test/lib/bdev/bdevio/Makefile index 4c2d0e91b..8bc103d61 100644 --- a/test/lib/bdev/bdevio/Makefile +++ b/test/lib/bdev/bdevio/Makefile @@ -42,7 +42,8 @@ C_SRCS := bdevio.c CFLAGS += -I. $(ENV_CFLAGS) -SPDK_LIB_LIST = bdev copy event trace log conf util rpc jsonrpc json +SPDK_LIB_LIST = event_bdev +SPDK_LIB_LIST += bdev copy event trace log conf util rpc jsonrpc json LIBS += $(BLOCKDEV_MODULES_LINKER_ARGS) \ $(COPY_MODULES_LINKER_ARGS) diff --git a/test/lib/bdev/bdevperf/Makefile b/test/lib/bdev/bdevperf/Makefile index b42851c04..0f8ac88a7 100644 --- a/test/lib/bdev/bdevperf/Makefile +++ b/test/lib/bdev/bdevperf/Makefile @@ -42,7 +42,8 @@ C_SRCS := bdevperf.c CFLAGS += -I. $(ENV_CFLAGS) -SPDK_LIB_LIST = bdev copy event trace log conf util rpc jsonrpc json +SPDK_LIB_LIST = event_bdev +SPDK_LIB_LIST += bdev copy event trace log conf util rpc jsonrpc json LIBS += $(BLOCKDEV_MODULES_LINKER_ARGS) \ $(COPY_MODULES_LINKER_ARGS) diff --git a/test/lib/blobfs/fuse/Makefile b/test/lib/blobfs/fuse/Makefile index 60d593303..b1bc8c68f 100644 --- a/test/lib/blobfs/fuse/Makefile +++ b/test/lib/blobfs/fuse/Makefile @@ -41,7 +41,8 @@ APP = fuse C_SRCS := fuse.c CFLAGS += $(DPDK_INC) -SPDK_LIB_LIST = blobfs blob bdev blob_bdev copy event util conf trace \ +SPDK_LIB_LIST = event_bdev +SPDK_LIB_LIST += blobfs blob bdev blob_bdev copy event util conf trace \ log jsonrpc json rpc LIBS += $(COPY_MODULES_LINKER_ARGS) $(BLOCKDEV_MODULES_LINKER_ARGS) diff --git a/test/lib/blobfs/mkfs/Makefile b/test/lib/blobfs/mkfs/Makefile index 0769b59fc..c06522d76 100644 --- a/test/lib/blobfs/mkfs/Makefile +++ b/test/lib/blobfs/mkfs/Makefile @@ -41,7 +41,8 @@ APP = mkfs C_SRCS := mkfs.c CFLAGS += $(DPDK_INC) -SPDK_LIB_LIST = blobfs blob bdev blob_bdev copy event util conf trace \ +SPDK_LIB_LIST = event_bdev +SPDK_LIB_LIST += blobfs blob bdev blob_bdev copy event util conf trace \ log jsonrpc json rpc LIBS += $(COPY_MODULES_LINKER_ARGS) $(BLOCKDEV_MODULES_LINKER_ARGS)