aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/hvm/stdvga.c
diff options
context:
space:
mode:
authorTim Deegan <tim@xen.org>2012-05-17 10:24:54 +0100
committerTim Deegan <tim@xen.org>2012-05-17 10:24:54 +0100
commit4cb6c4f494114de8a5c442493741a282c84ca4c3 (patch)
treeb7838596d0fee5d6e29eb9807ac3d3ac163448d5 /xen/arch/x86/hvm/stdvga.c
parent85e7d13b78b52992d00c457f22aaada15443feea (diff)
downloadxen-4cb6c4f494114de8a5c442493741a282c84ca4c3.tar.gz
xen-4cb6c4f494114de8a5c442493741a282c84ca4c3.tar.bz2
xen-4cb6c4f494114de8a5c442493741a282c84ca4c3.zip
x86/hvm: Use get_page_from_gfn() instead of get_gfn()/put_gfn.
Signed-off-by: Tim Deegan <tim@xen.org> Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Diffstat (limited to 'xen/arch/x86/hvm/stdvga.c')
-rw-r--r--xen/arch/x86/hvm/stdvga.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/xen/arch/x86/hvm/stdvga.c b/xen/arch/x86/hvm/stdvga.c
index ddbd9970f3..0dae29b12e 100644
--- a/xen/arch/x86/hvm/stdvga.c
+++ b/xen/arch/x86/hvm/stdvga.c
@@ -482,7 +482,8 @@ static int mmio_move(struct hvm_hw_stdvga *s, ioreq_t *p)
if ( hvm_copy_to_guest_phys(data, &tmp, p->size) !=
HVMCOPY_okay )
{
- (void)get_gfn(d, data >> PAGE_SHIFT, &p2mt);
+ struct page_info *dp = get_page_from_gfn(
+ d, data >> PAGE_SHIFT, &p2mt, P2M_ALLOC);
/*
* The only case we handle is vga_mem <-> vga_mem.
* Anything else disables caching and leaves it to qemu-dm.
@@ -490,11 +491,12 @@ static int mmio_move(struct hvm_hw_stdvga *s, ioreq_t *p)
if ( (p2mt != p2m_mmio_dm) || (data < VGA_MEM_BASE) ||
((data + p->size) > (VGA_MEM_BASE + VGA_MEM_SIZE)) )
{
- put_gfn(d, data >> PAGE_SHIFT);
+ if ( dp )
+ put_page(dp);
return 0;
}
+ ASSERT(!dp);
stdvga_mem_write(data, tmp, p->size);
- put_gfn(d, data >> PAGE_SHIFT);
}
data += sign * p->size;
addr += sign * p->size;
@@ -508,15 +510,16 @@ static int mmio_move(struct hvm_hw_stdvga *s, ioreq_t *p)
if ( hvm_copy_from_guest_phys(&tmp, data, p->size) !=
HVMCOPY_okay )
{
- (void)get_gfn(d, data >> PAGE_SHIFT, &p2mt);
+ struct page_info *dp = get_page_from_gfn(
+ d, data >> PAGE_SHIFT, &p2mt, P2M_ALLOC);
if ( (p2mt != p2m_mmio_dm) || (data < VGA_MEM_BASE) ||
((data + p->size) > (VGA_MEM_BASE + VGA_MEM_SIZE)) )
{
- put_gfn(d, data >> PAGE_SHIFT);
+ if ( dp )
+ put_page(dp);
return 0;
}
tmp = stdvga_mem_read(data, p->size);
- put_gfn(d, data >> PAGE_SHIFT);
}
stdvga_mem_write(addr, tmp, p->size);
data += sign * p->size;