From nobody Fri May 1 21:15:23 2026 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 4g6kMv6sb4z6cJpJ for ; Fri, 01 May 2026 21:15:23 +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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g6kMv4FTqz3r6k for ; Fri, 01 May 2026 21:15:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777670123; 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=rqN7NqeTSuqaSIcDQ2wbFtW8J4u3RDKytQV3DGhzzw4=; b=gXJ7R39MF34Fmv/EHlwv44FflqPG8bWQrtoD4xWrqaE1yJs7UV0XqB9S1ME6jJlluVyVeT 4hs/L3igHHqooOGjBHB8N97ERiLe7HQjcoVr/tCDuVwTUWjOsLwTCZTjwFaN9yUniW/eUr /bJ2OSWYVV9TPIRL7IQFYBTBbAjTkG6Huy0vkZayoskb6+ZQH/ds4zPLX0yt0+7tfB8DVx bAvcQucjWsYpBzD1jmKXYLftbVhU257smH+CINJw4GXkt+QMXrG1graavW5N2k6AJHVQWL 3WkxycwjIPvOx/vgyenaW5HShOGIr4Z8lTyGMq9DZwhVe5qSvtccrhAoEhS2dw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777670123; a=rsa-sha256; cv=none; b=yysLvHBOfMSrj62PWmNhZ86pruRnFysCnPbmb5/+OQp3PPHHidoX1v99D+cAXhEhDh7GJu CxwURJna4sWBf/yYNQHQ5SnmCAqyinpb9VCPs8geEEClDvDqumefHPC75B6jC/5nY27I+Z UkGwd1Wx4W3FlUjzExyCOcE4TlHSo78caTWnKdY6KY5WlWyNylZtM0Ay/R7RDctoBphPnH qJ7Mi6aCVC9GKKPy6nW3003b+OfEXFa2j0bb9xLTjGLdrF6p/rVAnnSoYDNLQHbaYwiLDg NdV9ygz6hzHlk2wYIpAZNQTQc83Rz5Y6ttS8QQ+h4BCzHkwVJpGSKmuKuV6Ugw== 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=1777670123; 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=rqN7NqeTSuqaSIcDQ2wbFtW8J4u3RDKytQV3DGhzzw4=; b=u86HnWhUX+D7dfEDUAgt5y9V+a2IJC8An4rJZixpQuXjqO/ItW7nM2Y1nHvjCGIKAk8Jdq K25B4ks9eh0bKmOn09QvwhQ0+LQ/QfUW69KEwgeDm9iBtvoX4l6bqZ/8cOh1iYx0NNW8Bt QJZJHvbCxrZ7skqF7yxxlidr25IjCv+1dV2TyEj9z+R1Bv/aKu7jjg2H+4hM1I92ZnFqPm hsyM+IwR75WuSSFEIg5QAIx5UNK8DgVG6I0QJtqSU/ZszQ5R9yzuRah1Es5UhAnEQV1NML ROqSmp7DEfNIvY/dpFXM/CFz1YrTozvZ9FCxlsXH3NKwX+NLXIyZWtEoFQ7m1w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g6kMv310Fz1CM for ; Fri, 01 May 2026 21:15:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 45bf1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 01 May 2026 21:15:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Adrian Chadd Subject: git: 0de6295af231 - main - powerpc: refactor dmamap setup; free dmamap in error paths 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: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0de6295af231aa5c13e1da2f40b29106962b6363 Auto-Submitted: auto-generated Date: Fri, 01 May 2026 21:15:23 +0000 Message-Id: <69f517eb.45bf1.69fb85c8@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=0de6295af231aa5c13e1da2f40b29106962b6363 commit 0de6295af231aa5c13e1da2f40b29106962b6363 Author: Adrian Chadd AuthorDate: 2026-04-01 05:21:15 +0000 Commit: Adrian Chadd CommitDate: 2026-05-01 21:15:06 +0000 powerpc: refactor dmamap setup; free dmamap in error paths * refactor the dmamap allocation / setup path for future code changes to align with arm64 busdma code; * free the dmamap allocation if the dma segment list can't be allocated; * free the dmamap allocation during the busdma dmamem allocation path if the actual memory allocation itself fails. Locally tested: * POWER9 ppc64le native boot, Raptor Engineering Blackbird * POWER8 ppc6le, IBM POWER S822LC https://reviews.freebsd.org/D56244 --- sys/powerpc/powerpc/busdma_bounce.c | 48 +++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/sys/powerpc/powerpc/busdma_bounce.c b/sys/powerpc/powerpc/busdma_bounce.c index 39e40b3a4284..b3f629a50472 100644 --- a/sys/powerpc/powerpc/busdma_bounce.c +++ b/sys/powerpc/powerpc/busdma_bounce.c @@ -246,6 +246,25 @@ out: return (error); } +static bus_dmamap_t +alloc_dmamap(bus_dma_tag_t dmat, int flags) +{ + u_long mapsize; + bus_dmamap_t map; + + mapsize = sizeof(*map); + /* TODO: sync_list */ + map = malloc_domainset(mapsize, M_DEVBUF, + DOMAINSET_PREF(dmat->common.domain), flags | M_ZERO); + if (map == NULL) + return (NULL); + + /* Initialize the new map */ + STAILQ_INIT(&map->bpages); + + return (map); +} + /* * Allocate a handle for mapping from kva/uva/physical * address space into bus device space. @@ -257,17 +276,13 @@ bounce_bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp) error = 0; - *mapp = (bus_dmamap_t)malloc(sizeof(**mapp), M_DEVBUF, - M_NOWAIT | M_ZERO); + *mapp = alloc_dmamap(dmat, M_NOWAIT); if (*mapp == NULL) { CTR3(KTR_BUSDMA, "%s: tag %p error %d", __func__, dmat, ENOMEM); return (ENOMEM); } - /* Initialize the new map */ - STAILQ_INIT(&((*mapp)->bpages)); - /* * Bouncing might be required if the driver asks for an active * exclusion region, a data alignment that is stricter than 1, and/or @@ -319,11 +334,16 @@ bounce_bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp) if ((*mapp)->segments == NULL) { CTR3(KTR_BUSDMA, "%s: tag %p error %d", __func__, dmat, ENOMEM); - return (ENOMEM); + error = ENOMEM; } - if (error == 0) + if (error == 0) { dmat->map_count++; + } else { + free((*mapp)->segments, M_DEVBUF); + free(*mapp, M_DEVBUF); + *mapp = NULL; + } CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->common.flags, error); return (error); @@ -369,7 +389,12 @@ bounce_bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, else mflags = M_WAITOK; - bus_dmamap_create(dmat, flags, mapp); + bounce_bus_dmamap_create(dmat, mflags, mapp); + if (*mapp == NULL) { + CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d\n", + __func__, dmat, dmat->common.flags, ENOMEM); + return (ENOMEM); + } if (flags & BUS_DMA_ZERO) mflags |= M_ZERO; @@ -406,6 +431,8 @@ bounce_bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, if (*vaddr == NULL) { CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->common.flags, ENOMEM); + bounce_bus_dmamap_destroy(dmat, *mapp); + *mapp = NULL; return (ENOMEM); } else if (!vm_addr_align_ok(vtophys(*vaddr), dmat->common.alignment)) { printf("bus_dmamem_alloc failed to align memory properly.\n"); @@ -427,8 +454,9 @@ bounce_bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map) free(vaddr, M_DEVBUF); else kmem_free(vaddr, dmat->common.maxsize); - bus_dmamap_destroy(dmat, map); - CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->common.flags); + bounce_bus_dmamap_destroy(dmat, map); + CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, + dmat->common.flags); } static void