From owner-freebsd-arch@FreeBSD.ORG Mon Oct 13 15:16:20 2014 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 53C9B972 for ; Mon, 13 Oct 2014 15:16:20 +0000 (UTC) Received: from bigwig.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2D56688 for ; Mon, 13 Oct 2014 15:16:20 +0000 (UTC) Received: from ralph.baldwin.cx (pool-173-70-85-31.nwrknj.fios.verizon.net [173.70.85.31]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 2341AB939; Mon, 13 Oct 2014 11:16:19 -0400 (EDT) From: John Baldwin To: freebsd-arch@freebsd.org Subject: Re: [rfc] Add boot-time warning messages to PAE kernels Date: Mon, 13 Oct 2014 10:57:23 -0400 Message-ID: <5523023.h2nJCgOPoX@ralph.baldwin.cx> User-Agent: KMail/4.12.5 (FreeBSD/10.1-BETA2; KDE/4.12.5; amd64; ; ) In-Reply-To: <01PDOI9M51BK0003PW@tmk.com> References: <01PDOI9M51BK0003PW@tmk.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Mon, 13 Oct 2014 11:16:19 -0400 (EDT) Cc: Terry Kennedy X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Oct 2014 15:16:20 -0000 On Monday, October 13, 2014 12:56:09 AM Terry Kennedy wrote: > [Inspired by an unrelated email conversation with jhb@] > > On the FreeBSD forums and also elsewhere, people frequently ask questions > about enabling PAE. Generally, this is because they don't know that amd64 > kernels will run on their hardware. > > I initially proposed a static warning message, similar to the ones that > happen when a kernel is built with INVARIANTS or WITNESS, with some sort > of warning that "You probably don't want to do this". On thinking it over > and discussing with jhb@, I think there are three scenarios that could be > addressed: > > 1) Boot PAE kernel on any amd64-capable processor - display a warning > message stating that the user should consider using the amd64 kernel > instead. > > 2) Boot PAE kernel on any processor - display a warning message that > driver support is limited on PAE kernels and that they receive less > testing than non-PAE kernels. > > 3) [Possibly] Boot i386 kernel on amd64-capable system w/ > 4GB of RAM - > display an informational message that the user should consider using > the amd64 kernel instead. > > This way, anyone that still needs to run a PAE kernel can, but the users > who choose it by accident or mistake will be guided to the amd64 kernel. > Adding a similar message to i386 kernels on amd64-capable hardware w/ more > than 4GB of RAM will likewise direct those users toward a more optimal > kernel. I mention this because I was having a conversation with a user who > was trying to get ZFS going but "ran out of memory" on a 12GB system due > to using the i386 kernel. > > All of this information (processor capability flags and memory size) > is available early enough in the boot process that the messages can be > displayed near the beginning of the kernel messages. > > Non-amd64-capable systems that have > 4GB were always a small subset of > the population, and that hardware has aged enough that much of it is no > longer used in its original role as business servers. These are pre-Socket > 604 systems, for example. amd64-capable hardware has been available for > more than 10 years from both AMD and Intel at this point. I actually think we should consider doing this for all i386 kernels regardless of the 4GB of RAM check. Something like this: diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index 9d98f0e..6fbf419 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -4067,3 +4067,17 @@ outb_(u_short port, u_char data) } #endif /* KDB */ + +static void +warn64(void *arg __unused) +{ + + if ((cpu_vendor_id == CPU_VENDOR_INTEL || + cpu_vendor_id == CPU_VENDOR_AMD || + cpu_vendor_id == CPU_VENDOR_CENTAUR) && + amd_feature & AMDID_LM) + printf("WARNING: 64-bit capable CPU, consider running " + "FreeBSD/amd64 instead.\n"); +} +SYSINIT(warn64, SI_SUB_COPYRIGHT, SI_ORDER_THIRD + 3, warn64, NULL); +SYSINIT(warn64_2, SI_SUB_LAST, SI_ORDER_THIRD + 3, warn64, NULL); -- John Baldwin