An experimental hack that appears to allow old PowerMacG5 4-core (system total) system to boot reliably (head -r343884 based context)
Justin Hibbits
chmeeedalf at gmail.com
Sun Feb 24 21:07:36 UTC 2019
On Sat, Feb 23, 2019 at 1:36 PM Mark Millard <marklmi at yahoo.com> wrote:
>
> 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
Hi Mark,
Fantastic work tracking this down! So the problem is we now can fault
when accessing KVA space. I think we should allow this, otherwise we
can hamper performance with reduced KVA size. I'll have to think
about how best to do this. Would you be willing to test patches I
come up with?
- Justin
More information about the freebsd-ppc
mailing list