On 11/16/23 14:05, Peter Krempa wrote:
> On Mon, Nov 06, 2023 at 12:38:27 +0100, Michal Privoznik wrote:
>> Since we're iterating over def->mems array, might as well check
>> for dimm slot duplicates.
>>
>> Signed-off-by: Michal Privoznik <[email protected]>
>> ---
>> src/conf/domain_validate.c | 36 +++++++++++++++++++++++-------------
>> 1 file changed, 23 insertions(+), 13 deletions(-)
>>
>> diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
>> index 5d9602666e..f45ee0a8a5 100644
>> --- a/src/conf/domain_validate.c
>> +++ b/src/conf/domain_validate.c
>> @@ -2221,6 +2221,7 @@ static int
>> virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
>> const virDomainDef *def)
>> {
>> + const virDomainDeviceDimmAddress *thisAddr = NULL;
>> unsigned long long thisStart = 0;
>> unsigned long long thisEnd = 0;
>> size_t i;
>> @@ -2235,6 +2236,7 @@ virDomainMemoryDefCheckConflict(const
>> virDomainMemoryDef *mem,
>> case VIR_DOMAIN_MEMORY_MODEL_DIMM:
>> case VIR_DOMAIN_MEMORY_MODEL_NVDIMM:
>> if (mem->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM) {
>> + thisAddr = &mem->info.addr.dimm;
>> thisStart = mem->info.addr.dimm.base;
>> }
>> break;
>> @@ -2244,7 +2246,7 @@ virDomainMemoryDefCheckConflict(const
>> virDomainMemoryDef *mem,
>> break;
>> }
>>
>> - if (thisStart == 0) {
>> + if (thisStart == 0 && !thisAddr) {
>> return 0;
>> }
>
> This seems a bit suspicious, because if the start address is 0, where
> qemu will auto-populate it, the code below will still try to validate
> it against existing devices.
>
> Very theoretically if you are adding a big enough device it can possibly
> clash with another one that is somewhere further in memory (start
> address already populated) despite the fact that qemu would put the new
> device into a reasonable location at the end of the address space.
>
> IMO if the start address is 0 we must not attempt to do anything about
> the address validation and the above condition will make that no longer
> the case.
>
Fair enough. Consider this squashed in:
diff --git i/src/conf/domain_validate.c w/src/conf/domain_validate.c
index f45ee0a8a5..c72108886e 100644
--- i/src/conf/domain_validate.c
+++ w/src/conf/domain_validate.c
@@ -2304,7 +2304,7 @@ virDomainMemoryDefCheckConflict(const
virDomainMemoryDef *mem,
break;
}
- if (otherStart == 0)
+ if (thisStart == 0 || otherStart == 0)
continue;
if (thisStart <= otherStart && thisEnd > otherStart) {
Or do you want me to send v2?
Michal
_______________________________________________
Devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]