|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] Fix invalidate if memory requested was not bucket aligned
On Tue, 7 Aug 2012, Frediano Ziglio wrote:
> When memory is mapped in qemu_map_cache with lock != 0 a reverse mapping
> is created pointing to the virtual address of location requested.
> The cached mapped entry is saved in last_address_vaddr with the memory
> location of the base virtual address (without bucket offset).
> However when this entry is invalidated the virtual address saved in the
> reverse mapping is used. This cause that the mapping is freed but the
> last_address_vaddr is not reset.
>
> Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> hw/xen_machine_fv.c | 8 +++++---
> 1 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/hw/xen_machine_fv.c b/hw/xen_machine_fv.c
> index fdad42a..6bdb8f4 100644
> --- a/hw/xen_machine_fv.c
> +++ b/hw/xen_machine_fv.c
> @@ -181,9 +181,6 @@ void qemu_invalidate_entry(uint8_t *buffer)
> unsigned long paddr_index;
> int found = 0;
>
> - if (last_address_vaddr == buffer)
> - last_address_page = ~0UL;
> -
> TAILQ_FOREACH(reventry, &locked_entries, next) {
> if (reventry->vaddr_req == buffer) {
> paddr_index = reventry->paddr_index;
> @@ -201,6 +198,11 @@ void qemu_invalidate_entry(uint8_t *buffer)
> TAILQ_REMOVE(&locked_entries, reventry, next);
> qemu_free(reventry);
>
> + if ((last_address_page >> (MCACHE_BUCKET_SHIFT - XC_PAGE_SHIFT))
> + == paddr_index) {
> + last_address_page = ~0UL;
> + }
> +
> entry = &mapcache_entry[paddr_index % nr_buckets];
> while (entry && entry->paddr_index != paddr_index) {
> pentry = entry;
> --
> 1.7.5.4
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |