* [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros
@ 2024-08-18 21:01 Uros Bizjak
2024-08-18 21:01 ` [PATCH v2 2/2] mm/kmemleak: Use IS_ERR_PCPU() for pointer in the percpu address space Uros Bizjak
2024-08-22 8:35 ` [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros Catalin Marinas
0 siblings, 2 replies; 5+ messages in thread
From: Uros Bizjak @ 2024-08-18 21:01 UTC (permalink / raw)
To: linux-mm, linux-kernel; +Cc: Uros Bizjak, Catalin Marinas, Andrew Morton
Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros that
operate on pointers in the percpu address space.
These macros remove the need for (__force void *) function
argument casts (to avoid sparse -Wcast-from-as warnings).
The patch will also avoid future build errors due to pointer address
space mismatch with enabled strict percpu address space checks.
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
v2: Implement as macros to avoid powerpc build failure
---
include/linux/err.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/include/linux/err.h b/include/linux/err.h
index b5d9bb2a2349..a4dacd745fcf 100644
--- a/include/linux/err.h
+++ b/include/linux/err.h
@@ -41,6 +41,9 @@ static inline void * __must_check ERR_PTR(long error)
return (void *) error;
}
+/* Return the pointer in the percpu address space. */
+#define ERR_PTR_PCPU(error) ((void __percpu *)(unsigned long)ERR_PTR(error))
+
/**
* PTR_ERR - Extract the error code from an error pointer.
* @ptr: An error pointer.
@@ -51,6 +54,9 @@ static inline long __must_check PTR_ERR(__force const void *ptr)
return (long) ptr;
}
+/* Read an error pointer from the percpu address space. */
+#define PTR_ERR_PCPU(ptr) (PTR_ERR((const void *)(__force const unsigned long)(ptr)))
+
/**
* IS_ERR - Detect an error pointer.
* @ptr: The pointer to check.
@@ -61,6 +67,9 @@ static inline bool __must_check IS_ERR(__force const void *ptr)
return IS_ERR_VALUE((unsigned long)ptr);
}
+/* Read an error pointer from the percpu address space. */
+#define IS_ERR_PCPU(ptr) (IS_ERR((const void *)(__force const unsigned long)(ptr)))
+
/**
* IS_ERR_OR_NULL - Detect an error pointer or a null pointer.
* @ptr: The pointer to check.
--
2.42.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] mm/kmemleak: Use IS_ERR_PCPU() for pointer in the percpu address space
2024-08-18 21:01 [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros Uros Bizjak
@ 2024-08-18 21:01 ` Uros Bizjak
2024-08-22 8:35 ` Catalin Marinas
2024-08-22 8:35 ` [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros Catalin Marinas
1 sibling, 1 reply; 5+ messages in thread
From: Uros Bizjak @ 2024-08-18 21:01 UTC (permalink / raw)
To: linux-mm, linux-kernel; +Cc: Uros Bizjak, Catalin Marinas, Andrew Morton
Use IS_ERR_PCPU() instead of IS_ERR() for pointers in the percpu address
space. The patch also fixes following sparse warnings:
kmemleak.c:1063:39: warning: cast removes address space '__percpu' of expression
kmemleak.c:1138:37: warning: cast removes address space '__percpu' of expression
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
mm/kmemleak.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index 764b08100570..fa468809d043 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -1059,8 +1059,8 @@ void __ref kmemleak_alloc_percpu(const void __percpu *ptr, size_t size,
* Percpu allocations are only scanned and not reported as leaks
* (min_count is set to 0).
*/
- if (kmemleak_enabled && ptr && !IS_ERR(ptr))
- create_object_percpu((unsigned long)ptr, size, 0, gfp);
+ if (kmemleak_enabled && ptr && !IS_ERR_PCPU(ptr))
+ create_object_percpu((__force unsigned long)ptr, size, 0, gfp);
}
EXPORT_SYMBOL_GPL(kmemleak_alloc_percpu);
@@ -1134,8 +1134,8 @@ void __ref kmemleak_free_percpu(const void __percpu *ptr)
{
pr_debug("%s(0x%px)\n", __func__, ptr);
- if (kmemleak_free_enabled && ptr && !IS_ERR(ptr))
- delete_object_full((unsigned long)ptr, OBJECT_PERCPU);
+ if (kmemleak_free_enabled && ptr && !IS_ERR_PCPU(ptr))
+ delete_object_full((__force unsigned long)ptr, OBJECT_PERCPU);
}
EXPORT_SYMBOL_GPL(kmemleak_free_percpu);
--
2.42.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH v2 2/2] mm/kmemleak: Use IS_ERR_PCPU() for pointer in the percpu address space
2024-08-18 21:01 ` [PATCH v2 2/2] mm/kmemleak: Use IS_ERR_PCPU() for pointer in the percpu address space Uros Bizjak
@ 2024-08-22 8:35 ` Catalin Marinas
0 siblings, 0 replies; 5+ messages in thread
From: Catalin Marinas @ 2024-08-22 8:35 UTC (permalink / raw)
To: Uros Bizjak; +Cc: linux-mm, linux-kernel, Andrew Morton
On Sun, Aug 18, 2024 at 11:01:52PM +0200, Uros Bizjak wrote:
> Use IS_ERR_PCPU() instead of IS_ERR() for pointers in the percpu address
> space. The patch also fixes following sparse warnings:
>
> kmemleak.c:1063:39: warning: cast removes address space '__percpu' of expression
> kmemleak.c:1138:37: warning: cast removes address space '__percpu' of expression
>
> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros
2024-08-18 21:01 [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros Uros Bizjak
2024-08-18 21:01 ` [PATCH v2 2/2] mm/kmemleak: Use IS_ERR_PCPU() for pointer in the percpu address space Uros Bizjak
@ 2024-08-22 8:35 ` Catalin Marinas
1 sibling, 0 replies; 5+ messages in thread
From: Catalin Marinas @ 2024-08-22 8:35 UTC (permalink / raw)
To: Uros Bizjak; +Cc: linux-mm, linux-kernel, Andrew Morton
On Sun, Aug 18, 2024 at 11:01:51PM +0200, Uros Bizjak wrote:
> Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros that
> operate on pointers in the percpu address space.
>
> These macros remove the need for (__force void *) function
> argument casts (to avoid sparse -Wcast-from-as warnings).
>
> The patch will also avoid future build errors due to pointer address
> space mismatch with enabled strict percpu address space checks.
>
> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 0/2] netfilter: nf_tables: Fix percpu address space issues in nf_tables_api.c
@ 2024-08-29 15:29 Uros Bizjak
2024-08-29 15:29 ` [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros Uros Bizjak
0 siblings, 1 reply; 5+ messages in thread
From: Uros Bizjak @ 2024-08-29 15:29 UTC (permalink / raw)
To: netfilter-devel, coreteam, netdev, linux-kernel
Cc: Uros Bizjak, Pablo Neira Ayuso, Jozsef Kadlecsik, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni
Use {ERR_PTR,IS_ERR,PTR_ERR}_PCPU() macros when crossing between generic
and percpu address spaces and add __percpu annotation to *stats pointer
to fix percpu address space issues.
NOTE: The patch depends on a patch that introduces *_PCPU() macros [1]
that is on the way to mainline through the mm tree. For convience, the
patch is included in this patch series, so CI tester is able to test
the second patch without compile failures.
[1] https://lore.kernel.org/lkml/20240818210235.33481-1-ubizjak@gmail.com/
The netfilter patch obsoletes patch [2].
[2] https://patchwork.ozlabs.org/project/netfilter-devel/patch/20240806102808.804619-1-ubizjak@gmail.com/
Cc: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: Jozsef Kadlecsik <kadlec@netfilter.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Uros Bizjak (2):
err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros
netfilter: nf_tables: Fix percpu address space issues in
nf_tables_api.c
include/linux/err.h | 9 +++++++++
net/netfilter/nf_tables_api.c | 16 ++++++++--------
2 files changed, 17 insertions(+), 8 deletions(-)
--
2.42.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros
2024-08-29 15:29 [PATCH v2 0/2] netfilter: nf_tables: Fix percpu address space issues in nf_tables_api.c Uros Bizjak
@ 2024-08-29 15:29 ` Uros Bizjak
0 siblings, 0 replies; 5+ messages in thread
From: Uros Bizjak @ 2024-08-29 15:29 UTC (permalink / raw)
To: netfilter-devel, coreteam, netdev, linux-kernel; +Cc: Uros Bizjak
Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros that
operate on pointers in the percpu address space.
These macros remove the need for (__force void *) function
argument casts (to avoid sparse -Wcast-from-as warnings).
The patch will also avoid future build errors due to pointer address
space mismatch with enabled strict percpu address space checks.
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
---
include/linux/err.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/include/linux/err.h b/include/linux/err.h
index b5d9bb2a2349..a4dacd745fcf 100644
--- a/include/linux/err.h
+++ b/include/linux/err.h
@@ -41,6 +41,9 @@ static inline void * __must_check ERR_PTR(long error)
return (void *) error;
}
+/* Return the pointer in the percpu address space. */
+#define ERR_PTR_PCPU(error) ((void __percpu *)(unsigned long)ERR_PTR(error))
+
/**
* PTR_ERR - Extract the error code from an error pointer.
* @ptr: An error pointer.
@@ -51,6 +54,9 @@ static inline long __must_check PTR_ERR(__force const void *ptr)
return (long) ptr;
}
+/* Read an error pointer from the percpu address space. */
+#define PTR_ERR_PCPU(ptr) (PTR_ERR((const void *)(__force const unsigned long)(ptr)))
+
/**
* IS_ERR - Detect an error pointer.
* @ptr: The pointer to check.
@@ -61,6 +67,9 @@ static inline bool __must_check IS_ERR(__force const void *ptr)
return IS_ERR_VALUE((unsigned long)ptr);
}
+/* Read an error pointer from the percpu address space. */
+#define IS_ERR_PCPU(ptr) (IS_ERR((const void *)(__force const unsigned long)(ptr)))
+
/**
* IS_ERR_OR_NULL - Detect an error pointer or a null pointer.
* @ptr: The pointer to check.
--
2.42.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-08-29 15:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-18 21:01 [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros Uros Bizjak
2024-08-18 21:01 ` [PATCH v2 2/2] mm/kmemleak: Use IS_ERR_PCPU() for pointer in the percpu address space Uros Bizjak
2024-08-22 8:35 ` Catalin Marinas
2024-08-22 8:35 ` [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros Catalin Marinas
-- strict thread matches above, loose matches on Subject: below --
2024-08-29 15:29 [PATCH v2 0/2] netfilter: nf_tables: Fix percpu address space issues in nf_tables_api.c Uros Bizjak
2024-08-29 15:29 ` [PATCH v2 1/2] err.h: Add ERR_PTR_PCPU(), PTR_ERR_PCPU() and IS_ERR_PCPU() macros Uros Bizjak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox