svn commit: r361063 - stable/11/sys/net

Eric Joyner erj at FreeBSD.org
Thu May 14 21:59:24 UTC 2020


Author: erj
Date: Thu May 14 21:59:23 2020
New Revision: 361063
URL: https://svnweb.freebsd.org/changeset/base/361063

Log:
  Partially MFC r354344: iflib: properly release memory allocated for DMA
  
  This also removes the unused function iflib_deregister(); accidentally
  introduced in a previous MFC.
  
  Sponsored by:	Intel Corporation

Modified:
  stable/11/sys/net/iflib.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/net/iflib.c
==============================================================================
--- stable/11/sys/net/iflib.c	Thu May 14 21:46:12 2020	(r361062)
+++ stable/11/sys/net/iflib.c	Thu May 14 21:59:23 2020	(r361063)
@@ -731,7 +731,6 @@ static int iflib_legacy_setup(if_ctx_t ctx, driver_fil
 static void iflib_txq_check_drain(iflib_txq_t txq, int budget);
 static uint32_t iflib_txq_can_drain(struct ifmp_ring *);
 static int iflib_register(if_ctx_t);
-static void iflib_deregister(if_ctx_t);
 static void iflib_unregister_vlan_handlers(if_ctx_t ctx);
 static void iflib_init_locked(if_ctx_t ctx);
 static void iflib_add_device_sysctl_pre(if_ctx_t ctx);
@@ -1596,10 +1595,8 @@ iflib_txsd_destroy(if_ctx_t ctx, iflib_txq_t txq, int 
 {
 	bus_dmamap_t map;
 
-	map = NULL;
-	if (txq->ift_sds.ifsd_map != NULL)
+	if (txq->ift_sds.ifsd_map != NULL) {
 		map = txq->ift_sds.ifsd_map[i];
-	if (map != NULL) {
 		bus_dmamap_unload(txq->ift_desc_tag, map);
 		bus_dmamap_destroy(txq->ift_desc_tag, map);
 		txq->ift_sds.ifsd_map[i] = NULL;
@@ -2008,9 +2005,6 @@ iflib_fl_bufs_free(iflib_fl_t fl)
 			if (fl->ifl_sds.ifsd_map != NULL) {
 				bus_dmamap_t sd_map = fl->ifl_sds.ifsd_map[i];
 				bus_dmamap_unload(fl->ifl_desc_tag, sd_map);
-				// XXX: Should this get moved out?
-				if (iflib_in_detach(fl->ifl_rxq->ifr_ctx))
-					bus_dmamap_destroy(fl->ifl_desc_tag, sd_map);
 			}
 			if (*sd_m != NULL) {
 				m_init(*sd_m, M_NOWAIT, MT_DATA, 0);
@@ -4856,29 +4850,6 @@ iflib_unregister_vlan_handlers(if_ctx_t ctx)
 
 }
 
-static void
-iflib_deregister(if_ctx_t ctx)
-{
-	if_t ifp = ctx->ifc_ifp;
-
-	/* Remove all media */
-	ifmedia_removeall(&ctx->ifc_media);
-
-	/* Ensure that VLAN event handlers are unregistered */
-	iflib_unregister_vlan_handlers(ctx);
-
-	/* Release kobject reference */
-	kobj_delete((kobj_t) ctx, NULL);
-
-	/* Free the ifnet structure */
-	if_free(ifp);
-
-	STATE_LOCK_DESTROY(ctx);
-
-	/* ether_ifdetach calls if_qflush - lock must be destroy afterwards*/
-	CTX_LOCK_DESTROY(ctx);
-}
-
 static int
 iflib_queues_alloc(if_ctx_t ctx)
 {
@@ -5173,8 +5144,12 @@ static void
 iflib_rx_structures_free(if_ctx_t ctx)
 {
 	iflib_rxq_t rxq = ctx->ifc_rxqs;
+	if_shared_ctx_t sctx = ctx->ifc_sctx;
+	int i, j;
 
-	for (int i = 0; i < ctx->ifc_softc_ctx.isc_nrxqsets; i++, rxq++) {
+	for (i = 0; i < ctx->ifc_softc_ctx.isc_nrxqsets; i++, rxq++) {
+		for (j = 0; j < sctx->isc_nrxqs; j++)
+			iflib_dma_free(&rxq->ifr_ifdi[j]);
 		iflib_rx_sds_free(rxq);
 	}
 	free(ctx->ifc_rxqs, M_IFLIB);


More information about the svn-src-all mailing list