From owner-svn-src-all@freebsd.org  Sun Jan 19 21:17:58 2020
Return-Path: <owner-svn-src-all@freebsd.org>
Delivered-To: svn-src-all@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 1D34F225762;
 Sun, 19 Jan 2020 21:17:58 +0000 (UTC)
 (envelope-from jhibbits@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)
 server-signature RSA-PSS (4096 bits)
 client-signature RSA-PSS (4096 bits) client-digest SHA256)
 (Client CN "mxrelay.nyi.freebsd.org",
 Issuer "Let's Encrypt Authority X3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 48171d75kdz3GCc;
 Sun, 19 Jan 2020 21:17:57 +0000 (UTC)
 (envelope-from jhibbits@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EEEC31920E;
 Sun, 19 Jan 2020 21:17:57 +0000 (UTC)
 (envelope-from jhibbits@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 00JLHvxL057449;
 Sun, 19 Jan 2020 21:17:57 GMT (envelope-from jhibbits@FreeBSD.org)
Received: (from jhibbits@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id 00JLHvli057448;
 Sun, 19 Jan 2020 21:17:57 GMT (envelope-from jhibbits@FreeBSD.org)
Message-Id: <202001192117.00JLHvli057448@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to
 jhibbits@FreeBSD.org using -f
From: Justin Hibbits <jhibbits@FreeBSD.org>
Date: Sun, 19 Jan 2020 21:17:57 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-all@freebsd.org,
 svn-src-head@freebsd.org
Subject: svn commit: r356896 - head/sys/powerpc/aim
X-SVN-Group: head
X-SVN-Commit-Author: jhibbits
X-SVN-Commit-Paths: head/sys/powerpc/aim
X-SVN-Commit-Revision: 356896
X-SVN-Commit-Repository: base
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-all@freebsd.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "SVN commit messages for the entire src tree \(except for &quot;
 user&quot; and &quot; projects&quot; \)" <svn-src-all.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-all>,
 <mailto:svn-src-all-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-all/>
List-Post: <mailto:svn-src-all@freebsd.org>
List-Help: <mailto:svn-src-all-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-all>,
 <mailto:svn-src-all-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 19 Jan 2020 21:17:58 -0000

Author: jhibbits
Date: Sun Jan 19 21:17:57 2020
New Revision: 356896
URL: https://svnweb.freebsd.org/changeset/base/356896

Log:
  [PowerPC64] fix crash when using machdep.moea64_bpvo_pool_size tunable
  
  Summary:
  This fixes kernel crashing when tunable "machdep.moea64_bpvo_pool_size" is
  set to a value higher then 327680 (default value).  Function
  moea64_mid_bootstrap() relies on moea64_bpvo_pool_size, but at time of the
  use the variable wan't yet updated with the new value provided by user.
  
  Problem was detected after trying to use a VM with 64GB of RAM, and default
  moea64_bpvo_pool_size is insufficient (kernel boot used more than 470000) .
  I think default value must be discussed to address this use case, or find a
  way to calculate pool size automatically based on amount of memory detected.
  
  Test Plan: Tested on QEMU VM with 64GB of RAM using "set
  machdep.moea64_bpvo_pool_size=655360" on loader prompt
  
  Submitted by:	Alfredo Dal'Ava Júnior (alfredo.junior_eldorado.org.br)
  Differential Revision:	https://reviews.freebsd.org/D23233

Modified:
  head/sys/powerpc/aim/mmu_oea64.c

Modified: head/sys/powerpc/aim/mmu_oea64.c
==============================================================================
--- head/sys/powerpc/aim/mmu_oea64.c	Sun Jan 19 20:04:44 2020	(r356895)
+++ head/sys/powerpc/aim/mmu_oea64.c	Sun Jan 19 21:17:57 2020	(r356896)
@@ -185,7 +185,6 @@ uma_zone_t	moea64_pvo_zone; /* zone for pvo entries */
 static struct	pvo_entry *moea64_bpvo_pool;
 static int	moea64_bpvo_pool_index = 0;
 static int	moea64_bpvo_pool_size = 327680;
-TUNABLE_INT("machdep.moea64_bpvo_pool_size", &moea64_bpvo_pool_size);
 SYSCTL_INT(_machdep, OID_AUTO, moea64_allocated_bpvo_entries, CTLFLAG_RD, 
     &moea64_bpvo_pool_index, 0, "");
 
@@ -390,9 +389,11 @@ alloc_pvo_entry(int bootstrap)
 
 	if (!moea64_initialized || bootstrap) {
 		if (moea64_bpvo_pool_index >= moea64_bpvo_pool_size) {
-			panic("moea64_enter: bpvo pool exhausted, %d, %d, %zd",
-			      moea64_bpvo_pool_index, moea64_bpvo_pool_size,
-			      moea64_bpvo_pool_size * sizeof(struct pvo_entry));
+			panic("%s: bpvo pool exhausted, index=%d, size=%d, bytes=%zd."
+			    "Try setting machdep.moea64_bpvo_pool_size tunable",
+			    __func__, moea64_bpvo_pool_index,
+			    moea64_bpvo_pool_size,
+			    moea64_bpvo_pool_size * sizeof(struct pvo_entry));
 		}
 		pvo = &moea64_bpvo_pool[
 		    atomic_fetchadd_int(&moea64_bpvo_pool_index, 1)];
@@ -914,6 +915,7 @@ moea64_mid_bootstrap(mmu_t mmup, vm_offset_t kernelsta
 	/*
 	 * Initialise the bootstrap pvo pool.
 	 */
+	TUNABLE_INT_FETCH("machdep.moea64_bpvo_pool_size", &moea64_bpvo_pool_size);
 	moea64_bpvo_pool = (struct pvo_entry *)moea64_bootstrap_alloc(
 		moea64_bpvo_pool_size*sizeof(struct pvo_entry), PAGE_SIZE);
 	moea64_bpvo_pool_index = 0;