On Sun, Aug 18, 2024 at 5:26 PM Uros Bizjak wrote: > > Use explicit cast to cast pointer from percpu to generic address space. > > The patch will avoid future build errors due to pointer address > space mismatch with enabled strict percpu address space checks. > > 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 > Cc: Catalin Marinas > Cc: Andrew Morton Actually, we can do something around the lines of the attached patch and still keep the __must_check directive active. Please disregard this patch, a new (better) approach is in the works. Uros. > --- > v2: Use explicit casts instead of IS_ERR_PCPU(). > --- > mm/kmemleak.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/mm/kmemleak.c b/mm/kmemleak.c > index 764b08100570..fc2e09ec48f8 100644 > --- a/mm/kmemleak.c > +++ b/mm/kmemleak.c > @@ -1059,8 +1059,9 @@ 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((const void *)(__force const unsigned long)ptr)) > + create_object_percpu((__force unsigned long)ptr, size, 0, gfp); > } > EXPORT_SYMBOL_GPL(kmemleak_alloc_percpu); > > @@ -1134,8 +1135,9 @@ 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((const void *)(__force const unsigned long)ptr)) > + delete_object_full((__force unsigned long)ptr, OBJECT_PERCPU); > } > EXPORT_SYMBOL_GPL(kmemleak_free_percpu); > > -- > 2.42.0 >