socsvn commit: r305045 - soc2016/vincenzo/head/sys/dev/netmap

vincenzo at FreeBSD.org vincenzo at FreeBSD.org
Fri Jun 10 13:15:10 UTC 2016


Author: vincenzo
Date: Fri Jun 10 13:15:09 2016
New Revision: 305045
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305045

Log:
   freebsd: ptnet_irqs_init: check for MSI-X capability

Modified:
  soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c

Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c
==============================================================================
--- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Fri Jun 10 13:14:57 2016	(r305044)
+++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Fri Jun 10 13:15:09 2016	(r305045)
@@ -475,6 +475,11 @@
 
 	num_tx_rings = bus_read_4(sc->iomem, PTNET_IO_NUM_TX_RINGS);
 
+	if (pci_find_cap(dev, PCIY_MSIX, NULL) != 0)  {
+		device_printf(dev, "Could not find MSI-X capability\n");
+		return (ENXIO);
+	}
+
 	sc->msix_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
 					      &rid, RF_ACTIVE);
 	if (sc->msix_mem == NULL) {
@@ -495,12 +500,8 @@
 
 	for (i = 0; i < nvecs; i++) {
 		struct ptnet_queue *pq = sc->queues + i;
-		void (*handler)(void *) = ptnet_tx_intr;
-		int rid = i + i;
 
-		if (i > num_tx_rings) {
-			handler = ptnet_rx_intr;
-		}
+		rid = i + i;
 		pq->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
 						 RF_ACTIVE);
 		if (pq->irq == NULL) {
@@ -509,7 +510,15 @@
 			err = ENOSPC;
 			goto err_path;
 		}
+	}
 
+	for (i = 0; i < nvecs; i++) {
+		struct ptnet_queue *pq = sc->queues + i;
+		void (*handler)(void *) = ptnet_tx_intr;
+
+		if (i > num_tx_rings) {
+			handler = ptnet_rx_intr;
+		}
 		err = bus_setup_intr(dev, pq->irq, INTR_TYPE_NET | INTR_MPSAFE,
 				     NULL /* intr_filter */, handler,
 				     pq, &pq->cookie);


More information about the svn-soc-all mailing list