etherh: Get working again.
Further to
a71558d, this is round five of fixes to make etherh work
again. As mainline kernels stand, the fixes in
b9a9b4b were the wrong
approach.
The 8390 driver was structured by Al Viro to allow the flexibility required
by platforms. lib8390.c contains the core code which drivers explicitly
include:
- 8390.c includes lib8390.c to provide the standard ISA based driver.
- etherh.c includes it with the accessors defined for RiscPC platforms,
where it is addressed via the MMIO accessors with a device dependent
register spacing.
Other platform drivers do something similar.
However,
b9a9b4b caused the kernel to contain not only the etherh private
build of lib8390 (included in etherh.c) but also lib8390.c itself, and
referred the new net_device_ops methods to the ISA version. The result
of this is is not pretty:
Unable to handle kernel paging request at virtual address
12032030
pgd =
c8330000
[
12032030] *pgd=
00000000
Internal error: Oops:
18331805 [#1]
Modules linked in: ipv6
CPU: 0 Not tainted (2.6.29-rc3 #167)
PC is at do_set_multicast_list+0xd0/0x190
LR is at bitrev32+0x28/0x34
pc : [<
c017aab4>] lr : [<
c0139120>] psr:
a0000093
sp :
c8321d9c ip :
c8321d84 fp :
c8321dbc
r10:
c80c6800 r9 :
00000000 r8 :
c80c6b60
r7 :
c80c6b80 r6 :
cc80c800 r5 :
c80c6800 r4 :
00000000
r3 :
cc80c80c r2 :
00000004 r1 :
00000007 r0 :
e0000000
Flags: NzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user
...
Fix up
b9a9b4b by making etherh's net_device_ops refer to the internal
lib8390 functions, and remove the build of the ISA 8390.c driver.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>