+ int status = NETDEV_TX_BUSY;
+ unsigned long tries;
+ struct net_device *dev = np->dev;
+ struct netpoll_info *npinfo = np->dev->npinfo;
+
+ if (!npinfo || !netif_running(dev) || !netif_device_present(dev)) {
+ __kfree_skb(skb);
+ return;
+ }
+
+ /* don't get messages out of order, and no recursion */
+ if ( !(np->drop == netpoll_queue && skb_queue_len(&npinfo->txq))
+ && npinfo->poll_owner != smp_processor_id()
+ && netif_tx_trylock(dev)) {
+
+ /* try until next clock tick */
+ for(tries = jiffies_to_usecs(1)/USEC_PER_POLL; tries > 0; --tries) {
+ if (!netif_queue_stopped(dev))
+ status = dev->hard_start_xmit(skb, dev);
+
+ if (status == NETDEV_TX_OK)
+ break;