On Sun, Dec 19, 2004 at 06:19:06PM +0200, Yuri N. Glibovetz wrote: > http://lists.altlinux.ru/pipermail/sisyphus/2003-December/031179.html > http://lists.altlinux.ru/pipermail/sisyphus/2003-December/031194.html > http://lists.altlinux.ru/pipermail/sisyphus/2003-December/031231.html > http://lists.altlinux.ru/pipermail/sisyphus/2003-December/031258.html > http://lists.altlinux.ru/pipermail/sisyphus/2003-December/031271.html > > Интересно, чем закончилась эта история? А ничем - тогда так ничего и не раскопали. > Кстати если верить другим источникам, место Oops локализовано. > fealnx.c:netdev_rx: > > >/* Check if the packet is long enough to accept without copying > > to a minimally-sized skbuff. */ > >if (pkt_len < rx_copybreak && > > (skb = dev_alloc_skb(pkt_len + 2)) != NULL) { > > skb->dev = dev; > > skb_reserve(skb, 2); /* 16 byte align the IP header */ > > /* Call copy + cksum if available. */ > > > >#if ! defined(__alpha__) > > eth_copy_and_sum(skb, > > np->cur_rx->skbuff->tail, pkt_len, 0); > > skb_put(skb, pkt_len); > >#else > > memcpy(skb_put(skb, pkt_len), > > np->cur_rx->skbuff->tail, pkt_len); > >#endif > >} else { > > skb_put(skb = np->cur_rx->skbuff, pkt_len); > > np->cur_rx->skbuff = NULL; > > if (np->really_rx_count == RX_RING_SIZE) > > np->lack_rxbuf = np->cur_rx; > > --np->really_rx_count; // <----- это здесь > >} В данном случае oops был в другом месте - в intr_handler(): /* Free the original skb. */ pci_unmap_single(np->pci_dev, np->cur_tx->buffer, np->cur_tx->skbuff->len, PCI_DMA_TODEVICE); dev_kfree_skb_irq(np->cur_tx->skbuff); В np->cur_tx->skbuff оказался NULL. Это весьма похоже на проблему, исправленую в 2.6 вот этим патчем: http://linux.bkbits.net:8080/linux-2.6/cset@406b2395GEYyN1xve0b-r-4zWwj-iQ Причём в 2.4 этого патча до сих пор нет (хотя после него в 2.6 была целая серия из 11 патчей, которые вошли и в 2.4). Странно. Видимо, эти карточки никому не нужны. А вот что там за "another problem in the RX path" - не совсем понятно.