diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2014-07-07 13:43:03 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2014-07-07 13:43:03 +0100 |
commit | f811d4743b358bc53a8c79576c903c0dbee29e72 (patch) | |
tree | 768ec853126b43325b43f4dfa05ffa69a94961d0 | |
parent | 9d9de254c2b81b68cd48f2324cc753a570a4cdd8 (diff) | |
parent | 643f59322432d77165329dfabe2d040d7e30dae8 (diff) |
Merge remote-tracking branch 'remotes/sstabellini/xen_arm_20140707' into staging
* remotes/sstabellini/xen_arm_20140707:
xen: build on ARM
xen_backend: introduce xenstore_read_uint64 and xenstore_read_fe_uint64
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | hw/display/xenfb.c | 18 | ||||
-rw-r--r-- | hw/xen/xen_backend.c | 18 | ||||
-rw-r--r-- | include/hw/xen/xen_backend.h | 2 | ||||
-rw-r--r-- | xen-hvm.c | 2 | ||||
-rw-r--r-- | xen-mapcache.c | 4 |
5 files changed, 33 insertions, 11 deletions
diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c index 032eb7a9a5..07ddc9deba 100644 --- a/hw/display/xenfb.c +++ b/hw/display/xenfb.c @@ -93,10 +93,12 @@ struct XenFB { static int common_bind(struct common *c) { - int mfn; + uint64_t mfn; - if (xenstore_read_fe_int(&c->xendev, "page-ref", &mfn) == -1) + if (xenstore_read_fe_uint64(&c->xendev, "page-ref", &mfn) == -1) return -1; + assert(mfn == (xen_pfn_t)mfn); + if (xenstore_read_fe_int(&c->xendev, "event-channel", &c->xendev.remote_port) == -1) return -1; @@ -107,7 +109,7 @@ static int common_bind(struct common *c) return -1; xen_be_bind_evtchn(&c->xendev); - xen_be_printf(&c->xendev, 1, "ring mfn %d, remote-port %d, local-port %d\n", + xen_be_printf(&c->xendev, 1, "ring mfn %"PRIx64", remote-port %d, local-port %d\n", mfn, c->xendev.remote_port, c->xendev.local_port); return 0; @@ -409,7 +411,7 @@ static void input_event(struct XenDevice *xendev) /* -------------------------------------------------------------------- */ -static void xenfb_copy_mfns(int mode, int count, unsigned long *dst, void *src) +static void xenfb_copy_mfns(int mode, int count, xen_pfn_t *dst, void *src) { uint32_t *src32 = src; uint64_t *src64 = src; @@ -424,8 +426,8 @@ static int xenfb_map_fb(struct XenFB *xenfb) struct xenfb_page *page = xenfb->c.page; char *protocol = xenfb->c.xendev.protocol; int n_fbdirs; - unsigned long *pgmfns = NULL; - unsigned long *fbmfns = NULL; + xen_pfn_t *pgmfns = NULL; + xen_pfn_t *fbmfns = NULL; void *map, *pd; int mode, ret = -1; @@ -483,8 +485,8 @@ static int xenfb_map_fb(struct XenFB *xenfb) n_fbdirs = xenfb->fbpages * mode / 8; n_fbdirs = (n_fbdirs + (XC_PAGE_SIZE - 1)) / XC_PAGE_SIZE; - pgmfns = g_malloc0(sizeof(unsigned long) * n_fbdirs); - fbmfns = g_malloc0(sizeof(unsigned long) * xenfb->fbpages); + pgmfns = g_malloc0(sizeof(xen_pfn_t) * n_fbdirs); + fbmfns = g_malloc0(sizeof(xen_pfn_t) * xenfb->fbpages); xenfb_copy_mfns(mode, n_fbdirs, pgmfns, pd); map = xc_map_foreign_pages(xen_xc, xenfb->c.xendev.dom, diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c index 3cd45b407c..b2cb22b99d 100644 --- a/hw/xen/xen_backend.c +++ b/hw/xen/xen_backend.c @@ -111,6 +111,19 @@ int xenstore_read_int(const char *base, const char *node, int *ival) return rc; } +int xenstore_read_uint64(const char *base, const char *node, uint64_t *uval) +{ + char *val; + int rc = -1; + + val = xenstore_read_str(base, node); + if (val && 1 == sscanf(val, "%"SCNu64, uval)) { + rc = 0; + } + g_free(val); + return rc; +} + int xenstore_write_be_str(struct XenDevice *xendev, const char *node, const char *val) { return xenstore_write_str(xendev->be, node, val); @@ -146,6 +159,11 @@ int xenstore_read_fe_int(struct XenDevice *xendev, const char *node, int *ival) return xenstore_read_int(xendev->fe, node, ival); } +int xenstore_read_fe_uint64(struct XenDevice *xendev, const char *node, uint64_t *uval) +{ + return xenstore_read_uint64(xendev->fe, node, uval); +} + /* ------------------------------------------------------------- */ const char *xenbus_strstate(enum xenbus_state state) diff --git a/include/hw/xen/xen_backend.h b/include/hw/xen/xen_backend.h index 3b7d96d7a5..3b4125e39f 100644 --- a/include/hw/xen/xen_backend.h +++ b/include/hw/xen/xen_backend.h @@ -74,6 +74,8 @@ char *xenstore_read_be_str(struct XenDevice *xendev, const char *node); int xenstore_read_be_int(struct XenDevice *xendev, const char *node, int *ival); char *xenstore_read_fe_str(struct XenDevice *xendev, const char *node); int xenstore_read_fe_int(struct XenDevice *xendev, const char *node, int *ival); +int xenstore_read_uint64(const char *base, const char *node, uint64_t *uval); +int xenstore_read_fe_uint64(struct XenDevice *xendev, const char *node, uint64_t *uval); const char *xenbus_strstate(enum xenbus_state state); struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev); @@ -390,7 +390,7 @@ static int xen_remove_from_physmap(XenIOState *state, start_addr >>= TARGET_PAGE_BITS; phys_offset >>= TARGET_PAGE_BITS; for (i = 0; i < size; i++) { - unsigned long idx = start_addr + i; + xen_pfn_t idx = start_addr + i; xen_pfn_t gpfn = phys_offset + i; rc = xc_domain_add_to_physmap(xen_xc, xen_domid, XENMAPSPACE_gmfn, idx, gpfn); diff --git a/xen-mapcache.c b/xen-mapcache.c index eda914a75c..66da1a6d47 100644 --- a/xen-mapcache.c +++ b/xen-mapcache.c @@ -33,10 +33,10 @@ # define DPRINTF(fmt, ...) do { } while (0) #endif -#if defined(__i386__) +#if HOST_LONG_BITS == 32 # define MCACHE_BUCKET_SHIFT 16 # define MCACHE_MAX_SIZE (1UL<<31) /* 2GB Cap */ -#elif defined(__x86_64__) +#else # define MCACHE_BUCKET_SHIFT 20 # define MCACHE_MAX_SIZE (1UL<<35) /* 32GB Cap */ #endif |