Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 23 Feb 2019 11:36:11 -0800
From:      Mark Millard <marklmi@yahoo.com>
To:        Justin Hibbits <chmeeedalf@gmail.com>
Cc:        FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, Dennis Clarke <dclarke@blastwave.org>
Subject:   An experimental hack that appears to allow old PowerMacG5 4-core (system total) system to boot reliably (head -r343884 based context)
Message-ID:  <AE42887B-3B50-452F-85AA-CCB382179124@yahoo.com>

index | next in thread | raw e-mail

For sys/powerpc/aim/mp_cpudep.c 's cpudep_ap_bootstrap I added as shown below:

+extern void hack_into_slb_if_needed(void* vap); // HACK!!!
+
 uintptr_t
 cpudep_ap_bootstrap(void)
 {
. . .
+	hack_into_slb_if_needed(pcpup->pc_curpcb); // HACK!!!
+
 	sp = pcpup->pc_curpcb->pcb_sp;

and in src/sys/powerpc/aim/slb.c I added an implementation:

+void hack_into_slb_if_needed(void* vap); // HACK!!!
+void hack_into_slb_if_needed(void* vap) // HACK!!!
+{ // HACK!!!
+	struct slb *cache= PCPU_GET(aim.slb);
+	vm_offset_t va=    (vm_offset_t)vap;
+	uint64_t    slbv=  kernel_va_to_slbv(va);
+	uint64_t    esid=  va>>ADDR_SR_SHFT;
+	uint64_t    slbe=  (esid<<SLBE_ESID_SHIFT) | SLBE_VALID;
+	int i;
+
+	for (i = 0; i < n_slbs; i++) {
+		if (i == USER_SLB_SLOT)
+			continue;
+		if (cache[i].slbe == (slbe | i))
+			break;
+	}
+
+	if (i==n_slbs)
+		slb_insert_kernel(slbe,slbv);
+} // HACK!!!
+

So far I've not had any boot hang-ups after this.

Given the random nature of the hang-ups it will be a
while before I conclude for sure how reliable this
change makes booting, but so far so good.

(I recognize that the "break" could be "return"
and then then the "if (i==n_slbs)" would not be
needed.)


Other issues not fixed by this:

This does not change the buf*daemon* randomly getting
hung up (and so timing out on shutdown). This appears
to be the same issue that leads to the fans sometimes
starting to run full-rate because of pmac_thermal
being hun -up.

For  buf*daemon* "top -SHIopid" before shutdown shows
just the ones that will not hang-up. The same goes for
seeing before hand for pmac_thermal vs. the fans.

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AE42887B-3B50-452F-85AA-CCB382179124>