From nobody Fri Jun 10 19:02:11 2022 X-Original-To: dev-commits-src-main@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 E9D3C841057; Fri, 10 Jun 2022 19:02:11 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LKVh36KwHz4r8w; Fri, 10 Jun 2022 19:02:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654887731; 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=Kdh4MN+ayEZR/bjVndeaHYTNNRjTTnqmkt2CAFGQXBU=; b=xUTofM7rajcQy2jyWuOZQZzLMmxUmBP9irTBZdK+VCCbwui9fOa3bvUy8T/8hWKjfWdnsW T3lRXuqT919aVdpSul1JrwgDSm+zihbphSRbhX0Ywb2GPrZoK3eVtqgrkcUdrAcJRdN7Ln N9jrSwbAC2k9p6QBWZs6PPlKoU+W60eC9E0FrAQzPxP6rg4py2cSiOyQhmRqyB1Ewz2v29 PXrvtwW52z3TG1wRjvSj0in4vQJuBxEB3+CHmAPiyfOiirw0O+61qf701+xEXxS70J0cvG NyMQRZKNKKVqC09ofQLJMrxmneD43cXLNGew3zSX/lOd4mMH2RlYa1880V+JdA== 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 B94C91E293; Fri, 10 Jun 2022 19:02:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 25AJ2BfO053862; Fri, 10 Jun 2022 19:02:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 25AJ2BSG053861; Fri, 10 Jun 2022 19:02:11 GMT (envelope-from git) Date: Fri, 10 Jun 2022 19:02:11 GMT Message-Id: <202206101902.25AJ2BSG053861@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Doug Moore Subject: git: 19bb5a7244ff - main - iommu_gas: pass size to iommu_map without rounding List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dougm X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 19bb5a7244ff0374f44068a20df9393a1c88de5d Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654887731; 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=Kdh4MN+ayEZR/bjVndeaHYTNNRjTTnqmkt2CAFGQXBU=; b=DYNplwT1lDxKi/YdhTtSplyoGeuH0x3EUTQ3u09oKsNQJhvGzGNAA29WYNGYqeg+92VnQm Nem6qZu8y9OyTr3NwGZQh0Kr+5KAbBkjASXB51hmkP1HK4OWFL601V7cyIYRDgxylvVwKK BqaJEIe94ip4qaqw623hsW8TsOcNpHVN/Lw8bjdXNOeUwWmQYeIUyqf8vi2ptnNB+siArZ fvJc0azVJMzOe6aLotNiI7V05WlbgfDRIeBTK8EEO4ng57Dri6WS231GRAtk675sr48Rev XWFA71y17EJhHYUW/SQpUP1ZOhqlGZLoMAwOx3ZuYd64K2BaptNJFn6wIb+Gkg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1654887731; a=rsa-sha256; cv=none; b=pfF/XG3SG1zqwUIphpxXX9auKydv+Ns/1bUee1qhMgdoaQE3j44Ia2UYtUlFeaTcmMV6Tf /GNt5F+Y0PJfz/cH4u3yT8ROyPhtCOk17WXdu/e8X8TxLkkwVgn14HYjSvOKCTXovu9SBW MA6geIp+xpppu0UZ+8pvEz3dZyux2XUgo9AqNvM/SLW99zCa+GikebssTjwprRQ+/z57oo CHo6iEXYIxfJqO9PJPHaxr90PCSa/hZHw9+VFfFxFlOjW5RIYxzwChIFkAojH5SbtFrEvG Af93q4aB9vznWYEKCTExy4QowU1AAidpxQpup76lq5j0UbMBls6ToLDEoU71TQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=19bb5a7244ff0374f44068a20df9393a1c88de5d commit 19bb5a7244ff0374f44068a20df9393a1c88de5d Author: Doug Moore AuthorDate: 2022-06-10 18:56:54 +0000 Commit: Doug Moore CommitDate: 2022-06-10 18:56:54 +0000 iommu_gas: pass size to iommu_map without rounding Let the caller to iommu_map pass the size parameter without rounding it up to a multiple of page size. Let iommu_map round it up when necessary, which is not all of the time, so that in some cases less space is reserved. Reviewed by: alc, kib (previous version) Tested by: pho, br Discussed with: andrew MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D35424 --- sys/arm64/arm64/gicv3_its.c | 3 ++- sys/dev/iommu/busdma_iommu.c | 3 +-- sys/dev/iommu/iommu_gas.c | 10 ++++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/sys/arm64/arm64/gicv3_its.c b/sys/arm64/arm64/gicv3_its.c index 40e42bc5214e..9638046f4f1e 100644 --- a/sys/arm64/arm64/gicv3_its.c +++ b/sys/arm64/arm64/gicv3_its.c @@ -1483,7 +1483,8 @@ gicv3_iommu_init(device_t dev, device_t child, struct iommu_domain **domain) ctx = iommu_get_dev_ctx(child); if (ctx == NULL) return (ENXIO); - error = iommu_map_msi(ctx, PAGE_SIZE, GITS_TRANSLATER, + /* Map the page containing the GITS_TRANSLATER register. */ + error = iommu_map_msi(ctx, PAGE_SIZE, 0, IOMMU_MAP_ENTRY_WRITE, IOMMU_MF_CANWAIT, &sc->ma); *domain = iommu_get_ctx_domain(ctx); diff --git a/sys/dev/iommu/busdma_iommu.c b/sys/dev/iommu/busdma_iommu.c index ad638e293324..e06d96dad027 100644 --- a/sys/dev/iommu/busdma_iommu.c +++ b/sys/dev/iommu/busdma_iommu.c @@ -594,8 +594,7 @@ iommu_bus_dmamap_load_something1(struct bus_dma_tag_iommu *tag, if (seg + 1 < tag->common.nsegments) gas_flags |= IOMMU_MF_CANSPLIT; - error = iommu_map(domain, &tag->common, - round_page(offset + buflen1), + error = iommu_map(domain, &tag->common, buflen1, offset, e_flags, gas_flags, ma + idx, &entry); if (error != 0) break; diff --git a/sys/dev/iommu/iommu_gas.c b/sys/dev/iommu/iommu_gas.c index 5b589e999926..221b404f2a45 100644 --- a/sys/dev/iommu/iommu_gas.c +++ b/sys/dev/iommu/iommu_gas.c @@ -364,7 +364,8 @@ iommu_gas_match_insert(struct iommu_gas_match_args *a) * The page sized gap is created between consequent * allocations to ensure that out-of-bounds accesses fault. */ - a->entry->end = a->entry->start + a->size; + a->entry->end = a->entry->start + + roundup2(a->size + a->offset, IOMMU_PAGE_SIZE); found = iommu_gas_rb_insert(a->domain, a->entry); KASSERT(found, ("found dup %p start %jx size %jx", @@ -381,7 +382,8 @@ iommu_gas_lowermatch(struct iommu_gas_match_args *a, struct iommu_map_entry *ent * If the subtree doesn't have free space for the requested allocation * plus two guard pages, give up. */ - if (entry->free_down < a->size + a->offset + 2 * IOMMU_PAGE_SIZE) + if (entry->free_down < 2 * IOMMU_PAGE_SIZE + + roundup2(a->size + a->offset, IOMMU_PAGE_SIZE)) return (ENOMEM); if (entry->first >= a->common->lowaddr) return (ENOMEM); @@ -415,7 +417,8 @@ iommu_gas_uppermatch(struct iommu_gas_match_args *a, struct iommu_map_entry *ent * If the subtree doesn't have free space for the requested allocation * plus two guard pages, give up. */ - if (entry->free_down < a->size + a->offset + 2 * IOMMU_PAGE_SIZE) + if (entry->free_down < 2 * IOMMU_PAGE_SIZE + + roundup2(a->size + a->offset, IOMMU_PAGE_SIZE)) return (ENOMEM); if (entry->last < a->common->highaddr) return (ENOMEM); @@ -450,7 +453,6 @@ iommu_gas_find_space(struct iommu_domain *domain, IOMMU_DOMAIN_ASSERT_LOCKED(domain); KASSERT(entry->flags == 0, ("dirty entry %p %p", domain, entry)); - KASSERT((size & IOMMU_PAGE_MASK) == 0, ("size %jx", (uintmax_t)size)); a.domain = domain; a.size = size;