[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH QEMU-XEN v6 4/8] xen: Switch uses of xc_map_fore
From: |
Ian Campbell |
Subject: |
Re: [Qemu-devel] [PATCH QEMU-XEN v6 4/8] xen: Switch uses of xc_map_foreign_range into xc_map_foreign_pages |
Date: |
Wed, 9 Dec 2015 13:41:46 +0000 |
On Thu, 2015-12-03 at 11:23 +0000, Ian Campbell wrote:
> diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c
> index 5e324ef..c96d974 100644
> --- a/hw/display/xenfb.c
> +++ b/hw/display/xenfb.c
> @@ -104,9 +104,8 @@ static int common_bind(struct common *c)
> if (xenstore_read_fe_int(&c->xendev, "event-channel",
> &c->xendev.remote_port) == -1)
> return -1;
>
> - c->page = xc_map_foreign_range(xen_xc, c->xendev.dom,
> - XC_PAGE_SIZE,
> - PROT_READ | PROT_WRITE, mfn);
> + c->page = xc_map_foreign_pages(xen_xc, c->xendev.dom,
> + PROT_READ | PROT_WRITE, &mfn, 1);
This doesn't build for i386 userspace, since mfn is a uint64_t but
xc_map_foreign_pages() wants a xen_pfn_t * (where xen_pfn_t == unsigned
long on x86).
Until now that was just a truncation which was already checked for with:
uint64_t mfn;
if (xenstore_read_fe_uint64(&c->xendev, "page-ref", &mfn) == -1)
return -1;
assert(mfn == (xen_pfn_t)mfn);
I think in principal passing "(xen_pfn_t *)&mfn" would ok (since it is a
singleton array in this case), but I was thinking of going a bit further
and:
diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c
index 8b86b4a..54585fa 100644
--- a/hw/display/xenfb.c
+++ b/hw/display/xenfb.c
@@ -95,11 +95,13 @@ struct XenFB {
static int common_bind(struct common *c)
{
- uint64_t mfn;
+ uint64_t val;
+ xen_pfn_t mfn;
- if (xenstore_read_fe_uint64(&c->xendev, "page-ref", &mfn) == -1)
+ if (xenstore_read_fe_uint64(&c->xendev, "page-ref", &val) == -1)
return -1;
- assert(mfn == (xen_pfn_t)mfn);
+ mfn = (xen_pfn_t)val;
+ assert(val == mfn);
if (xenstore_read_fe_int(&c->xendev, "event-channel",
&c->xendev.remote_port) == -1)
return -1;
Stefano, what do you think/prefer? An alternative to the above
I've not spotted any other similar constructs, xenfb is a bit unusual here
in that it apparently uses foreign mappings rather than grants like most
drivers do.
Ian.
- [Qemu-devel] [Minios-devel] [PATCH v6 0/<VARIOUS>] Begin to disentangle libxenctrl and provide some stable libraries, Ian Campbell, 2015/12/03
- [Qemu-devel] [PATCH QEMU-XEN v6 0/8] Begin to disentangle libxenctrl and provide some stable libraries, Ian Campbell, 2015/12/03
- [Qemu-devel] [PATCH QEMU-XEN v6 1/8] xen_console: correctly cleanup primary console on teardown., Ian Campbell, 2015/12/03
- [Qemu-devel] [PATCH QEMU-XEN v6 2/8] xen: Switch to libxenevtchn interface for compat shims., Ian Campbell, 2015/12/03
- [Qemu-devel] [PATCH QEMU-XEN v6 7/8] xen: domainbuild: reopen libxenctrl interface after forking for domain watcher., Ian Campbell, 2015/12/03
- [Qemu-devel] [PATCH QEMU-XEN v6 3/8] xen: Switch to libxengnttab interface for compat shims., Ian Campbell, 2015/12/03
- [Qemu-devel] [PATCH QEMU-XEN v6 6/8] xen: Use stable library interfaces when they are available., Ian Campbell, 2015/12/03
- [Qemu-devel] [PATCH QEMU-XEN v6 4/8] xen: Switch uses of xc_map_foreign_range into xc_map_foreign_pages, Ian Campbell, 2015/12/03
- Re: [Qemu-devel] [PATCH QEMU-XEN v6 4/8] xen: Switch uses of xc_map_foreign_range into xc_map_foreign_pages, Stefano Stabellini, 2015/12/11
- Re: [Qemu-devel] [PATCH QEMU-XEN v6 4/8] xen: Switch uses of xc_map_foreign_range into xc_map_foreign_pages, Ian Campbell, 2015/12/11
- Re: [Qemu-devel] [PATCH QEMU-XEN v6 4/8] xen: Switch uses of xc_map_foreign_range into xc_map_foreign_pages, Stefano Stabellini, 2015/12/11
[Qemu-devel] [PATCH QEMU-XEN v6 5/8] xen: Switch uses of xc_map_foreign_{pages, bulk} to use libxenforeignmemory API., Ian Campbell, 2015/12/03
[Qemu-devel] [PATCH QEMU-XEN v6 8/8] xen: make it possible to build without the Xen PV domain builder, Ian Campbell, 2015/12/03
Re: [Qemu-devel] [Minios-devel] [PATCH v6 0/<VARIOUS>] Begin to disentangle libxenctrl and provide some stable libraries, Ian Campbell, 2015/12/09