# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 58d46463413ec97caa0c4301a3d2d350747a5dc5
# Parent ff95b53bd39a74e17fd3c08f6b50a0c43794ec7c
GNTTABOP_map_grant_ref returns error status and handle as
separate fields. Update callers for new interface. Also
use int16_t as standard error code type on all public
interfaces.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Wed Nov 30
15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Wed Nov 30
16:24:27 2005
@@ -88,10 +88,10 @@
* handle returned must be used to unmap the frame. This is needed to
* drop the ref count on the frame.
*/
-static u16 pending_grant_handles[MMAP_PAGES];
+static grant_handle_t pending_grant_handles[MMAP_PAGES];
#define pending_handle(_idx, _i) \
(pending_grant_handles[((_idx) * BLKIF_MAX_SEGMENTS_PER_REQUEST) + (_i)])
-#define BLKBACK_INVALID_HANDLE (0xFFFF)
+#define BLKBACK_INVALID_HANDLE (~0)
#ifdef CONFIG_XEN_BLKDEV_TAP_BE
/*
@@ -114,7 +114,7 @@
{
struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
unsigned int i, invcount = 0;
- u16 handle;
+ grant_handle_t handle;
int ret;
for (i = 0; i < nr_pages; i++) {
@@ -381,7 +381,7 @@
BUG_ON(ret);
for (i = 0; i < nseg; i++) {
- if (likely(map[i].handle >= 0)) {
+ if (likely(map[i].status == 0)) {
pending_handle(pending_idx, i) = map[i].handle;
#ifdef __ia64__
MMAP_VADDR(pending_idx,i) = gnttab_map_vaddr(map[i]);
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/blkback/common.h
--- a/linux-2.6-xen-sparse/drivers/xen/blkback/common.h Wed Nov 30 15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkback/common.h Wed Nov 30 16:24:27 2005
@@ -66,8 +66,8 @@
struct work_struct free_work;
- u16 shmem_handle;
- grant_ref_t shmem_ref;
+ grant_handle_t shmem_handle;
+ grant_ref_t shmem_ref;
} blkif_t;
blkif_t *alloc_blkif(domid_t domid);
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/blkback/interface.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkback/interface.c Wed Nov 30
15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkback/interface.c Wed Nov 30
16:24:27 2005
@@ -43,9 +43,9 @@
unlock_vm_area(blkif->blk_ring_area);
BUG_ON(ret);
- if (op.handle < 0) {
+ if (op.status) {
DPRINTK(" Grant table operation failure !\n");
- return op.handle;
+ return op.status;
}
blkif->shmem_ref = shared_page;
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c
--- a/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c Wed Nov 30 15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c Wed Nov 30 16:24:27 2005
@@ -177,8 +177,8 @@
*/
struct grant_handle_pair
{
- u16 kernel;
- u16 user;
+ grant_handle_t kernel;
+ grant_handle_t user;
};
static struct grant_handle_pair pending_grant_handles[MMAP_PAGES];
#define pending_handle(_idx, _i) \
@@ -755,17 +755,17 @@
uvaddr = MMAP_VADDR(user_vstart, pending_idx, i/2);
kvaddr = MMAP_VADDR(mmap_vstart, pending_idx, i/2);
- if (unlikely(map[i].handle < 0)) {
+ if (unlikely(map[i].status)) {
DPRINTK("Error on kernel grant mapping (%d)\n",
- map[i].handle);
- ret = map[i].handle;
+ map[i].status);
+ ret = map[i].status;
cancel = 1;
}
- if (unlikely(map[i+1].handle < 0)) {
+ if (unlikely(map[i+1].status)) {
DPRINTK("Error on user grant mapping (%d)\n",
- map[i+1].handle);
- ret = map[i+1].handle;
+ map[i+1].status);
+ ret = map[i+1].status;
cancel = 1;
}
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/blktap/common.h
--- a/linux-2.6-xen-sparse/drivers/xen/blktap/common.h Wed Nov 30 15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blktap/common.h Wed Nov 30 16:24:27 2005
@@ -64,7 +64,7 @@
struct work_struct free_work;
- u16 shmem_handle;
+ grant_handle_t shmem_handle;
grant_ref_t shmem_ref;
} blkif_t;
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/blktap/interface.c
--- a/linux-2.6-xen-sparse/drivers/xen/blktap/interface.c Wed Nov 30
15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blktap/interface.c Wed Nov 30
16:24:27 2005
@@ -43,9 +43,9 @@
unlock_vm_area(blkif->blk_ring_area);
BUG_ON(ret);
- if (op.handle < 0) {
+ if (op.status) {
DPRINTK(" Grant table operation failure !\n");
- return op.handle;
+ return op.status;
}
blkif->shmem_ref = shared_page;
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/netback/common.h
--- a/linux-2.6-xen-sparse/drivers/xen/netback/common.h Wed Nov 30 15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/common.h Wed Nov 30 16:24:27 2005
@@ -45,9 +45,9 @@
u8 fe_dev_addr[6];
/* Physical parameters of the comms window. */
- u16 tx_shmem_handle;
+ grant_handle_t tx_shmem_handle;
grant_ref_t tx_shmem_ref;
- u16 rx_shmem_handle;
+ grant_handle_t rx_shmem_handle;
grant_ref_t rx_shmem_ref;
unsigned int evtchn;
unsigned int irq;
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/netback/interface.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c Wed Nov 30
15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c Wed Nov 30
16:24:27 2005
@@ -127,9 +127,9 @@
unlock_vm_area(netif->comms_area);
BUG_ON(ret);
- if (op.handle < 0) {
+ if (op.status) {
DPRINTK(" Gnttab failure mapping tx_ring_ref!\n");
- return op.handle;
+ return op.status;
}
netif->tx_shmem_ref = tx_ring_ref;
@@ -145,9 +145,9 @@
unlock_vm_area(netif->comms_area);
BUG_ON(ret);
- if (op.handle < 0) {
+ if (op.status) {
DPRINTK(" Gnttab failure mapping rx_ring_ref!\n");
- return op.handle;
+ return op.status;
}
netif->rx_shmem_ref = rx_ring_ref;
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Wed Nov 30
15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Wed Nov 30
16:24:27 2005
@@ -68,7 +68,7 @@
static struct sk_buff_head tx_queue;
-static u16 grant_tx_ref[MAX_PENDING_REQS];
+static grant_handle_t grant_tx_handle[MAX_PENDING_REQS];
static gnttab_unmap_grant_ref_t tx_unmap_ops[MAX_PENDING_REQS];
static gnttab_map_grant_ref_t tx_map_ops[MAX_PENDING_REQS];
@@ -412,7 +412,7 @@
pending_idx = dealloc_ring[MASK_PEND_IDX(dc++)];
gop->host_addr = MMAP_VADDR(pending_idx);
gop->dev_bus_addr = 0;
- gop->handle = grant_tx_ref[pending_idx];
+ gop->handle = grant_tx_handle[pending_idx];
gop++;
}
ret = HYPERVISOR_grant_table_op(
@@ -592,7 +592,7 @@
sizeof(txreq));
/* Check the remap error code. */
- if (unlikely(mop->handle < 0)) {
+ if (unlikely(mop->status)) {
printk(KERN_ALERT "#### netback grant fails\n");
make_tx_response(netif, txreq.id, NETIF_RSP_ERROR);
netif_put(netif);
@@ -605,7 +605,7 @@
set_phys_to_machine(
__pa(MMAP_VADDR(pending_idx)) >> PAGE_SHIFT,
FOREIGN_FRAME(mop->dev_bus_addr >> PAGE_SHIFT));
- grant_tx_ref[pending_idx] = mop->handle;
+ grant_tx_handle[pending_idx] = mop->handle;
data_len = (txreq.size > PKT_PROT_LEN) ?
PKT_PROT_LEN : txreq.size;
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/tpmback/common.h
--- a/linux-2.6-xen-sparse/drivers/xen/tpmback/common.h Wed Nov 30 15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/tpmback/common.h Wed Nov 30 16:24:27 2005
@@ -54,7 +54,7 @@
struct work_struct work;
- u16 shmem_handle;
+ grant_handle_t shmem_handle;
grant_ref_t shmem_ref;
} tpmif_t;
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/tpmback/interface.c
--- a/linux-2.6-xen-sparse/drivers/xen/tpmback/interface.c Wed Nov 30
15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/tpmback/interface.c Wed Nov 30
16:24:27 2005
@@ -91,9 +91,9 @@
unlock_vm_area(tpmif->tx_area);
BUG_ON(ret);
- if (op.handle < 0) {
+ if (op.status) {
DPRINTK(" Grant table operation failure !\n");
- return op.handle;
+ return op.status;
}
tpmif->shmem_ref = shared_page;
diff -r ff95b53bd39a -r 58d46463413e
linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c
--- a/linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c Wed Nov 30
15:03:05 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c Wed Nov 30
16:24:27 2005
@@ -249,7 +249,7 @@
* and send it to the front end.
*/
tpmif_t *tpmif = pak->tpmif;
- u16 handle;
+ grant_handle_t handle;
int rc = 0;
unsigned int i = 0;
unsigned int offset = 0;
@@ -290,7 +290,7 @@
handle = map_op.handle;
- if (map_op.handle < 0) {
+ if (map_op.status) {
DPRINTK(" Grant table operation failure !\n");
return 0;
}
@@ -427,7 +427,7 @@
u32 i = (last_read / PAGE_SIZE);
u32 pg_offset = last_read & (PAGE_SIZE - 1);
u32 to_copy;
- u16 handle;
+ grant_handle_t handle;
tpmif_tx_request_t *tx;
tx = &tpmif->tx->ring[0].req;
@@ -455,7 +455,7 @@
BUG();
}
- if (map_op.handle < 0) {
+ if (map_op.status) {
DPRINTK(" Grant table operation failure !\n");
return -EFAULT;
}
diff -r ff95b53bd39a -r 58d46463413e tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c Wed Nov 30 15:03:05 2005
+++ b/tools/libxc/xc_domain.c Wed Nov 30 16:24:27 2005
@@ -365,9 +365,9 @@
int xc_domain_ioport_permission(int xc_handle,
uint32_t domid,
- uint16_t first_port,
- uint16_t nr_ports,
- uint16_t allow_access)
+ uint32_t first_port,
+ uint32_t nr_ports,
+ uint32_t allow_access)
{
DECLARE_DOM0_OP;
diff -r ff95b53bd39a -r 58d46463413e tools/libxc/xc_gnttab.c
--- a/tools/libxc/xc_gnttab.c Wed Nov 30 15:03:05 2005
+++ b/tools/libxc/xc_gnttab.c Wed Nov 30 16:24:27 2005
@@ -42,9 +42,10 @@
int xc_gnttab_map_grant_ref(int xc_handle,
uint64_t host_virt_addr,
uint32_t dom,
- uint16_t ref,
+ grant_ref_t ref,
uint16_t flags,
- int16_t *handle,
+ int16_t *status,
+ grant_handle_t *handle,
uint64_t *dev_bus_addr)
{
struct gnttab_map_grant_ref op;
@@ -58,6 +59,7 @@
if ( (rc = do_gnttab_op(xc_handle, GNTTABOP_map_grant_ref,
&op, 1)) == 0 )
{
+ *status = op.status;
*handle = op.handle;
*dev_bus_addr = op.dev_bus_addr;
}
@@ -69,7 +71,7 @@
int xc_gnttab_unmap_grant_ref(int xc_handle,
uint64_t host_virt_addr,
uint64_t dev_bus_addr,
- uint16_t handle,
+ grant_handle_t handle,
int16_t *status)
{
struct gnttab_unmap_grant_ref op;
diff -r ff95b53bd39a -r 58d46463413e tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h Wed Nov 30 15:03:05 2005
+++ b/tools/libxc/xenctrl.h Wed Nov 30 16:24:27 2005
@@ -13,6 +13,7 @@
#include <sys/ptrace.h>
#include <xen/xen.h>
#include <xen/dom0_ops.h>
+#include <xen/grant_table.h>
#include <xen/version.h>
#include <xen/event_channel.h>
#include <xen/sched.h>
@@ -374,9 +375,9 @@
int xc_domain_ioport_permission(int xc_handle,
uint32_t domid,
- uint16_t first_port,
- uint16_t nr_ports,
- uint16_t allow_access);
+ uint32_t first_port,
+ uint32_t nr_ports,
+ uint32_t allow_access);
unsigned long xc_make_page_below_4G(int xc_handle, uint32_t domid,
unsigned long mfn);
@@ -475,15 +476,16 @@
int xc_gnttab_map_grant_ref(int xc_handle,
uint64_t host_virt_addr,
uint32_t dom,
- uint16_t ref,
+ grant_ref_t ref,
uint16_t flags,
- int16_t *handle,
+ int16_t *status,
+ grant_handle_t *handle,
uint64_t *dev_bus_addr);
int xc_gnttab_unmap_grant_ref(int xc_handle,
uint64_t host_virt_addr,
uint64_t dev_bus_addr,
- uint16_t handle,
+ grant_handle_t handle,
int16_t *status);
int xc_gnttab_setup_table(int xc_handle,
diff -r ff95b53bd39a -r 58d46463413e xen/common/grant_table.c
--- a/xen/common/grant_table.c Wed Nov 30 15:03:05 2005
+++ b/xen/common/grant_table.c Wed Nov 30 16:24:27 2005
@@ -114,13 +114,13 @@
(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);
+ (void)__put_user(GNTST_bad_gntref, &uop->status);
return GNTST_bad_gntref;
}
if ( acm_pre_grant_map_ref(dom) )
{
- (void)__put_user(GNTST_permission_denied, &uop->handle);
+ (void)__put_user(GNTST_permission_denied, &uop->status);
return GNTST_permission_denied;
}
@@ -130,7 +130,7 @@
if ( rd != NULL )
put_domain(rd);
DPRINTK("Could not find domain %d\n", dom);
- (void)__put_user(GNTST_bad_domain, &uop->handle);
+ (void)__put_user(GNTST_bad_domain, &uop->status);
return GNTST_bad_domain;
}
@@ -145,7 +145,7 @@
{
put_domain(rd);
DPRINTK("Maptrack table is at maximum size.\n");
- (void)__put_user(GNTST_no_device_space, &uop->handle);
+ (void)__put_user(GNTST_no_device_space, &uop->status);
return GNTST_no_device_space;
}
@@ -155,7 +155,7 @@
{
put_domain(rd);
DPRINTK("No more map handles available.\n");
- (void)__put_user(GNTST_no_device_space, &uop->handle);
+ (void)__put_user(GNTST_no_device_space, &uop->status);
return GNTST_no_device_space;
}
@@ -370,6 +370,7 @@
(void)__put_user((u64)frame << PAGE_SHIFT, &uop->dev_bus_addr);
(void)__put_user(handle, &uop->handle);
+ (void)__put_user(GNTST_okay, &uop->status);
put_domain(rd);
return rc;
@@ -377,7 +378,7 @@
unlock_out:
spin_unlock(&rd->grant_table->lock);
- (void)__put_user(rc, &uop->handle);
+ (void)__put_user(rc, &uop->status);
put_maptrack_handle(ld->grant_table, handle);
return rc;
}
@@ -400,7 +401,7 @@
{
domid_t dom;
grant_ref_t ref;
- u16 handle;
+ grant_handle_t handle;
struct domain *ld, *rd;
active_grant_entry_t *act;
grant_entry_t *sha;
@@ -957,7 +958,7 @@
grant_table_t *gt = d->grant_table;
grant_mapping_t *map;
grant_ref_t ref;
- u16 handle;
+ grant_handle_t handle;
struct domain *rd;
active_grant_entry_t *act;
grant_entry_t *sha;
diff -r ff95b53bd39a -r 58d46463413e xen/include/public/dom0_ops.h
--- a/xen/include/public/dom0_ops.h Wed Nov 30 15:03:05 2005
+++ b/xen/include/public/dom0_ops.h Wed Nov 30 16:24:27 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 0xAAAA1013
+#define DOM0_INTERFACE_VERSION 0xAAAA1014
/************************************************************************/
diff -r ff95b53bd39a -r 58d46463413e xen/include/public/grant_table.h
--- a/xen/include/public/grant_table.h Wed Nov 30 15:03:05 2005
+++ b/xen/include/public/grant_table.h Wed Nov 30 16:24:27 2005
@@ -134,6 +134,11 @@
typedef uint32_t grant_ref_t;
/*
+ * Handle to track a mapping created via a grant reference.
+ */
+typedef uint32_t grant_handle_t;
+
+/*
* GNTTABOP_map_grant_ref: Map the grant entry (<dom>,<ref>) for access
* by devices and/or host CPUs. If successful, <handle> is a tracking number
* that must be presented later to destroy the mapping(s). On error, <handle>
@@ -154,11 +159,12 @@
typedef struct gnttab_map_grant_ref {
/* IN parameters. */
uint64_t host_addr;
+ uint32_t flags; /* GNTMAP_* */
+ grant_ref_t ref;
domid_t dom;
- grant_ref_t ref;
- uint32_t flags; /* GNTMAP_* */
- /* OUT parameters. */
- int32_t handle; /* +ve: handle; -ve: GNTST_* */
+ /* OUT parameters. */
+ int16_t status; /* GNTST_* */
+ grant_handle_t handle;
uint64_t dev_bus_addr;
} gnttab_map_grant_ref_t;
@@ -178,9 +184,9 @@
/* IN parameters. */
uint64_t host_addr;
uint64_t dev_bus_addr;
- uint32_t handle;
- /* OUT parameters. */
- int32_t status; /* GNTST_* */
+ grant_handle_t handle;
+ /* OUT parameters. */
+ int16_t status; /* GNTST_* */
} gnttab_unmap_grant_ref_t;
/*
@@ -198,7 +204,7 @@
domid_t dom;
uint32_t nr_frames;
/* OUT parameters. */
- int32_t status; /* GNTST_* */
+ int16_t status; /* GNTST_* */
unsigned long *frame_list;
} gnttab_setup_table_t;
@@ -211,7 +217,7 @@
/* IN parameters. */
domid_t dom;
/* OUT parameters. */
- int32_t status; /* GNTST_* */
+ int16_t status; /* GNTST_* */
} gnttab_dump_table_t;
/*
@@ -229,7 +235,7 @@
domid_t domid;
grant_ref_t ref;
/* OUT parameters. */
- int32_t status;
+ int16_t status;
} gnttab_transfer_t;
/*
diff -r ff95b53bd39a -r 58d46463413e xen/include/public/io/blkif.h
--- a/xen/include/public/io/blkif.h Wed Nov 30 15:03:05 2005
+++ b/xen/include/public/io/blkif.h Wed Nov 30 16:24:27 2005
@@ -43,7 +43,7 @@
typedef struct blkif_response {
uint64_t id; /* copied from request */
uint8_t operation; /* copied from request */
- int32_t status; /* BLKIF_RSP_??? */
+ int16_t status; /* BLKIF_RSP_??? */
} blkif_response_t;
#define BLKIF_RSP_ERROR -1 /* non-specific 'error' */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|