On 10/30/2014 10:23 AM, Eric Blake wrote: > > Or maybe the problem is that at some point we used unsigned long, and > later moved to unsigned long long, but never updated the comment? I'm > trying to investigate the history of this code... Looking a bit deeper, commit 4888f0fb5 was where we changed all internal tracking to use unsigned long long; but we still have the public API virDomain{Get,Set}MaxMemory that are tied to 'unsigned long'. I guess what I was trying to do in 2e22f23 (both in 2012) was to ensure that virDomainGetMaxMemory would never have to fail due to overflow, by capping the input to something that would fit in the output. And we still got it wrong then, since commit 19e7c04 (in 2013) fixed a case where 32-bit hosts were truncating incorrectly. Meanwhile, it looks like virDomain{Get,Set}MemoryParamters have ALWAYS used ullong. But this interface doesn't report max memory - so we still have to live with the fact that there is currently no interface for the user getting at max memory other than crippled API. Maybe the solution is to enhance virDomain{Get,Set}MemoryParameters to be a superset of the older APIs of virDomain{Get,Set}MaxMemory, and teach the older APIs to fail with VIR_ERR_OVERFLOW when the value can only be passed through the newer API. Or maybe the solution is to make virDomainParseMemory add a bool parameter that says whether the caller is old-style (32-bit cap) or new-style (full 64-bit width), and set the maximum according to that information. That's probably the easiest for doing right now. I can take a stab at it, since it was my commit in 2012 that originally introduced the weird 32-bit cap even when parsing a 64-bit field. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list