[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH v4 22/36] i386/tdx: Track RAM entries for TDX VM
From: |
Isaku Yamahata |
Subject: |
Re: [RFC PATCH v4 22/36] i386/tdx: Track RAM entries for TDX VM |
Date: |
Thu, 26 May 2022 11:48:26 -0700 |
On Thu, May 26, 2022 at 03:33:10PM +0800,
Xiaoyao Li <xiaoyao.li@intel.com> wrote:
> On 5/24/2022 3:37 PM, Gerd Hoffmann wrote:
> > 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.
>
> I implement as below. Please help review.
>
> +static int tdx_accept_ram_range(uint64_t address, uint64_t length)
> +{
> + uint64_t head_start, tail_start, head_length, tail_length;
> + uint64_t tmp_address, tmp_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;
> + }
> +
> + /*
> + * The to-be-accepted ram range must be fully contained by one
> + * RAM entries
> + */
> + if (e->address > address ||
> + e->address + e->length < address + length) {
> + return -EINVAL;
> + }
> +
> + if (e->type == TDX_RAM_ADDED) {
> + return -EINVAL;
> + }
> +
> + tmp_address = e->address;
> + tmp_length = e->length;
> +
> + e->address = address;
> + e->length = length;
> + e->type = TDX_RAM_ADDED;
> +
> + head_length = address - tmp_address;
> + if (head_length > 0) {
> + head_start = e->address;
> + tdx_add_ram_entry(head_start, head_length, TDX_RAM_UNACCEPTED);
tdx_add_ram_entry() increments tdx_guest->nr_ram_entries. I think it's worth
for comments why this is safe regarding to this for-loop.
--
Isaku Yamahata <isaku.yamahata@gmail.com>
[RFC PATCH v4 24/36] i386/tdx: Add TDVF memory via KVM_TDX_INIT_MEM_REGION, Xiaoyao Li, 2022/05/11
[RFC PATCH v4 25/36] i386/tdx: Call KVM_TDX_INIT_VCPU to initialize TDX vcpu, Xiaoyao Li, 2022/05/11