_PAGE_DIRTY |
((flags & GNTMAP_readonly) ? 0 : _PAGE_RW),
ld, led );
- DPRINTK("update_grant_va_mapping : rc %d\n", rc);
spin_lock(&rd->grant_table->lock);
active_grant_entry_t *act;
grant_entry_t *sha;
grant_mapping_t *map;
- s16 rc = -EFAULT;
+ s16 rc = 1;
unsigned long frame, virt;
ld = current->domain;
act = &rd->grant_table->active[ref];
sha = &rd->grant_table->shared[ref];
- // cwc22: TODO: put_maptrack_handle
-
spin_lock(&rd->grant_table->lock);
if ( frame != 0 )
if ( map->ref_and_flags & GNTMAP_device_map )
act->pin -= (map->ref_and_flags & GNTMAP_readonly) ?
GNTPIN_devr_inc : GNTPIN_devw_inc;
+
+ map->ref_and_flags &= ~GNTMAP_device_map;
+ (void)__put_user(0, &uop->dev_bus_addr);
}
else
frame = act->frame;
+ /* frame is now unmapped for device access */
if ( (virt != 0) &&
(map->ref_and_flags & GNTMAP_host_map) &&
goto fail;
}
+ map->ref_and_flags &= ~GNTMAP_host_map;
+
act->pin -= (map->ref_and_flags & GNTMAP_readonly) ?
GNTPIN_hstr_inc : GNTPIN_hstw_inc;
-
rc = 0;
*va = virt;
}
+ if ( (map->ref_and_flags & (GNTMAP_device_map|GNTMAP_host_map)) == 0)
+ put_maptrack_handle(ld->grant_table, handle);
+
/* If the last writable mapping has been removed, put_page_type */
if ( ((act->pin & (GNTPIN_devw_mask|GNTPIN_hstw_mask)) == 0) &&
!(map->ref_and_flags & GNTMAP_readonly) )