From: Harvey Harrison <harvey.harrison@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
linux-netdev <netdev@vger.kernel.org>
Subject: [RFC PATCH] kernel: add byteorder macros with alignment fixups
Date: Thu, 20 Mar 2008 10:34:14 -0700 [thread overview]
Message-ID: <1206034454.17059.4.camel@brick> (raw)
A common pattern in the kernel (especially networking) is:
le32_to_cpu(get_unaligned((__le32 *)x));
Repeat for various combinations of le/be and 64/32/16 bit. Add
a variant that operates on possibly unaligned pointers to
byteorder/generic.h
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
---
include/linux/byteorder/generic.h | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/include/linux/byteorder/generic.h b/include/linux/byteorder/generic.h
index d377155..9b1a7a4 100644
--- a/include/linux/byteorder/generic.h
+++ b/include/linux/byteorder/generic.h
@@ -73,6 +73,10 @@
* cpu_to_[bl]eXXp(__uXX x)
* [bl]eXX_to_cpup(__uXX x)
*
+ * The same, but takes a possibly unaligned pointer to the value to convert
+ * cpu_to_[bl]eXXp_un(__uXX x)
+ * [bl]eXX_to_cpup_un(__uXX x)
+ *
* The same, but change in situ
* cpu_to_[bl]eXXs(__uXX x)
* [bl]eXX_to_cpus(__uXX x)
@@ -84,6 +88,8 @@
#if defined(__KERNEL__)
+#include <asm/unaligned.h>
+
/*
* inside the kernel, we can use nicknames;
* outside of it, we must avoid POSIX namespace pollution...
@@ -126,6 +132,16 @@
#define be16_to_cpus __be16_to_cpus
/*
+ * Operates on possibly unaligned pointers
+ */
+#define le64_to_cpup_un(x) __le64_to_cpu(get_unaligned((__le64 *)(x)))
+#define le32_to_cpup_un(x) __le32_to_cpu(get_unaligned((__le32 *)(x)))
+#define le16_to_cpup_un(x) __le16_to_cpu(get_unaligned((__le16 *)(x)))
+#define be64_to_cpup_un(x) __be64_to_cpu(get_unaligned((__be64 *)(x)))
+#define be32_to_cpup_un(x) __be32_to_cpu(get_unaligned((__be32 *)(x)))
+#define be16_to_cpup_un(x) __be16_to_cpu(get_unaligned((__be16 *)(x)))
+
+/*
* They have to be macros in order to do the constant folding
* correctly - if the argument passed into a inline function
* it is no longer constant according to gcc..
--
1.5.4.4.684.g0e08
next reply other threads:[~2008-03-20 17:34 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-20 17:34 Harvey Harrison [this message]
2008-03-20 18:29 ` [RFC PATCH] kernel: add byteorder macros with alignment fixups Al Viro
2008-03-20 18:37 ` Harvey Harrison
2008-03-20 19:09 ` Al Viro
2008-03-20 19:22 ` Harvey Harrison
2008-03-23 13:59 ` Pavel Machek
2008-03-24 16:35 ` Harvey Harrison
2008-03-20 19:41 ` [PATCH] kernel: add byteorder function " Harvey Harrison
2008-03-20 20:16 ` [PATCH] kernel: create linux/unaligned.h Harvey Harrison
2008-03-20 20:39 ` Randy Dunlap
2008-03-20 20:08 ` [RFC PATCH] kernel: add byteorder macros with alignment fixups H. Peter Anvin
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=1206034454.17059.4.camel@brick \
--to=harvey.harrison@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.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.