> +static int tdx_accept_ram_range(uint64_t address, uint64_t length) > +{ > + TdxRamEntry *e; > + int i; > + > + for (i = 0; i < tdx_guest->nr_ram_entries; i++) { > + e = &tdx_guest->ram_entries[i]; > + > + if (address + length < e->address || > + e->address + e->length < address) { > + continue; > + } > + > + if (e->address > address || > + e->address + e->length < address + length) { > + return -EINVAL; > + } if (e->type == TDX_RAM_ADDED) return -EINVAL > + if (e->address == address && e->length == length) { > + e->type = TDX_RAM_ADDED; > + } else if (e->address == address) { > + e->address += length; > + e->length -= length; > + tdx_add_ram_entry(address, length, TDX_RAM_ADDED); > + } else if (e->address + e->length == address + length) { > + e->length -= length; > + tdx_add_ram_entry(address, length, TDX_RAM_ADDED); > + } else { > + TdxRamEntry tmp = { > + .address = e->address, > + .length = e->length, > + }; > + e->length = address - tmp.address; > + > + tdx_add_ram_entry(address, length, TDX_RAM_ADDED); > + tdx_add_ram_entry(address + length, > + tmp.address + tmp.length - (address + length), > + TDX_RAM_UNACCEPTED); > + } I think all this can be simplified, by (1) Change the existing entry to cover the accepted ram range. (2) If there is room before the accepted ram range add a TDX_RAM_UNACCEPTED entry for that. (3) If there is room after the accepted ram range add a TDX_RAM_UNACCEPTED entry for that. take care, Gerd