svn commit: r290221 - head/sys/powerpc/powerpc
Justin Hibbits
jhibbits at freebsd.org
Sat Oct 31 02:40:02 UTC 2015
On Oct 30, 2015, at 9:27 PM, Conrad Meyer wrote:
> Comments inline.
>
> On Fri, Oct 30, 2015 at 7:08 PM, Justin Hibbits
> <jhibbits at freebsd.org> wrote:
>> Author: jhibbits
>> Date: Sat Oct 31 02:08:39 2015
>> New Revision: 290221
>> URL: https://svnweb.freebsd.org/changeset/base/290221
>>
>> Log:
>> Print unsigned memory sizes, to handle >2GB RAM on 32-bit powerpc.
>> ...
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- head/sys/powerpc/powerpc/machdep.c Sat Oct 31 02:07:30
>> 2015 (r290220)
>> +++ head/sys/powerpc/powerpc/machdep.c Sat Oct 31 02:08:39
>> 2015 (r290221)
>> @@ -176,12 +176,12 @@ cpu_startup(void *dummy)
>> #ifdef PERFMON
>> perfmon_init();
>> #endif
>> - printf("real memory = %ld (%ld MB)\n", ptoa(physmem),
>> + printf("real memory = %lu (%lu MB)\n", ptoa(physmem),
>> ptoa(physmem) / 1048576);
>
> Shouldn't this be "real memory = %ju (%lu MB)\n" and
> (uintmax_t)ptoa(physmem), or it may overflow on >4GB RAM systems?
Yes, it should, and it will. However, currently ptoa() casts to
unsigned long, and I didn't want to change that yet (I will
eventually). In fact, the machine I'm testing on has 8GB, which I've
had to artificially limit to <4GB because of the various memory
accounting size limits.
>
>> realmem = physmem;
>>
>> if (bootverbose)
>> - printf("available KVA = %zd (%zd MB)\n",
>> + printf("available KVA = %zu (%zu MB)\n",
>> virtual_end - virtual_avail,
>> (virtual_end - virtual_avail) / 1048576);
>>
>> @@ -199,7 +199,7 @@ cpu_startup(void *dummy)
>> #ifdef __powerpc64__
>> printf("0x%016lx - 0x%016lx, %ld bytes (%ld
>> pages)\n",
>> #else
>> - printf("0x%08x - 0x%08x, %d bytes (%ld
>> pages)\n",
>> + printf("0x%08x - 0x%08x, %u bytes (%lu
>> pages)\n",
>
> It seems wrong that bytes is only %u here and pages is a %lu. I think
> bytes should probably be %ju too? What is the type of size1?
You're right. It should be long. However, it's 6-of-one in this
case, since on powerpc (32-bit) sizeof(long) == sizeof(int), so it
doesn't matter too much yet. size1 is a vm_offset_t, which is 32-bits
in this case. phys_avail[] is also an array of vm_offset_t's, and I
intend to change it to vm_paddr_t, and cast to uintmax_t for printf
purposes, but again, that's longer term (a lot of the powerpc bootup
needs a cleanup, anyway).
>
>> #endif
>> phys_avail[indx], phys_avail[indx + 1] -
>> 1, size1,
>> size1 / PAGE_SIZE);
>> @@ -208,7 +208,7 @@ cpu_startup(void *dummy)
>>
>> vm_ksubmap_init(&kmi);
>>
>> - printf("avail memory = %ld (%ld MB)\n",
>> ptoa(vm_cnt.v_free_count),
>> + printf("avail memory = %lu (%lu MB)\n",
>> ptoa(vm_cnt.v_free_count),
>> ptoa(vm_cnt.v_free_count) / 1048576);
>
> Same as with the first printf.
See above. It's on my list, I just wanted something cleaner for now.
>
> Best,
> Conrad
- Justin
More information about the svn-src-all
mailing list