/* Ugly but a reset can be slow, yet must be protected */
- disable_irq_nosync_lockdep(dev->irq);
+ disable_irq_nosync(dev->irq);
spin_lock(&ei_local->page_lock);
/* Try to restart the card. Perhaps the user has fixed something. */
NS8390_init(dev, 1);
spin_unlock(&ei_local->page_lock);
- enable_irq_lockdep(dev->irq);
+ enable_irq(dev->irq);
netif_wake_queue(dev);
}
struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
int send_length = skb->len, output_page;
unsigned long flags;
- char buf[ETH_ZLEN];
- char *data = skb->data;
if (skb->len < ETH_ZLEN) {
- memset(buf, 0, ETH_ZLEN); /* more efficient than doing just the needed bits */
- memcpy(buf, data, skb->len);
+ skb = skb_padto(skb, ETH_ZLEN);
+ if (skb == NULL)
+ return 0;
send_length = ETH_ZLEN;
- data = buf;
}
/* Mask interrupts from the ethercard.
* trigger the send later, upon receiving a Tx done interrupt.
*/
- ei_block_output(dev, send_length, data, output_page);
+ ei_block_output(dev, send_length, skb->data, output_page);
if (! ei_local->txing)
{