Messages in this thread | | | Date | Sat, 23 Mar 2002 15:51:18 -0500 | From | Mike Westall <> | Subject | Re: [Linux-ATM-General] Oops: Linux ATM Interphase card. |
| |
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/
| |