[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] slow xp hibernation revisited
> > The exit condition is what would happen anyway after the remap is done > > and the page is still invalid. > > > > diff --git a/hw/xen_machine_fv.c b/hw/xen_machine_fv.c > > index d02e23f..1ff80bb 100644 > > --- a/hw/xen_machine_fv.c > > +++ b/hw/xen_machine_fv.c > > @@ -151,6 +151,24 @@ uint8_t *qemu_map_cache(target_phys_addr_t > > phys_addr, uint8_t lock) > > pentry->next = entry; > > qemu_remap_bucket(entry, address_index); > > } else if (!entry->lock) { > > + if (entry->vaddr_base && entry->paddr_index == address_index && > > !test_bit(address_offset>>XC_PAGE_SHIFT, entry->valid_mapping)) > > + { > > + /* The page was invalid previously. Test if it is valid now > > and only remap if so */ > > + xen_pfn_t pfn; > > + int err; > > + void *tmp_vaddr; > > + > > + pfn = phys_addr >> XC_PAGE_SHIFT; > > + tmp_vaddr = xc_map_foreign_bulk(xc_handle, domid, > > PROT_READ|PROT_WRITE, &pfn, &err, 1); > > + if (tmp_vaddr) > > + munmap(tmp_vaddr, PAGE_SIZE); > > + > > + if (!tmp_vaddr || err) > > + { > > + last_address_index = ~0UL; > > + return NULL; > > + } > > + } > > if (!entry->vaddr_base || entry->paddr_index != address_index > > || !test_bit(address_offset>>XC_PAGE_SHIFT, entry->valid_mapping)) > > qemu_remap_bucket(entry, address_index); > > } > > This is just a matter of aesthetic, but probably something like the > following would be clearer? > > if (entry->vaddr_base && entry->paddr_index == address_index) { > if (!test_bit(address_offset>>XC_PAGE_SHIFT, entry->valid_mapping)) { > /* your code + remap bucket */ > } > } else { > qemu_remap_bucket(entry, address_index); > } > Yes that should work, although I think I'm too tired now for Boolean algebra :) Is my calculation of the pfn correct? I think I don't need to fuss around with decoding from the bucket index and bucket offset if I'm just doing a trial map of one page, so using phys_addr directory is correct right? James _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |