All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>
To: dev-VfR2kkLFssw@public.gmane.org
Subject: [PATCH 2/5] dont inline string functions
Date: Fri, 02 May 2014 16:42:53 -0700	[thread overview]
Message-ID: <20140502234402.493666790@vyatta.com> (raw)
In-Reply-To: 20140502234251.707598579@vyatta.com

[-- Attachment #1: snprintf-noinline.patch --]
[-- Type: text/plain, Size: 6575 bytes --]

It makes no sense to inline string functions, in fact snprintf
can't be inlined because the function supports variable number of
arguments.

Signed-off-by: Stephen Hemminger <stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>


---
 lib/librte_eal/bsdapp/eal/Makefile             |    1 
 lib/librte_eal/common/eal_common_string_fns.c  |   96 +++++++++++++++++++++++++
 lib/librte_eal/common/include/rte_string_fns.h |   57 +-------------
 lib/librte_eal/linuxapp/eal/Makefile           |    1 
 4 files changed, 102 insertions(+), 53 deletions(-)

--- a/lib/librte_eal/bsdapp/eal/Makefile	2014-05-02 16:31:12.519570116 -0700
+++ b/lib/librte_eal/bsdapp/eal/Makefile	2014-05-02 16:31:12.519570116 -0700
@@ -67,6 +67,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) +=
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_tailqs.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_errno.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_cpuflags.c
+SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_string_fns.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_hexdump.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_devargs.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_vdev.c
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ b/lib/librte_eal/common/eal_common_string_fns.c	2014-05-02 16:31:12.519570116 -0700
@@ -0,0 +1,96 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ *   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 <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <rte_string_fns.h>
+
+/* safe version os snprintf */
+int
+rte_snprintf(char *buffer, int buflen, const char *format, ...)
+{
+	int len;
+	va_list ap;
+
+	if (buffer == NULL && buflen != 0)
+		goto einval_error;
+	if (format == NULL) {
+		if (buflen > 0)
+			buffer[0] = '\0';
+		goto einval_error;
+	}
+
+	va_start(ap, format);
+	len = vsnprintf(buffer, buflen, format, ap);
+	va_end(ap);
+	if (len >= buflen && buflen > 0)
+		buffer[buflen - 1] = '\0';
+
+	return len;
+
+einval_error:
+	errno = EINVAL;
+	return -1;
+}
+
+/* split string into tokens */
+int
+rte_strsplit(char *string, int stringlen,
+	     char **tokens, int maxtokens, char delim)
+{
+	int i, tok = 0;
+	int tokstart = 1; /* first token is right at start of string */
+
+	if (string == NULL || tokens == NULL)
+		goto einval_error;
+
+	for (i = 0; i < stringlen; i++) {
+		if (string[i] == '\0' || tok >= maxtokens)
+			break;
+		if (tokstart) {
+			tokstart = 0;
+			tokens[tok++] = &string[i];
+		}
+		if (string[i] == delim) {
+			string[i] = '\0';
+			tokstart = 1;
+		}
+	}
+	return tok;
+
+einval_error:
+	errno = EINVAL;
+	return -1;
+}
--- a/lib/librte_eal/common/include/rte_string_fns.h	2014-05-02 16:31:12.519570116 -0700
+++ b/lib/librte_eal/common/include/rte_string_fns.h	2014-05-02 16:31:12.519570116 -0700
@@ -72,33 +72,9 @@ extern "C" {
  *   buffer been sufficiently big.
  *
  */
-static inline int
-rte_snprintf(char *buffer, int buflen, const char *format, ...)
-{
-	int len;
-	va_list ap;
-
-	if (buffer == NULL && buflen != 0)
-		goto einval_error;
-	if (format == NULL) {
-		if (buflen > 0)
-			buffer[0] = '\0';
-		goto einval_error;
-	}
-
-	va_start(ap, format);
-	len = vsnprintf(buffer, buflen, format, ap);
-	va_end(ap);
-	if (len >= buflen && buflen > 0)
-		buffer[buflen - 1] = '\0';
-
-	return len;
-
-einval_error:
-	errno = EINVAL;
-	return -1;
-}
 
+int
+rte_snprintf(char *buffer, int buflen, const char *format, ...);
 
 /**
  * Takes string "string" parameter and splits it at character "delim"
@@ -126,34 +102,9 @@ einval_error:
  * @return
  *   The number of tokens in the tokens array.
  */
-static inline int
+int
 rte_strsplit(char *string, int stringlen,
-		char **tokens, int maxtokens, char delim)
-{
-	int i, tok = 0;
-	int tokstart = 1; /* first token is right at start of string */
-
-	if (string == NULL || tokens == NULL)
-		goto einval_error;
-
-	for (i = 0; i < stringlen; i++) {
-		if (string[i] == '\0' || tok >= maxtokens)
-			break;
-		if (tokstart) {
-			tokstart = 0;
-			tokens[tok++] = &string[i];
-		}
-		if (string[i] == delim) {
-			string[i] = '\0';
-			tokstart = 1;
-		}
-	}
-	return tok;
-
-einval_error:
-	errno = EINVAL;
-	return -1;
-}
+	     char **tokens, int maxtokens, char delim);
 
 #ifdef __cplusplus
 }
--- a/lib/librte_eal/linuxapp/eal/Makefile	2014-05-02 16:31:12.519570116 -0700
+++ b/lib/librte_eal/linuxapp/eal/Makefile	2014-05-02 16:31:12.519570116 -0700
@@ -75,6 +75,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) +
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += eal_common_tailqs.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += eal_common_errno.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += eal_common_cpuflags.c
+SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += eal_common_string_fns.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += eal_common_hexdump.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += eal_common_devargs.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += eal_common_vdev.c

  parent reply	other threads:[~2014-05-02 23:42 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-02 23:42 [PATCH 0/5] Various patches to 1.6.0r2 Stephen Hemminger
2014-05-02 23:42 ` [PATCH 1/5] spelling fixes Stephen Hemminger
2014-05-02 23:42 ` Stephen Hemminger [this message]
2014-05-02 23:42 ` [PATCH 3/5] mempool: add walk iterator Stephen Hemminger
     [not found]   ` <20140502234404.328560724-ZtmgI6mnKB3QT0dZR+AlfA@public.gmane.org>
2014-05-16 12:36     ` Olivier MATZ
2014-05-02 23:42 ` [PATCH 4/5] memzone: add iterator function Stephen Hemminger
     [not found]   ` <20140502234406.153584277-ZtmgI6mnKB3QT0dZR+AlfA@public.gmane.org>
2014-05-06  9:17     ` Burakov, Anatoly
     [not found]       ` <C6ECDF3AB251BE4894318F4E45123697592AB62B-kPTMFJFq+rF9qrmMLTLiibfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-05-07 16:33         ` Stephen Hemminger
2014-05-16 12:38     ` Olivier MATZ
2014-05-02 23:42 ` [PATCH 5/5] add FILE arguement to debug functions Stephen Hemminger
     [not found]   ` <20140502234407.841791092-ZtmgI6mnKB3QT0dZR+AlfA@public.gmane.org>
2014-05-04 12:20     ` Neil Horman
     [not found]       ` <20140504122053.GA5012-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2014-05-04 20:17         ` Stephen Hemminger
     [not found]           ` <20140504131750.45409335-We1ePj4FEcvRI77zikRAJc56i+j3xesD0e7PPNI6Mm0@public.gmane.org>
2014-05-05 10:53             ` Neil Horman
     [not found]               ` <20140505105309.GD16114-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-05-06  1:55                 ` Stephen Hemminger
     [not found]                   ` <20140505185531.4dbd94d4-We1ePj4FEcvRI77zikRAJc56i+j3xesD0e7PPNI6Mm0@public.gmane.org>
2014-05-06 11:04                     ` Neil Horman
2014-05-06 12:52     ` Burakov, Anatoly
     [not found]       ` <C6ECDF3AB251BE4894318F4E45123697592AB70B-kPTMFJFq+rF9qrmMLTLiibfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-05-16 14:41         ` Thomas Monjalon
     [not found] ` <20140502234251.707598579-ZtmgI6mnKB3QT0dZR+AlfA@public.gmane.org>
2014-05-16 14:42   ` [PATCH 0/5] Various patches to 1.6.0r2 Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140502234402.493666790@vyatta.com \
    --to=stephen-otpzqlsittunbdjkjebofr2eb7je58tq@public.gmane.org \
    --cc=dev-VfR2kkLFssw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.