summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@shinybook.infradead.org>2004-10-21 01:50:36 +0100
committerDavid Woodhouse <dwmw2@infradead.org>2004-10-21 01:50:36 +0100
commit8eb2a259ae800d553296d0a1b6b2cd6ebff6c569 (patch)
tree95acba4a2ccc8d650d7a895be273b7066443fc1d /include
parentaecda73cdd36c6418123ffd4d7f03a64a1eedf00 (diff)
MTD map access: Fix calculation of the number of longs in a bus access
Patch from Ben Dooks <ben-mtd@fluff.org> Signed-Off-By: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/mtd/map.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/include/linux/mtd/map.h b/include/linux/mtd/map.h
index 278d0f30de20..a960be2cc33c 100644
--- a/include/linux/mtd/map.h
+++ b/include/linux/mtd/map.h
@@ -1,6 +1,6 @@
/* Overhauled routines for dealing with different mmap regions of flash */
-/* $Id: map.h,v 1.43 2004/07/14 13:30:27 dwmw2 Exp $ */
+/* $Id: map.h,v 1.45 2004/09/21 14:31:17 bjd Exp $ */
#ifndef __LINUX_MTD_MAP_H__
#define __LINUX_MTD_MAP_H__
@@ -8,6 +8,7 @@
#include <linux/config.h>
#include <linux/types.h>
#include <linux/list.h>
+#include <linux/mtd/compatmac.h>
#include <asm/unaligned.h>
#include <asm/system.h>
#include <asm/io.h>
@@ -55,6 +56,11 @@
#define map_bankwidth_is_4(map) (0)
#endif
+/* ensure we never evaluate anything shorted than an unsigned long
+ * to zero, and ensure we'll never miss the end of an comparison (bjd) */
+
+#define map_calc_words(map) ((map_bankwidth(map) + (sizeof(unsigned long)-1))/ sizeof(unsigned long))
+
#ifdef CONFIG_MTD_MAP_BANK_WIDTH_8
# ifdef map_bankwidth
# undef map_bankwidth
@@ -63,12 +69,12 @@
# undef map_bankwidth_is_large
# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8)
# undef map_words
-# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long))
+# define map_words(map) map_calc_words(map)
# endif
# else
# define map_bankwidth(map) 8
# define map_bankwidth_is_large(map) (BITS_PER_LONG < 64)
-# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long))
+# define map_words(map) map_calc_words(map)
# endif
#define map_bankwidth_is_8(map) (map_bankwidth(map) == 8)
#undef MAX_MAP_BANKWIDTH
@@ -84,11 +90,11 @@
# undef map_bankwidth_is_large
# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8)
# undef map_words
-# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long))
+# define map_words(map) map_calc_words(map)
# else
# define map_bankwidth(map) 16
# define map_bankwidth_is_large(map) (1)
-# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long))
+# define map_words(map) map_calc_words(map)
# endif
#define map_bankwidth_is_16(map) (map_bankwidth(map) == 16)
#undef MAX_MAP_BANKWIDTH
@@ -104,11 +110,11 @@
# undef map_bankwidth_is_large
# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8)
# undef map_words
-# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long))
+# define map_words(map) map_calc_words(map)
# else
# define map_bankwidth(map) 32
# define map_bankwidth_is_large(map) (1)
-# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long))
+# define map_words(map) map_calc_words(map)
# endif
#define map_bankwidth_is_32(map) (map_bankwidth(map) == 32)
#undef MAX_MAP_BANKWIDTH