Date: Sat, 7 Jul 2018 16:29:26 +0300 From: "Jukka A. Ukkonen" <jau789@gmail.com> To: Nathan Whitehorn <nwhitehorn@freebsd.org> Cc: freebsd-ppc@freebsd.org Subject: Re: 11.2-RC3 powerpc CD image does not boot on PowerMac G4 Message-ID: <525edae8-db71-f904-1dbd-5f30f19eca08@gmail.com> In-Reply-To: <c5d687cd-cc09-fa15-9e46-216a8f264146@freebsd.org> References: <dc927eb2-66e3-98f3-f994-590d0fd3896f@gmail.com> <b8522d23-2ae0-e80c-170e-61e1300f5137@freebsd.org> <509952F5-1E4A-4FA0-8C78-567EC9089827@gmail.com> <c5d687cd-cc09-fa15-9e46-216a8f264146@freebsd.org>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --]
I tried browsing through everything that has been changed in
the ppc SMP code since 10.4. I cannot claim much success, though.
Anyhow I found one odd feature which does not quite make sense
on a 32-bit platform. Obviously I also patched it and tested
the resulting kernel. Even if this was not the reason for boot
failures on SMP ppc systems, it might be worth to patch in the
official source code. Casting 32-bit pointers to 64-bit unsigned
values for comparison only slows things down on 32-bit systems.
Obviously the compiler will optimize the patched code such that
the unused if-branch will completely removed in the resulting
binary.
11.2 still fails to boot on SMP ppc, but I have no idea what to
test next.
--jau
[-- Attachment #2 --]
Index: sys/powerpc/powerpc/platform.c
===================================================================
--- sys/powerpc/powerpc/platform.c (revision 335668)
+++ sys/powerpc/powerpc/platform.c (working copy)
@@ -87,8 +87,14 @@
memr_merge(struct mem_region *from, struct mem_region *to)
{
vm_offset_t end;
- end = uqmax(to->mr_start + to->mr_size, from->mr_start + from->mr_size);
- to->mr_start = uqmin(from->mr_start, to->mr_start);
+ if (sizeof(end) == 8) {
+ end = uqmax(to->mr_start + to->mr_size, from->mr_start + from->mr_size);
+ to->mr_start = uqmin(from->mr_start, to->mr_start);
+ }
+ else /* (sizeof(end) == 4) */ {
+ end = ulmax(to->mr_start + to->mr_size, from->mr_start + from->mr_size);
+ to->mr_start = ulmin(from->mr_start, to->mr_start);
+ }
to->mr_size = end - to->mr_start;
}
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?525edae8-db71-f904-1dbd-5f30f19eca08>
