svn commit: r242670 - user/andre/tcp_workqueue/sys/dev/e1000

Andre Oppermann andre at FreeBSD.org
Tue Nov 6 19:54:24 UTC 2012


Author: andre
Date: Tue Nov  6 19:54:24 2012
New Revision: 242670
URL: http://svnweb.freebsd.org/changeset/base/242670

Log:
  Remove polling support from em in preparation to try a different
  approach.

Modified:
  user/andre/tcp_workqueue/sys/dev/e1000/if_em.c

Modified: user/andre/tcp_workqueue/sys/dev/e1000/if_em.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/e1000/if_em.c	Tue Nov  6 19:51:54 2012	(r242669)
+++ user/andre/tcp_workqueue/sys/dev/e1000/if_em.c	Tue Nov  6 19:54:24 2012	(r242670)
@@ -33,7 +33,6 @@
 /*$FreeBSD$*/
 
 #ifdef HAVE_KERNEL_OPTION_HEADERS
-#include "opt_device_polling.h"
 #include "opt_inet.h"
 #include "opt_inet6.h"
 #endif
@@ -293,10 +292,6 @@ static int	em_sysctl_eee(SYSCTL_HANDLER_
 
 static __inline void em_rx_discard(struct rx_ring *, int);
 
-#ifdef DEVICE_POLLING
-static poll_handler_t em_poll;
-#endif /* POLLING */
-
 /*********************************************************************
  *  FreeBSD Device Interface Entry Points
  *********************************************************************/
@@ -772,11 +767,6 @@ em_detach(device_t dev)
 		return (EBUSY);
 	}
 
-#ifdef DEVICE_POLLING
-	if (ifp->if_capenable & IFCAP_POLLING)
-		ether_poll_deregister(ifp);
-#endif
-
 	if (adapter->led_dev != NULL)
 		led_destroy(adapter->led_dev);
 
@@ -1162,10 +1152,7 @@ em_ioctl(struct ifnet *ifp, u_long comma
 			EM_CORE_LOCK(adapter);
 			em_disable_intr(adapter);
 			em_set_multi(adapter);
-#ifdef DEVICE_POLLING
-			if (!(ifp->if_capenable & IFCAP_POLLING))
-#endif
-				em_enable_intr(adapter);
+			em_enable_intr(adapter);
 			EM_CORE_UNLOCK(adapter);
 		}
 		break;
@@ -1192,26 +1179,7 @@ em_ioctl(struct ifnet *ifp, u_long comma
 		IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
 		reinit = 0;
 		mask = ifr->ifr_reqcap ^ ifp->if_capenable;
-#ifdef DEVICE_POLLING
-		if (mask & IFCAP_POLLING) {
-			if (ifr->ifr_reqcap & IFCAP_POLLING) {
-				error = ether_poll_register(em_poll, ifp);
-				if (error)
-					return (error);
-				EM_CORE_LOCK(adapter);
-				em_disable_intr(adapter);
-				ifp->if_capenable |= IFCAP_POLLING;
-				EM_CORE_UNLOCK(adapter);
-			} else {
-				error = ether_poll_deregister(ifp);
-				/* Enable interrupt even in error case */
-				EM_CORE_LOCK(adapter);
-				em_enable_intr(adapter);
-				ifp->if_capenable &= ~IFCAP_POLLING;
-				EM_CORE_UNLOCK(adapter);
-			}
-		}
-#endif
+
 		if (mask & IFCAP_HWCSUM) {
 			ifp->if_capenable ^= IFCAP_HWCSUM;
 			reinit = 1;
@@ -1373,16 +1341,7 @@ em_init_locked(struct adapter *adapter)
 		E1000_WRITE_REG(&adapter->hw, E1000_IVAR, adapter->ivars);
 	}
 
-#ifdef DEVICE_POLLING
-	/*
-	 * Only enable interrupts if we are not polling, make sure
-	 * they are off otherwise.
-	 */
-	if (ifp->if_capenable & IFCAP_POLLING)
-		em_disable_intr(adapter);
-	else
-#endif /* DEVICE_POLLING */
-		em_enable_intr(adapter);
+	em_enable_intr(adapter);
 
 	/* AMT based hardware can now take control from firmware */
 	if (adapter->has_manage && adapter->has_amt)
@@ -1399,58 +1358,6 @@ em_init(void *arg)
 	EM_CORE_UNLOCK(adapter);
 }
 
-
-#ifdef DEVICE_POLLING
-/*********************************************************************
- *
- *  Legacy polling routine: note this only works with single queue
- *
- *********************************************************************/
-static int
-em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
-{
-	struct adapter *adapter = ifp->if_softc;
-	struct tx_ring	*txr = adapter->tx_rings;
-	struct rx_ring	*rxr = adapter->rx_rings;
-	u32		reg_icr;
-	int		rx_done;
-
-	EM_CORE_LOCK(adapter);
-	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
-		EM_CORE_UNLOCK(adapter);
-		return (0);
-	}
-
-	if (cmd == POLL_AND_CHECK_STATUS) {
-		reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
-		if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
-			callout_stop(&adapter->timer);
-			adapter->hw.mac.get_link_status = 1;
-			em_update_link_status(adapter);
-			callout_reset(&adapter->timer, hz,
-			    em_local_timer, adapter);
-		}
-	}
-	EM_CORE_UNLOCK(adapter);
-
-	em_rxeof(rxr, count, &rx_done);
-
-	EM_TX_LOCK(txr);
-	em_txeof(txr);
-#ifdef EM_MULTIQUEUE
-	if (!drbr_empty(ifp, txr->br))
-		em_mq_start_locked(ifp, txr, NULL);
-#else
-	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-		em_start_locked(ifp, txr);
-#endif
-	EM_TX_UNLOCK(txr);
-
-	return (rx_done);
-}
-#endif /* DEVICE_POLLING */
-
-
 /*********************************************************************
  *
  *  Fast Legacy/MSI Combined Interrupt Service routine  
@@ -2256,10 +2163,8 @@ em_local_timer(void *arg)
 	
 	adapter->pause_frames = 0;
 	callout_reset(&adapter->timer, hz, em_local_timer, adapter);
-#ifndef DEVICE_POLLING
 	/* Trigger an RX interrupt to guarantee mbuf refresh */
 	E1000_WRITE_REG(&adapter->hw, E1000_ICS, trigger);
-#endif
 	return;
 hung:
 	/* Looks like we're hung */
@@ -2980,10 +2885,6 @@ em_setup_interface(device_t dev, struct 
 	*/
 	ifp->if_capabilities |= IFCAP_VLAN_HWFILTER;
 
-#ifdef DEVICE_POLLING
-	ifp->if_capabilities |= IFCAP_POLLING;
-#endif
-
 	/* Enable only WOL MAGIC by default */
 	if (adapter->wol) {
 		ifp->if_capabilities |= IFCAP_WOL;
@@ -4388,7 +4289,6 @@ em_initialize_receive_unit(struct adapte
  *  We loop at most count times if count is > 0, or until done if
  *  count < 0.
  *  
- *  For polling we also now return the number of cleaned packets
  *********************************************************************/
 static bool
 em_rxeof(struct rx_ring *rxr, int count, int *done)


More information about the svn-src-user mailing list