PowerMac G5 hangs/crashes on boot: 10.2, 11.0-RCx

Mark Millard markmi at dsl-only.net
Tue Sep 13 04:18:53 UTC 2016


On 2016-Sep-12, at 8:33 PM, Nathan Whitehorn <nwhitehorn at freebsd.org> wrote:
> On 09/12/16 14:50, Mark Millard wrote:
>> On 2016-Sep-12, at 2:00 PM, Nathan Whitehorn <nwhitehorn at freebsd.org> wrote:
>> 
>>> On 09/11/16 12:04, Krzysztof Parzyszek wrote:
. . .
>>>> Regarding your "hack": it works perfectly! So far, my system (10.3 at the moment) has booted every single time, no exceptions, traps, unexpected conditions. This is too good to remain as a "hack". I have no experience debugging the kernel and I don't know ABI the OFW follows, but I wouldn't mind digging a bit deeper into it, if someone shared some pointers.
>>> I've finally understood why this helps. Open Firmware runs in virtual mode on the Powermac G5. This runs inside the kernel page table, which preserves all address translations made by OF before the kernel starts; as a result, the kernel address space is a strict superset of OF's.
>>> 
>>> Where this explodes is if OF uses an unmapped SLB entry. The SLB fault handler runs in real mode and refers to the PCPU pointer in SPRG0, which blows up the kernel. Having a value of SPRG0 that works for the kernel is less fatal than preserving OF's value in this case.
>> Actual theory of operation material! Great! I've no clue how I would have figured out the Apple Open Firmware side of the context so I'd still be stuck with just observation of the overall change in behavior.
>> 
>> Presuming that you are correct: no longer "just a hack". That is great news.
>> 
>> It does sound like the Open Firmware side gets some risk of picking up the wrong address map with the change. So avoiding Open Firmware in the kernel via the usefdt=1 sounds like it would still be appropriate.
>> 
>>> I believe that OF's SPRG0 is maintained only for compatibility with some G4 Apple hardware, the eMac in particular, but will check and we can move on with this. I think it should be safe to wrap this in an #ifdef __powerpc64__.
>>> -Nathan
>> Again I've no clue how I would figure such a thing out. But, if some powerpc Macs are the only reason GENERIC preserves SPRG0 and preserving works for the other powerpcs so that detecting PowerMac vs. not is not really required to decide on the SPRG0 handling (at least for powerpc64), that too is great news.
>> 
>> 
>> Thanks for continuing to look into why the SPRG0 change might have a solid justification!
> 
> Here's a patch that I think is commitable. I've tested it on a PowerMac 11,2 with no ill effect. I would appreciate testing on any other models of PowerMac G5 (or iMac G5) before committing. This only changes behavior on powerpc64 kernels running on Apple-branded systems, so no need for testing on non-Apple or non-G5 hardware.
> -Nathan
> <sprg0-preserve-ppc64.patch>

Unfortunately I'll not have access for a few weeks yet. Once I have access again it would be a PowerMac7,2 that I'd test. The only other G5's that I'd have access to are PowerMac11,2's (with varying amounts of RAM).

===
Mark Millard
markmi at dsl-only.net


More information about the freebsd-ppc mailing list