All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad@kernel.org>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Julien Grall <julien.grall@arm.com>,
	Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org, andrew.cooper3@citrix.com,
	mpohlack@amazon.com, sasha.levin@oracle.com,
	ross.lagerwall@citrix.com
Subject: Re: [PATCH v8.1] xSplice v1 design and implementation.
Date: Thu, 14 Apr 2016 10:26:38 -0400	[thread overview]
Message-ID: <20160414142636.GA16521@localhost.localdomain> (raw)
In-Reply-To: <1460584928-32440-1-git-send-email-konrad.wilk@oracle.com>

> Julien, Stefano, I dropped Julien's Ack on
> 
>  [PATCH v8.1 11/27] xsplice: Implement payload loading
> 
> as Jan's expressed a desire not to have BITS_PER_LONG exposed
> in the public headers. I've put CONFIG_ARM_32 in there. On IRC
> Stefano was OK (relucantly) with it.
> 
> Patchset has been tested on ARM (tweaking the Kconfig to build xSplice and then
> booting and using it under ARM CubieTruck - granted there is no patching
> yet but the hypercalls work), ARM64 (only built it), and x86 (legacy and EFI)
> 
.. snip..
> 
> *Are there any TODOs left from v5,v6,v7 reviews?*
> 
> Just how the sysctl.h definition for 'struct xsplice_patch_func' should be:
> 
> #define XSPLICE_PAYLOAD_VERSION 1
> /*
>  * .xsplice.funcs structure layout defined in the `Payload format`
>  * section in the xSplice design document.
>  *
>  * The size should be exactly 64 bytes (64) or 52 bytes (32).
>  *
>  * We guard this with __XEN__ as toolstacks do not need to use it.
>  */
> #ifdef __XEN__
> struct xsplice_patch_func {
>     const char *name;       /* Name of function to be patched. */
> #if CONFIG_ARM_32
>     uint32_t new_addr;
>     uint32_t old_addr;
> #else
>     uint64_t new_addr;
>     uint64_t old_addr;      /* Can be zero and name will be looked up. */
> #endif
>     uint32_t new_size;
>     uint32_t old_size;
>     uint8_t version;        /* MUST be XSPLICE_PAYLOAD_VERSION. */
>     uint8_t pad[31];        /* MUST be zero filled. */
> };
> typedef struct xsplice_patch_func xsplice_patch_func_t;
> #endif
> 
> Please note the __XEN__ so even if toolstack does include the public/sysctl.h
> it won't find it the structure.
> 
> With this I am able to compile early-test-cases-prototype-work xSplice on ARM32.

Jan suggested to just drop the uint32_t and uint64_t business and use
a void pointer. It is nicer so I've put a new version up with this.

The interdiff between this (v8.1) and (v9) is:


Julien, Stefano,

Are you guys OK with this? It does compile under ARM/ARM64 without
trouble. If you are OK I will re-instate Julien's Ack on the 
patch that uses and introduces this:
(xsplice: Implement support for applying/reverting/replacing patches.)

diff --git a/docs/misc/xsplice.markdown b/docs/misc/xsplice.markdown
index fb13a7d..d5abab0 100644
--- a/docs/misc/xsplice.markdown
+++ b/docs/misc/xsplice.markdown
@@ -298,13 +298,8 @@ which describe the functions to be patched:
 <pre>
 struct xsplice_patch_func {  
     const char *name;  
-#if BITS_PER_LONG == 32  
-    uint32_t new_addr;  
-    uint32_t old_addr;  
-#else  
-    uint64_t new_addr;  
-    uint64_t old_addr;  
-#endif
+    void *new_addr;  
+    void *old_addr;  
     uint32_t new_size;  
     uint32_t old_size;  
     uint8_t version;  
@@ -312,8 +307,8 @@ struct xsplice_patch_func {
 };  
 </pre>
 
-The size of the structure is 64 bytes or 52 bytes if compiled under 32-bit
-hypervisors.
+The size of the structure is 64 bytes on 64-bit hypervisors. It will be
+52 on 32-bit hypervisors.
 
 * `name` is the symbol name of the old function. Only used if `old_addr` is
    zero, otherwise will be used during dynamic linking (when hypervisor loads
@@ -353,8 +348,8 @@ A simple example of what a payload file can be:
 /* MUST be in sync with hypervisor. */  
 struct xsplice_patch_func {  
     const char *name;  
-    uint64_t new_addr;  
-    uint64_t old_addr;  
+    void *new_addr;  
+    void *old_addr;  
     uint32_t new_size;  
     uint32_t old_size;  
     uint8_t version;
@@ -372,8 +367,8 @@ static unsigned char patch_this_fnc[] = "xen_extra_version";
 struct xsplice_patch_func xsplice_hello_world = {  
     .version = XSPLICE_PAYLOAD_VERSION,
     .name = patch_this_fnc,  
-    .new_addr = (unsigned long)(xen_hello_world),  
-    .old_addr = 0xffff82d08013963c, /* Extracted from xen-syms. */  
+    .new_addr = xen_hello_world,  
+    .old_addr = (void *)0xffff82d08013963c, /* Extracted from xen-syms. */  
     .new_size = 13, /* To be be computed by scripts. */  
     .old_size = 13, /* -----------""---------------  */  
 } __attribute__((__section__(".xsplice.funcs")));  
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 73798c3..3a76f55 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -6102,7 +6102,7 @@ void modify_xen_mappings(unsigned long s, unsigned long e, unsigned int nf)
             v += PAGE_SIZE;
 
             /*
-             * If we not destroying mappings, or are not done with the L2E,
+             * If we are not destroying mappings, or not done with the L2E,
              * skip the empty&free check.
              */
             if ( (nf & _PAGE_PRESENT) || ((v != e) && (l1_table_offset(v) != 0)) )
diff --git a/xen/arch/x86/test/xen_bye_world.c b/xen/arch/x86/test/xen_bye_world.c
index b2f25bd..be83b5a 100644
--- a/xen/arch/x86/test/xen_bye_world.c
+++ b/xen/arch/x86/test/xen_bye_world.c
@@ -17,8 +17,8 @@ extern const char *xen_extra_version(void);
 struct xsplice_patch_func __section(".xsplice.funcs") xsplice_xen_bye_world = {
     .version = XSPLICE_PAYLOAD_VERSION,
     .name = bye_world_patch_this_fnc,
-    .new_addr = (unsigned long)(xen_bye_world),
-    .old_addr = (unsigned long)(xen_extra_version),
+    .new_addr = xen_bye_world,
+    .old_addr = (xen_extra_version,
     .new_size = NEW_CODE_SZ,
     .old_size = OLD_CODE_SZ,
 };
diff --git a/xen/arch/x86/test/xen_hello_world.c b/xen/arch/x86/test/xen_hello_world.c
index 22fe2e7..a67b798 100644
--- a/xen/arch/x86/test/xen_hello_world.c
+++ b/xen/arch/x86/test/xen_hello_world.c
@@ -16,8 +16,8 @@ extern const char *xen_extra_version(void);
 struct xsplice_patch_func __section(".xsplice.funcs") xsplice_xen_hello_world = {
     .version = XSPLICE_PAYLOAD_VERSION,
     .name = hello_world_patch_this_fnc,
-    .new_addr = (unsigned long)(xen_hello_world),
-    .old_addr = (unsigned long)(xen_extra_version),
+    .new_addr = xen_hello_world,
+    .old_addr = xen_extra_version,
     .new_size = NEW_CODE_SZ,
     .old_size = OLD_CODE_SZ,
 };
diff --git a/xen/arch/x86/test/xen_replace_world.c b/xen/arch/x86/test/xen_replace_world.c
index 70516bc..6030139 100644
--- a/xen/arch/x86/test/xen_replace_world.c
+++ b/xen/arch/x86/test/xen_replace_world.c
@@ -17,8 +17,8 @@ extern const char *xen_extra_version(void);
 struct xsplice_patch_func __section(".xsplice.funcs") xsplice_xen_replace_world = {
     .version = XSPLICE_PAYLOAD_VERSION,
     .name = xen_replace_world_name,
-    .new_addr = (unsigned long)(xen_replace_world),
-    .old_addr = (unsigned long)(xen_extra_version),
+    .new_addr = xen_replace_world,
+    .old_addr = xen_extra_version,
     .new_size = NEW_CODE_SZ,
     .old_size = OLD_CODE_SZ,
 };
diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h
index 3d47b47..3876b04 100644
--- a/xen/include/public/sysctl.h
+++ b/xen/include/public/sysctl.h
@@ -845,13 +845,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_sysctl_featureset_t);
 #ifdef __XEN__
 struct xsplice_patch_func {
     const char *name;       /* Name of function to be patched. */
-#if CONFIG_ARM_32
-    uint32_t new_addr;
-    uint32_t old_addr;
-#else
-    uint64_t new_addr;
-    uint64_t old_addr;      /* Can be zero and name will be looked up. */
-#endif
+    void *new_addr;
+    void *old_addr;
     uint32_t new_size;
     uint32_t old_size;
     uint8_t version;        /* MUST be XSPLICE_PAYLOAD_VERSION. */

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  parent reply	other threads:[~2016-04-14 14:26 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-13 22:01 [PATCH v8.1] xSplice v1 design and implementation Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 01/27] Revert "libxc/libxl/python/xenstat/ocaml: Use new XEN_VERSION hypercall" Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 02/27] Revert "HYPERCALL_version_op. New hypercall mirroring XENVER_ but sane." Konrad Rzeszutek Wilk
2016-04-14 16:14   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 03/27] xsplice: Design document Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 04/27] xen/xsplice: Hypervisor implementation of XEN_XSPLICE_op Konrad Rzeszutek Wilk
2016-04-14 16:36   ` Jan Beulich
2016-04-15  2:28     ` Konrad Rzeszutek Wilk
2016-04-17  8:05       ` Jan Beulich
2016-04-18  7:48         ` Konrad Rzeszutek Wilk
2016-04-18 16:33           ` Jan Beulich
2016-04-19 10:14             ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 05/27] libxc: Implementation of XEN_XSPLICE_op in libxc Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 06/27] xen-xsplice: Tool to manipulate xsplice payloads Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 07/27] arm/x86: Use struct virtual_region to do bug, symbol, and (x86) exception tables lookup Konrad Rzeszutek Wilk
2016-04-14 16:50   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 08/27] arm/x86/vmap: Add vmalloc_xen, vfree_xen and vm_init_type Konrad Rzeszutek Wilk
2016-04-17 20:17   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 09/27] x86/mm: Introduce modify_xen_mappings() Konrad Rzeszutek Wilk
2016-04-14  4:07   ` Jan Beulich
2016-04-14 13:34     ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 10/27] xsplice: Add helper elf routines Konrad Rzeszutek Wilk
2016-04-17 20:55   ` Jan Beulich
2016-04-18  5:53     ` Konrad Rzeszutek Wilk
2016-04-18  6:23       ` Jan Beulich
2016-04-20 16:07         ` Konrad Rzeszutek Wilk
2016-04-20 16:59           ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 11/27] xsplice: Implement payload loading Konrad Rzeszutek Wilk
2016-04-18  6:16   ` Jan Beulich
2016-04-20 15:59     ` Konrad Rzeszutek Wilk
2016-04-20 17:05       ` Jan Beulich
2016-04-20 17:36         ` Konrad Rzeszutek Wilk
2016-04-21  6:41           ` Jan Beulich
2016-04-21 15:15       ` Konrad Rzeszutek Wilk
2016-04-21 15:36         ` Jan Beulich
2016-04-21 16:47           ` Konrad Rzeszutek Wilk
2016-04-22  7:40             ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 12/27] xsplice: Implement support for applying/reverting/replacing patches Konrad Rzeszutek Wilk
2016-04-19  6:27   ` Jan Beulich
2016-04-21  0:28     ` Konrad Rzeszutek Wilk
2016-04-21  6:44       ` Jan Beulich
2016-04-21 20:27         ` Konrad Rzeszutek Wilk
2016-04-22  7:44           ` Jan Beulich
2016-04-22 10:51             ` Konrad Rzeszutek Wilk
2016-04-22 17:26     ` Konrad Rzeszutek Wilk
2016-04-25  7:55       ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 13/27] x86/xen_hello_world.xsplice: Test payload for patching 'xen_extra_version' Konrad Rzeszutek Wilk
2016-04-19 17:40   ` Jan Beulich
2016-04-20 16:10     ` Konrad Rzeszutek Wilk
2016-04-20 17:06       ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 14/27] xsplice, symbols: Implement symbol name resolution on address Konrad Rzeszutek Wilk
2016-04-19 19:31   ` Jan Beulich
2016-04-20 12:55     ` Ross Lagerwall
2016-04-21  0:26     ` Konrad Rzeszutek Wilk
2016-04-21  6:46       ` Jan Beulich
     [not found]         ` <CACJDEmrucgYZpCDv3EAkDJUOtdcP9P2T=Vine1o2pzUmwJDY1w@mail.gmail.com>
     [not found]           ` <CACJDEmrzieYh6__MHJH_okoZPk+RA56PuQKv-oid0j1t1po1oQ@mail.gmail.com>
     [not found]             ` <CACJDEmrdi3sTZjGowkvGP67-_DH3+TLvArC8qZfArsyPb6fpuA@mail.gmail.com>
     [not found]               ` <CACJDEmrQ6onv-xqYOi3nekioCSASb4c1eZHJ-rzMxU3Wa7SXTQ@mail.gmail.com>
2016-04-21 13:56                 ` Konrad Rzeszutek Wilk
2016-04-21 14:25                   ` Jan Beulich
2016-04-22  7:17       ` Ross Lagerwall
2016-04-22  7:51         ` Jan Beulich
2016-04-22  8:45           ` Ross Lagerwall
2016-04-22 10:08             ` Jan Beulich
2016-04-22 10:28               ` Konrad Rzeszutek Wilk
2016-04-22 10:50                 ` Jan Beulich
2016-04-22 11:08                   ` Konrad Rzeszutek Wilk
2016-04-22 11:18                     ` Jan Beulich
2016-04-24 21:41                       ` Konrad Rzeszutek Wilk
2016-04-25  8:02                         ` Jan Beulich
2016-04-22 11:13               ` Ross Lagerwall
2016-04-22 11:24                 ` Jan Beulich
2016-04-22 21:10                   ` Konrad Rzeszutek Wilk
2016-04-25  6:41                     ` Ross Lagerwall
2016-04-25  8:15                       ` Jan Beulich
2016-04-22 14:17                 ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 15/27] xsplice, symbols: Implement fast symbol names -> virtual addresses lookup Konrad Rzeszutek Wilk
2016-04-19 19:52   ` Jan Beulich
2016-04-22 15:21     ` Konrad Rzeszutek Wilk
2016-04-25  8:38       ` Jan Beulich
2016-04-25 14:12         ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 16/27] x86, xsplice: Print payload's symbol name and payload name in backtraces Konrad Rzeszutek Wilk
2016-04-19 20:09   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 17/27] xsplice: Add support for bug frames Konrad Rzeszutek Wilk
2016-04-19 20:17   ` Jan Beulich
2016-04-21  0:29     ` Konrad Rzeszutek Wilk
2016-04-21  6:49       ` Jan Beulich
2016-04-22 10:10         ` Konrad Rzeszutek Wilk
2016-04-22 10:28           ` Jan Beulich
2016-04-22 10:54             ` Konrad Rzeszutek Wilk
2016-04-22 10:58               ` Jan Beulich
2016-04-22 11:10                 ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 18/27] xsplice: Add support for exception tables Konrad Rzeszutek Wilk
2016-04-19 20:31   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 19/27] xsplice: Add support for alternatives Konrad Rzeszutek Wilk
2016-04-20  6:28   ` Jan Beulich
2016-04-21  0:30     ` Konrad Rzeszutek Wilk
2016-04-21  6:55       ` Jan Beulich
2016-04-21  0:31     ` Konrad Rzeszutek Wilk
2016-04-21  6:56       ` Jan Beulich
2016-04-22 16:06     ` Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 20/27] build_id: Provide ld-embedded build-ids Konrad Rzeszutek Wilk
2016-04-20  7:14   ` Jan Beulich
2016-04-21  0:33     ` Konrad Rzeszutek Wilk
2016-04-21  6:59       ` Jan Beulich
2016-04-21 20:30         ` Konrad Rzeszutek Wilk
2016-04-22 16:16         ` Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 21/27] xsplice: Print build_id in keyhandler and on bootup Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 22/27] XENVER_build_id/libxc: Provide ld-embedded build-id Konrad Rzeszutek Wilk
2016-04-14 15:03   ` Wei Liu
2016-04-14 15:04   ` Daniel De Graaf
2016-04-20  7:19   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 23/27] libxl: info: Display build_id of the hypervisor Konrad Rzeszutek Wilk
2016-04-14 15:06   ` Wei Liu
2016-04-13 22:02 ` [PATCH v8.1 24/27] xsplice: Stacking build-id dependency checking Konrad Rzeszutek Wilk
2016-04-20  7:49   ` Jan Beulich
2016-04-22 10:46     ` Konrad Rzeszutek Wilk
2016-04-22 10:55       ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 25/27] xsplice/xen_replace_world: Test-case for XSPLICE_ACTION_REPLACE Konrad Rzeszutek Wilk
2016-04-20 11:12   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 26/27] xsplice: Prevent duplicate payloads from being loaded Konrad Rzeszutek Wilk
2016-04-20 11:16   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 27/27] MAINTAINERS/xsplice: Add myself and Ross as the maintainers Konrad Rzeszutek Wilk
2016-04-14 14:26 ` Konrad Rzeszutek Wilk [this message]
2016-04-14 14:29   ` [PATCH v8.1] xSplice v1 design and implementation Julien Grall
2016-04-14 15:12   ` Andrew Cooper
2016-04-14 15:17     ` Jan Beulich
2016-04-15  0:55       ` Konrad Rzeszutek Wilk
2016-04-17  8:00         ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160414142636.GA16521@localhost.localdomain \
    --to=konrad@kernel.org \
    --cc=andrew.cooper3@citrix.com \
    --cc=julien.grall@arm.com \
    --cc=konrad.wilk@oracle.com \
    --cc=mpohlack@amazon.com \
    --cc=ross.lagerwall@citrix.com \
    --cc=sasha.levin@oracle.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.