Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH] kernel.h: add IS_PTR_ALIGNED() macro

18 views
Skip to first unread message

Masahiro Yamada

unread,
Mar 29, 2017, 6:30:07 AM3/29/17
to
We often check if a pointer has a specific alignment. Because the
'&' (bitwise AND) operator cannot take a pointer for the operand,
so we need a cast like, IS_ALIGNED((unsigned long)p, a).

IS_PTR_ALIGNED will be useful as a shorthand.

Signed-off-by: Masahiro Yamada <yamada....@socionext.com>
---

include/linux/kernel.h | 1 +
1 file changed, 1 insertion(+)

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index e5edd55..a810e4b 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -50,6 +50,7 @@
#define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask))
#define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a)))
#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
+#define IS_PTR_ALIGNED(p, a) (IS_ALIGNED((unsigned long)p, a))

/* generic data direction definitions */
#define READ 0
--
2.7.4

H. Peter Anvin

unread,
Mar 29, 2017, 5:40:07 PM3/29/17
to
No need for two macros; make one work for both.

You could move the __inttype() macro from arch/x86/include/asm/uaccess.h
into this file and replace typeof(x) with __inttype(x) in the above macro.

Attached is a set of slightly improved (safer and a bit more
generalized) versions of the same macro that might be more appropriate
to include in <linux/kernel.h>.

-hpa
uinttype.c

Andrew Morton

unread,
Mar 29, 2017, 5:40:07 PM3/29/17
to
On Wed, 29 Mar 2017 19:22:10 +0900 Masahiro Yamada <yamada....@socionext.com> wrote:

> We often check if a pointer has a specific alignment. Because the
> '&' (bitwise AND) operator cannot take a pointer for the operand,
> so we need a cast like, IS_ALIGNED((unsigned long)p, a).
>
> IS_PTR_ALIGNED will be useful as a shorthand.
>
> ...
>
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -50,6 +50,7 @@
> #define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask))
> #define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a)))
> #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
> +#define IS_PTR_ALIGNED(p, a) (IS_ALIGNED((unsigned long)p, a))
>
> /* generic data direction definitions */
> #define READ 0

It would be nice to see some conversions which actually use this new
macro.

Masahiro Yamada

unread,
Mar 29, 2017, 10:00:05 PM3/29/17
to
Hi.
Could you care to send a patch?

Perhaps, ALIGN and PTR_ALIGN can be merged as well?



--
Best Regards
Masahiro Yamada

H. Peter Anvin

unread,
Mar 29, 2017, 11:50:04 PM3/29/17
to
On 03/29/17 18:57, Masahiro Yamada wrote:
>
> Could you care to send a patch?
>
> Perhaps, ALIGN and PTR_ALIGN can be merged as well?
>

Can't promise when I'd get around to it...

-hpa

Masahiro Yamada

unread,
Mar 30, 2017, 11:30:11 AM3/30/17
to
Hi.
OK. No need to rush now.
Please take a look when you find some time.


Andrew,
Maybe, we should drop my patch for now,
and take our time for better implementation?
0 new messages