mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
[IA64] Fix xencomm for xm mem-set command
This patch saves and restores the hypercall parameter within xencomm. Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
This commit is contained in:
1 parent
6e20f30bec
commit
eb5a644ce3
1 file changed
+32
-2
@@ -221,10 +221,17 @@ xencommize_memory_reservation (xen_memory_reservation_t *mop)
|
||||
int
|
||||
xencomm_hypercall_memory_op(unsigned int cmd, void *arg)
|
||||
{
|
||||
XEN_GUEST_HANDLE(xen_pfn_t) extent_start_va[2];
|
||||
xen_memory_reservation_t *xmr = NULL, *xme_in = NULL, *xme_out = NULL;
|
||||
int rc;
|
||||
|
||||
switch (cmd) {
|
||||
case XENMEM_increase_reservation:
|
||||
case XENMEM_decrease_reservation:
|
||||
case XENMEM_populate_physmap:
|
||||
xmr = (xen_memory_reservation_t *)arg;
|
||||
xen_guest_handle(extent_start_va[0]) =
|
||||
xen_guest_handle(xmr->extent_start);
|
||||
xencommize_memory_reservation((xen_memory_reservation_t *)arg);
|
||||
break;
|
||||
|
||||
@@ -232,6 +239,12 @@ xencomm_hypercall_memory_op(unsigned int cmd, void *arg)
|
||||
break;
|
||||
|
||||
case XENMEM_exchange:
|
||||
xme_in = &((xen_memory_exchange_t *)arg)->in;
|
||||
xme_out = &((xen_memory_exchange_t *)arg)->out;
|
||||
xen_guest_handle(extent_start_va[0]) =
|
||||
xen_guest_handle(xme_in->extent_start);
|
||||
xen_guest_handle(extent_start_va[1]) =
|
||||
xen_guest_handle(xme_out->extent_start);
|
||||
xencommize_memory_reservation
|
||||
(&((xen_memory_exchange_t *)arg)->in);
|
||||
xencommize_memory_reservation
|
||||
@@ -243,8 +256,25 @@ xencomm_hypercall_memory_op(unsigned int cmd, void *arg)
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
return xencomm_arch_hypercall_memory_op
|
||||
(cmd, xencomm_create_inline(arg));
|
||||
rc = xencomm_arch_hypercall_memory_op(cmd, xencomm_create_inline(arg));
|
||||
|
||||
switch (cmd) {
|
||||
case XENMEM_increase_reservation:
|
||||
case XENMEM_decrease_reservation:
|
||||
case XENMEM_populate_physmap:
|
||||
xen_guest_handle(xmr->extent_start) =
|
||||
xen_guest_handle(extent_start_va[0]);
|
||||
break;
|
||||
|
||||
case XENMEM_exchange:
|
||||
xen_guest_handle(xme_in->extent_start) =
|
||||
xen_guest_handle(extent_start_va[0]);
|
||||
xen_guest_handle(xme_out->extent_start) =
|
||||
xen_guest_handle(extent_start_va[1]);
|
||||
break;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
unsigned long
|
||||
|
||||