From owner-svn-src-head@freebsd.org Tue Dec 15 12:59:42 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A77624B5C17; Tue, 15 Dec 2020 12:59:42 +0000 (UTC) (envelope-from hps@selasky.org) Received: from mail.turbocat.net (turbocat.net [IPv6:2a01:4f8:c17:6c4b::2]) (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 mx1.freebsd.org (Postfix) with ESMTPS id 4CwJHx43wTz3qm6; Tue, 15 Dec 2020 12:59:41 +0000 (UTC) (envelope-from hps@selasky.org) Received: from hps2020.home.selasky.org (unknown [178.17.145.105]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mail.turbocat.net (Postfix) with ESMTPSA id 0E67C260266; Tue, 15 Dec 2020 13:59:32 +0100 (CET) Subject: Re: svn commit: r368523 - head/sys/vm To: Bryan Drewery , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <202012102044.0BAKiTHh011767@repo.freebsd.org> From: Hans Petter Selasky Message-ID: Date: Tue, 15 Dec 2020 13:59:22 +0100 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <202012102044.0BAKiTHh011767@repo.freebsd.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4CwJHx43wTz3qm6 X-Spamd-Bar: - Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of hps@selasky.org designates 2a01:4f8:c17:6c4b::2 as permitted sender) smtp.mailfrom=hps@selasky.org X-Spamd-Result: default: False [-1.72 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; ARC_NA(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; TO_DN_SOME(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; R_SPF_ALLOW(-0.20)[+a:mail.turbocat.net]; RBL_DBL_DONT_QUERY_IPS(0.00)[2a01:4f8:c17:6c4b::2:from]; DMARC_NA(0.00)[selasky.org]; SPAMHAUS_ZRD(0.00)[2a01:4f8:c17:6c4b::2:from:127.0.2.255]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_SPAM_SHORT(0.58)[0.580]; NEURAL_HAM_LONG(-1.00)[-1.000]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/29, country:DE]; RCVD_TLS_ALL(0.00)[]; MAILMAN_DEST(0.00)[svn-src-all,svn-src-head]; RCVD_COUNT_TWO(0.00)[2] X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 Dec 2020 12:59:42 -0000 On 12/10/20 9:44 PM, Bryan Drewery wrote: > Author: bdrewery > Date: Thu Dec 10 20:44:29 2020 > New Revision: 368523 > URL: https://svnweb.freebsd.org/changeset/base/368523 > > Log: > contig allocs: Don't retry forever on M_WAITOK. > > This restores behavior from before domain iterators were added in > r327895 and r327896. > > The vm_domainset_iter_policy() will do a vm_wait_doms() and then > restart its iterator when M_WAITOK is set. It will also force > the containing loop to have M_NOWAIT. So we get an unbounded > retry loop rather than the intended bounded retries that > kmem_alloc_contig_pages() already handles. > > This also restores M_WAITOK to the vmem_alloc() call in > kmem_alloc_attr_domain() and kmem_alloc_contig_domain(). > > Reviewed by: markj, kib > MFC after: 2 weeks > Sponsored by: Dell EMC > Differential Revision: https://reviews.freebsd.org/D27507 > > Modified: > head/sys/vm/vm_kern.c > > Modified: head/sys/vm/vm_kern.c > ============================================================================== > --- head/sys/vm/vm_kern.c Thu Dec 10 20:44:05 2020 (r368522) > +++ head/sys/vm/vm_kern.c Thu Dec 10 20:44:29 2020 (r368523) > @@ -264,9 +264,15 @@ kmem_alloc_attr_domainset(struct domainset *ds, vm_siz > { > struct vm_domainset_iter di; > vm_offset_t addr; > - int domain; > + int domain, iflags; > > - vm_domainset_iter_policy_init(&di, ds, &domain, &flags); > + /* > + * Do not allow the domainset iterator to override wait flags. The > + * contiguous memory allocator defines special semantics for M_WAITOK > + * that do not match the iterator's implementation. > + */ > + iflags = (flags & ~M_WAITOK) | M_NOWAIT; > + vm_domainset_iter_policy_init(&di, ds, &domain, &iflags); > do { > addr = kmem_alloc_attr_domain(domain, size, flags, low, high, > memattr); > @@ -346,9 +352,15 @@ kmem_alloc_contig_domainset(struct domainset *ds, vm_s > { > struct vm_domainset_iter di; > vm_offset_t addr; > - int domain; > + int domain, iflags; > > - vm_domainset_iter_policy_init(&di, ds, &domain, &flags); > + /* > + * Do not allow the domainset iterator to override wait flags. The > + * contiguous memory allocator defines special semantics for M_WAITOK > + * that do not match the iterator's implementation. > + */ > + iflags = (flags & ~M_WAITOK) | M_NOWAIT; > + vm_domainset_iter_policy_init(&di, ds, &domain, &iflags); > do { > addr = kmem_alloc_contig_domain(domain, size, flags, low, high, > alignment, boundary, memattr); > Hi, Should "iflags" also be passed to kmem_alloc_contig_domain() !? I'm seeing the following panic: panic("vm_wait in early boot") vm_wait_domain() kmem_alloc_contig_pages() kmem_alloc_contig_domainset() kmem_alloc_contig() contigmalloc() x86bios_alloc() vesa_configure() vesa_mod_event() vesa_module_register_init() mi_startup() --HPS