[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v1 4/5] util: add qemu_get_host_physmem utility function
From: |
Alex Bennée |
Subject: |
Re: [PATCH v1 4/5] util: add qemu_get_host_physmem utility function |
Date: |
Tue, 21 Jul 2020 14:50:55 +0100 |
User-agent: |
mu4e 1.5.5; emacs 28.0.50 |
Richard Henderson <richard.henderson@linaro.org> writes:
> On 7/17/20 7:24 AM, Christian Ehrhardt wrote:
>> > +size_t qemu_get_host_physmem(void)
>> > +{
>> > +#ifdef _SC_PHYS_PAGES
>> > + long pages = sysconf(_SC_PHYS_PAGES);
>> > + if (pages > 0) {
>> > + return pages * qemu_real_host_page_size;
>>
>> The Linux man page warns that this product may overflow so maybe you
>> could
>> return pages here.
>>
>>
>> The caller might be even less aware of that than this function - so maybe
>> better handle it here.
>> How about handling overflows and cutting it to MiB before returning?
>
> Indeed, the caller may be less aware, so we should handle it here. But I
> don't
> think truncating to MiB helps at all, because again, the caller has to handle
> overflow.
>
> Better, I think, to saturate the result to ~(size_t)0 and leave it at
> that.
So I went for:
size_t qemu_get_host_physmem(void)
{
#ifdef _SC_PHYS_PAGES
long pages = sysconf(_SC_PHYS_PAGES);
if (pages > 0) {
if (pages > SIZE_MAX / qemu_real_host_page_size) {
return SIZE_MAX;
} else {
return pages * qemu_real_host_page_size;
}
}
#endif
return 0;
}
apparently the first case of saturating integer arithmetic outside of
the instruction emulation in QEMU :-/
--
Alex Bennée
[PATCH v1 5/5] accel/tcg: better handle memory constrained systems, Alex Bennée, 2020/07/17
[PATCH v1 3/5] semihosting: don't send the trailing '\0', Alex Bennée, 2020/07/17