From nobody Fri Mar 17 05:48:41 2023 X-Original-To: dev-commits-src-branches@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 4PdCqG0wfxz407dv; Fri, 17 Mar 2023 05:48:42 +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 4PdCqF65h9z41PK; Fri, 17 Mar 2023 05:48:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679032121; 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=C6ito8DSvucL0hFf0ftHCcR25Qfla5UKO82XD0MyYio=; b=SBfNLiZGmYxb5qZrljXjEH+QzAIA3Xk6et9mO1XcnFpYDL4QMV4bVPoUJyFLj4OVPUbog6 urT2iJkSDBSNLEJ3TZ+cbqk7Eq6/I81c1pwgUv7+ZdEXm+XsXpbDfFlh3qyA7WUbUgE6t6 8znCLYdUjcW/3ZV+xSKB5LZ/lhy8k+OvqtZyNDg/Yc2jyOvHuE+trLXBxwOm2BPXL0ldsm trPkzNNi9MQt92UIVsFimG2oAkD5G6EKzjjQxWwRw+yFv5E+0/6N2ogFqik6qPkymWL0aP tcOkYAVKkLlet2M2Q8AP6TouucxovTR1+Xtz3gTF/yB+0ETrI2LBJSy7yXKZag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679032121; 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=C6ito8DSvucL0hFf0ftHCcR25Qfla5UKO82XD0MyYio=; b=EyxqIOaphghdTUrElXCY1UAlqXuLNrewM8S4jGpLxzHaZgEaKF8SjMEIBNW1thJtErhA9d V75Gob+7vXrAwIPAXmwLPKgu8UPs1tNZ6XYXS0Ol+WoGRzVSkZq166VGcogZLhbL2lFGeY 1P2HvDo92SEbkTtvUU8I3ToSNxCBpBcJHqdQRt2Z4AHT0uzrhJ1AdRvjW+Nk2KOdo7su3K tthcZXsJtneDyGBBt1UownHPelDx8/m0J8b3ozvPstaRthTG09KeT52aseHC2zO8xYNbo8 QVwJKFm1sv7R3yn3eG0mRWyktl4vtYLRWGeh7qpMD4vR4loW8IP7wP7/qYmgQg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1679032121; a=rsa-sha256; cv=none; b=rGly/qyfXud7bQCVgUvoLuLc8yobqTk2wpJUzrNp6+Prd4avrXgzLAx60ceRdJk0VOiV6j gzEC+wlW4cncXjjNs+1Yalr+tW0045kxKHLndacet+W0QNWvedkVRf6OrQl3GSg2W2PscB /bSf+h3NWRNHFlkMQoz1Wo5ipoJsO6Wlf6pg+xC4oRcE9ZRuJL6VEsfkEBlwD1BKu7rtJr eIA02G5UPubsVlbaZRoDQ70bfrrpKvFVPxJSaD3r3khCd0SMgu8szrdgXOSNAHDAPz+iOp O2Wcd/wmscz/D892kLsU1r4IizfpdxRhJn7yhU83CA2mzUPKH9grLQS1zwTU+g== 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 4PdCqF5CPvz1CpM; Fri, 17 Mar 2023 05:48:41 +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 32H5mfpS006372; Fri, 17 Mar 2023 05:48:41 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 32H5mfj3006371; Fri, 17 Mar 2023 05:48:41 GMT (envelope-from git) Date: Fri, 17 Mar 2023 05:48:41 GMT Message-Id: <202303170548.32H5mfj3006371@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kyle Evans Subject: git: 1e6d266d70e9 - stable/13 - kern: physmem: don't create a new exregion for different flags... List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 1e6d266d70e969c87f5da229cc82b3d53ae7c2a5 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=1e6d266d70e969c87f5da229cc82b3d53ae7c2a5 commit 1e6d266d70e969c87f5da229cc82b3d53ae7c2a5 Author: Kyle Evans AuthorDate: 2023-03-10 05:27:39 +0000 Commit: Kyle Evans CommitDate: 2023-03-17 05:04:22 +0000 kern: physmem: don't create a new exregion for different flags... ... if the region we're adding is an exact match to one that we already have. Simply extend the flags of the existing entry as needed so that we don't end up with duplicate regions. It could be that we got the exclusion through two different means, e.g., FDT memreserve and the EFI memory map, and we may derive different characteristics from each. Apply the most restrictive set to the region. Reported by: Mark Millard Reviewed by: mhorne (cherry picked from commit cc0fe048ec39636216ed59fa47eb311b2537cfc5) --- sys/kern/subr_physmem.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sys/kern/subr_physmem.c b/sys/kern/subr_physmem.c index 7cb45621a155..450b891cb8a1 100644 --- a/sys/kern/subr_physmem.c +++ b/sys/kern/subr_physmem.c @@ -372,8 +372,8 @@ insert_region(struct region *regions, size_t rcnt, vm_paddr_t addr, nend = addr + size; ep = regions + rcnt; for (i = 0, rp = regions; i < rcnt; ++i, ++rp) { + rend = rp->addr + rp->size; if (flags == rp->flags) { - rend = rp->addr + rp->size; if (addr <= rp->addr && nend >= rp->addr) { /* * New mapping overlaps at the beginning, shift @@ -400,7 +400,20 @@ insert_region(struct region *regions, size_t rcnt, vm_paddr_t addr, } return (rcnt); } + } else if ((flags != 0) && (rp->flags != 0)) { + /* + * If we're duplicating an entry that already exists + * exactly, just upgrade its flags as needed. We could + * do more if we find that we have differently specified + * flags clipping existing excluding regions, but that's + * probably rare. + */ + if (addr == rp->addr && nend == rend) { + rp->flags |= flags; + return (rcnt); + } } + if (addr < rp->addr) { bcopy(rp, rp + 1, (ep - rp) * sizeof(*rp)); break;