DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] eal: add nonnull and access function attributes
@ 2022-12-02 15:34 Morten Brørup
  2022-12-02 20:02 ` Tyler Retzlaff
                   ` (6 more replies)
  0 siblings, 7 replies; 78+ messages in thread
From: Morten Brørup @ 2022-12-02 15:34 UTC (permalink / raw)
  To: dev
  Cc: ruifeng.wang, zhoumin, drc, kda, bruce.richardson,
	konstantin.v.ananyev, Morten Brørup

Add "nonnull" function attribute to help the compiler detect a NULL
pointer being passed to a function not accepting NULL pointers as an
argument at build time.

Add "access" function attribute to tell the optimizer how a function
accesses its pointer arguments.

Add these attributes to the rte_memcpy() function, as the first in
hopefully many to come.

Signed-off-by: Morten Brørup <mb@smartsharesystems.com>
---
 lib/eal/arm/include/rte_memcpy_32.h  |  6 ++++++
 lib/eal/arm/include/rte_memcpy_64.h  |  6 ++++++
 lib/eal/include/generic/rte_memcpy.h |  5 +++++
 lib/eal/include/rte_common.h         | 26 ++++++++++++++++++++++++++
 lib/eal/ppc/include/rte_memcpy.h     |  3 +++
 lib/eal/x86/include/rte_memcpy.h     |  6 ++++++
 6 files changed, 52 insertions(+)

diff --git a/lib/eal/arm/include/rte_memcpy_32.h b/lib/eal/arm/include/rte_memcpy_32.h
index fb3245b59c..ba4f050a5d 100644
--- a/lib/eal/arm/include/rte_memcpy_32.h
+++ b/lib/eal/arm/include/rte_memcpy_32.h
@@ -125,6 +125,9 @@ rte_mov256(uint8_t *dst, const uint8_t *src)
 	memcpy((dst), (src), (n)) :          \
 	rte_memcpy_func((dst), (src), (n)); })
 
+__rte_nonnull(1, 2)
+__rte_access(write_only, 1, 3)
+__rte_access(read_only, 2, 3)
 static inline void *
 rte_memcpy_func(void *dst, const void *src, size_t n)
 {
@@ -290,6 +293,9 @@ rte_mov256(uint8_t *dst, const uint8_t *src)
 	memcpy(dst, src, 256);
 }
 
+__rte_nonnull(1, 2)
+__rte_access(write_only, 1, 3)
+__rte_access(read_only, 2, 3)
 static inline void *
 rte_memcpy(void *dst, const void *src, size_t n)
 {
diff --git a/lib/eal/arm/include/rte_memcpy_64.h b/lib/eal/arm/include/rte_memcpy_64.h
index 85ad587bd3..5403e30db5 100644
--- a/lib/eal/arm/include/rte_memcpy_64.h
+++ b/lib/eal/arm/include/rte_memcpy_64.h
@@ -282,6 +282,9 @@ void rte_memcpy_ge64(uint8_t *dst, const uint8_t *src, size_t n)
 }
 
 #if RTE_CACHE_LINE_SIZE >= 128
+__rte_nonnull(1, 2)
+__rte_access(write_only, 1, 3)
+__rte_access(read_only, 2, 3)
 static __rte_always_inline
 void *rte_memcpy(void *dst, const void *src, size_t n)
 {
@@ -303,6 +306,9 @@ void *rte_memcpy(void *dst, const void *src, size_t n)
 }
 
 #else
+__rte_nonnull(1, 2)
+__rte_access(write_only, 1, 3)
+__rte_access(read_only, 2, 3)
 static __rte_always_inline
 void *rte_memcpy(void *dst, const void *src, size_t n)
 {
diff --git a/lib/eal/include/generic/rte_memcpy.h b/lib/eal/include/generic/rte_memcpy.h
index e7f0f8eaa9..86fd20884c 100644
--- a/lib/eal/include/generic/rte_memcpy.h
+++ b/lib/eal/include/generic/rte_memcpy.h
@@ -11,6 +11,8 @@
  * Functions for vectorised implementation of memcpy().
  */
 
+#include <rte_common.h>
+
 /**
  * Copy 16 bytes from one location to another using optimised
  * instructions. The locations should not overlap.
@@ -108,6 +110,9 @@ rte_mov256(uint8_t *dst, const uint8_t *src);
  * @return
  *   Pointer to the destination data.
  */
+__rte_nonnull(1, 2)
+__rte_access(write_only, 1, 3)
+__rte_access(read_only, 2, 3)
 static void *
 rte_memcpy(void *dst, const void *src, size_t n);
 
diff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h
index 15765b408d..c2bd6074b1 100644
--- a/lib/eal/include/rte_common.h
+++ b/lib/eal/include/rte_common.h
@@ -149,6 +149,32 @@ typedef uint16_t unaligned_uint16_t;
 	__attribute__((format(printf, format_index, first_arg)))
 #endif
 
+/**
+ * Check pointer arguments at compile-time.
+ *
+ * @param ...
+ *    Comma separated list of parameter indexes of pointer arguments.
+ */
+#define __rte_nonnull(...) \
+	__attribute__((nonnull(__VA_ARGS__)))
+
+/**
+ * Tells compiler about the access mode of a pointer argument.
+ *
+ * @param access_mode
+ *    Access mode: read_only, read_write, write_only, or none.
+ * @param ref_index
+ *    Parameter index of pointer argument.
+ * @param size_index (optional)
+ *    Parameter index of size argument.
+ */
+#if defined(RTE_CC_IS_GNU) && (GCC_VERSION >= 100400)
+#define __rte_access(access_mode, ...) \
+	__attribute__((access(access_mode, __VA_ARGS__)))
+#else
+#define __rte_access(access_mode, ...)
+#endif
+
 /**
  * Tells compiler that the function returns a value that points to
  * memory, where the size is given by the one or two arguments.
diff --git a/lib/eal/ppc/include/rte_memcpy.h b/lib/eal/ppc/include/rte_memcpy.h
index 6f388c0234..d2c3234d5d 100644
--- a/lib/eal/ppc/include/rte_memcpy.h
+++ b/lib/eal/ppc/include/rte_memcpy.h
@@ -84,6 +84,9 @@ rte_mov256(uint8_t *dst, const uint8_t *src)
 	memcpy((dst), (src), (n)) :          \
 	rte_memcpy_func((dst), (src), (n)); })
 
+__rte_nonnull(1, 2)
+__rte_access(write_only, 1, 3)
+__rte_access(read_only, 2, 3)
 static inline void *
 rte_memcpy_func(void *dst, const void *src, size_t n)
 {
diff --git a/lib/eal/x86/include/rte_memcpy.h b/lib/eal/x86/include/rte_memcpy.h
index d4d7a5cfc8..397461115b 100644
--- a/lib/eal/x86/include/rte_memcpy.h
+++ b/lib/eal/x86/include/rte_memcpy.h
@@ -42,6 +42,9 @@ extern "C" {
  * @return
  *   Pointer to the destination data.
  */
+__rte_nonnull(1, 2)
+__rte_access(write_only, 1, 3)
+__rte_access(read_only, 2, 3)
 static __rte_always_inline void *
 rte_memcpy(void *dst, const void *src, size_t n);
 
@@ -859,6 +862,9 @@ rte_memcpy_aligned(void *dst, const void *src, size_t n)
 	return ret;
 }
 
+__rte_nonnull(1, 2)
+__rte_access(write_only, 1, 3)
+__rte_access(read_only, 2, 3)
 static __rte_always_inline void *
 rte_memcpy(void *dst, const void *src, size_t n)
 {
-- 
2.17.1


^ permalink raw reply	[flat|nested] 78+ messages in thread
* RE: [PATCH v7 1/4] net/bnx2x: fix warnings about rte_memcpy lengths
@ 2023-03-09 10:29 Morten Brørup
  0 siblings, 0 replies; 78+ messages in thread
From: Morten Brørup @ 2023-03-09 10:29 UTC (permalink / raw)
  To: David Marchand, jerinj; +Cc: dev, Thomas Monjalon

[-- Attachment #1: Type: text/plain, Size: 842 bytes --]

Please wait. Jerin is chasing this internally.-MortenSent from smartphone. Please excuse brevity and spelling.
-------- Oprindelig besked --------Fra: David Marchand <david.marchand@redhat.com> Dato: 09.03.2023  11.26  (GMT+01:00) Til: Morten Brørup <mb@smartsharesystems.com>, rmody@marvell.com, shshaikh@marvell.com Cc: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net> Emne: Re: [PATCH v7 1/4] net/bnx2x: fix warnings about rte_memcpy lengths On Thu, Feb 9, 2023 at 5:49 PM Morten Brørup <mb@smartsharesystems.com> wrote:>> PING bnx2x maintainers. Care to review this bugfix, so it can be included in 23.03?>Still no luck in getting attention from bnx2x maintainers.One option is to declare this driver as UNMAINTAINED and disable itscompilation when the memcpy annotations are finalised and merged in anext release.-- David Marchand

[-- Attachment #2: Type: text/html, Size: 1512 bytes --]

^ permalink raw reply	[flat|nested] 78+ messages in thread

end of thread, other threads:[~2024-03-13 10:01 UTC | newest]

Thread overview: 78+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-02 15:34 [PATCH] eal: add nonnull and access function attributes Morten Brørup
2022-12-02 20:02 ` Tyler Retzlaff
2022-12-03 14:22 ` [PATCH v2] " Morten Brørup
2022-12-05 10:17   ` Ruifeng Wang
2022-12-12  7:40   ` Morten Brørup
2022-12-28 10:27 ` [PATCH v3 1/2] " Morten Brørup
2022-12-28 10:27   ` [PATCH v3 2/2] net/bnx2x: fix warnings about rte_memcopy lengths Morten Brørup
2022-12-28 11:40 ` [PATCH v4 1/2] eal: add nonnull and access function attributes Morten Brørup
2022-12-28 11:40   ` [PATCH v4 2/2] net/bnx2x: fix warnings about rte_memcpy lengths Morten Brørup
2022-12-28 15:10 ` [PATCH v5 1/4] eal: add nonnull and access function attributes Morten Brørup
2022-12-28 15:10   ` [PATCH v5 2/4] net/bnx2x: fix warnings about rte_memcpy lengths Morten Brørup
2022-12-28 16:13     ` Stanisław Kardach
2022-12-28 16:38       ` Morten Brørup
2022-12-28 17:03         ` Stephen Hemminger
2022-12-28 17:37           ` Morten Brørup
2023-01-09 10:36             ` David Marchand
2022-12-28 15:10   ` [PATCH v5 3/4] event/dlb2: remove superfluous rte_memcpy Morten Brørup
2022-12-28 17:01     ` Stephen Hemminger
2022-12-28 15:10   ` [PATCH v5 4/4] net/mlx5: fix warning about rte_memcpy length Morten Brørup
2023-01-09 11:08   ` [PATCH v5 1/4] eal: add nonnull and access function attributes Thomas Monjalon
2023-01-09 12:16     ` Morten Brørup
2023-01-09 11:22   ` David Marchand
2023-01-09 12:28     ` Morten Brørup
2023-01-16 12:49     ` Morten Brørup
2023-01-16 12:44 ` [PATCH v6 1/4] net/bnx2x: fix warnings about rte_memcpy lengths Morten Brørup
2023-01-16 12:44   ` [PATCH v6 2/4] event/dlb2: remove superfluous rte_memcpy Morten Brørup
2023-01-16 12:44   ` [PATCH v6 3/4] net/mlx5: fix warning about rte_memcpy length Morten Brørup
2023-01-16 12:44   ` [PATCH v6 4/4] eal: add nonnull and access function attributes Morten Brørup
2023-01-16 13:07 ` [PATCH v7 1/4] net/bnx2x: fix warnings about rte_memcpy lengths Morten Brørup
2023-01-16 13:07   ` [PATCH v7 2/4] event/dlb2: remove superfluous rte_memcpy Morten Brørup
2023-02-09 16:51     ` Morten Brørup
2023-02-09 18:50       ` Sevincer, Abdullah
2023-02-10  7:43         ` Morten Brørup
2024-02-23 13:19           ` Jerin Jacob
2024-02-23 13:49             ` [PATCH v8] net/bnx2x: fix warnings about rte_memcpy lengths Morten Brørup
2024-02-23 14:00             ` [PATCH v9] " Morten Brørup
2024-02-26  8:34               ` Jerin Jacob
2024-02-26 14:47                 ` Morten Brørup
2024-02-27 11:00                   ` Jerin Jacob
2024-02-27 11:27                     ` Morten Brørup
2024-02-27 19:06                       ` Stephen Hemminger
2024-02-28  9:02                         ` Bruce Richardson
2024-02-28  8:27                       ` Raslan Darawsheh
2024-02-26 21:45               ` Stephen Hemminger
2023-01-16 13:07   ` [PATCH v7 3/4] net/mlx5: fix warning about rte_memcpy length Morten Brørup
2023-02-09 16:54     ` Morten Brørup
2023-02-10  9:13       ` Slava Ovsiienko
2024-03-13 10:00     ` Raslan Darawsheh
2023-01-16 13:07   ` [PATCH v7 4/4] eal: add nonnull and access function attributes Morten Brørup
2023-01-16 17:02     ` Ferruh Yigit
2023-01-17  8:19       ` Morten Brørup
2023-01-17 21:16         ` Tyler Retzlaff
2023-01-18  8:31           ` Morten Brørup
2023-01-18 17:23             ` Stephen Hemminger
2023-01-31 11:14             ` David Marchand
2023-01-31 12:23               ` Morten Brørup
2023-01-31 18:26                 ` Tyler Retzlaff
2023-01-31 22:52                   ` Thomas Monjalon
2023-02-01 12:50                     ` Morten Brørup
2023-02-01 13:15                       ` Thomas Monjalon
2023-02-06 16:11                         ` David Marchand
2023-02-06 16:49                           ` Morten Brørup
2023-02-06 17:28                             ` Tyler Retzlaff
2023-05-08 12:32                               ` Morten Brørup
2023-10-13 23:31                                 ` Morten Brørup
2023-04-04 13:41     ` Morten Brørup
2023-04-04 13:51       ` David Marchand
2023-04-04 14:01         ` Morten Brørup
2023-04-04 14:19           ` David Marchand
2023-02-09 16:49   ` [PATCH v7 1/4] net/bnx2x: fix warnings about rte_memcpy lengths Morten Brørup
2023-02-26  9:21     ` Marvell QLogic bnx2x PMD support status Morten Brørup
2023-03-09 10:25     ` [PATCH v7 1/4] net/bnx2x: fix warnings about rte_memcpy lengths David Marchand
2023-03-09 10:33       ` Thomas Monjalon
2023-03-09 16:11         ` [EXT] " Akhil Goyal
     [not found]           ` <SJ0PR18MB390039A8C34E485F8D2D518EA1B59@SJ0PR18MB3900.namprd18.prod.outlook.com>
2023-03-09 16:19             ` Devendra Singh Rawat
2023-03-09 16:23     ` Stephen Hemminger
2024-02-23 12:39       ` Jerin Jacob
2023-03-09 10:29 Morten Brørup

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).