From owner-freebsd-ppc@freebsd.org Sun Feb 17 20:10:25 2019 Return-Path: Delivered-To: freebsd-ppc@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 962D814DCD5C for ; Sun, 17 Feb 2019 20:10:25 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic310-21.consmr.mail.gq1.yahoo.com (sonic310-21.consmr.mail.gq1.yahoo.com [98.137.69.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2027286C43 for ; Sun, 17 Feb 2019 20:10:24 +0000 (UTC) (envelope-from marklmi@yahoo.com) X-YMail-OSG: csnuRn0VM1maY4piNnZvCuqfWrxMfPd8Y.ydT11PxF_UM2Aa4.HRRNjzLvjcc5f 13GVOAaciuPqPBitxe1SnP28Pd7aNPkxOk1qzmyrlTx9z0ryww4R6CtMSY0S2PFiJQk6sQYS8cnf QO1maG58WNXrPFJKleTz3vgLCLBy27eZ4m_CRmDY0J4sHc2jz0Gz6LIz.hBsGxvlNvE0jrKVa90m FAtkbahHg8u0reIhCCmLnh53I4..uw3Ca07y9HTn9HLUBP7kiVUP5T.fxqTV86AleQtXVzjmSbud zFb.CqNiZXuQmOFPUearFK6_yp2RHBvzJIumgKkqmT.kHnZynwaRgEdtLoqHsCFiZg3YfPwe2LVJ StD5iNkZy4Z.ztjz1XSwR7luoA61T3j_4XFIkQ5ypOpWcx_Jma6roW9sZ7ktMN7gEWWhFyYCwvW5 i4C00OohhNVyJjkVVcRzpQR4D7Hz4VyaRn.hhbRpfeu3eetKCeNorasDZR7AXbOPbp_4IT_n8eV7 4AKvoiIzYSJYw8P3NsaIxiqP8xUDpTib5_JCRByRn7SUuuBp4g1k4or6Kf.mN4WiX3QePeIEEc4y 0w9j4e3USFRCUftXAi8_rfG4BHYT_.dmnvhpF0GPIHS3m8V__ylp.iT.mMeWvEvrENZo.BqBLWQo zmGZWT.VjtvHnNw3QBPsfgUe3LJDiV.gzFYwXKL_0r2jn5mWTVQ.IqcLA64lvI4hsypKnX8JRTev GWEVDqRE5gpu2UorPPYXNd0d2QKocYJ8UprCC5QblYSkJUk7gb1mg.EvE_NzbK5WZrVnvseanbZb MfPiGsAGllDRQ61ZPE_aD_nlLbGKoyfSCO1ff6GIo1Trv7akTdI6UONdkZdSvIOJG.QdXa0c32sD C42WagjMelT8Fr6vFRLl7BnYG5HIxPmhHq3ZHWBToQCJWNZpgx9CGqXFBrDGb7DlD1KJyfZQoRR5 uoDCvfr1V9.eZAk0Gtf_R7fYlFiU7_tRaR3LBYjNwqPxNUyItyaxDAzjgbvJO7SvSLPmLdNeNYO_ 8_rAH3IUx55d1QYvx.BxFIHwjyfKkG7urkhlVb0fNtfeHDeqyXD38rhhryA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic310.consmr.mail.gq1.yahoo.com with HTTP; Sun, 17 Feb 2019 20:10:16 +0000 Received: from c-67-170-167-181.hsd1.or.comcast.net (EHLO [192.168.1.113]) ([67.170.167.181]) by smtp428.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 6cce6f046e0efb5998242fe650eb18c5; Sun, 17 Feb 2019 20:10:15 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.2 \(3445.102.3\)) Subject: Re: Cleaned -up evidence about the PowerMac G5 multiprocessor boot hang ups with the modern VM_MAX_KERNEL_ADDRESS value [signficant new evidence] From: Mark Millard In-Reply-To: Date: Sun, 17 Feb 2019 12:10:14 -0800 Cc: FreeBSD PowerPC ML , Dennis Clarke Content-Transfer-Encoding: quoted-printable Message-Id: <924A8F35-88F6-4281-85D6-AF25161DAC8A@yahoo.com> References: To: Justin Hibbits X-Mailer: Apple Mail (2.3445.102.3) X-Rspamd-Queue-Id: 2027286C43 X-Spamd-Bar: - X-Spamd-Result: default: False [-1.15 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; MV_CASE(0.50)[]; FREEMAIL_FROM(0.00)[yahoo.com]; RCVD_COUNT_THREE(0.00)[3]; TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[yahoo.com:+]; MX_GOOD(-0.01)[cached: mta6.am0.yahoodns.net]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; FREEMAIL_TO(0.00)[gmail.com]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/21, country:US]; MID_RHS_MATCH_FROM(0.00)[]; DWL_DNSWL_NONE(0.00)[yahoo.com.dwl.dnswl.org : 127.0.5.0]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.70)[-0.696,0]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; NEURAL_SPAM_SHORT(0.40)[0.402,0]; NEURAL_HAM_LONG(-0.92)[-0.923,0]; MIME_GOOD(-0.10)[text/plain]; IP_SCORE(0.58)[ip: (1.67), ipnet: 98.137.64.0/21(0.72), asn: 36647(0.58), country: US(-0.07)]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[147.69.137.98.list.dnswl.org : 127.0.5.0] X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Feb 2019 20:10:25 -0000 [Reporting the how many times the DELAY(100) in powermac_smp_start_cpu happens proved very interesting: pc_awake for CPU 3 for what turns into a hang does temporarily become non-zero as seen on cpu 0 (stopping the wait loop) but becomes zero again as seen on CPU 0, at least for some hung-up boots.] On 2019-Feb-16, at 16:29, Mark Millard wrote: > I eliminated a bunch of reports that gave information > that was the same for hang-ups and successful boots. > So this is starting over with less material to go > through. >=20 > For an unsuccessful boot: > (Values like 0x10, 0x25, 0x51 are use as recorded labels for points in = the code.) >=20 > Adding CPU 0, hwref=3Dcd38, awake=3D1 > Waking up CPU 3 (dev=3Dc480) > After reset 4&0 for CPU 3, hwref=3Dc480, awake=3D0, *(unsigned = long*)0xc0000000000000f0=3D0x25 > After attempted wait for awake CPU 3, hwref=3Dc480, awake=3D0, = *(unsigned long*)0xc0000000000000f0=3D0x25 > Waking up CPU 2 (dev=3Dc768) >=20 > So neither pc_awake nor *0xc0000000000000f0 have machdep_ap_bootstrap > based values as seen by CPU 0 (from trying to start CPU 3). >=20 > For a successful boot: >=20 > Adding CPU 0, hwref=3Dcd38, awake=3D1 > Waking up CPU 3 (dev=3Dc480) > After reset 4&0 for CPU 3, hwref=3Dc480, awake=3D0, *(unsigned = long*)0xc0000000000000f0=3D0x25 > After attempted wait for awake CPU 3, hwref=3Dc480, awake=3D1, = *(unsigned long*)0xc0000000000000f0=3D0x51 > Adding CPU 3, hwref=3Dc480, awake=3D1 > Waking up CPU 2 (dev=3Dc768) > After reset 4&0 for CPU 2, hwref=3Dc768, awake=3D0, *(unsigned = long*)0xc0000000000000f0=3D0x51 > After attempted wait for awake CPU 2, hwref=3Dc768, awake=3D1, = *(unsigned long*)0xc0000000000000f0=3D0x51 > Adding CPU 2, hwref=3Dc768, awake=3D1 > Waking up CPU 1 (dev=3Dca50) > After reset 4&0 for CPU 1, hwref=3Dca50, awake=3D0, *(unsigned = long*)0xc0000000000000f0=3D0x51 > After attempted wait for awake CPU 1, hwref=3Dca50, awake=3D1, = *(unsigned long*)0xc0000000000000f0=3D0x51 > Adding CPU 1, hwref=3Dca50, awake=3D1 > SMP: AP CPU #3 launched > SMP: AP CPU #1 launched > SMP: AP CPU #2 launched > Trying to mount root from ufs:/dev/ufs/FBSDG5L2rootfs [rw,noatime]... > GEOM: new disk ada1 >=20 > So here waiting on cpu 0 does see pc_awake become 1 and does see > 0xc0000000000000f0 updated by machdep_ap_bootstrap for CPU , for > example. >=20 > Note the awake=3D0 (i.e.., pc_awake) examples for each cpu even when > there is already a 0x51 label for CPU 2 and CPU 3. (The code is > shown later.) >=20 > This is based on the labeling updates to: > ("labels" stored at 0xc0000000000000f0) >=20 > cpudep_ap_early_bootstrap (before-return labeled with value : 0x10) > moea64_cpu_bootstrap_native (labeled with values: 0x21, 0x22, 0x23, = 0x24, 0x25 at various points) > pmap_cpu_bootstrap (before-return labeled with value : 0x20) > cpudep_ap_bootstrap (before-return labeled with value : 0x30) > cpudep_ap_setup (before-return labeled with value : 0x40) > machdep_ap_bootstrap (lableled with values: 0x5F, 0x51, and = 0x50 at various points) >=20 > powermac_smp_start_cpu (reporting values after the resets for a = CPU and after > the pa_awake loop) > . . . >=20 =46rom a successful boot: (note the "delay 100 count =3D 0," exmaples) Adding CPU 0, hwref=3Dcd38, awake=3D1 Waking up CPU 3 (dev=3Dc480) After reset 4&0 for CPU 3, hwref=3Dc480, awake=3D0, *(unsigned = long*)0xc0000000000000f0=3D0x25 After attempted wait for awake CPU 3, hwref=3Dc480, awake=3D1, delay 100 = count =3D 0, *(unsigned long*)0xc0000000000000f0=3D0x51 Adding CPU 3, hwref=3Dc480, awake=3D1 Waking up CPU 2 (dev=3Dc768) After reset 4&0 for CPU 2, hwref=3Dc768, awake=3D0, *(unsigned = long*)0xc0000000000000f0=3D0x51 After attempted wait for awake CPU 2, hwref=3Dc768, awake=3D1, delay 100 = count =3D 0, *(unsigned long*)0xc0000000000000f0=3D0x51 Adding CPU 2, hwref=3Dc768, awake=3D1 Waking up CPU 1 (dev=3Dca50) After reset 4&0 for CPU 1, hwref=3Dca50, awake=3D0, *(unsigned = long*)0xc0000000000000f0=3D0x51 After attempted wait for awake CPU 1, hwref=3Dca50, awake=3D1, delay 100 = count =3D 0, *(unsigned long*)0xc0000000000000f0=3D0x51 Adding CPU 1, hwref=3Dca50, awake=3D1 SMP: AP CPU #1 launched SMP: AP CPU #2 launched SMP: AP CPU #3 launched Trying to mount root from ufs:/dev/ufs/FBSDG5L2rootfs [rw,noatime]... GEOM: new disk ada1 Examples of boot hung ups look something like: (note the "delay 100 count =3D 2711," exmaples) Adding CPU 0, hwref=3Dcd38, awake=3D1 Waking up CPU 3 (dev=3Dc480) After reset 4&0 for CPU 3, hwref=3Dc480, awake=3D0, *(unsigned = long*)0xc0000000000000f0=3D0x25 After attempted wait for awake CPU 3, hwref=3Dc480, awake=3D0, delay 100 = count =3D 2711, *(unsigned long*)0xc0000000000000f0=3D0x25 Waking up CPU 2 (dev=3Dc768) (The above is from a picture of the screen.) 2711 implies that pc_awake was for a time non-zero. The code in question is: if (bootverbose) // HACK!!! printf("After reset 4&0 for CPU %d, hwref=3D%jx, = awake=3D%x, *(unsigned long*)0xc0000000000000f0=3D0x%jx\n", pc->pc_cpuid, (uintmax_t)pc->pc_hwref, pc->pc_awake,(uintmax_t)*(unsigned = long*)0xc0000000000000f0); timeout =3D 10000; while (!pc->pc_awake && timeout--) DELAY(100); if (bootverbose) // HACK!!! printf("After attempted wait for awake CPU %d, = hwref=3D%jx, awake=3D%x, delay 100 count =3D %jx, *(unsigned = long*)0xc0000000000000f0=3D0x%jx\n", pc->pc_cpuid, (uintmax_t)pc->pc_hwref, pc->pc_awake, (uintmax_t)(10000-timeout), = (uintmax_t)*(unsigned long*)0xc0000000000000f0); (If the loop stops for timeout=3D=3D0 the calculation of the count will = be high by 1.) Side note: I've also eliminated the experimental, extra isync() additions. The tested code is below. Index: /usr/src/sys/powerpc/aim/moea64_native.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/src/sys/powerpc/aim/moea64_native.c (revision 344018) +++ /usr/src/sys/powerpc/aim/moea64_native.c (working copy) @@ -384,6 +384,9 @@ =20 mtmsr(mfmsr() & ~PSL_DR & ~PSL_IR); =20 + *(unsigned long*)0xc0000000000000f0 =3D 0x21; // HACK!!! + powerpc_sync(); // HACK!!! + /* * Install kernel SLB entries */ @@ -393,6 +396,9 @@ __asm __volatile ("slbmfee %0,%1; slbie %0;" : = "=3Dr"(seg0) : "r"(0)); =20 + *(unsigned long*)0xc0000000000000f0 =3D 0x22; // HACK!!! + powerpc_sync(); // HACK!!! + for (i =3D 0; i < n_slbs; i++) { if (!(slb[i].slbe & SLBE_VALID)) continue; @@ -400,6 +406,9 @@ __asm __volatile ("slbmte %0, %1" ::=20 "r"(slb[i].slbv), "r"(slb[i].slbe));=20 } + + *(unsigned long*)0xc0000000000000f0 =3D 0x23; // HACK!!! + powerpc_sync(); // HACK!!! #else for (i =3D 0; i < 16; i++) mtsrin(i << ADDR_SR_SHFT, = kernel_pmap->pm_sr[i]); @@ -412,7 +421,14 @@ __asm __volatile ("ptesync; mtsdr1 %0; isync" :: "r"(((uintptr_t)moea64_pteg_table & ~DMAP_BASE_ADDRESS) | (uintptr_t)(flsl(moea64_pteg_mask >> 11)))); + + *(unsigned long*)0xc0000000000000f0 =3D 0x24; // HACK!!! + powerpc_sync(); // HACK!!! + tlbia(); + + *(unsigned long*)0xc0000000000000f0 =3D 0x25; // HACK!!! + powerpc_sync(); // HACK!!! } =20 static void Index: /usr/src/sys/powerpc/aim/mp_cpudep.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/src/sys/powerpc/aim/mp_cpudep.c (revision 344018) +++ /usr/src/sys/powerpc/aim/mp_cpudep.c (working copy) @@ -105,6 +105,9 @@ =20 __asm __volatile("mtsprg 0, %0" :: "r"(ap_pcpu)); powerpc_sync(); + + *(unsigned long*)0xc0000000000000f0 =3D 0x10; // HACK!!! + powerpc_sync(); // HACK!!! } =20 uintptr_t @@ -124,6 +127,9 @@ pcpup->pc_curpcb =3D pcpup->pc_curthread->td_pcb; sp =3D pcpup->pc_curpcb->pcb_sp; =20 + *(unsigned long*)0xc0000000000000f0 =3D 0x30; // HACK!!! + powerpc_sync(); // HACK!!! + return (sp); } =20 @@ -416,5 +422,8 @@ "suboptimal.\n"); break; } + + *(unsigned long*)0xc0000000000000f0 =3D 0x40; // HACK!!! + powerpc_sync(); // HACK!!! } =20 Index: /usr/src/sys/powerpc/include/vmparam.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/src/sys/powerpc/include/vmparam.h (revision 344018) +++ /usr/src/sys/powerpc/include/vmparam.h (working copy) @@ -109,9 +109,11 @@ #ifndef LOCORE #define VM_MIN_KERNEL_ADDRESS 0xe000000000000000UL #define VM_MAX_KERNEL_ADDRESS 0xe0000007ffffffffUL +//#define VM_MAX_KERNEL_ADDRESS 0xe0000001c7ffffffUL #else #define VM_MIN_KERNEL_ADDRESS 0xe000000000000000 #define VM_MAX_KERNEL_ADDRESS 0xe0000007ffffffff +//#define VM_MAX_KERNEL_ADDRESS 0xe0000001c7ffffff #endif #define VM_MAX_SAFE_KERNEL_ADDRESS VM_MAX_KERNEL_ADDRESS #endif Index: /usr/src/sys/powerpc/powermac/platform_powermac.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/src/sys/powerpc/powermac/platform_powermac.c (revision = 344018) +++ /usr/src/sys/powerpc/powermac/platform_powermac.c (working copy) @@ -382,10 +382,20 @@ (void)(*rstvec); powerpc_sync(); =20 + if (bootverbose) // HACK!!! + printf("After reset 4&0 for CPU %d, hwref=3D%jx, = awake=3D%x, *(unsigned long*)0xc0000000000000f0=3D0x%jx\n", + pc->pc_cpuid, (uintmax_t)pc->pc_hwref, + pc->pc_awake,(uintmax_t)*(unsigned = long*)0xc0000000000000f0); + timeout =3D 10000; while (!pc->pc_awake && timeout--) DELAY(100); =20 + if (bootverbose) // HACK!!! + printf("After attempted wait for awake CPU %d, = hwref=3D%jx, awake=3D%x, delay 100 count =3D %jx, *(unsigned = long*)0xc0000000000000f0=3D0x%jx\n", + pc->pc_cpuid, (uintmax_t)pc->pc_hwref, + pc->pc_awake, (uintmax_t)(10000-timeout), = (uintmax_t)*(unsigned long*)0xc0000000000000f0); + return ((pc->pc_awake) ? 0 : EBUSY); #else /* No SMP support */ Index: /usr/src/sys/powerpc/powerpc/machdep.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/src/sys/powerpc/powerpc/machdep.c (revision 344018) +++ /usr/src/sys/powerpc/powerpc/machdep.c (working copy) @@ -141,8 +141,6 @@ extern vm_paddr_t kernload; #endif =20 -extern void *ap_pcpu; - struct pcpu __pcpu[MAXCPU]; static char init_kenv[2048]; =20 Index: /usr/src/sys/powerpc/powerpc/mp_machdep.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/src/sys/powerpc/powerpc/mp_machdep.c (revision 344018) +++ /usr/src/sys/powerpc/powerpc/mp_machdep.c (working copy) @@ -73,10 +73,15 @@ void machdep_ap_bootstrap(void) { + *(unsigned long*)0xc0000000000000f0 =3D 0x5F; // HACK!!! + powerpc_sync(); // HACK!!! =20 PCPU_SET(awake, 1); __asm __volatile("msync; isync"); =20 + *(unsigned long*)0xc0000000000000f0 =3D 0x51; // HACK!!! + powerpc_sync(); // HACK!!! + while (ap_letgo =3D=3D 0) __asm __volatile("or 31,31,31"); __asm __volatile("or 6,6,6"); @@ -113,6 +118,9 @@ /* Start per-CPU event timers. */ cpu_initclocks_ap(); =20 + *(unsigned long*)0xc0000000000000f0 =3D 0x50; // HACK!!! + powerpc_sync(); // HACK!!! + /* Announce ourselves awake, and enter the scheduler */ sched_throw(NULL); } @@ -256,6 +264,7 @@ } =20 ap_awake =3D 1; + powerpc_sync(); // HACK!!! =20 /* Provide our current DEC and TB values for APs */ ap_timebase =3D mftb() + 10; Index: /usr/src/sys/powerpc/powerpc/pmap_dispatch.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/src/sys/powerpc/powerpc/pmap_dispatch.c (revision = 344018) +++ /usr/src/sys/powerpc/powerpc/pmap_dispatch.c (working copy) @@ -445,6 +445,9 @@ */ =20 return (MMU_CPU_BOOTSTRAP(mmu_obj, ap)); + + *(unsigned long*)0xc0000000000000f0 =3D 0x20; // HACK!!! + powerpc_sync(); // HACK!!! } =20 void * =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)