The problem begins with the fact that <all> ioctls are
vectored to the ioctl entry point of the atmdev that is registered
on the interface in question. In this case, all
are vectored to ia_ioctl(). Right near the
beginning of that ia_ioctl() you will see:
if (!dev->phy->ioctl) return(-EINVAL);
In "theory" the dev->phy pointer was set in suni_init()
to point to the suni ioctl handler.
However, in reality, if you look around line 2528 in iphase.c
you will see that suni_init is NOT called if the phy is
25mbps, DS3, or E3 (as yours is).
Thus phy = 0 at the time of the call and the attempt to
evaluate dev->phy->ioctl causes the seg fault shown below.
(eax is holding what should be phy).
> Code; c8842bee <[iphase]ia_ioctl+2a/52c> <=====
> 0: 83 78 04 00 cmpl $0x0,0x4(%eax) <=====
The obvious simple solution is to insert
if (!dev->phy) return(-EINVAL)
(or I suppose you could also add a phy driver for your interface)
Mike
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/