From nobody Sat Mar 8 08:13:50 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Z8wsW00Jcz5qd1h; Sat, 08 Mar 2025 08:13:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z8wsV41zRz3kXX; Sat, 08 Mar 2025 08:13:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741421630; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=fxPOBOxnD3NR+F45MElZyyL+5tPFKPDdUgUk9jDQxio=; b=Bo2XIan9Yo8MAajKjxOUDbjy1lW5JmpknLUc/PJWBWba6v7WWCxc8kobbclnqLkvWX1q9V 6pMyJCMtL1cj8XebnBwXTaOjCTRloGj/6NY/jC4T0/88Hy6SjoIYnBD4Ta2k86cqg/5Odg irSXhv3knx2a25lqy5zrVn5SOQXYCNrZGABrm49S5dzmZG9E69bXOfTvA6qRU/9IrsUESe awipYhseYkDEYNNxX37/GaERTDoePWbGghu0SVvGt5oTq8fF9YVWqoaksXMEegQwMEXTZT EhjJDzjtu3TfYLpcAddS2uopslTq5BgLFsxD7ufV6e4z9XtpRn84nJ76+y0zAQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1741421630; a=rsa-sha256; cv=none; b=Mnl0sobmfuoKSrJV8Q5ZKBidh4TWCJ7VoMq6dOb589L5YEk22cU0KcFWywSF9GdwduXhhR 8hBC0iQspRPMtb3m4B8zI2ZR8/QkJwXZija1xESAkuVfsQ8SWCqe/soFQZNwtH1GgNGaYc s0opM/A5owwCltm6jQbP5TXCK/NLN6PgIBYdXD/2zNUjemwmRM4JiCrSjrvpyqX4Pi/Duq nMSJuo06EstQvQqmMaLpfxRE5f3727Kut51zUb6QRPEJgV/UOuLHwZU3wc0XZmKvnzJx29 fv2isKRu+RO6QkoFhBLRF5cpgkThRvj1EZ1OOKZaLpgyMupRYh69YdexFlJtLA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741421630; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=fxPOBOxnD3NR+F45MElZyyL+5tPFKPDdUgUk9jDQxio=; b=NhUsyBWwc8Gzvzbc41bkfCT1rwMCwaJh5Hjw2GG7UwnflT1cJG0XmEk2p0+Ctr4euCkyeW UdVJ1B2uW19CIy9lbpYkWTxgkaVhnro2ilGyQ+4Bxh3wDLiTCqiuv8TipxcC7A3YXCB99b lSEqTneKtEMYlti2k5wl6XOWoK//YT2sW9fltf6TtuLG5yvChhMvMqFGbS6ZtCFVy92MO7 WKCyjbQVIc5FSS6ggx+x7gXToy7ZSGDJJ73ZvU5zeqA9PaWDlgub1OpNEgFwMc+C39KZ2x E7RbytRLPiHRdmCHVFXhe+pt/Zk770saiZKJt/o2T3JiwGv1gDY6EpdyJJ+mGg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Z8wsV3ZGXzjC; Sat, 08 Mar 2025 08:13:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 5288Doxb097428; Sat, 8 Mar 2025 08:13:50 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 5288Dojq097424; Sat, 8 Mar 2025 08:13:50 GMT (envelope-from git) Date: Sat, 8 Mar 2025 08:13:50 GMT Message-Id: <202503080813.5288Dojq097424@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Mark Johnston Subject: git: 65f5027e38eb - stable/14 - gve: Fix memory leak during reset List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 65f5027e38eb706558df634acaf54a94c0ff697f Auto-Submitted: auto-generated The branch stable/14 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=65f5027e38eb706558df634acaf54a94c0ff697f commit 65f5027e38eb706558df634acaf54a94c0ff697f Author: Jasper Tran O'Leary AuthorDate: 2025-02-14 15:02:41 +0000 Commit: Mark Johnston CommitDate: 2025-03-07 22:51:48 +0000 gve: Fix memory leak during reset Before this change, during reset we were allocating new memory for priv->ptype_lut_dqo, irq_db_array and the counter_array over the old memory. This change ensures we do not allocate new memory during reset and avoid memory leaks. Signed-off-by: Vee Agarwal Signed-off-by: Jasper Tran O'Leary Reviewed by: delphij, markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D48970 (cherry picked from commit 62b2d0c3f4add3bb87081a96412056e17eed31ea) --- sys/dev/gve/gve_main.c | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/sys/dev/gve/gve_main.c b/sys/dev/gve/gve_main.c index c726177c199c..aa0866c5984b 100644 --- a/sys/dev/gve/gve_main.c +++ b/sys/dev/gve/gve_main.c @@ -517,7 +517,7 @@ abort: } static void -gve_deconfigure_resources(struct gve_priv *priv) +gve_deconfigure_and_free_device_resources(struct gve_priv *priv) { int err; @@ -543,7 +543,7 @@ gve_deconfigure_resources(struct gve_priv *priv) } static int -gve_configure_resources(struct gve_priv *priv) +gve_alloc_and_configure_device_resources(struct gve_priv *priv) { int err; @@ -584,7 +584,7 @@ gve_configure_resources(struct gve_priv *priv) return (0); abort: - gve_deconfigure_resources(priv); + gve_deconfigure_and_free_device_resources(priv); return (err); } @@ -649,7 +649,7 @@ static void gve_destroy(struct gve_priv *priv) { gve_down(priv); - gve_deconfigure_resources(priv); + gve_deconfigure_and_free_device_resources(priv); gve_release_adminq(priv); } @@ -662,9 +662,21 @@ gve_restore(struct gve_priv *priv) if (err != 0) goto abort; - err = gve_configure_resources(priv); - if (err != 0) + err = gve_adminq_configure_device_resources(priv); + if (err != 0) { + device_printf(priv->dev, "Failed to configure device resources: err=%d\n", + err); + err = (ENXIO); goto abort; + } + if (!gve_is_gqi(priv)) { + err = gve_adminq_get_ptype_map_dqo(priv, priv->ptype_lut_dqo); + if (err != 0) { + device_printf(priv->dev, "Failed to configure ptype lut: err=%d\n", + err); + goto abort; + } + } err = gve_up(priv); if (err != 0) @@ -677,6 +689,25 @@ abort: return; } +static void +gve_clear_device_resources(struct gve_priv *priv) +{ + int i; + + for (i = 0; i < priv->num_event_counters; i++) + priv->counters[i] = 0; + bus_dmamap_sync(priv->counter_array_mem.tag, priv->counter_array_mem.map, + BUS_DMASYNC_PREWRITE); + + for (i = 0; i < priv->num_queues; i++) + priv->irq_db_indices[i] = (struct gve_irq_db){}; + bus_dmamap_sync(priv->irqs_db_mem.tag, priv->irqs_db_mem.map, + BUS_DMASYNC_PREWRITE); + + if (priv->ptype_lut_dqo) + *priv->ptype_lut_dqo = (struct gve_ptype_lut){0}; +} + static void gve_handle_reset(struct gve_priv *priv) { @@ -708,6 +739,8 @@ gve_handle_reset(struct gve_priv *priv) gve_clear_state_flag(priv, GVE_STATE_FLAG_TX_RINGS_OK); gve_down(priv); + gve_clear_device_resources(priv); + gve_restore(priv); GVE_IFACE_LOCK_UNLOCK(priv->gve_iface_lock); @@ -835,7 +868,7 @@ gve_attach(device_t dev) if (err != 0) goto abort; - err = gve_configure_resources(priv); + err = gve_alloc_and_configure_device_resources(priv); if (err != 0) goto abort; @@ -864,7 +897,7 @@ gve_attach(device_t dev) abort: gve_free_rings(priv); - gve_deconfigure_resources(priv); + gve_deconfigure_and_free_device_resources(priv); gve_release_adminq(priv); gve_free_sys_res_mem(priv); GVE_IFACE_LOCK_DESTROY(priv->gve_iface_lock);