summaryrefslogtreecommitdiff
path: root/arch/tile/include/asm/unaligned.h
diff options
context:
space:
mode:
authorChris Metcalf <cmetcalf@tilera.com>2013-08-07 19:55:35 +0400
committerChris Metcalf <cmetcalf@tilera.com>2013-08-14 00:26:05 +0400
commitba02f0eb826da6dbdc5a2958ac52304ee441234f (patch)
tree8b50a046b6dd1a4cbc1379ae43c1c673c39e8d3d /arch/tile/include/asm/unaligned.h
parentbc1a298f4e04833db4c430df59b90039f0170515 (diff)
downloadlinux-ba02f0eb826da6dbdc5a2958ac52304ee441234f.tar.xz
tile: improve big-endian support
First, fix a bug in asm/unaligned.h; we need to just use the asm-generic unaligned.h so we properly choose endian-correct flavors. Second, keep the hv/hypervisor.h ABI fully "native" in the sense that we don't have __BIG_ENDIAN__ ifdefs there. Instead, we use macros in the head_NN.S assembly code to properly extract two 32-bit structure members from a 64-bit register holding the structure. Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'arch/tile/include/asm/unaligned.h')
-rw-r--r--arch/tile/include/asm/unaligned.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/tile/include/asm/unaligned.h b/arch/tile/include/asm/unaligned.h
index 37dfbe598872..5a58a0d11449 100644
--- a/arch/tile/include/asm/unaligned.h
+++ b/arch/tile/include/asm/unaligned.h
@@ -15,11 +15,15 @@
#ifndef _ASM_TILE_UNALIGNED_H
#define _ASM_TILE_UNALIGNED_H
-#include <linux/unaligned/le_struct.h>
-#include <linux/unaligned/be_byteshift.h>
-#include <linux/unaligned/generic.h>
-#define get_unaligned __get_unaligned_le
-#define put_unaligned __put_unaligned_le
+/*
+ * We could implement faster get_unaligned_[be/le]64 using the ldna
+ * instruction on tilegx; however, we need to either copy all of the
+ * other generic functions to here (which is pretty ugly) or else
+ * modify both the generic code and other arch code to allow arch
+ * specific unaligned data access functions. Given these functions
+ * are not often called, we'll stick with the generic version.
+ */
+#include <asm-generic/unaligned.h>
/*
* Is the kernel doing fixups of unaligned accesses? If <0, no kernel