Re: [PATCH] Do not oops when configured flash size is less then chip size

David Vrabel
2006-05-11T15:53:09Z

Leon Woestenberg wrote:
>
> [MTD] CHIPS: Do not oops when configured flash size is less then chip size
>
> My kernel oopsed when the on-board flash chips where quadruple the size of the
> platform default physmap_map.size. Turned out that max_chips becomes zero,
> resulting in an oops later in locking chip->mutex being non-initialized.

> --- a/drivers/mtd/chips/gen_probe.c
> +++ b/drivers/mtd/chips/gen_probe.c
> @@ -100,6 +100,11 @@ #endif
> * Align bitmap storage size to full byte.
> */
> max_chips = map->size >> cfi.chipshift;
> + if (max_chips == 0) {
> + printk(KERN_WARNING "Single flash chip size exceeds the configured flash area size. Check your kernel configuration.\n");

This sounds like a valid, if unlikely, board configuration. e.g., a
board with chips fitted that are larger than the chip-select memory window.

It might be better to pretend such configuration is a single chip that's
smaller than it physically is.

Maybe something as simple as:

/* there's at least one chip present */
max_chips = max(map->size >> cfi.chipshift, 1);

?

David Vrabel
--
David Vrabel, Design Engineer

Arcom, Clifton Road Tel: +44 (0)1223 411200 ext. 3233
Cambridge CB1 7EA, UK Web: http://www.arcom.com/