[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 4/5] x86/hvm: Improve grant_table_op hypercall dispatching
hvm_grant_table_op() and hvm_grant_table_op_compat32() are almost identical, but there is no need to have two functions instantiated at the end of different function pointers. Combine the two into a single hvm_grant_table_op() (folding grant_table_op_is_allowed() into is now-single caller) and dispatch to {do,compat}_grant_table_op() based on the hcall_64bit setting. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> --- xen/arch/x86/hvm/hypercall.c | 40 +++++++++++++--------------------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/xen/arch/x86/hvm/hypercall.c b/xen/arch/x86/hvm/hypercall.c index 0f3df4e..140676d 100644 --- a/xen/arch/x86/hvm/hypercall.c +++ b/xen/arch/x86/hvm/hypercall.c @@ -46,9 +46,11 @@ static long hvm_memory_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) return rc; } -static int grant_table_op_is_allowed(unsigned int cmd) +static long hvm_grant_table_op( + unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) uop, unsigned int count) { - switch (cmd) { + switch ( cmd ) + { case GNTTABOP_query_size: case GNTTABOP_setup_table: case GNTTABOP_set_version: @@ -57,19 +59,16 @@ static int grant_table_op_is_allowed(unsigned int cmd) case GNTTABOP_map_grant_ref: case GNTTABOP_unmap_grant_ref: case GNTTABOP_swap_grant_ref: - return 1; - default: - /* all other commands need auditing */ - return 0; + break; + + default: /* All other commands need auditing. */ + return -ENOSYS; } -} -static long hvm_grant_table_op( - unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) uop, unsigned int count) -{ - if ( !grant_table_op_is_allowed(cmd) ) - return -ENOSYS; /* all other commands need auditing */ - return do_grant_table_op(cmd, uop, count); + if ( current->arch.hvm_vcpu.hcall_64bit ) + return do_grant_table_op(cmd, uop, count); + else + return compat_grant_table_op(cmd, uop, count); } static long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) @@ -89,15 +88,6 @@ static long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) } } -static long hvm_grant_table_op_compat32(unsigned int cmd, - XEN_GUEST_HANDLE_PARAM(void) uop, - unsigned int count) -{ - if ( !grant_table_op_is_allowed(cmd) ) - return -ENOSYS; - return compat_grant_table_op(cmd, uop, count); -} - static long hvm_physdev_op_compat32( int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) { @@ -130,13 +120,11 @@ static long hvm_physdev_op_compat32( #define do_physdev_op hvm_physdev_op #define compat_physdev_op hvm_physdev_op_compat32 -#define do_grant_table_op hvm_grant_table_op -#define compat_grant_table_op hvm_grant_table_op_compat32 #define do_arch_1 paging_domctl_continuation static const hypercall_table_t hvm_hypercall_table[] = { HVM_CALL(memory_op), - COMPAT_CALL(grant_table_op), + HVM_CALL(grant_table_op), COMPAT_CALL(vcpu_op), COMPAT_CALL(physdev_op), COMPAT_CALL(xen_version), @@ -160,8 +148,6 @@ static const hypercall_table_t hvm_hypercall_table[] = { #undef do_physdev_op #undef compat_physdev_op -#undef do_grant_table_op -#undef compat_grant_table_op #undef do_arch_1 #undef HYPERCALL -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |