Re: [Linux-ATM-General] Oops: Linux ATM Interphase card.

Mike Westall (westall@cs.clemson.edu)
Sat, 23 Mar 2002 15:51:18 -0500


Since you did such a fine job of describing the problem,
I can actually tell what the trouble is and how to fix
it even though I'm not currently using that driver.

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/