Description: backport of dpdk 16.07 fix for library underlinking - stage 2/4 This is a merge of related upstream fixes: - a3f34a98 log: deprecate history dump - 3037e5e2 eal: remove useless includes of mempool and ring Forwarded: yes (in DPDK 16.07) Author: Christian Ehrhardt Last-Update: 2016-06-14 Index: dpdk/app/test-pmd/cmdline.c =================================================================== --- dpdk.orig/app/test-pmd/cmdline.c +++ dpdk/app/test-pmd/cmdline.c @@ -7191,8 +7191,6 @@ static void cmd_dump_parsed(void *parsed rte_dump_physmem_layout(stdout); else if (!strcmp(res->dump, "dump_memzone")) rte_memzone_dump(stdout); - else if (!strcmp(res->dump, "dump_log_history")) - rte_log_dump_history(stdout); else if (!strcmp(res->dump, "dump_struct_sizes")) dump_struct_sizes(); else if (!strcmp(res->dump, "dump_ring")) @@ -7207,7 +7205,6 @@ cmdline_parse_token_string_t cmd_dump_du TOKEN_STRING_INITIALIZER(struct cmd_dump_result, dump, "dump_physmem#" "dump_memzone#" - "dump_log_history#" "dump_struct_sizes#" "dump_ring#" "dump_mempool#" Index: dpdk/app/test/autotest_data.py =================================================================== --- dpdk.orig/app/test/autotest_data.py +++ dpdk/app/test/autotest_data.py @@ -88,12 +88,6 @@ parallel_test_group_list = [ "Report" : None, }, { - "Name" : "Dump log history", - "Command" : "dump_log_history", - "Func" : dump_autotest, - "Report" : None, - }, - { "Name" : "Dump rings", "Command" : "dump_ring", "Func" : dump_autotest, Index: dpdk/app/test/autotest_test_funcs.py =================================================================== --- dpdk.orig/app/test/autotest_test_funcs.py +++ dpdk/app/test/autotest_test_funcs.py @@ -151,12 +151,6 @@ def logs_autotest(child, test_name): "TESTAPP2: this is a info level message", "TESTAPP2: this is a warning level message", "TESTAPP1: this is a debug level message", - "TESTAPP1: this is a debug level message", - "TESTAPP1: this is a info level message", - "TESTAPP1: this is a warning level message", - "TESTAPP2: this is a info level message", - "TESTAPP2: this is a warning level message", - "TESTAPP1: this is a debug level message", ] for log_msg in log_list: Index: dpdk/app/test/commands.c =================================================================== --- dpdk.orig/app/test/commands.c +++ dpdk/app/test/commands.c @@ -150,8 +150,6 @@ static void cmd_dump_parsed(void *parsed rte_dump_physmem_layout(stdout); else if (!strcmp(res->dump, "dump_memzone")) rte_memzone_dump(stdout); - else if (!strcmp(res->dump, "dump_log_history")) - rte_log_dump_history(stdout); else if (!strcmp(res->dump, "dump_struct_sizes")) dump_struct_sizes(); else if (!strcmp(res->dump, "dump_ring")) @@ -164,7 +162,7 @@ static void cmd_dump_parsed(void *parsed cmdline_parse_token_string_t cmd_dump_dump = TOKEN_STRING_INITIALIZER(struct cmd_dump_result, dump, - "dump_physmem#dump_memzone#dump_log_history#" + "dump_physmem#dump_memzone#" "dump_struct_sizes#dump_ring#dump_mempool#" "dump_devargs"); Index: dpdk/app/test/test_logs.c =================================================================== --- dpdk.orig/app/test/test_logs.c +++ dpdk/app/test/test_logs.c @@ -85,8 +85,6 @@ test_logs(void) RTE_LOG(DEBUG, TESTAPP1, "this is a debug level message\n"); RTE_LOG(DEBUG, TESTAPP2, "debug level message (not displayed)\n"); - rte_log_dump_history(stdout); - return 0; } Index: dpdk/doc/guides/prog_guide/mempool_lib.rst =================================================================== --- dpdk.orig/doc/guides/prog_guide/mempool_lib.rst +++ dpdk/doc/guides/prog_guide/mempool_lib.rst @@ -38,9 +38,7 @@ In the DPDK, it is identified by name an It provides some other optional services such as a per-core object cache and an alignment helper to ensure that objects are padded to spread them equally on all DRAM or DDR3 channels. -This library is used by the -:ref:`Mbuf Library ` and the -:ref:`Environment Abstraction Layer ` (for logging history). +This library is used by the :ref:`Mbuf Library `. Cookies ------- Index: dpdk/doc/guides/rel_notes/deprecation.rst =================================================================== --- dpdk.orig/doc/guides/rel_notes/deprecation.rst +++ dpdk/doc/guides/rel_notes/deprecation.rst @@ -8,6 +8,9 @@ API and ABI deprecation notices are to b Deprecation Notices ------------------- +* The log history is deprecated. + It is voided in 16.07 and will be removed in release 16.11. + * The ethdev hotplug API is going to be moved to EAL with a notification mechanism added to crypto and ethdev libraries so that hotplug is now available to both of them. This API will be stripped of the device arguments Index: dpdk/lib/librte_eal/bsdapp/eal/Makefile =================================================================== --- dpdk.orig/lib/librte_eal/bsdapp/eal/Makefile +++ dpdk/lib/librte_eal/bsdapp/eal/Makefile @@ -40,8 +40,6 @@ VPATH += $(RTE_SDK)/lib/librte_eal/commo CFLAGS += -I$(SRCDIR)/include CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include -CFLAGS += -I$(RTE_SDK)/lib/librte_ring -CFLAGS += -I$(RTE_SDK)/lib/librte_mempool CFLAGS += $(WERROR_FLAGS) -O3 LDLIBS += -lexecinfo Index: dpdk/lib/librte_eal/bsdapp/eal/eal_debug.c =================================================================== --- dpdk.orig/lib/librte_eal/bsdapp/eal/eal_debug.c +++ dpdk/lib/librte_eal/bsdapp/eal/eal_debug.c @@ -77,9 +77,6 @@ void __rte_panic(const char *funcname, c { va_list ap; - /* disable history */ - rte_log_set_history(0); - rte_log(RTE_LOG_CRIT, RTE_LOGTYPE_EAL, "PANIC in %s():\n", funcname); va_start(ap, format); rte_vlog(RTE_LOG_CRIT, RTE_LOGTYPE_EAL, format, ap); @@ -98,9 +95,6 @@ rte_exit(int exit_code, const char *form { va_list ap; - /* disable history */ - rte_log_set_history(0); - if (exit_code != 0) RTE_LOG(CRIT, EAL, "Error - exiting with code: %d\n" " Cause: ", exit_code); Index: dpdk/lib/librte_eal/common/eal_common_log.c =================================================================== --- dpdk.orig/lib/librte_eal/common/eal_common_log.c +++ dpdk/lib/librte_eal/common/eal_common_log.c @@ -31,54 +31,16 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include -#include #include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include "eal_private.h" -#define LOG_ELT_SIZE 2048 - -#define LOG_HISTORY_MP_NAME "log_history" - -STAILQ_HEAD(log_history_list, log_history); - -/** - * The structure of a message log in the log history. - */ -struct log_history { - STAILQ_ENTRY(log_history) next; - unsigned size; - char buf[0]; -}; - -static struct rte_mempool *log_history_mp = NULL; -static unsigned log_history_size = 0; -static struct log_history_list log_history; - /* global log structure */ struct rte_logs rte_logs = { .type = ~0, @@ -86,10 +48,7 @@ struct rte_logs rte_logs = { .file = NULL, }; -static rte_spinlock_t log_dump_lock = RTE_SPINLOCK_INITIALIZER; -static rte_spinlock_t log_list_lock = RTE_SPINLOCK_INITIALIZER; static FILE *default_log_stream; -static int history_enabled = 1; /** * This global structure stores some informations about the message @@ -105,59 +64,16 @@ static struct log_cur_msg log_cur_msg[RT /* default logs */ int -rte_log_add_in_history(const char *buf, size_t size) +rte_log_add_in_history(const char *buf __rte_unused, size_t size __rte_unused) { - struct log_history *hist_buf = NULL; - static const unsigned hist_buf_size = LOG_ELT_SIZE - sizeof(*hist_buf); - void *obj; - - if (history_enabled == 0) - return 0; - - rte_spinlock_lock(&log_list_lock); - - /* get a buffer for adding in history */ - if (log_history_size > RTE_LOG_HISTORY) { - hist_buf = STAILQ_FIRST(&log_history); - if (hist_buf) { - STAILQ_REMOVE_HEAD(&log_history, next); - log_history_size--; - } - } - else { - if (rte_mempool_mc_get(log_history_mp, &obj) < 0) - obj = NULL; - hist_buf = obj; - } - - /* no buffer */ - if (hist_buf == NULL) { - rte_spinlock_unlock(&log_list_lock); - return -ENOBUFS; - } - - /* not enough room for msg, buffer go back in mempool */ - if (size >= hist_buf_size) { - rte_mempool_mp_put(log_history_mp, hist_buf); - rte_spinlock_unlock(&log_list_lock); - return -ENOBUFS; - } - - /* add in history */ - memcpy(hist_buf->buf, buf, size); - hist_buf->buf[size] = hist_buf->buf[hist_buf_size-1] = '\0'; - hist_buf->size = size; - STAILQ_INSERT_TAIL(&log_history, hist_buf, next); - log_history_size++; - rte_spinlock_unlock(&log_list_lock); - return 0; } void rte_log_set_history(int enable) { - history_enabled = enable; + if (enable) + RTE_LOG(WARNING, EAL, "The log history is deprecated.\n"); } /* Change the stream that will be used by logging system */ @@ -224,44 +140,8 @@ int rte_log_cur_msg_logtype(void) /* Dump log history to file */ void -rte_log_dump_history(FILE *out) +rte_log_dump_history(FILE *out __rte_unused) { - struct log_history_list tmp_log_history; - struct log_history *hist_buf; - unsigned i; - - /* only one dump at a time */ - rte_spinlock_lock(&log_dump_lock); - - /* save list, and re-init to allow logging during dump */ - rte_spinlock_lock(&log_list_lock); - tmp_log_history = log_history; - STAILQ_INIT(&log_history); - log_history_size = 0; - rte_spinlock_unlock(&log_list_lock); - - for (i=0; ibuf, hist_buf->size, 1, out) == 0) { - rte_mempool_mp_put(log_history_mp, hist_buf); - break; - } - - /* put back message structure in pool */ - rte_mempool_mp_put(log_history_mp, hist_buf); - } - fflush(out); - - rte_spinlock_unlock(&log_dump_lock); } /* @@ -308,29 +188,11 @@ rte_log(uint32_t level, uint32_t logtype } /* - * called by environment-specific log init function to initialize log - * history + * called by environment-specific log init function */ int rte_eal_common_log_init(FILE *default_log) { - STAILQ_INIT(&log_history); - - /* reserve RTE_LOG_HISTORY*2 elements, so we can dump and - * keep logging during this time */ - log_history_mp = rte_mempool_create(LOG_HISTORY_MP_NAME, RTE_LOG_HISTORY*2, - LOG_ELT_SIZE, 0, 0, - NULL, NULL, - NULL, NULL, - SOCKET_ID_ANY, 0); - - if ((log_history_mp == NULL) && - ((log_history_mp = rte_mempool_lookup(LOG_HISTORY_MP_NAME)) == NULL)){ - RTE_LOG(ERR, EAL, "%s(): cannot create log_history mempool\n", - __func__); - return -1; - } - default_log_stream = default_log; rte_openlog_stream(default_log); return 0; Index: dpdk/lib/librte_eal/common/eal_private.h =================================================================== --- dpdk.orig/lib/librte_eal/common/eal_private.h +++ dpdk/lib/librte_eal/common/eal_private.h @@ -49,9 +49,6 @@ int rte_eal_memzone_init(void); /** * Common log initialization function (private to eal). * - * Called by environment-specific log initialization function to initialize - * log history. - * * @param default_log * The default log stream to be used. * @return Index: dpdk/lib/librte_eal/common/include/rte_log.h =================================================================== --- dpdk.orig/lib/librte_eal/common/include/rte_log.h +++ dpdk/lib/librte_eal/common/include/rte_log.h @@ -42,6 +42,8 @@ * This file provides a log API to RTE applications. */ +#include "rte_common.h" /* for __rte_deprecated macro */ + #ifdef __cplusplus extern "C" { #endif @@ -179,22 +181,27 @@ int rte_log_cur_msg_loglevel(void); int rte_log_cur_msg_logtype(void); /** + * @deprecated * Enable or disable the history (enabled by default) * * @param enable * true to enable, or 0 to disable history. */ +__rte_deprecated void rte_log_set_history(int enable); /** + * @deprecated * Dump the log history to a file * * @param f * A pointer to a file for output */ +__rte_deprecated void rte_log_dump_history(FILE *f); /** + * @deprecated * Add a log message to the history. * * This function can be called from a user-defined log stream. It adds @@ -209,6 +216,7 @@ void rte_log_dump_history(FILE *f); * - 0: Success. * - (-ENOBUFS) if there is no room to store the message. */ +__rte_deprecated int rte_log_add_in_history(const char *buf, size_t size); /** Index: dpdk/lib/librte_eal/linuxapp/eal/eal_debug.c =================================================================== --- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_debug.c +++ dpdk/lib/librte_eal/linuxapp/eal/eal_debug.c @@ -77,9 +77,6 @@ void __rte_panic(const char *funcname, c { va_list ap; - /* disable history */ - rte_log_set_history(0); - rte_log(RTE_LOG_CRIT, RTE_LOGTYPE_EAL, "PANIC in %s():\n", funcname); va_start(ap, format); rte_vlog(RTE_LOG_CRIT, RTE_LOGTYPE_EAL, format, ap); @@ -98,9 +95,6 @@ rte_exit(int exit_code, const char *form { va_list ap; - /* disable history */ - rte_log_set_history(0); - if (exit_code != 0) RTE_LOG(CRIT, EAL, "Error - exiting with code: %d\n" " Cause: ", exit_code); Index: dpdk/lib/librte_eal/linuxapp/eal/eal_log.c =================================================================== --- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_log.c +++ dpdk/lib/librte_eal/linuxapp/eal/eal_log.c @@ -50,8 +50,7 @@ #include "eal_private.h" /* - * default log function, used once mempool (hence log history) is - * available + * default log function */ static ssize_t console_log_write(__attribute__((unused)) void *c, const char *buf, size_t size) @@ -60,9 +59,6 @@ console_log_write(__attribute__((unused) ssize_t ret; uint32_t loglevel; - /* add this log in history */ - rte_log_add_in_history(buf, size); - /* write on stdout */ ret = fwrite(buf, 1, size, stdout); fflush(stdout); @@ -110,8 +106,7 @@ rte_eal_log_init(const char *id, int fac /* early logs */ /* - * early log function, used during boot when mempool (hence log - * history) is not available + * early log function, used before rte_eal_log_init */ static ssize_t early_log_write(__attribute__((unused)) void *c, const char *buf, size_t size) Index: dpdk/lib/librte_eal/linuxapp/eal/Makefile =================================================================== --- dpdk.orig/lib/librte_eal/linuxapp/eal/Makefile +++ dpdk/lib/librte_eal/linuxapp/eal/Makefile @@ -44,9 +44,12 @@ VPATH += $(RTE_SDK)/lib/librte_eal/commo CFLAGS += -I$(SRCDIR)/include CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include +ifeq ($(CONFIG_RTE_LIBRTE_IVSHMEM),y) +# workaround for circular dependency eal -> ivshmem -> ring/mempool -> eal CFLAGS += -I$(RTE_SDK)/lib/librte_ring CFLAGS += -I$(RTE_SDK)/lib/librte_mempool CFLAGS += -I$(RTE_SDK)/lib/librte_ivshmem +endif CFLAGS += $(WERROR_FLAGS) -O3 LDLIBS += -ldl Index: dpdk/lib/librte_eal/linuxapp/eal/eal_interrupts.c =================================================================== --- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_interrupts.c +++ dpdk/lib/librte_eal/linuxapp/eal/eal_interrupts.c @@ -57,10 +57,8 @@ #include #include #include -#include #include #include -#include #include #include #include Index: dpdk/lib/librte_eal/linuxapp/eal/eal_ivshmem.c =================================================================== --- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_ivshmem.c +++ dpdk/lib/librte_eal/linuxapp/eal/eal_ivshmem.c @@ -49,7 +49,6 @@ #include #include #include -#include #include #include #include Index: dpdk/lib/librte_ivshmem/Makefile =================================================================== --- dpdk.orig/lib/librte_ivshmem/Makefile +++ dpdk/lib/librte_ivshmem/Makefile @@ -46,7 +46,9 @@ SRCS-$(CONFIG_RTE_LIBRTE_IVSHMEM) := rte # install includes SYMLINK-$(CONFIG_RTE_LIBRTE_IVSHMEM)-include := rte_ivshmem.h -# this lib needs eal +# this lib needs EAL, ring and mempool +DEPDIRS-$(CONFIG_RTE_LIBRTE_IVSHMEM) += lib/librte_eal +DEPDIRS-$(CONFIG_RTE_LIBRTE_IVSHMEM) += lib/librte_ring DEPDIRS-$(CONFIG_RTE_LIBRTE_IVSHMEM) += lib/librte_mempool include $(RTE_SDK)/mk/rte.lib.mk