On Fri, Jul 23, 2021 at 09:15:43PM +0200, David Hildenbrand wrote: > On 23.07.21 16:52, Peter Xu wrote: > > On Tue, Jul 20, 2021 at 03:03:00PM +0200, David Hildenbrand wrote: > > > @@ -30,11 +30,13 @@ void tpm_ppi_reset(TPMPPI *tpmppi) > > > guest_phys_blocks_init(&guest_phys_blocks); > > > guest_phys_blocks_append(&guest_phys_blocks); > > > QTAILQ_FOREACH(block, &guest_phys_blocks.head, next) { > > > + ram_addr_t mr_start = memory_region_get_ram_addr(block->mr); > > > + > > > trace_tpm_ppi_memset(block->host_addr, > > > block->target_end - > > > block->target_start); > > > memset(block->host_addr, 0, > > > block->target_end - block->target_start); > > > - memory_region_set_dirty(block->mr, 0, > > > + memory_region_set_dirty(block->mr, block->target_start - > > > mr_start, > > > block->target_end - > > > block->target_start); > > > > target_start should falls in gpa range, while mr_start is ram_addr_t. I am > > not > > sure whether this is right.. > > When I wrote that code I was under the impression that > memory_region_get_ram_addr() would give the GPA where the memory region > starts, but ... that's not correct as you point out. "offset" confusion :) > > > > > Neither do I know how to get correct mr offset with the existing info we've > > got > > from GuestPhysBlock. Maybe we need to teach guest_phys_blocks_region_add() > > to > > also record section->offset_within_region? > > We might actually want offset_within_address_space + offset_within_region, > so we can calculate the GPA difference to see where inside the ramblock we > end up.
I still think offset_within_region is exactly what we want to fill in here, but you can do a double check. > > I'll have a look next week, thanks for noticing! Sure! -- Peter Xu