summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorVignesh R <vigneshr@ti.com>2019-02-05 11:29:11 +0530
committerJagan Teki <jagan@amarulasolutions.com>2019-02-07 15:33:21 +0530
commite519c616061db4a388bb3ed765eab8c61a9571bc (patch)
tree31e73ed3736140743d285233995c8111f7dc2e0d /include/linux
parentea4805d6b26282451eee9c701a456225bcf7db85 (diff)
bitops: Fix GENMASK definition for Sandbox
In arch/sandbox/include/asm/types.h we have Therefore for 32 bit Sandbox build BITS_PER_LONG turns out to be 32 as CONFIG_PHYS64 is not set This messes up the current logic of GENMASK macro due to mismatch b/w size of unsigned long (64 bit) and that of BITS_PER_LONG. Fix this by using CONFIG_SANDBOX_BITS_PER_LONG which is set to 64/32 based on the host machine on which its being compiled. Without this patch: GENMASK(14,0) => 0x7fffffffffff After this patch: GENMASK(14,0) => 0x7fff Signed-off-by: Vignesh R <vigneshr@ti.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/bitops.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index a47f6d17bb..259df43fb0 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -21,8 +21,13 @@
* position @h. For example
* GENMASK_ULL(39, 21) gives us the 64bit vector 0x000000ffffe00000.
*/
+#ifdef CONFIG_SANDBOX
+#define GENMASK(h, l) \
+ (((~0UL) << (l)) & (~0UL >> (CONFIG_SANDBOX_BITS_PER_LONG - 1 - (h))))
+#else
#define GENMASK(h, l) \
(((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
+#endif
#define GENMASK_ULL(h, l) \
(((~0ULL) << (l)) & (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))