# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID b6ededee6dc997ebe379aeb9c647ca6d43a96b8d
# Parent eb2c985e88be573f10f5ef48ff93fa1b2c1f0927
Make grant-table dev_bus_addr really be an address, not a frame
number. Also get rid of GNTUNMAP_DEV_FROM_VIRT -- it makes little
sense and noone uses it.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r eb2c985e88be -r b6ededee6dc9
linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Sun Aug 21
16:49:54 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Sun Aug 21
17:06:08 2005
@@ -431,7 +431,7 @@
}
phys_to_machine_mapping[__pa(MMAP_VADDR(pending_idx, i))>>PAGE_SHIFT] =
- FOREIGN_FRAME(map[i].dev_bus_addr);
+ FOREIGN_FRAME(map[i].dev_bus_addr >> PAGE_SHIFT);
pending_handle(pending_idx, i) = map[i].handle;
}
@@ -441,8 +441,7 @@
{
fas = req->frame_and_sects[i];
#ifdef CONFIG_XEN_BLKDEV_GRANT
- seg[i].buf = (map[i].dev_bus_addr << PAGE_SHIFT) |
- (blkif_first_sect(fas) << 9);
+ seg[i].buf = map[i].dev_bus_addr | (blkif_first_sect(fas) << 9);
#else
seg[i].buf = (fas & PAGE_MASK) | (blkif_first_sect(fas) << 9);
seg[i].nsec = blkif_last_sect(fas) - blkif_first_sect(fas) + 1;
diff -r eb2c985e88be -r b6ededee6dc9
linux-2.6-xen-sparse/drivers/xen/blktap/blktap_userdev.c
--- a/linux-2.6-xen-sparse/drivers/xen/blktap/blktap_userdev.c Sun Aug 21
16:49:54 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blktap/blktap_userdev.c Sun Aug 21
17:06:08 2005
@@ -5,7 +5,6 @@
* Control interface between the driver and a character device.
*
* Copyright (c) 2004, Andrew Warfield
- *
*/
#include <linux/config.h>
@@ -535,8 +534,8 @@
/* Set the necessary mappings in p2m and in the VM_FOREIGN
* vm_area_struct to allow user vaddr -> struct page lookups
* to work. This is needed for direct IO to foreign pages. */
- phys_to_machine_mapping[__pa(kvaddr)>>PAGE_SHIFT] =
- FOREIGN_FRAME(map[i].dev_bus_addr);
+ phys_to_machine_mapping[__pa(kvaddr) >> PAGE_SHIFT] =
+ FOREIGN_FRAME(map[i].dev_bus_addr >> PAGE_SHIFT);
offset = (uvaddr - blktap_vma->vm_start) >> PAGE_SHIFT;
((struct page **)blktap_vma->vm_private_data)[offset] =
diff -r eb2c985e88be -r b6ededee6dc9
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Sun Aug 21
16:49:54 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Sun Aug 21
17:06:08 2005
@@ -768,7 +768,7 @@
continue;
}
phys_to_machine_mapping[__pa(MMAP_VADDR(pending_idx)) >> PAGE_SHIFT] =
- FOREIGN_FRAME(mop->dev_bus_addr);
+ FOREIGN_FRAME(mop->dev_bus_addr >> PAGE_SHIFT);
grant_tx_ref[pending_idx] = mop->handle;
#else
if ( unlikely(mcl[0].result != 0) )
diff -r eb2c985e88be -r b6ededee6dc9 xen/arch/ia64/grant_table.c
--- a/xen/arch/ia64/grant_table.c Sun Aug 21 16:49:54 2005
+++ b/xen/arch/ia64/grant_table.c Sun Aug 21 17:06:08 2005
@@ -546,15 +546,6 @@
{
frame = act->frame;
}
- else if ( frame == GNTUNMAP_DEV_FROM_VIRT )
- {
- if ( !( flags & GNTMAP_device_map ) )
- PIN_FAIL(unmap_out, GNTST_bad_dev_addr,
- "Bad frame number: frame not mapped for dev access.\n");
- frame = act->frame;
-
- /* Frame will be unmapped for device access below if virt addr okay. */
- }
else
{
if ( unlikely(frame != act->frame) )
@@ -615,15 +606,6 @@
act->pin -= (flags & GNTMAP_readonly) ? GNTPIN_hstr_inc
: GNTPIN_hstw_inc;
-
- if ( frame == GNTUNMAP_DEV_FROM_VIRT )
- {
- act->pin -= (flags & GNTMAP_readonly) ? GNTPIN_devr_inc
- : GNTPIN_devw_inc;
-
- map->ref_and_flags &= ~GNTMAP_device_map;
- (void)__put_user(0, &uop->dev_bus_addr);
- }
rc = 0;
*va = virt;
diff -r eb2c985e88be -r b6ededee6dc9 xen/common/grant_table.c
--- a/xen/common/grant_table.c Sun Aug 21 16:49:54 2005
+++ b/xen/common/grant_table.c Sun Aug 21 17:06:08 2005
@@ -76,7 +76,7 @@
grant_ref_t ref,
u16 dev_hst_ro_flags,
u64 addr,
- u64 *pframe ) /* OUT */
+ unsigned long *pframe ) /* OUT */
{
domid_t sdom;
u16 sflags;
@@ -336,14 +336,15 @@
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 frame = 0, addr;
- int rc;
+ 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;
@@ -450,7 +451,7 @@
= (ref << MAPTRACK_REF_SHIFT) |
(dev_hst_ro_flags & MAPTRACK_GNTMAP_MASK);
- (void)__put_user(frame, &uop->dev_bus_addr);
+ (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) )
@@ -492,27 +493,30 @@
gnttab_unmap_grant_ref_t *uop,
unsigned long *va)
{
- domid_t dom;
- grant_ref_t ref;
- u16 handle;
- struct domain *ld, *rd;
+ domid_t dom;
+ grant_ref_t ref;
+ u16 handle;
+ struct domain *ld, *rd;
active_grant_entry_t *act;
- grant_entry_t *sha;
+ grant_entry_t *sha;
grant_mapping_t *map;
- u16 flags;
- s16 rc = 1;
- u64 frame, addr;
+ u16 flags;
+ s16 rc = 1;
+ u64 addr, dev_bus_addr;
+ unsigned long frame;
ld = current->domain;
/* Bitwise-OR avoids short-circuiting which screws control flow. */
if ( unlikely(__get_user(addr, &uop->host_addr) |
- __get_user(frame, &uop->dev_bus_addr) |
+ __get_user(dev_bus_addr, &uop->dev_bus_addr) |
__get_user(handle, &uop->handle)) )
{
DPRINTK("Fault while reading gnttab_unmap_grant_ref_t.\n");
return -EFAULT; /* don't set status */
}
+
+ frame = (unsigned long)(dev_bus_addr >> PAGE_SHIFT);
map = &ld->grant_table->maptrack[handle];
@@ -551,15 +555,6 @@
if ( frame == 0 )
{
frame = act->frame;
- }
- else if ( frame == GNTUNMAP_DEV_FROM_VIRT )
- {
- if ( !( flags & GNTMAP_device_map ) )
- PIN_FAIL(unmap_out, GNTST_bad_dev_addr,
- "Bad frame number: frame not mapped for dev access.\n");
- frame = act->frame;
-
- /* Frame will be unmapped for device access below if virt addr okay. */
}
else
{
@@ -595,15 +590,6 @@
act->pin -= (flags & GNTMAP_readonly) ? GNTPIN_hstr_inc
: GNTPIN_hstw_inc;
-
- if ( frame == GNTUNMAP_DEV_FROM_VIRT )
- {
- act->pin -= (flags & GNTMAP_readonly) ? GNTPIN_devr_inc
- : GNTPIN_devw_inc;
-
- map->ref_and_flags &= ~GNTMAP_device_map;
- (void)__put_user(0, &uop->dev_bus_addr);
- }
rc = 0;
if ( !( flags & GNTMAP_contains_pte) )
diff -r eb2c985e88be -r b6ededee6dc9 xen/include/public/dom0_ops.h
--- a/xen/include/public/dom0_ops.h Sun Aug 21 16:49:54 2005
+++ b/xen/include/public/dom0_ops.h Sun Aug 21 17:06:08 2005
@@ -19,7 +19,7 @@
* This makes sure that old versions of dom0 tools will stop working in a
* well-defined way (rather than crashing the machine, for instance).
*/
-#define DOM0_INTERFACE_VERSION 0xAAAA100F
+#define DOM0_INTERFACE_VERSION 0xAAAA1010
/************************************************************************/
diff -r eb2c985e88be -r b6ededee6dc9 xen/include/public/grant_table.h
--- a/xen/include/public/grant_table.h Sun Aug 21 16:49:54 2005
+++ b/xen/include/public/grant_table.h Sun Aug 21 17:06:08 2005
@@ -183,8 +183,6 @@
s16 status; /* GNTST_* */
} gnttab_unmap_grant_ref_t;
-#define GNTUNMAP_DEV_FROM_VIRT (~0U)
-
/*
* GNTTABOP_setup_table: Set up a grant table for <dom> comprising at least
* <nr_frames> pages. The frame addresses are written to the <frame_list>.
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|