From nobody Mon Jul 11 05:41:24 2022 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 B70C61D0384A; Mon, 11 Jul 2022 05:41:24 +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 4LhCRm4vwsz406p; Mon, 11 Jul 2022 05:41:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1657518084; 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=enAG0Q6xT8L3dopUEfVpPpl0Z7ACcL4QKBGTmejCc8Y=; b=vSYhMPY08mYsVzW1f2tb9VBQpfVMh7j9PvQUCnfAHyr2rhupSLnnDm76zq1BVKcFViz5nh 23erIg+mhi5M5g7F+LP0k/7ntusKeQxt8lJc3ry7jV8SodIMRvkVPuJB1uIPA4exGORUmj nho8J7tDccLpjnIVG28+eJAWTPVtAUQVGy5elGS/rG5FMttYerlgRQVRTeCO6FqQ0BqWcV AM9k6N03QB5sOB4XqK/JWsItckWtgLJIFWojKSshkdxbmPkoWWPMBZG3O5+GhHj8+xrauQ 3o9lXFXPp3WuVsZplGrCTR6fYV50EAuA7fjCs6I8JVxm1H9HWK9Nef2GqFEDAg== 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 4LhCRm40YGzsj2; Mon, 11 Jul 2022 05:41:24 +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 26B5fOlW048578; Mon, 11 Jul 2022 05:41:24 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 26B5fOx6048577; Mon, 11 Jul 2022 05:41:24 GMT (envelope-from git) Date: Mon, 11 Jul 2022 05:41:24 GMT Message-Id: <202207110541.26B5fOx6048577@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Doug Moore Subject: git: a8d3ef5bc6de - stable/13 - vm_page: Remove extra test from page alloc 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: dougm X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: a8d3ef5bc6de9efb56132797558795d7918d4be9 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1657518084; 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=enAG0Q6xT8L3dopUEfVpPpl0Z7ACcL4QKBGTmejCc8Y=; b=Jo9aNMEEp1Uv648u2rflu3m+mSx2fzaJeF3LzGx0mIn2qwNn1rkoNb/CmlxYc7mbuFdhvr KTG1CIFxjCskspeTQOGdzmNUkPGLfhFDB1CyGDZrQqmGY1aa/bmBd+La/aqY2C99bYBLHK L0JJ94fFHKm+v4VrdDTbbxXwVxcL7LZxgwouFQ8R2D2A/Kq8muV5wX70ZbXw7HMxWW26Vg WBjpSHcB7u8oHGVAe0IiDsfgc84wb08QZAwBn+B1NrStvr5E8/hzrEYygZarapfGublfal mtuIJAZ0DI0CVAd+ScFVzbikGDgyQI8eKE2TLv9+b3jDOGPw0VWs06I8ykbojw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1657518084; a=rsa-sha256; cv=none; b=i05J+8/QVoONMyWB1jtNyegWPD0b7ibagxaTyFs1n6bZB8LXe965HK61zPlRiaW8ZB87qj EoYT10644icF46MLMJav6WNDXnAeb/lHlWJjZKoN0FUlVtl5HLpPRL3x3Sj411FH1RzRR1 TgUJUExkvayMRJ+z6pCnROM9SUkLi03I5kOyesfAcpsrR+XlM6nCK8f3QEIukOMKQWfOwo xDEylLmIDLQex/Ew31LTF4Pkq7ZgwsJqFFwo83lW51eug9Ng+pjUSDNtdWFk6W7JfN3oIW k2qkDuxvspSeZNsOBHMkMO3GyVFJywQShsDmXa/DHdwBl31QUvS3/hufAA8DFA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=a8d3ef5bc6de9efb56132797558795d7918d4be9 commit a8d3ef5bc6de9efb56132797558795d7918d4be9 Author: Doug Moore AuthorDate: 2021-12-24 04:45:47 +0000 Commit: Doug Moore CommitDate: 2022-07-11 05:41:05 +0000 vm_page: Remove extra test from page alloc Extract code from vm_page_alloc_contig_domain into a new function. Do so in a way that eliminates a bound-to-fail reservation test after a reservation is broken by a call from vm_page_alloc_contig_domain. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D33551 (cherry picked from commit fb38b29b5609b0c0769b2b2e1d6c917c0799f2a0) --- sys/vm/vm_page.c | 81 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 34 deletions(-) diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 685a5338969b..2b9e46674bdf 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -2187,12 +2187,46 @@ vm_page_alloc_contig(vm_object_t object, vm_pindex_t pindex, int req, return (m); } +static vm_page_t +vm_page_find_contig_domain(int domain, int req, u_long npages, vm_paddr_t low, + vm_paddr_t high, u_long alignment, vm_paddr_t boundary) +{ + struct vm_domain *vmd; + vm_page_t m_ret; + + vmd = VM_DOMAIN(domain); + if (!vm_domain_allocate(vmd, req, npages)) + return (NULL); +#if VM_NRESERVLEVEL > 0 +again: +#endif + /* + * Try to allocate the pages from the free page queues. + */ + vm_domain_free_lock(vmd); + m_ret = vm_phys_alloc_contig(domain, npages, low, high, + alignment, boundary); + vm_domain_free_unlock(vmd); + if (m_ret != NULL) + return (m_ret); + vm_domain_freecnt_inc(vmd, npages); +#if VM_NRESERVLEVEL > 0 + /* + * Try to break a reservation to replenish free page queues + * in a way that allows the allocation to succeed. + */ + if (vm_reserv_reclaim_contig(domain, npages, low, + high, alignment, boundary)) + goto again; +#endif + return (m_ret); +} + vm_page_t vm_page_alloc_contig_domain(vm_object_t object, vm_pindex_t pindex, int domain, int req, u_long npages, vm_paddr_t low, vm_paddr_t high, u_long alignment, vm_paddr_t boundary, vm_memattr_t memattr) { - struct vm_domain *vmd; vm_page_t m, m_ret, mpred; u_int busy_lock, flags, oflags; @@ -2223,44 +2257,23 @@ vm_page_alloc_contig_domain(vm_object_t object, vm_pindex_t pindex, int domain, * Can we allocate the pages without the number of free pages falling * below the lower bound for the allocation class? */ - m_ret = NULL; -again: + for (;;) { #if VM_NRESERVLEVEL > 0 - /* - * Can we allocate the pages from a reservation? - */ - if (vm_object_reserv(object) && - (m_ret = vm_reserv_alloc_contig(object, pindex, domain, req, - mpred, npages, low, high, alignment, boundary)) != NULL) { - goto found; - } -#endif - vmd = VM_DOMAIN(domain); - if (vm_domain_allocate(vmd, req, npages)) { /* - * allocate them from the free page queues. + * Can we allocate the pages from a reservation? */ - vm_domain_free_lock(vmd); - m_ret = vm_phys_alloc_contig(domain, npages, low, high, - alignment, boundary); - vm_domain_free_unlock(vmd); - if (m_ret == NULL) { - vm_domain_freecnt_inc(vmd, npages); -#if VM_NRESERVLEVEL > 0 - if (vm_reserv_reclaim_contig(domain, npages, low, - high, alignment, boundary)) - goto again; -#endif + if (vm_object_reserv(object) && + (m_ret = vm_reserv_alloc_contig(object, pindex, domain, req, + mpred, npages, low, high, alignment, boundary)) != NULL) { + break; } - } - if (m_ret == NULL) { - if (vm_domain_alloc_fail(vmd, object, req)) - goto again; - return (NULL); - } -#if VM_NRESERVLEVEL > 0 -found: #endif + if ((m_ret = vm_page_find_contig_domain(domain, req, npages, + low, high, alignment, boundary)) != NULL) + break; + if (!vm_domain_alloc_fail(VM_DOMAIN(domain), object, req)) + return (NULL); + } for (m = m_ret; m < &m_ret[npages]; m++) { vm_page_dequeue(m); vm_page_alloc_check(m);