]> git.karo-electronics.de Git - karo-tx-linux.git/commit
zorro: Defer device_register() until all devices have been identified
authorGeert Uytterhoeven <geert@linux-m68k.org>
Sat, 6 Aug 2011 13:31:07 +0000 (15:31 +0200)
committerGeert Uytterhoeven <geert@linux-m68k.org>
Thu, 22 Sep 2011 16:50:09 +0000 (18:50 +0200)
commit6c38612cb30a8c94029825fdf61879c8e4561955
tree516c852e27cb030c42625a0c07e7eac54cc9710f
parentd93dc5c4478c1fd5de85a3e8aece9aad7bbae044
zorro: Defer device_register() until all devices have been identified

As the Amiga Zorro II address space is limited to 8.5 MiB and Zorro devices
can contain only one BAR, several Amiga Zorro II expansion boards (mainly
graphics cards) contain multiple Zorro devices: a small one for the control
registers and one (or more) for the graphics memory.

The conversion of cirrusfb to the new driver framework introduced a
regression: the driver contains a zorro_driver for the first Zorro device,
and uses the (old) zorro_find_device() call to find the second Zorro
device.
However, as the Zorro core calls device_register() as soon as a Zorro
device is identified, it may not have identified the second Zorro device
belonging to the same physical Zorro expansion card. Hence cirrusfb could
no longer find the second part of the Picasso II graphics card, causing a
NULL pointer dereference.

Defer the registration of Zorro devices with the driver framework until
all Zorro devices have been identified to fix this.

Note that the alternative solution (modifying cirrusfb to register a
zorro_driver for all Zorro devices belonging to a graphics card, instead
of only for the first one, and adding a synchronization mechanism to defer
initialization until all have been found), is not an option, as on some
cards one device may be optional (e.g. the second bank of 2 MiB of
graphics memory on the Picasso IV in Zorro II mode).

Reported-by: Ingo Jürgensmann <ij@2011.bluespice.org>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: stable@kernel.org
drivers/zorro/zorro.c