Commit 8eb2a259 authored by David Woodhouse's avatar David Woodhouse Committed by David Woodhouse

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: default avatarDavid Woodhouse <dwmw2@infradead.org>
parent aecda73c
/* Overhauled routines for dealing with different mmap regions of flash */ /* 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__ #ifndef __LINUX_MTD_MAP_H__
#define __LINUX_MTD_MAP_H__ #define __LINUX_MTD_MAP_H__
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/mtd/compatmac.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -55,6 +56,11 @@ ...@@ -55,6 +56,11 @@
#define map_bankwidth_is_4(map) (0) #define map_bankwidth_is_4(map) (0)
#endif #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 CONFIG_MTD_MAP_BANK_WIDTH_8
# ifdef map_bankwidth # ifdef map_bankwidth
# undef map_bankwidth # undef map_bankwidth
...@@ -63,12 +69,12 @@ ...@@ -63,12 +69,12 @@
# undef map_bankwidth_is_large # undef map_bankwidth_is_large
# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8) # define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8)
# undef map_words # undef map_words
# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long)) # define map_words(map) map_calc_words(map)
# endif # endif
# else # else
# define map_bankwidth(map) 8 # define map_bankwidth(map) 8
# define map_bankwidth_is_large(map) (BITS_PER_LONG < 64) # 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 # endif
#define map_bankwidth_is_8(map) (map_bankwidth(map) == 8) #define map_bankwidth_is_8(map) (map_bankwidth(map) == 8)
#undef MAX_MAP_BANKWIDTH #undef MAX_MAP_BANKWIDTH
...@@ -84,11 +90,11 @@ ...@@ -84,11 +90,11 @@
# undef map_bankwidth_is_large # undef map_bankwidth_is_large
# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8) # define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8)
# undef map_words # undef map_words
# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long)) # define map_words(map) map_calc_words(map)
# else # else
# define map_bankwidth(map) 16 # define map_bankwidth(map) 16
# define map_bankwidth_is_large(map) (1) # 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 # endif
#define map_bankwidth_is_16(map) (map_bankwidth(map) == 16) #define map_bankwidth_is_16(map) (map_bankwidth(map) == 16)
#undef MAX_MAP_BANKWIDTH #undef MAX_MAP_BANKWIDTH
...@@ -104,11 +110,11 @@ ...@@ -104,11 +110,11 @@
# undef map_bankwidth_is_large # undef map_bankwidth_is_large
# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8) # define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8)
# undef map_words # undef map_words
# define map_words(map) (map_bankwidth(map) / sizeof(unsigned long)) # define map_words(map) map_calc_words(map)
# else # else
# define map_bankwidth(map) 32 # define map_bankwidth(map) 32
# define map_bankwidth_is_large(map) (1) # 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 # endif
#define map_bankwidth_is_32(map) (map_bankwidth(map) == 32) #define map_bankwidth_is_32(map) (map_bankwidth(map) == 32)
#undef MAX_MAP_BANKWIDTH #undef MAX_MAP_BANKWIDTH
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment