|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86: streamline hypercall_create_continuation()
commit c109909720fa49cc1bb71c729fd5a14e17163306
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Fri Jan 9 17:25:55 2015 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Jan 9 17:25:55 2015 +0100
x86: streamline hypercall_create_continuation()
- drop clearing of excessive multicall arguments in compat case (no
longer needed now that hypercall_xlat_continuation() only checks the
actual arguments)
- latch current into a local variable
- use the cached value of hvm_guest_x86_mode() instead of re-executing
it
- scope restrict "regs"
- while at it, convert the remaining two argument checking BUG_ON()s in
hypercall_xlat_continuation() to ASSERT()s
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Tim Deegan <tim@xxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/domain.c | 27 +++++++++++----------------
1 files changed, 11 insertions(+), 16 deletions(-)
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index b699510..c8832c6 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -1675,7 +1675,6 @@ unsigned long hypercall_create_continuation(
unsigned int op, const char *format, ...)
{
struct mc_state *mcs = ¤t->mc_state;
- struct cpu_user_regs *regs;
const char *p = format;
unsigned long arg;
unsigned int i;
@@ -1689,26 +1688,23 @@ unsigned long hypercall_create_continuation(
for ( i = 0; *p != '\0'; i++ )
mcs->call.args[i] = next_arg(p, args);
- if ( is_pv_32on64_domain(current->domain) )
- {
- for ( ; i < 6; i++ )
- mcs->call.args[i] = 0;
- }
}
else
{
- regs = guest_cpu_user_regs();
- regs->eax = op;
+ struct cpu_user_regs *regs = guest_cpu_user_regs();
+ struct vcpu *curr = current;
+
+ regs->eax = op;
/* Ensure the hypercall trap instruction is re-executed. */
- if ( is_pv_vcpu(current) )
+ if ( is_pv_vcpu(curr) )
regs->eip -= 2; /* re-execute 'syscall' / 'int $xx' */
else
- current->arch.hvm_vcpu.hcall_preempted = 1;
+ curr->arch.hvm_vcpu.hcall_preempted = 1;
- if ( is_pv_vcpu(current) ?
- !is_pv_32on64_vcpu(current) :
- (hvm_guest_x86_mode(current) == 8) )
+ if ( is_pv_vcpu(curr) ?
+ !is_pv_32on64_vcpu(curr) :
+ curr->arch.hvm_vcpu.hcall_64bit )
{
for ( i = 0; *p != '\0'; i++ )
{
@@ -1759,9 +1755,8 @@ int hypercall_xlat_continuation(unsigned int *id,
unsigned int nr,
ASSERT(nr <= ARRAY_SIZE(mcs->call.args));
ASSERT(!(mask >> nr));
-
- BUG_ON(id && *id >= nr);
- BUG_ON(id && (mask & (1U << *id)));
+ ASSERT(!id || *id < nr);
+ ASSERT(!id || !(mask & (1U << *id)));
va_start(args, mask);
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |