# HG changeset patch
# User emellor@ewan
# Node ID ad0270abc9b96b382360899b63efca92c1026fc9
# Parent ab1c362ba0d18d1ae1d02ce0370f7dfc0b913198
# Parent 7ff651a39cfcfc5237a7dcb49fd148198d48fd9d
Merged.
diff -r ab1c362ba0d1 -r ad0270abc9b9 tools/libxc/xg_private.h
--- a/tools/libxc/xg_private.h Fri Sep 23 15:56:46 2005
+++ b/tools/libxc/xg_private.h Fri Sep 23 15:57:13 2005
@@ -28,25 +28,27 @@
#define _PAGE_PSE 0x080
#define _PAGE_GLOBAL 0x100
+#define L1_PAGETABLE_SHIFT_PAE 12
+#define L2_PAGETABLE_SHIFT_PAE 21
+#define L3_PAGETABLE_SHIFT_PAE 30
+
#if defined(__i386__)
#define L1_PAGETABLE_SHIFT 12
#define L2_PAGETABLE_SHIFT 22
-#define L1_PAGETABLE_SHIFT_PAE 12
-#define L2_PAGETABLE_SHIFT_PAE 21
-#define L3_PAGETABLE_SHIFT_PAE 30
#elif defined(__x86_64__)
-#define L1_PAGETABLE_SHIFT 12
-#define L2_PAGETABLE_SHIFT 21
-#define L3_PAGETABLE_SHIFT 30
-#define L4_PAGETABLE_SHIFT 39
+#define L1_PAGETABLE_SHIFT 12
+#define L2_PAGETABLE_SHIFT 21
+#define L3_PAGETABLE_SHIFT 30
+#define L4_PAGETABLE_SHIFT 39
#endif
-#if defined(__i386__)
-#define ENTRIES_PER_L1_PAGETABLE 1024
-#define ENTRIES_PER_L2_PAGETABLE 1024
#define L1_PAGETABLE_ENTRIES_PAE 512
#define L2_PAGETABLE_ENTRIES_PAE 512
#define L3_PAGETABLE_ENTRIES_PAE 4
+
+#if defined(__i386__)
+#define L1_PAGETABLE_ENTRIES 1024
+#define L2_PAGETABLE_ENTRIES 1024
#elif defined(__x86_64__)
#define L1_PAGETABLE_ENTRIES 512
#define L2_PAGETABLE_ENTRIES 512
@@ -70,17 +72,18 @@
typedef unsigned long l4_pgentry_t;
#endif
-#if defined(__i386__)
-#define l1_table_offset(_a) \
- (((_a) >> L1_PAGETABLE_SHIFT) & (ENTRIES_PER_L1_PAGETABLE - 1))
-#define l2_table_offset(_a) \
- ((_a) >> L2_PAGETABLE_SHIFT)
#define l1_table_offset_pae(_a) \
(((_a) >> L1_PAGETABLE_SHIFT_PAE) & (L1_PAGETABLE_ENTRIES_PAE - 1))
#define l2_table_offset_pae(_a) \
(((_a) >> L2_PAGETABLE_SHIFT_PAE) & (L2_PAGETABLE_ENTRIES_PAE - 1))
#define l3_table_offset_pae(_a) \
(((_a) >> L3_PAGETABLE_SHIFT_PAE) & (L3_PAGETABLE_ENTRIES_PAE - 1))
+
+#if defined(__i386__)
+#define l1_table_offset(_a) \
+ (((_a) >> L1_PAGETABLE_SHIFT) & (L1_PAGETABLE_ENTRIES - 1))
+#define l2_table_offset(_a) \
+ ((_a) >> L2_PAGETABLE_SHIFT)
#elif defined(__x86_64__)
#define l1_table_offset(_a) \
(((_a) >> L1_PAGETABLE_SHIFT) & (L1_PAGETABLE_ENTRIES - 1))
diff -r ab1c362ba0d1 -r ad0270abc9b9 xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Fri Sep 23 15:56:46 2005
+++ b/xen/arch/x86/mm.c Fri Sep 23 15:57:13 2005
@@ -2273,8 +2273,7 @@
int update_grant_pte_mapping(
- unsigned long pte_addr, l1_pgentry_t _nl1e,
- struct domain *d, struct vcpu *v)
+ unsigned long pte_addr, l1_pgentry_t _nl1e, struct vcpu *v)
{
int rc = GNTST_okay;
void *va;
@@ -2282,6 +2281,7 @@
struct pfn_info *page;
u32 type_info;
l1_pgentry_t ol1e;
+ struct domain *d = v->domain;
ASSERT(spin_is_locked(&d->big_lock));
ASSERT(!shadow_mode_refcounts(d));
@@ -2318,8 +2318,6 @@
}
put_page_from_l1e(ol1e, d);
-
- rc = (l1e_get_flags(ol1e) & _PAGE_PRESENT) ? GNTST_flush_all : GNTST_okay;
if ( unlikely(shadow_mode_enabled(d)) )
{
@@ -2415,10 +2413,10 @@
int update_grant_va_mapping(
- unsigned long va, l1_pgentry_t _nl1e, struct domain *d, struct vcpu *v)
-{
- int rc = GNTST_okay;
+ unsigned long va, l1_pgentry_t _nl1e, struct vcpu *v)
+{
l1_pgentry_t *pl1e, ol1e;
+ struct domain *d = v->domain;
ASSERT(spin_is_locked(&d->big_lock));
ASSERT(!shadow_mode_refcounts(d));
@@ -2439,12 +2437,10 @@
put_page_from_l1e(ol1e, d);
- rc = (l1e_get_flags(ol1e) & _PAGE_PRESENT) ? GNTST_flush_one : GNTST_okay;
-
if ( unlikely(shadow_mode_enabled(d)) )
shadow_do_update_va_mapping(va, _nl1e, v);
- return rc;
+ return GNTST_okay;
}
int clear_grant_va_mapping(unsigned long addr, unsigned long frame)
diff -r ab1c362ba0d1 -r ad0270abc9b9 xen/common/grant_table.c
--- a/xen/common/grant_table.c Fri Sep 23 15:56:46 2005
+++ b/xen/common/grant_table.c Fri Sep 23 15:57:13 2005
@@ -24,10 +24,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#define GRANT_DEBUG 0
-#define GRANT_DEBUG_VERBOSE 0
-
-#include <xen/config.h>
#include <xen/lib.h>
#include <xen/sched.h>
#include <xen/shadow.h>
@@ -68,39 +64,32 @@
t->map_count--;
}
+/*
+ * Returns 0 if TLB flush / invalidate required by caller.
+ * va will indicate the address to be invalidated.
+ *
+ * addr is _either_ a host virtual address, or the address of the pte to
+ * update, as indicated by the GNTMAP_contains_pte flag.
+ */
static int
-__gnttab_activate_grant_ref(
- struct domain *mapping_d, /* IN */
- struct vcpu *mapping_ed,
- struct domain *granting_d,
- grant_ref_t ref,
- u16 dev_hst_ro_flags,
- u64 addr,
- unsigned long *pframe ) /* OUT */
-{
- domid_t sdom;
- u16 sflags;
+__gnttab_map_grant_ref(
+ gnttab_map_grant_ref_t *uop)
+{
+ domid_t dom;
+ grant_ref_t ref;
+ struct domain *ld, *rd;
+ struct vcpu *led;
+ u16 dev_hst_ro_flags;
+ int handle;
+ u64 addr;
+ unsigned long frame = 0;
+ int rc;
active_grant_entry_t *act;
- grant_entry_t *sha;
- s16 rc = 1;
- unsigned long frame = 0;
- int retries = 0;
-
- /*
- * Objectives of this function:
- * . Make the record ( granting_d, ref ) active, if not already.
- * . Update shared grant entry of owner, indicating frame is mapped.
- * . Increment the owner act->pin reference counts.
- * . get_page on shared frame if new mapping.
- * . get_page_type if this is first RW mapping of frame.
- * . Add PTE to virtual address space of mapping_d, if necessary.
- * Returns:
- * . -ve: error
- * . 1: ok
- * . 0: ok and TLB invalidate of host_addr needed.
- *
- * On success, *pframe contains mfn.
- */
+
+ /* Entry details from @rd's shared grant table. */
+ grant_entry_t *sha;
+ domid_t sdom;
+ u16 sflags;
/*
* We bound the number of times we retry CMPXCHG on memory locations that
@@ -110,11 +99,88 @@
* the guest to race our updates (e.g., to change the GTF_readonly flag),
* so we allow a few retries before failing.
*/
-
- act = &granting_d->grant_table->active[ref];
- sha = &granting_d->grant_table->shared[ref];
-
- spin_lock(&granting_d->grant_table->lock);
+ int retries = 0;
+
+ led = current;
+ ld = led->domain;
+
+ /* Bitwise-OR avoids short-circuiting which screws control flow. */
+ if ( unlikely(__get_user(dom, &uop->dom) |
+ __get_user(ref, &uop->ref) |
+ __get_user(addr, &uop->host_addr) |
+ __get_user(dev_hst_ro_flags, &uop->flags)) )
+ {
+ DPRINTK("Fault while reading gnttab_map_grant_ref_t.\n");
+ return -EFAULT; /* don't set status */
+ }
+
+ if ( unlikely(ref >= NR_GRANT_ENTRIES) ||
+ unlikely((dev_hst_ro_flags &
+ (GNTMAP_device_map|GNTMAP_host_map)) == 0) )
+ {
+ DPRINTK("Bad ref (%d) or flags (%x).\n", ref, dev_hst_ro_flags);
+ (void)__put_user(GNTST_bad_gntref, &uop->handle);
+ return GNTST_bad_gntref;
+ }
+
+ if ( acm_pre_grant_map_ref(dom) )
+ {
+ (void)__put_user(GNTST_permission_denied, &uop->handle);
+ return GNTST_permission_denied;
+ }
+
+ if ( unlikely((rd = find_domain_by_id(dom)) == NULL) ||
+ unlikely(ld == rd) )
+ {
+ if ( rd != NULL )
+ put_domain(rd);
+ DPRINTK("Could not find domain %d\n", dom);
+ (void)__put_user(GNTST_bad_domain, &uop->handle);
+ return GNTST_bad_domain;
+ }
+
+ /* Get a maptrack handle. */
+ if ( unlikely((handle = get_maptrack_handle(ld->grant_table)) == -1) )
+ {
+ int i;
+ grant_mapping_t *new_mt;
+ grant_table_t *lgt = ld->grant_table;
+
+ if ( (lgt->maptrack_limit << 1) > MAPTRACK_MAX_ENTRIES )
+ {
+ put_domain(rd);
+ DPRINTK("Maptrack table is at maximum size.\n");
+ (void)__put_user(GNTST_no_device_space, &uop->handle);
+ return GNTST_no_device_space;
+ }
+
+ /* Grow the maptrack table. */
+ new_mt = alloc_xenheap_pages(lgt->maptrack_order + 1);
+ if ( new_mt == NULL )
+ {
+ put_domain(rd);
+ DPRINTK("No more map handles available.\n");
+ (void)__put_user(GNTST_no_device_space, &uop->handle);
+ return GNTST_no_device_space;
+ }
+
+ memcpy(new_mt, lgt->maptrack, PAGE_SIZE << lgt->maptrack_order);
+ for ( i = lgt->maptrack_limit; i < (lgt->maptrack_limit << 1); i++ )
+ new_mt[i].ref_and_flags = (i+1) << MAPTRACK_REF_SHIFT;
+
+ free_xenheap_pages(lgt->maptrack, lgt->maptrack_order);
+ lgt->maptrack = new_mt;
+ lgt->maptrack_order += 1;
+ lgt->maptrack_limit <<= 1;
+
+ DPRINTK("Doubled maptrack size\n");
+ handle = get_maptrack_handle(ld->grant_table);
+ }
+
+ act = &rd->grant_table->active[ref];
+ sha = &rd->grant_table->shared[ref];
+
+ spin_lock(&rd->grant_table->lock);
if ( act->pin == 0 )
{
@@ -132,10 +198,10 @@
u32 scombo, prev_scombo, new_scombo;
if ( unlikely((sflags & GTF_type_mask) != GTF_permit_access) ||
- unlikely(sdom != mapping_d->domain_id) )
+ unlikely(sdom != led->domain->domain_id) )
PIN_FAIL(unlock_out, GNTST_general_error,
"Bad flags (%x) or dom (%d). (NB. expected dom %d)\n",
- sflags, sdom, mapping_d->domain_id);
+ sflags, sdom, led->domain->domain_id);
/* Merge two 16-bit values into a 32-bit combined update. */
/* NB. Endianness! */
@@ -173,12 +239,12 @@
/* rmb(); */ /* not on x86 */
- frame = __gpfn_to_mfn_foreign(granting_d, sha->frame);
+ frame = __gpfn_to_mfn_foreign(rd, sha->frame);
if ( unlikely(!pfn_valid(frame)) ||
unlikely(!((dev_hst_ro_flags & GNTMAP_readonly) ?
- get_page(&frame_table[frame], granting_d) :
- get_page_and_type(&frame_table[frame], granting_d,
+ get_page(&frame_table[frame], rd) :
+ get_page_and_type(&frame_table[frame], rd,
PGT_writable_page))) )
{
clear_bit(_GTF_writing, &sha->flags);
@@ -208,10 +274,11 @@
PIN_FAIL(unlock_out, ENOSPC,
"Risk of counter overflow %08x\n", act->pin);
- frame = act->frame;
-
- if ( !(dev_hst_ro_flags & GNTMAP_readonly) &&
- !((sflags = sha->flags) & GTF_writing) )
+ sflags = sha->flags;
+ frame = act->frame;
+
+ if ( !(dev_hst_ro_flags & GNTMAP_readonly) &&
+ !(act->pin & (GNTPIN_hstw_mask|GNTPIN_devw_mask)) )
{
for ( ; ; )
{
@@ -264,9 +331,9 @@
* frame contains the mfn.
*/
- spin_unlock(&granting_d->grant_table->lock);
-
- if ( (addr != 0) && (dev_hst_ro_flags & GNTMAP_host_map) )
+ spin_unlock(&rd->grant_table->lock);
+
+ if ( dev_hst_ro_flags & GNTMAP_host_map )
{
/* Write update into the pagetable. */
l1_pgentry_t pte;
@@ -278,18 +345,15 @@
l1e_add_flags(pte,_PAGE_RW);
if ( dev_hst_ro_flags & GNTMAP_contains_pte )
- rc = update_grant_pte_mapping(addr, pte, mapping_d, mapping_ed);
+ rc = update_grant_pte_mapping(addr, pte, led);
else
- rc = update_grant_va_mapping(addr, pte, mapping_d, mapping_ed);
-
- /* IMPORTANT: rc indicates the degree of TLB flush that is required.
- * GNTST_flush_one (1) or GNTST_flush_all (2). This is done in the
- * outer gnttab_map_grant_ref. */
+ rc = update_grant_va_mapping(addr, pte, led);
+
if ( rc < 0 )
{
/* Failure: undo and abort. */
- spin_lock(&granting_d->grant_table->lock);
+ spin_lock(&rd->grant_table->lock);
if ( dev_hst_ro_flags & GNTMAP_readonly )
{
@@ -311,160 +375,27 @@
put_page(&frame_table[frame]);
}
- spin_unlock(&granting_d->grant_table->lock);
- }
-
- }
-
- *pframe = frame;
+ spin_unlock(&rd->grant_table->lock);
+ }
+
+ }
+
+ ld->grant_table->maptrack[handle].domid = dom;
+ ld->grant_table->maptrack[handle].ref_and_flags =
+ (ref << MAPTRACK_REF_SHIFT) |
+ (dev_hst_ro_flags & MAPTRACK_GNTMAP_MASK);
+
+ (void)__put_user((u64)frame << PAGE_SHIFT, &uop->dev_bus_addr);
+ (void)__put_user(handle, &uop->handle);
+
+ put_domain(rd);
return rc;
+
unlock_out:
- spin_unlock(&granting_d->grant_table->lock);
- return rc;
-}
-
-/*
- * Returns 0 if TLB flush / invalidate required by caller.
- * va will indicate the address to be invalidated.
- *
- * addr is _either_ a host virtual address, or the address of the pte to
- * update, as indicated by the GNTMAP_contains_pte flag.
- */
-static int
-__gnttab_map_grant_ref(
- gnttab_map_grant_ref_t *uop,
- unsigned long *va)
-{
- domid_t dom;
- grant_ref_t ref;
- struct domain *ld, *rd;
- struct vcpu *led;
- u16 dev_hst_ro_flags;
- int handle;
- u64 addr;
- unsigned long frame = 0;
- int rc;
-
- led = current;
- ld = led->domain;
-
- /* Bitwise-OR avoids short-circuiting which screws control flow. */
- if ( unlikely(__get_user(dom, &uop->dom) |
- __get_user(ref, &uop->ref) |
- __get_user(addr, &uop->host_addr) |
- __get_user(dev_hst_ro_flags, &uop->flags)) )
- {
- DPRINTK("Fault while reading gnttab_map_grant_ref_t.\n");
- return -EFAULT; /* don't set status */
- }
-
- if ( (dev_hst_ro_flags & GNTMAP_host_map) &&
- ( (addr == 0) ||
- (!(dev_hst_ro_flags & GNTMAP_contains_pte) &&
- unlikely(!__addr_ok(addr))) ) )
- {
- DPRINTK("Bad virtual address (%"PRIx64") or flags (%"PRIx16").\n",
- addr, dev_hst_ro_flags);
- (void)__put_user(GNTST_bad_virt_addr, &uop->handle);
- return GNTST_bad_gntref;
- }
-
- if ( unlikely(ref >= NR_GRANT_ENTRIES) ||
- unlikely((dev_hst_ro_flags &
- (GNTMAP_device_map|GNTMAP_host_map)) == 0) )
- {
- DPRINTK("Bad ref (%d) or flags (%x).\n", ref, dev_hst_ro_flags);
- (void)__put_user(GNTST_bad_gntref, &uop->handle);
- return GNTST_bad_gntref;
- }
-
- if (acm_pre_grant_map_ref(dom)) {
- (void)__put_user(GNTST_permission_denied, &uop->handle);
- return GNTST_permission_denied;
- }
-
- if ( unlikely((rd = find_domain_by_id(dom)) == NULL) ||
- unlikely(ld == rd) )
- {
- if ( rd != NULL )
- put_domain(rd);
- DPRINTK("Could not find domain %d\n", dom);
- (void)__put_user(GNTST_bad_domain, &uop->handle);
- return GNTST_bad_domain;
- }
-
- /* Get a maptrack handle. */
- if ( unlikely((handle = get_maptrack_handle(ld->grant_table)) == -1) )
- {
- int i;
- grant_mapping_t *new_mt;
- grant_table_t *lgt = ld->grant_table;
-
- if ( (lgt->maptrack_limit << 1) > MAPTRACK_MAX_ENTRIES )
- {
- put_domain(rd);
- DPRINTK("Maptrack table is at maximum size.\n");
- (void)__put_user(GNTST_no_device_space, &uop->handle);
- return GNTST_no_device_space;
- }
-
- /* Grow the maptrack table. */
- new_mt = alloc_xenheap_pages(lgt->maptrack_order + 1);
- if ( new_mt == NULL )
- {
- put_domain(rd);
- DPRINTK("No more map handles available.\n");
- (void)__put_user(GNTST_no_device_space, &uop->handle);
- return GNTST_no_device_space;
- }
-
- memcpy(new_mt, lgt->maptrack, PAGE_SIZE << lgt->maptrack_order);
- for ( i = lgt->maptrack_limit; i < (lgt->maptrack_limit << 1); i++ )
- new_mt[i].ref_and_flags = (i+1) << MAPTRACK_REF_SHIFT;
-
- free_xenheap_pages(lgt->maptrack, lgt->maptrack_order);
- lgt->maptrack = new_mt;
- lgt->maptrack_order += 1;
- lgt->maptrack_limit <<= 1;
-
- DPRINTK("Doubled maptrack size\n");
- handle = get_maptrack_handle(ld->grant_table);
- }
-
-#if GRANT_DEBUG_VERBOSE
- DPRINTK("Mapping grant ref (%hu) for domain (%hu) with flags (%x)\n",
- ref, dom, dev_hst_ro_flags);
-#endif
-
- if ( (rc = __gnttab_activate_grant_ref(ld, led, rd, ref, dev_hst_ro_flags,
- addr, &frame)) >= 0 )
- {
- /*
- * Only make the maptrack live _after_ writing the pte, in case we
- * overwrite the same frame number, causing a maptrack walk to find it
- */
- ld->grant_table->maptrack[handle].domid = dom;
-
- ld->grant_table->maptrack[handle].ref_and_flags
- = (ref << MAPTRACK_REF_SHIFT) |
- (dev_hst_ro_flags & MAPTRACK_GNTMAP_MASK);
-
- (void)__put_user((u64)frame << PAGE_SHIFT, &uop->dev_bus_addr);
-
- if ( ( dev_hst_ro_flags & GNTMAP_host_map ) &&
- !( dev_hst_ro_flags & GNTMAP_contains_pte) )
- *va = addr;
-
- (void)__put_user(handle, &uop->handle);
- }
- else
- {
- (void)__put_user(rc, &uop->handle);
- put_maptrack_handle(ld->grant_table, handle);
- }
-
- put_domain(rd);
+ spin_unlock(&rd->grant_table->lock);
+ (void)__put_user(rc, &uop->handle);
+ put_maptrack_handle(ld->grant_table, handle);
return rc;
}
@@ -472,25 +403,17 @@
gnttab_map_grant_ref(
gnttab_map_grant_ref_t *uop, unsigned int count)
{
- int i, rc, flush = 0;
- unsigned long va = 0;
+ int i;
for ( i = 0; i < count; i++ )
- if ( (rc =__gnttab_map_grant_ref(&uop[i], &va)) >= 0 )
- flush += rc;
-
- if ( flush == 1 )
- flush_tlb_one_mask(current->domain->cpumask, va);
- else if ( flush != 0 )
- flush_tlb_mask(current->domain->cpumask);
+ (void)__gnttab_map_grant_ref(&uop[i]);
return 0;
}
static int
__gnttab_unmap_grant_ref(
- gnttab_unmap_grant_ref_t *uop,
- unsigned long *va)
+ gnttab_unmap_grant_ref_t *uop)
{
domid_t dom;
grant_ref_t ref;
@@ -500,7 +423,7 @@
grant_entry_t *sha;
grant_mapping_t *map;
u16 flags;
- s16 rc = 1;
+ s16 rc = 0;
u64 addr, dev_bus_addr;
unsigned long frame;
@@ -540,11 +463,6 @@
(void)__put_user(GNTST_bad_domain, &uop->status);
return GNTST_bad_domain;
}
-
-#if GRANT_DEBUG_VERBOSE
- DPRINTK("Unmapping grant ref (%hu) for domain (%hu) with handle (%hu)\n",
- ref, dom, handle);
-#endif
act = &rd->grant_table->active[ref];
sha = &rd->grant_table->shared[ref];
@@ -566,8 +484,6 @@
map->ref_and_flags &= ~GNTMAP_device_map;
(void)__put_user(0, &uop->dev_bus_addr);
-
- /* Frame is now unmapped for device access. */
}
if ( (addr != 0) &&
@@ -589,10 +505,6 @@
act->pin -= (flags & GNTMAP_readonly) ? GNTPIN_hstr_inc
: GNTPIN_hstw_inc;
-
- rc = 0;
- if ( !( flags & GNTMAP_contains_pte) )
- *va = addr;
}
if ( (map->ref_and_flags & (GNTMAP_device_map|GNTMAP_host_map)) == 0)
@@ -632,17 +544,12 @@
gnttab_unmap_grant_ref(
gnttab_unmap_grant_ref_t *uop, unsigned int count)
{
- int i, flush = 0;
- unsigned long va = 0;
+ int i;
for ( i = 0; i < count; i++ )
- if ( __gnttab_unmap_grant_ref(&uop[i], &va) == 0 )
- flush++;
-
- if ( flush == 1 )
- flush_tlb_one_mask(current->domain->cpumask, va);
- else if ( flush != 0 )
- flush_tlb_mask(current->domain->cpumask);
+ (void)__gnttab_unmap_grant_ref(&uop[i]);
+
+ flush_tlb_mask(current->domain->cpumask);
return 0;
}
@@ -703,9 +610,9 @@
return 0;
}
-#if GRANT_DEBUG
static int
-gnttab_dump_table(gnttab_dump_table_t *uop)
+gnttab_dump_table(
+ gnttab_dump_table_t *uop)
{
grant_table_t *gt;
gnttab_dump_table_t op;
@@ -716,6 +623,8 @@
grant_mapping_t *maptrack;
int i;
+ if ( !IS_PRIV(current->domain) )
+ return -EPERM;
if ( unlikely(copy_from_user(&op, uop, sizeof(op)) != 0) )
{
@@ -724,9 +633,7 @@
}
if ( op.dom == DOMID_SELF )
- {
op.dom = current->domain->domain_id;
- }
if ( unlikely((d = find_domain_by_id(op.dom)) == NULL) )
{
@@ -750,14 +657,11 @@
for ( i = 0; i < NR_GRANT_ENTRIES; i++ )
{
- sha_copy = gt->shared[i];
-
+ sha_copy = gt->shared[i];
if ( sha_copy.flags )
- {
DPRINTK("Grant: dom (%hu) SHARED (%d) flags:(%hx) "
"dom:(%hu) frame:(%x)\n",
op.dom, i, sha_copy.flags, sha_copy.domid, sha_copy.frame);
- }
}
spin_lock(>->lock);
@@ -765,28 +669,22 @@
for ( i = 0; i < NR_GRANT_ENTRIES; i++ )
{
act = >->active[i];
-
if ( act->pin )
- {
DPRINTK("Grant: dom (%hu) ACTIVE (%d) pin:(%x) "
"dom:(%hu) frame:(%lx)\n",
op.dom, i, act->pin, act->domid, act->frame);
- }
}
for ( i = 0; i < gt->maptrack_limit; i++ )
{
maptrack = >->maptrack[i];
-
if ( maptrack->ref_and_flags & MAPTRACK_GNTMAP_MASK )
- {
DPRINTK("Grant: dom (%hu) MAP (%d) ref:(%hu) flags:(%x) "
"dom:(%hu)\n",
op.dom, i,
maptrack->ref_and_flags >> MAPTRACK_REF_SHIFT,
maptrack->ref_and_flags & MAPTRACK_GNTMAP_MASK,
maptrack->domid);
- }
}
spin_unlock(>->lock);
@@ -794,10 +692,10 @@
put_domain(d);
return 0;
}
-#endif
static long
-gnttab_transfer(gnttab_transfer_t *uop, unsigned int count)
+gnttab_transfer(
+ gnttab_transfer_t *uop, unsigned int count)
{
struct domain *d = current->domain;
struct domain *e;
@@ -810,10 +708,7 @@
for ( i = 0; i < count; i++ )
{
gnttab_transfer_t *gop = &uop[i];
-#if GRANT_DEBUG
- printk("gnttab_transfer: i=%d mfn=%lx domid=%d gref=%08x\n",
- i, gop->mfn, gop->domid, gop->handle);
-#endif
+
page = &frame_table[gop->mfn];
if ( unlikely(IS_XEN_HEAP_FRAME(page)))
@@ -956,11 +851,9 @@
case GNTTABOP_setup_table:
rc = gnttab_setup_table((gnttab_setup_table_t *)uop, count);
break;
-#if GRANT_DEBUG
case GNTTABOP_dump_table:
rc = gnttab_dump_table((gnttab_dump_table_t *)uop);
break;
-#endif
case GNTTABOP_transfer:
if (unlikely(!array_access_ok(
uop, count, sizeof(gnttab_transfer_t))))
@@ -1001,12 +894,6 @@
int found = 0;
lgt = ld->grant_table;
-
-#if GRANT_DEBUG_VERBOSE
- if ( ld->domain_id != 0 )
- DPRINTK("Foreign unref rd(%d) ld(%d) frm(%lx) flgs(%x).\n",
- rd->domain_id, ld->domain_id, frame, readonly);
-#endif
/* Fast exit if we're not mapping anything using grant tables */
if ( lgt->map_count == 0 )
@@ -1098,11 +985,6 @@
int retries = 0;
unsigned long target_pfn;
-#if GRANT_DEBUG_VERBOSE
- DPRINTK("gnttab_prepare_for_transfer rd(%hu) ld(%hu) ref(%hu).\n",
- rd->domain_id, ld->domain_id, ref);
-#endif
-
if ( unlikely((rgt = rd->grant_table) == NULL) ||
unlikely(ref >= NR_GRANT_ENTRIES) )
{
diff -r ab1c362ba0d1 -r ad0270abc9b9 xen/include/asm-x86/mm.h
--- a/xen/include/asm-x86/mm.h Fri Sep 23 15:56:46 2005
+++ b/xen/include/asm-x86/mm.h Fri Sep 23 15:57:13 2005
@@ -380,11 +380,9 @@
* hold a reference to the page.
*/
int update_grant_va_mapping(
- unsigned long va, l1_pgentry_t _nl1e,
- struct domain *d, struct vcpu *v);
+ unsigned long va, l1_pgentry_t _nl1e, struct vcpu *v);
int update_grant_pte_mapping(
- unsigned long pte_addr, l1_pgentry_t _nl1e,
- struct domain *d, struct vcpu *v);
+ unsigned long pte_addr, l1_pgentry_t _nl1e, struct vcpu *v);
int clear_grant_va_mapping(unsigned long addr, unsigned long frame);
int clear_grant_pte_mapping(
unsigned long addr, unsigned long frame, struct domain *d);
diff -r ab1c362ba0d1 -r ad0270abc9b9 xen/include/xen/grant_table.h
--- a/xen/include/xen/grant_table.h Fri Sep 23 15:56:46 2005
+++ b/xen/include/xen/grant_table.h Fri Sep 23 15:57:13 2005
@@ -110,8 +110,4 @@
void
gnttab_release_dev_mappings(grant_table_t *gt);
-/* Extra GNTST_ values, for internal use only. */
-#define GNTST_flush_all (2) /* Success, need to flush entire TLB. */
-#define GNTST_flush_one (1) /* Success, need to flush a vaddr. */
-
#endif /* __XEN_GRANT_H__ */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|