[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] x86/hypercall: Move the hypercall arg tables into C



commit 5464f1210c6341762ca0457253adfa035ffe666c
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Mon Jan 26 11:25:43 2015 +0000
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Tue Sep 6 13:33:44 2016 +0100

    x86/hypercall: Move the hypercall arg tables into C
    
    Editing (and indeed, finding) the hypercall args tables can be tricky,
    especially towards the end where .rept's are used to maintain the correct
    layout.
    
    Move this all into C, and let the compiler do the hard work.  As 0 is the
    default value, drop all explicit 0's.
    
    No functional change.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
 xen/arch/x86/Makefile              |   1 +
 xen/arch/x86/hypercall.c           | 123 +++++++++++++++++++++++++++++++++++++
 xen/arch/x86/x86_64/compat/entry.S |  51 ---------------
 xen/arch/x86/x86_64/entry.S        |  51 ---------------
 4 files changed, 124 insertions(+), 102 deletions(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index b49d7cf..96e6a02 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -28,6 +28,7 @@ obj-y += e820.o
 obj-y += extable.o
 obj-y += flushtlb.o
 obj-$(CONFIG_CRASH_DEBUG) += gdbstub.o
+obj-y += hypercall.o
 obj-y += i387.o
 obj-y += i8259.o
 obj-y += io_apic.o
diff --git a/xen/arch/x86/hypercall.c b/xen/arch/x86/hypercall.c
new file mode 100644
index 0000000..4b42f86
--- /dev/null
+++ b/xen/arch/x86/hypercall.c
@@ -0,0 +1,123 @@
+/******************************************************************************
+ * arch/x86/hypercall.c
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright (c) 2015,2016 Citrix Systems Ltd.
+ */
+
+#include <xen/hypercall.h>
+
+#define ARGS(x, n)                              \
+    [ __HYPERVISOR_ ## x ] = (n)
+
+const uint8_t hypercall_args_table[NR_hypercalls] =
+{
+    ARGS(set_trap_table, 1),
+    ARGS(mmu_update, 4),
+    ARGS(set_gdt, 2),
+    ARGS(stack_switch, 2),
+    ARGS(set_callbacks, 3),
+    ARGS(fpu_taskswitch, 1),
+    ARGS(sched_op_compat, 2),
+    ARGS(platform_op, 1),
+    ARGS(set_debugreg, 2),
+    ARGS(get_debugreg, 1),
+    ARGS(update_descriptor, 2),
+    ARGS(memory_op, 2),
+    ARGS(multicall, 2),
+    ARGS(update_va_mapping, 3),
+    ARGS(set_timer_op, 1),
+    ARGS(event_channel_op_compat, 1),
+    ARGS(xen_version, 2),
+    ARGS(console_io, 3),
+    ARGS(physdev_op_compat, 1),
+    ARGS(grant_table_op, 3),
+    ARGS(vm_assist, 2),
+    ARGS(update_va_mapping_otherdomain, 4),
+    ARGS(vcpu_op, 3),
+    ARGS(set_segment_base, 2),
+    ARGS(mmuext_op, 4),
+    ARGS(xsm_op, 1),
+    ARGS(nmi_op, 2),
+    ARGS(sched_op, 2),
+    ARGS(callback_op, 2),
+    ARGS(xenoprof_op, 2),
+    ARGS(event_channel_op, 2),
+    ARGS(physdev_op, 2),
+    ARGS(hvm_op, 2),
+    ARGS(sysctl, 1),
+    ARGS(domctl, 1),
+    ARGS(kexec_op, 2),
+    ARGS(tmem_op, 1),
+    ARGS(xenpmu_op, 2),
+    ARGS(mca, 1),
+    ARGS(arch_1, 1),
+};
+
+const uint8_t compat_hypercall_args_table[NR_hypercalls] =
+{
+    ARGS(set_trap_table, 1),
+    ARGS(mmu_update, 4),
+    ARGS(set_gdt, 2),
+    ARGS(stack_switch, 2),
+    ARGS(set_callbacks, 4),
+    ARGS(fpu_taskswitch, 1),
+    ARGS(sched_op_compat, 2),
+    ARGS(platform_op, 1),
+    ARGS(set_debugreg, 2),
+    ARGS(get_debugreg, 1),
+    ARGS(update_descriptor, 4),
+    ARGS(memory_op, 2),
+    ARGS(multicall, 2),
+    ARGS(update_va_mapping, 4),
+    ARGS(set_timer_op, 2),
+    ARGS(event_channel_op_compat, 1),
+    ARGS(xen_version, 2),
+    ARGS(console_io, 3),
+    ARGS(physdev_op_compat, 1),
+    ARGS(grant_table_op, 3),
+    ARGS(vm_assist, 2),
+    ARGS(update_va_mapping_otherdomain, 5),
+    ARGS(vcpu_op, 3),
+    ARGS(mmuext_op, 4),
+    ARGS(xsm_op, 1),
+    ARGS(nmi_op, 2),
+    ARGS(sched_op, 2),
+    ARGS(callback_op, 2),
+    ARGS(xenoprof_op, 2),
+    ARGS(event_channel_op, 2),
+    ARGS(physdev_op, 2),
+    ARGS(hvm_op, 2),
+    ARGS(sysctl, 1),
+    ARGS(domctl, 1),
+    ARGS(kexec_op, 2),
+    ARGS(tmem_op, 1),
+    ARGS(xenpmu_op, 2),
+    ARGS(mca, 1),
+    ARGS(arch_1, 1),
+};
+
+#undef ARGS
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
+
diff --git a/xen/arch/x86/x86_64/compat/entry.S 
b/xen/arch/x86/x86_64/compat/entry.S
index 1b6a482..f0eae56 100644
--- a/xen/arch/x86/x86_64/compat/entry.S
+++ b/xen/arch/x86/x86_64/compat/entry.S
@@ -480,54 +480,3 @@ ENTRY(compat_hypercall_table)
         .rept NR_hypercalls-((.-compat_hypercall_table)/8)
         .quad compat_ni_hypercall
         .endr
-
-ENTRY(compat_hypercall_args_table)
-        .byte 1 /* compat_set_trap_table    */  /*  0 */
-        .byte 4 /* compat_mmu_update        */
-        .byte 2 /* compat_set_gdt           */
-        .byte 2 /* compat_stack_switch      */
-        .byte 4 /* compat_set_callbacks     */
-        .byte 1 /* compat_fpu_taskswitch    */  /*  5 */
-        .byte 2 /* compat_sched_op_compat   */
-        .byte 1 /* compat_platform_op       */
-        .byte 2 /* compat_set_debugreg      */
-        .byte 1 /* compat_get_debugreg      */
-        .byte 4 /* compat_update_descriptor */  /* 10 */
-        .byte 0 /* compat_ni_hypercall      */
-        .byte 2 /* compat_memory_op         */
-        .byte 2 /* compat_multicall         */
-        .byte 4 /* compat_update_va_mapping */
-        .byte 2 /* compat_set_timer_op      */  /* 15 */
-        .byte 1 /* compat_event_channel_op_compat */
-        .byte 2 /* compat_xen_version       */
-        .byte 3 /* compat_console_io        */
-        .byte 1 /* compat_physdev_op_compat */
-        .byte 3 /* compat_grant_table_op    */  /* 20 */
-        .byte 2 /* compat_vm_assist         */
-        .byte 5 /* compat_update_va_mapping_otherdomain */
-        .byte 0 /* compat_iret              */
-        .byte 3 /* compat_vcpu_op           */
-        .byte 0 /* compat_ni_hypercall      */  /* 25 */
-        .byte 4 /* compat_mmuext_op         */
-        .byte 1 /* do_xsm_op                */
-        .byte 2 /* compat_nmi_op            */
-        .byte 2 /* compat_sched_op          */
-        .byte 2 /* compat_callback_op       */  /* 30 */
-        .byte 2 /* compat_xenoprof_op       */
-        .byte 2 /* compat_event_channel_op  */
-        .byte 2 /* compat_physdev_op        */
-        .byte 2 /* do_hvm_op                */
-        .byte 1 /* do_sysctl                */  /* 35 */
-        .byte 1 /* do_domctl                */
-        .byte 2 /* compat_kexec_op          */
-        .byte 1 /* do_tmem_op               */
-        .byte 0 /* reserved for XenClient   */
-        .byte 2 /* do_xenpmu_op             */  /* 40 */
-        .rept __HYPERVISOR_arch_0-(.-compat_hypercall_args_table)
-        .byte 0 /* compat_ni_hypercall      */
-        .endr
-        .byte 1 /* do_mca                   */
-        .byte 1 /* paging_domctl_continuation      */
-        .rept NR_hypercalls-(.-compat_hypercall_args_table)
-        .byte 0 /* compat_ni_hypercall      */
-        .endr
diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S
index 64d260a..086fcec 100644
--- a/xen/arch/x86/x86_64/entry.S
+++ b/xen/arch/x86/x86_64/entry.S
@@ -803,57 +803,6 @@ ENTRY(hypercall_table)
         .quad do_ni_hypercall
         .endr
 
-ENTRY(hypercall_args_table)
-        .byte 1 /* do_set_trap_table    */  /*  0 */
-        .byte 4 /* do_mmu_update        */
-        .byte 2 /* do_set_gdt           */
-        .byte 2 /* do_stack_switch      */
-        .byte 3 /* do_set_callbacks     */
-        .byte 1 /* do_fpu_taskswitch    */  /*  5 */
-        .byte 2 /* do_sched_op_compat   */
-        .byte 1 /* do_platform_op       */
-        .byte 2 /* do_set_debugreg      */
-        .byte 1 /* do_get_debugreg      */
-        .byte 2 /* do_update_descriptor */  /* 10 */
-        .byte 0 /* do_ni_hypercall      */
-        .byte 2 /* do_memory_op         */
-        .byte 2 /* do_multicall         */
-        .byte 3 /* do_update_va_mapping */
-        .byte 1 /* do_set_timer_op      */  /* 15 */
-        .byte 1 /* do_event_channel_op_compat */
-        .byte 2 /* do_xen_version       */
-        .byte 3 /* do_console_io        */
-        .byte 1 /* do_physdev_op_compat */
-        .byte 3 /* do_grant_table_op    */  /* 20 */
-        .byte 2 /* do_vm_assist         */
-        .byte 4 /* do_update_va_mapping_otherdomain */
-        .byte 0 /* do_iret              */
-        .byte 3 /* do_vcpu_op           */
-        .byte 2 /* do_set_segment_base  */  /* 25 */
-        .byte 4 /* do_mmuext_op         */
-        .byte 1 /* do_xsm_op            */
-        .byte 2 /* do_nmi_op            */
-        .byte 2 /* do_sched_op          */
-        .byte 2 /* do_callback_op       */  /* 30 */
-        .byte 2 /* do_xenoprof_op       */
-        .byte 2 /* do_event_channel_op  */
-        .byte 2 /* do_physdev_op        */
-        .byte 2 /* do_hvm_op            */
-        .byte 1 /* do_sysctl            */  /* 35 */
-        .byte 1 /* do_domctl            */
-        .byte 2 /* do_kexec             */
-        .byte 1 /* do_tmem_op           */
-        .byte 0 /* reserved for XenClient */
-        .byte 2 /* do_xenpmu_op         */  /* 40 */
-        .rept __HYPERVISOR_arch_0-(.-hypercall_args_table)
-        .byte 0 /* do_ni_hypercall      */
-        .endr
-        .byte 1 /* do_mca               */  /* 48 */
-        .byte 1 /* paging_domctl_continuation */
-        .rept NR_hypercalls-(.-hypercall_args_table)
-        .byte 0 /* do_ni_hypercall      */
-        .endr
-
 /* Table of automatically generated entry points.  One per vector. */
         .section .init.rodata, "a", @progbits
 GLOBAL(autogen_entrypoints)
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.