svn commit: r268010 - in stable/10/sys/dev/virtio: . network pci

Bryan Venteicher bryanv at FreeBSD.org
Sun Jun 29 00:38:02 UTC 2014


Author: bryanv
Date: Sun Jun 29 00:37:59 2014
New Revision: 268010
URL: http://svnweb.freebsd.org/changeset/base/268010

Log:
  MFC r267520, r267521, r267522, r267523, r267524:
  
    - Remove two write-only local variables
    - Remove unused element in the vtnet_rxq structure
    - Remove kernel specific macro out of the VirtIO PCI header file
    - Move the VIRTIO_RING_F_* defines out of virtqueue.h into
      virtio_config.h
    - Make the feature negotiation code easier to follow
    - Force two byte alignment for all control message headers

Modified:
  stable/10/sys/dev/virtio/network/if_vtnet.c
  stable/10/sys/dev/virtio/network/if_vtnetvar.h
  stable/10/sys/dev/virtio/pci/virtio_pci.c
  stable/10/sys/dev/virtio/pci/virtio_pci.h
  stable/10/sys/dev/virtio/virtio.h
  stable/10/sys/dev/virtio/virtio_config.h
  stable/10/sys/dev/virtio/virtqueue.c
  stable/10/sys/dev/virtio/virtqueue.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/virtio/network/if_vtnet.c
==============================================================================
--- stable/10/sys/dev/virtio/network/if_vtnet.c	Sat Jun 28 23:20:24 2014	(r268009)
+++ stable/10/sys/dev/virtio/network/if_vtnet.c	Sun Jun 29 00:37:59 2014	(r268010)
@@ -550,37 +550,38 @@ vtnet_negotiate_features(struct vtnet_so
 		mask |= VTNET_TSO_FEATURES;
 	if (vtnet_tunable_int(sc, "lro_disable", vtnet_lro_disable))
 		mask |= VTNET_LRO_FEATURES;
+#ifndef VTNET_LEGACY_TX
 	if (vtnet_tunable_int(sc, "mq_disable", vtnet_mq_disable))
 		mask |= VIRTIO_NET_F_MQ;
-#ifdef VTNET_LEGACY_TX
+#else
 	mask |= VIRTIO_NET_F_MQ;
 #endif
 
 	features = VTNET_FEATURES & ~mask;
 	sc->vtnet_features = virtio_negotiate_features(dev, features);
 
-	if (virtio_with_feature(dev, VTNET_LRO_FEATURES) == 0)
-		return;
-	if (virtio_with_feature(dev, VIRTIO_NET_F_MRG_RXBUF))
-		return;
-
-	/*
-	 * LRO without mergeable buffers requires special care. This is not
-	 * ideal because every receive buffer must be large enough to hold
-	 * the maximum TCP packet, the Ethernet header, and the header. This
-	 * requires up to 34 descriptors with MCLBYTES clusters. If we do
-	 * not have indirect descriptors, LRO is disabled since the virtqueue
-	 * will not contain very many receive buffers.
-	 */
-	if (virtio_with_feature(dev, VIRTIO_RING_F_INDIRECT_DESC) == 0) {
-		device_printf(dev,
-		    "LRO disabled due to both mergeable buffers and indirect "
-		    "descriptors not negotiated\n");
+	if (virtio_with_feature(dev, VTNET_LRO_FEATURES) &&
+	    virtio_with_feature(dev, VIRTIO_NET_F_MRG_RXBUF) == 0) {
+		/*
+		 * LRO without mergeable buffers requires special care. This
+		 * is not ideal because every receive buffer must be large
+		 * enough to hold the maximum TCP packet, the Ethernet header,
+		 * and the header. This requires up to 34 descriptors with
+		 * MCLBYTES clusters. If we do not have indirect descriptors,
+		 * LRO is disabled since the virtqueue will not contain very
+		 * many receive buffers.
+		 */
+		if (!virtio_with_feature(dev, VIRTIO_RING_F_INDIRECT_DESC)) {
+			device_printf(dev,
+			    "LRO disabled due to both mergeable buffers and "
+			    "indirect descriptors not negotiated\n");
 
-		features &= ~VTNET_LRO_FEATURES;
-		sc->vtnet_features = virtio_negotiate_features(dev, features);
-	} else
-		sc->vtnet_flags |= VTNET_FLAG_LRO_NOMRG;
+			features &= ~VTNET_LRO_FEATURES;
+			sc->vtnet_features =
+			    virtio_negotiate_features(dev, features);
+		} else
+			sc->vtnet_flags |= VTNET_FLAG_LRO_NOMRG;
+	}
 }
 
 static void
@@ -2111,13 +2112,11 @@ fail:
 static int
 vtnet_txq_encap(struct vtnet_txq *txq, struct mbuf **m_head)
 {
-	struct vtnet_softc *sc;
 	struct vtnet_tx_header *txhdr;
 	struct virtio_net_hdr *hdr;
 	struct mbuf *m;
 	int error;
 
-	sc = txq->vtntx_sc;
 	m = *m_head;
 	M_ASSERTPKTHDR(m);
 
@@ -2944,11 +2943,9 @@ vtnet_set_active_vq_pairs(struct vtnet_s
 static int
 vtnet_reinit(struct vtnet_softc *sc)
 {
-	device_t dev;
 	struct ifnet *ifp;
 	int error;
 
-	dev = sc->vtnet_dev;
 	ifp = sc->vtnet_ifp;
 
 	/* Use the current MAC address. */
@@ -3069,7 +3066,7 @@ vtnet_exec_ctrl_cmd(struct vtnet_softc *
 static int
 vtnet_ctrl_mac_cmd(struct vtnet_softc *sc, uint8_t *hwaddr)
 {
-	struct virtio_net_ctrl_hdr hdr;
+	struct virtio_net_ctrl_hdr hdr __aligned(2);
 	struct sglist_seg segs[3];
 	struct sglist sg;
 	uint8_t ack;
@@ -3103,7 +3100,7 @@ vtnet_ctrl_mq_cmd(struct vtnet_softc *sc
 		struct virtio_net_ctrl_mq mq;
 		uint8_t pad2;
 		uint8_t ack;
-	} s;
+	} s __aligned(2);
 	int error;
 
 	s.hdr.class = VIRTIO_NET_CTRL_MQ;
@@ -3135,7 +3132,7 @@ vtnet_ctrl_rx_cmd(struct vtnet_softc *sc
 		uint8_t onoff;
 		uint8_t pad2;
 		uint8_t ack;
-	} s;
+	} s __aligned(2);
 	int error;
 
 	KASSERT(sc->vtnet_flags & VTNET_FLAG_CTRL_RX,
@@ -3218,7 +3215,7 @@ vtnet_rx_filter(struct vtnet_softc *sc)
 static void
 vtnet_rx_filter_mac(struct vtnet_softc *sc)
 {
-	struct virtio_net_ctrl_hdr hdr;
+	struct virtio_net_ctrl_hdr hdr __aligned(2);
 	struct vtnet_mac_filter *filter;
 	struct sglist_seg segs[4];
 	struct sglist sg;
@@ -3331,7 +3328,7 @@ vtnet_exec_vlan_filter(struct vtnet_soft
 		uint16_t tag;
 		uint8_t pad2;
 		uint8_t ack;
-	} s;
+	} s __aligned(2);
 	int error;
 
 	s.hdr.class = VIRTIO_NET_CTRL_VLAN;

Modified: stable/10/sys/dev/virtio/network/if_vtnetvar.h
==============================================================================
--- stable/10/sys/dev/virtio/network/if_vtnetvar.h	Sat Jun 28 23:20:24 2014	(r268009)
+++ stable/10/sys/dev/virtio/network/if_vtnetvar.h	Sun Jun 29 00:37:59 2014	(r268010)
@@ -74,7 +74,6 @@ struct vtnet_rxq {
 	struct virtqueue	*vtnrx_vq;
 	struct sglist		*vtnrx_sg;
 	int			 vtnrx_id;
-	int			 vtnrx_process_limit;
 	struct vtnet_rxq_stats	 vtnrx_stats;
 	struct taskqueue	*vtnrx_tq;
 	struct task		 vtnrx_intrtask;

Modified: stable/10/sys/dev/virtio/pci/virtio_pci.c
==============================================================================
--- stable/10/sys/dev/virtio/pci/virtio_pci.c	Sat Jun 28 23:20:24 2014	(r268009)
+++ stable/10/sys/dev/virtio/pci/virtio_pci.c	Sun Jun 29 00:37:59 2014	(r268010)
@@ -45,7 +45,6 @@ __FBSDID("$FreeBSD$");
 #include <dev/pci/pcireg.h>
 
 #include <dev/virtio/virtio.h>
-#include <dev/virtio/virtio_config.h>
 #include <dev/virtio/virtqueue.h>
 #include <dev/virtio/pci/virtio_pci.h>
 
@@ -170,6 +169,9 @@ static void	vtpci_config_intr(void *);
 
 #define vtpci_setup_msi_interrupt vtpci_setup_legacy_interrupt
 
+#define VIRTIO_PCI_CONFIG(_sc) \
+    VIRTIO_PCI_CONFIG_OFF((((_sc)->vtpci_flags & VTPCI_FLAG_MSIX)) != 0)
+
 /*
  * I/O port read/write wrappers.
  */

Modified: stable/10/sys/dev/virtio/pci/virtio_pci.h
==============================================================================
--- stable/10/sys/dev/virtio/pci/virtio_pci.h	Sat Jun 28 23:20:24 2014	(r268009)
+++ stable/10/sys/dev/virtio/pci/virtio_pci.h	Sun Jun 29 00:37:59 2014	(r268010)
@@ -72,8 +72,7 @@
  * The remaining space is defined by each driver as the per-driver
  * configuration space.
  */
-#define VIRTIO_PCI_CONFIG(sc) \
-    (((sc)->vtpci_flags & VTPCI_FLAG_MSIX) ? 24 : 20)
+#define VIRTIO_PCI_CONFIG_OFF(msix_enabled)     ((msix_enabled) ? 24 : 20)
 
 /*
  * How many bits to shift physical queue address written to QUEUE_PFN.

Modified: stable/10/sys/dev/virtio/virtio.h
==============================================================================
--- stable/10/sys/dev/virtio/virtio.h	Sat Jun 28 23:20:24 2014	(r268009)
+++ stable/10/sys/dev/virtio/virtio.h	Sun Jun 29 00:37:59 2014	(r268010)
@@ -30,6 +30,7 @@
 #define _VIRTIO_H_
 
 #include <dev/virtio/virtio_ids.h>
+#include <dev/virtio/virtio_config.h>
 
 struct vq_alloc_info;
 

Modified: stable/10/sys/dev/virtio/virtio_config.h
==============================================================================
--- stable/10/sys/dev/virtio/virtio_config.h	Sat Jun 28 23:20:24 2014	(r268009)
+++ stable/10/sys/dev/virtio/virtio_config.h	Sun Jun 29 00:37:59 2014	(r268010)
@@ -44,6 +44,12 @@
  */
 #define VIRTIO_F_NOTIFY_ON_EMPTY (1 << 24)
 
+/* Support for indirect buffer descriptors. */
+#define VIRTIO_RING_F_INDIRECT_DESC	(1 << 28)
+
+/* Support to suppress interrupt until specific index is reached. */
+#define VIRTIO_RING_F_EVENT_IDX		(1 << 29)
+
 /*
  * The guest should never negotiate this feature; it
  * is used to detect faulty drivers.

Modified: stable/10/sys/dev/virtio/virtqueue.c
==============================================================================
--- stable/10/sys/dev/virtio/virtqueue.c	Sat Jun 28 23:20:24 2014	(r268009)
+++ stable/10/sys/dev/virtio/virtqueue.c	Sun Jun 29 00:37:59 2014	(r268010)
@@ -48,7 +48,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/rman.h>
 
 #include <dev/virtio/virtio.h>
-#include <dev/virtio/virtio_config.h>
 #include <dev/virtio/virtqueue.h>
 #include <dev/virtio/virtio_ring.h>
 

Modified: stable/10/sys/dev/virtio/virtqueue.h
==============================================================================
--- stable/10/sys/dev/virtio/virtqueue.h	Sat Jun 28 23:20:24 2014	(r268009)
+++ stable/10/sys/dev/virtio/virtqueue.h	Sun Jun 29 00:37:59 2014	(r268010)
@@ -32,12 +32,6 @@
 struct virtqueue;
 struct sglist;
 
-/* Support for indirect buffer descriptors. */
-#define VIRTIO_RING_F_INDIRECT_DESC	(1 << 28)
-
-/* Support to suppress interrupt until specific index is reached. */
-#define VIRTIO_RING_F_EVENT_IDX		(1 << 29)
-
 /* Device callback for a virtqueue interrupt. */
 typedef void virtqueue_intr_t(void *);
 


More information about the svn-src-all mailing list