Module Name:    src
Committed By:   jdolecek
Date:           Sun Nov  5 18:18:56 UTC 2023

Modified Files:
        src/sys/dev/pci: if_ena.c

Log Message:
ena(4) is MP-ready, always use MPSAFE

Code contributed by KUSABA Takeshi <t-kus...@iij.ad.jp>


To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 src/sys/dev/pci/if_ena.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/if_ena.c
diff -u src/sys/dev/pci/if_ena.c:1.36 src/sys/dev/pci/if_ena.c:1.37
--- src/sys/dev/pci/if_ena.c:1.36	Sun Nov  5 18:17:41 2023
+++ src/sys/dev/pci/if_ena.c	Sun Nov  5 18:18:56 2023
@@ -36,7 +36,7 @@
 #if 0
 __FBSDID("$FreeBSD: head/sys/dev/ena/ena.c 333456 2018-05-10 09:37:54Z mw $");
 #endif
-__KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1.36 2023/11/05 18:17:41 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1.37 2023/11/05 18:18:56 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -61,14 +61,6 @@ __KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1
 
 #include <dev/pci/if_enavar.h>
 
-#ifdef NET_MPSAFE
-#define	WQ_FLAGS	WQ_MPSAFE
-#define	CALLOUT_FLAGS	CALLOUT_MPSAFE
-#else
-#define	WQ_FLAGS	0
-#define	CALLOUT_FLAGS	0
-#endif
-
 /*********************************************************
  *  Function prototypes
  *********************************************************/
@@ -728,7 +720,7 @@ ena_setup_tx_resources(struct ena_adapte
 
 	/* Allocate workqueues */
 	int rc = workqueue_create(&tx_ring->enqueue_tq, "ena_tx_enq",
-	    ena_deferred_mq_start, tx_ring, 0, IPL_NET, WQ_PERCPU | WQ_FLAGS);
+	    ena_deferred_mq_start, tx_ring, 0, IPL_NET, WQ_PERCPU | WQ_MPSAFE);
 	if (unlikely(rc != 0)) {
 		ena_trace(ENA_ALERT,
 		    "Unable to create workqueue for enqueue task\n");
@@ -923,7 +915,7 @@ ena_setup_rx_resources(struct ena_adapte
 
 	/* Allocate workqueues */
 	int rc = workqueue_create(&rx_ring->cleanup_tq, "ena_rx_comp",
-	    ena_cleanup, que, 0, IPL_NET, WQ_PERCPU | WQ_FLAGS);
+	    ena_cleanup, que, 0, IPL_NET, WQ_PERCPU | WQ_MPSAFE);
 	if (unlikely(rc != 0)) {
 		ena_trace(ENA_ALERT,
 		    "Unable to create workqueue for RX completion task\n");
@@ -2013,6 +2005,9 @@ ena_request_mgmnt_irq(struct ena_adapter
 	KASSERT(adapter->sc_intrs != NULL);
 	KASSERT(adapter->sc_ihs[irq_slot] == NULL);
 
+	pci_intr_setattr(pc, &adapter->sc_intrs[irq_slot],
+	    PCI_INTR_MPSAFE, true);
+
 	snprintf(intr_xname, sizeof(intr_xname), "%s mgmnt",
 	    device_xname(adapter->pdev));
 	intrstr = pci_intr_string(pc, adapter->sc_intrs[irq_slot],
@@ -2058,6 +2053,9 @@ ena_request_io_irq(struct ena_adapter *a
 		KASSERT((void *)adapter->sc_intrs[irq_slot] != NULL);
 		KASSERT(adapter->sc_ihs[irq_slot] == NULL);
 
+		pci_intr_setattr(pc, &adapter->sc_intrs[irq_slot],
+		    PCI_INTR_MPSAFE, true);
+
 		snprintf(intr_xname, sizeof(intr_xname), "%s ioq%d",
 		    device_xname(adapter->pdev), i);
 		intrstr = pci_intr_string(pc, adapter->sc_intrs[irq_slot],
@@ -2552,6 +2550,7 @@ ena_setup_ifnet(device_t pdev, struct en
 	if_setsoftc(ifp, adapter);
 
 	if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
+	ifp->if_extflags = IFEF_MPSAFE;
 	if_setinitfn(ifp, ena_init);
 	ifp->if_stop = ena_stop;
 	if_settransmitfn(ifp, ena_mq_start);
@@ -3817,12 +3816,12 @@ ena_attach(device_t parent, device_t sel
 		goto err_ifp_free;
 	}
 
-	callout_init(&adapter->timer_service, CALLOUT_FLAGS);
+	callout_init(&adapter->timer_service, CALLOUT_MPSAFE);
 	callout_setfunc(&adapter->timer_service, ena_timer_service, adapter);
 
 	/* Initialize reset task queue */
 	rc = workqueue_create(&adapter->reset_tq, "ena_reset_enq",
-	    ena_reset_task, adapter, 0, IPL_NET, WQ_PERCPU | WQ_FLAGS);
+	    ena_reset_task, adapter, 0, IPL_NET, WQ_PERCPU | WQ_MPSAFE);
 	if (unlikely(rc != 0)) {
 		ena_trace(ENA_ALERT,
 		    "Unable to create workqueue for reset task\n");

Reply via email to