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

[xen master] kexec: restore hypercall 1st arg's type



commit a4180b03fffafa1868b0bcacc20198d4caef2908
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon Nov 7 16:09:13 2022 +0100
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Wed Nov 9 20:11:49 2022 +0000

    kexec: restore hypercall 1st arg's type
    
    This reverts a small part of 7e21b25059ed ("xen: harmonize return types
    of hypercall handlers"). The change from "unsigned long" to "unsigned
    int" for the native handler function meant that previously invalid
    values became valid. While perhaps not a significant issue, strictly
    speaking that's still a change to the ABI. Don't go as far as restoring
    the compat entry point's type though: That one can't have values passed
    which don't fit in 32 bits.
    
    Note that as a side effect this fixes the invocation of
    hypercall_create_continuation(), which by mistake wasn't adjusted by the
    earlier change.
    
    Also take the opportunity and correct the respective comment in the
    public header. (The way it was it really supports that it probably was
    pointless to use "long", but that's the way the hypercall was
    introduced.)
    
    Requested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
    Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Release-acked-by: Henry Wang <Henry.Wang@xxxxxxx>
---
 xen/common/kexec.c           | 4 ++--
 xen/include/hypercall-defs.c | 9 ++++++---
 xen/include/public/kexec.h   | 2 +-
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index 7095651605..3ee5f05c2c 100644
--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -1213,7 +1213,7 @@ static int kexec_status(XEN_GUEST_HANDLE_PARAM(void) uarg)
     return !!test_bit(bit, &kexec_flags);
 }
 
-static int do_kexec_op_internal(unsigned int op,
+static int do_kexec_op_internal(unsigned long op,
                                 XEN_GUEST_HANDLE_PARAM(void) uarg,
                                 bool_t compat)
 {
@@ -1265,7 +1265,7 @@ static int do_kexec_op_internal(unsigned int op,
     return ret;
 }
 
-long do_kexec_op(unsigned int op, XEN_GUEST_HANDLE_PARAM(void) uarg)
+long do_kexec_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) uarg)
 {
     return do_kexec_op_internal(op, uarg, 0);
 }
diff --git a/xen/include/hypercall-defs.c b/xen/include/hypercall-defs.c
index 60cbeb18e4..45b6f969d2 100644
--- a/xen/include/hypercall-defs.c
+++ b/xen/include/hypercall-defs.c
@@ -117,9 +117,6 @@ callback_op(int cmd, const void *arg)
 #ifdef CONFIG_ARGO
 argo_op(unsigned int cmd, void *arg1, void *arg2, unsigned long arg3, unsigned 
long arg4)
 #endif
-#ifdef CONFIG_KEXEC
-kexec_op(unsigned int op, void *uarg)
-#endif
 #ifdef CONFIG_PV
 iret()
 nmi_op(unsigned int cmd, void *arg)
@@ -149,6 +146,9 @@ update_va_mapping_otherdomain(unsigned int va, uint32_t lo, 
uint32_t hi, unsigne
 #ifndef CONFIG_PV_SHIM_EXCLUSIVE
 platform_op(compat_platform_op_t *u_xenpf_op)
 #endif
+#ifdef CONFIG_KEXEC
+kexec_op(unsigned int op, void *uarg)
+#endif
 #endif /* CONFIG_COMPAT */
 
 #if defined(CONFIG_PV) || defined(CONFIG_ARM)
@@ -181,6 +181,9 @@ update_descriptor(uint64_t gaddr, seg_desc_t desc)
 update_va_mapping(unsigned long va, uint64_t val64, unsigned long flags)
 update_va_mapping_otherdomain(unsigned long va, uint64_t val64, unsigned long 
flags, domid_t domid)
 #endif
+#ifdef CONFIG_KEXEC
+kexec_op(unsigned long op, void *uarg)
+#endif
 #ifdef CONFIG_IOREQ_SERVER
 dm_op(domid_t domid, unsigned int nr_bufs, xen_dm_op_buf_t *bufs)
 #endif
diff --git a/xen/include/public/kexec.h b/xen/include/public/kexec.h
index 3f2a118381..3cb961fdab 100644
--- a/xen/include/public/kexec.h
+++ b/xen/include/public/kexec.h
@@ -64,7 +64,7 @@
 
 /*
  * Prototype for this hypercall is:
- *  int kexec_op(int cmd, void *args)
+ *  int kexec_op(unsigned long cmd, void *args)
  * @cmd  == KEXEC_CMD_...
  *          KEXEC operation to perform
  * @args == Operation-specific extra arguments (NULL if none).
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

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