svn commit: r348389 - head/sys/dev/ena

Marcin Wojtas mw at FreeBSD.org
Thu May 30 13:12:15 UTC 2019


Author: mw
Date: Thu May 30 13:12:14 2019
New Revision: 348389
URL: https://svnweb.freebsd.org/changeset/base/348389

Log:
  Remove RSS support in ENA
  
  Receive Side Scaling is optional feature that could be enabled in kernel
  configuration by defining flag RSS.
  
  Kernel uses hash to store and find protocol control block which is
  stored in hash tables.
  Kernel and NIC hash functions must be consistent. Otherwise case lookup
  fails.
  
  To achieve this kernel provides API to set proper hash key to NIC.
  As it is not possible to change key for virtual ENA NIC, this driver
  cannot support RSS function.
  
  ENA is designed to work in virtual environments so supporting hardware
  version of this card is unnecessary.
  
  Submitted by:  Rafal Kozik <rk at semihalf.com>
  Obtained from: Semihalf
  Sponsored by:  Amazon, Inc.

Modified:
  head/sys/dev/ena/ena.c

Modified: head/sys/dev/ena/ena.c
==============================================================================
--- head/sys/dev/ena/ena.c	Thu May 30 13:09:53 2019	(r348388)
+++ head/sys/dev/ena/ena.c	Thu May 30 13:12:14 2019	(r348389)
@@ -59,11 +59,9 @@ __FBSDID("$FreeBSD$");
 #include <net/if_arp.h>
 #include <net/if_dl.h>
 #include <net/if_media.h>
-#include <net/rss_config.h>
 #include <net/if_types.h>
 #include <net/if_vlan_var.h>
 
-#include <netinet/in_rss.h>
 #include <netinet/in_systm.h>
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
@@ -585,9 +583,6 @@ ena_setup_tx_resources(struct ena_adapter *adapter, in
 	struct ena_que *que = &adapter->que[qid];
 	struct ena_ring *tx_ring = que->tx_ring;
 	int size, i, err;
-#ifdef	RSS
-	cpuset_t cpu_mask;
-#endif
 
 	size = sizeof(struct ena_tx_buffer) * tx_ring->ring_size;
 
@@ -638,16 +633,8 @@ ena_setup_tx_resources(struct ena_adapter *adapter, in
 		goto err_buf_info_unmap;
 	}
 
-	/* RSS set cpu for thread */
-#ifdef RSS
-	CPU_SETOF(que->cpu, &cpu_mask);
-	taskqueue_start_threads_cpuset(&tx_ring->enqueue_tq, 1, PI_NET,
-	    &cpu_mask, "%s tx_ring enq (bucket %d)",
-	    device_get_nameunit(adapter->pdev), que->cpu);
-#else /* RSS */
 	taskqueue_start_threads(&tx_ring->enqueue_tq, 1, PI_NET,
 	    "%s txeq %d", device_get_nameunit(adapter->pdev), que->cpu);
-#endif /* RSS */
 
 	return (0);
 
@@ -780,9 +767,6 @@ ena_setup_rx_resources(struct ena_adapter *adapter, un
 	struct ena_que *que = &adapter->que[qid];
 	struct ena_ring *rx_ring = que->rx_ring;
 	int size, err, i;
-#ifdef	RSS
-	cpuset_t cpu_mask;
-#endif
 
 	size = sizeof(struct ena_rx_buffer) * rx_ring->ring_size;
 
@@ -836,16 +820,8 @@ ena_setup_rx_resources(struct ena_adapter *adapter, un
 	rx_ring->cmpl_tq = taskqueue_create_fast("ena RX completion", M_WAITOK,
 	    taskqueue_thread_enqueue, &rx_ring->cmpl_tq);
 
-	/* RSS set cpu for thread */
-#ifdef RSS
-	CPU_SETOF(que->cpu, &cpu_mask);
-	taskqueue_start_threads_cpuset(&rx_ring->cmpl_tq, 1, PI_NET, &cpu_mask,
-	    "%s rx_ring cmpl (bucket %d)",
-	    device_get_nameunit(adapter->pdev), que->cpu);
-#else
 	taskqueue_start_threads(&rx_ring->cmpl_tq, 1, PI_NET,
 	    "%s rx_ring cmpl %d", device_get_nameunit(adapter->pdev), que->cpu);
-#endif
 
 	return (0);
 
@@ -1908,12 +1884,9 @@ ena_setup_io_intr(struct ena_adapter *adapter)
 		    adapter->msix_entries[irq_idx].vector;
 		ena_trace(ENA_INFO | ENA_IOQ, "ena_setup_io_intr vector: %d\n",
 		    adapter->msix_entries[irq_idx].vector);
-#ifdef	RSS
-		adapter->que[i].cpu = adapter->irq_tbl[irq_idx].cpu =
-		    rss_getcpu(i % rss_getnumbuckets());
-#else
+
 		/*
-		 * We still want to bind rings to the corresponding cpu
+		 * We want to bind rings to the corresponding cpu
 		 * using something similar to the RSS round-robin technique.
 		 */
 		if (unlikely(last_bind_cpu < 0))
@@ -1921,7 +1894,6 @@ ena_setup_io_intr(struct ena_adapter *adapter)
 		adapter->que[i].cpu = adapter->irq_tbl[irq_idx].cpu =
 		    last_bind_cpu;
 		last_bind_cpu = CPU_NEXT(last_bind_cpu);
-#endif
 	}
 }
 
@@ -2010,13 +1982,8 @@ ena_request_io_irq(struct ena_adapter *adapter)
 		}
 		irq->requested = true;
 
-#ifdef	RSS
-		ena_trace(ENA_INFO, "queue %d - RSS bucket %d\n",
-		    i - ENA_IO_IRQ_FIRST_IDX, irq->cpu);
-#else
 		ena_trace(ENA_INFO, "queue %d - cpu %d\n",
 		    i - ENA_IO_IRQ_FIRST_IDX, irq->cpu);
-#endif
 	}
 
 	return (rc);
@@ -2952,16 +2919,7 @@ ena_mq_start(if_t ifp, struct mbuf *m)
 	 * It should improve performance.
 	 */
 	if (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE) {
-#ifdef	RSS
-		if (rss_hash2bucket(m->m_pkthdr.flowid,
-		    M_HASHTYPE_GET(m), &i) == 0) {
-			i = i % adapter->num_queues;
-
-		} else
-#endif
-		{
-			i = m->m_pkthdr.flowid % adapter->num_queues;
-		}
+		i = m->m_pkthdr.flowid % adapter->num_queues;
 	} else {
 		i = curcpu % adapter->num_queues;
 	}
@@ -3017,9 +2975,6 @@ ena_calc_io_queue_num(struct ena_adapter *adapter,
 	/* 1 IRQ for for mgmnt and 1 IRQ for each TX/RX pair */
 	io_queue_num = min_t(int, io_queue_num,
 	    pci_msix_count(adapter->pdev) - 1);
-#ifdef	RSS
-	io_queue_num = min_t(int, io_queue_num, rss_getnumbuckets());
-#endif
 
 	return (io_queue_num);
 }
@@ -3077,12 +3032,7 @@ ena_rss_init_default(struct ena_adapter *adapter)
 	}
 
 	for (i = 0; i < ENA_RX_RSS_TABLE_SIZE; i++) {
-#ifdef	RSS
-		qid = rss_get_indirection_to_bucket(i);
-		qid = qid % adapter->num_queues;
-#else
 		qid = i % adapter->num_queues;
-#endif
 		rc = ena_com_indirect_table_fill_entry(ena_dev, i,
 		    ENA_IO_RXQ_IDX(qid));
 		if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) {


More information about the svn-src-all mailing list