All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] vm_event: Rename MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE
@ 2015-07-07 13:54 Razvan Cojocaru
  2015-07-07 14:08 ` Lengyel, Tamas
  0 siblings, 1 reply; 4+ messages in thread
From: Razvan Cojocaru @ 2015-07-07 13:54 UTC (permalink / raw)
  To: xen-devel
  Cc: keir, Razvan Cojocaru, george.dunlap, andrew.cooper3, jbeulich,
	tlengyel

By naming, placing and bit shift convention, it could be taken as
implied that MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE are
mem_access event specific flags (instead of being generally
applicable as vm_event flags). This patch renames them to
VM_EVENT_FLAG_EMULATE and VM_EVENT_FLAG_EMULATE_NOWRITE
respectively, and uses bit shifts following the rest of the
VM_EVENT_FLAG_ constants.

Signed-off-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
---
 xen/arch/x86/mm/p2m.c         |    4 ++--
 xen/include/public/vm_event.h |   26 +++++++++++++-------------
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index 6b39733..4c49369 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -1418,7 +1418,7 @@ void p2m_mem_access_emulate_check(struct vcpu *v,
                                   const vm_event_response_t *rsp)
 {
     /* Mark vcpu for skipping one instruction upon rescheduling. */
-    if ( rsp->flags & MEM_ACCESS_EMULATE )
+    if ( rsp->flags & VM_EVENT_FLAG_EMULATE )
     {
         xenmem_access_t access;
         bool_t violation = 1;
@@ -1553,7 +1553,7 @@ bool_t p2m_mem_access_check(paddr_t gpa, unsigned long gla,
     if ( v->arch.vm_event.emulate_flags )
     {
         hvm_mem_access_emulate_one((v->arch.vm_event.emulate_flags &
-                                    MEM_ACCESS_EMULATE_NOWRITE) != 0,
+                                    VM_EVENT_FLAG_EMULATE_NOWRITE) != 0,
                                    TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE);
 
         v->arch.vm_event.emulate_flags = 0;
diff --git a/xen/include/public/vm_event.h b/xen/include/public/vm_event.h
index 577e971..aa22052 100644
--- a/xen/include/public/vm_event.h
+++ b/xen/include/public/vm_event.h
@@ -47,6 +47,19 @@
 #define VM_EVENT_FLAG_VCPU_PAUSED     (1 << 0)
 /* Flags to aid debugging mem_event */
 #define VM_EVENT_FLAG_FOREIGN         (1 << 1)
+/*
+ * The following flags can be set in response to a mem_access event.
+ *
+ * Emulate the fault-causing instruction (if set in the event response flags).
+ * This will allow the guest to continue execution without lifting the page
+ * access restrictions.
+ */
+#define VM_EVENT_FLAG_EMULATE         (1 << 2)
+/*
+ * Same as MEM_ACCESS_EMULATE, but with write operations or operations
+ * potentially having side effects (like memory mapped or port I/O) disabled.
+ */
+#define VM_EVENT_FLAG_EMULATE_NOWRITE (1 << 3)
 
 /*
  * Reasons for the vm event request
@@ -136,19 +149,6 @@ struct vm_event_regs_x86 {
 #define MEM_ACCESS_GLA_VALID            (1 << 3)
 #define MEM_ACCESS_FAULT_WITH_GLA       (1 << 4)
 #define MEM_ACCESS_FAULT_IN_GPT         (1 << 5)
-/*
- * The following flags can be set in the response.
- *
- * Emulate the fault-causing instruction (if set in the event response flags).
- * This will allow the guest to continue execution without lifting the page
- * access restrictions.
- */
-#define MEM_ACCESS_EMULATE              (1 << 6)
-/*
- * Same as MEM_ACCESS_EMULATE, but with write operations or operations
- * potentially having side effects (like memory mapped or port I/O) disabled.
- */
-#define MEM_ACCESS_EMULATE_NOWRITE      (1 << 7)
 
 struct vm_event_mem_access {
     uint64_t gfn;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] vm_event: Rename MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE
  2015-07-07 13:54 [PATCH] vm_event: Rename MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE Razvan Cojocaru
@ 2015-07-07 14:08 ` Lengyel, Tamas
  2015-07-07 14:15   ` Razvan Cojocaru
  0 siblings, 1 reply; 4+ messages in thread
From: Lengyel, Tamas @ 2015-07-07 14:08 UTC (permalink / raw)
  To: Razvan Cojocaru
  Cc: George Dunlap, Andrew Cooper, keir, Jan Beulich, Xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 1926 bytes --]

On Tue, Jul 7, 2015 at 9:54 AM, Razvan Cojocaru <rcojocaru@bitdefender.com>
wrote:

> By naming, placing and bit shift convention, it could be taken as
> implied that MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE are
> mem_access event specific flags (instead of being generally
> applicable as vm_event flags). This patch renames them to
> VM_EVENT_FLAG_EMULATE and VM_EVENT_FLAG_EMULATE_NOWRITE
> respectively, and uses bit shifts following the rest of the
> VM_EVENT_FLAG_ constants.
>
> Signed-off-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
> ---
>  xen/arch/x86/mm/p2m.c         |    4 ++--
>  xen/include/public/vm_event.h |   26 +++++++++++++-------------
>  2 files changed, 15 insertions(+), 15 deletions(-)
>
> diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
> index 6b39733..4c49369 100644
> --- a/xen/arch/x86/mm/p2m.c
> +++ b/xen/arch/x86/mm/p2m.c
> @@ -1418,7 +1418,7 @@ void p2m_mem_access_emulate_check(struct vcpu *v,
>                                    const vm_event_response_t *rsp)
>  {
>      /* Mark vcpu for skipping one instruction upon rescheduling. */
> -    if ( rsp->flags & MEM_ACCESS_EMULATE )
> +    if ( rsp->flags & VM_EVENT_FLAG_EMULATE )
>      {
>          xenmem_access_t access;
>          bool_t violation = 1;
> @@ -1553,7 +1553,7 @@ bool_t p2m_mem_access_check(paddr_t gpa, unsigned
> long gla,
>      if ( v->arch.vm_event.emulate_flags )
>      {
>          hvm_mem_access_emulate_one((v->arch.vm_event.emulate_flags &
> -                                    MEM_ACCESS_EMULATE_NOWRITE) != 0,
> +                                    VM_EVENT_FLAG_EMULATE_NOWRITE) != 0,
>

Now looking at this more closely - VM_EVENT_FLAG_EMULATE_NOWRITE doesn't
get set on rsp->flags. As such, it would make sense to keep it as a
separate define (simply VM_EVENT_EMULATE_NOWRITE?). IMHO VM_EVENT_FLAG_*
defines should correspond to things set on the req/rsp->flags field.

Tamas

[-- Attachment #1.2: Type: text/html, Size: 2486 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] vm_event: Rename MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE
  2015-07-07 14:08 ` Lengyel, Tamas
@ 2015-07-07 14:15   ` Razvan Cojocaru
  2015-07-07 15:00     ` Lengyel, Tamas
  0 siblings, 1 reply; 4+ messages in thread
From: Razvan Cojocaru @ 2015-07-07 14:15 UTC (permalink / raw)
  To: Lengyel, Tamas; +Cc: George Dunlap, Andrew Cooper, keir, Jan Beulich, Xen-devel

On 07/07/2015 05:08 PM, Lengyel, Tamas wrote:
> 
> 
> On Tue, Jul 7, 2015 at 9:54 AM, Razvan Cojocaru
> <rcojocaru@bitdefender.com <mailto:rcojocaru@bitdefender.com>> wrote:
> 
>     By naming, placing and bit shift convention, it could be taken as
>     implied that MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE are
>     mem_access event specific flags (instead of being generally
>     applicable as vm_event flags). This patch renames them to
>     VM_EVENT_FLAG_EMULATE and VM_EVENT_FLAG_EMULATE_NOWRITE
>     respectively, and uses bit shifts following the rest of the
>     VM_EVENT_FLAG_ constants.
> 
>     Signed-off-by: Razvan Cojocaru <rcojocaru@bitdefender.com
>     <mailto:rcojocaru@bitdefender.com>>
>     ---
>      xen/arch/x86/mm/p2m.c         |    4 ++--
>      xen/include/public/vm_event.h |   26 +++++++++++++-------------
>      2 files changed, 15 insertions(+), 15 deletions(-)
> 
>     diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
>     index 6b39733..4c49369 100644
>     --- a/xen/arch/x86/mm/p2m.c
>     +++ b/xen/arch/x86/mm/p2m.c
>     @@ -1418,7 +1418,7 @@ void p2m_mem_access_emulate_check(struct vcpu *v,
>                                        const vm_event_response_t *rsp)
>      {
>          /* Mark vcpu for skipping one instruction upon rescheduling. */
>     -    if ( rsp->flags & MEM_ACCESS_EMULATE )
>     +    if ( rsp->flags & VM_EVENT_FLAG_EMULATE )
>          {
>              xenmem_access_t access;
>              bool_t violation = 1;
>     @@ -1553,7 +1553,7 @@ bool_t p2m_mem_access_check(paddr_t gpa,
>     unsigned long gla,
>          if ( v->arch.vm_event.emulate_flags )
>          {
>              hvm_mem_access_emulate_one((v->arch.vm_event.emulate_flags &
>     -                                    MEM_ACCESS_EMULATE_NOWRITE) != 0,
>     +                                    VM_EVENT_FLAG_EMULATE_NOWRITE)
>     != 0,
> 
> 
> Now looking at this more closely - VM_EVENT_FLAG_EMULATE_NOWRITE doesn't
> get set on rsp->flags. As such, it would make sense to keep it as a
> separate define (simply VM_EVENT_EMULATE_NOWRITE?). IMHO VM_EVENT_FLAG_*
> defines should correspond to things set on the req/rsp->flags field.

It does get set, it's just not very obvious, but please see line 1468 below:

1417 void p2m_mem_access_emulate_check(struct vcpu *v,
1418                                   const vm_event_response_t *rsp)
1419 {
1420     /* Mark vcpu for skipping one instruction upon rescheduling. */
1421     if ( rsp->flags & MEM_ACCESS_EMULATE )
1422     {
1423         xenmem_access_t access;
1424         bool_t violation = 1;
1425         const struct vm_event_mem_access *data = &rsp->u.mem_access;
1426
1427         if ( p2m_get_mem_access(v->domain, data->gfn, &access) == 0 )
1428         {
1429             switch ( access )
1430             {
1431             case XENMEM_access_n:
1432             case XENMEM_access_n2rwx:
1433             default:
1434                 violation = data->flags & MEM_ACCESS_RWX;
1435                 break;

[...]

1462             case XENMEM_access_rwx:
1463                 violation = 0;
1464                 break;
1465             }
1466         }
1467
1468         v->arch.vm_event.emulate_flags = violation ? rsp->flags : 0;
1469     }
1470 }

With the right conditions, v->arch.vm_event.emulate_flags is assigned
rsp->flags, which does have VM_EVENT_EMULATE_NOWRITE set quite a lot for
us. :)


Thanks,
Razvan

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] vm_event: Rename MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE
  2015-07-07 14:15   ` Razvan Cojocaru
@ 2015-07-07 15:00     ` Lengyel, Tamas
  0 siblings, 0 replies; 4+ messages in thread
From: Lengyel, Tamas @ 2015-07-07 15:00 UTC (permalink / raw)
  To: Razvan Cojocaru
  Cc: George Dunlap, Andrew Cooper, keir, Jan Beulich, Xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 1792 bytes --]

> > Now looking at this more closely - VM_EVENT_FLAG_EMULATE_NOWRITE doesn't
> > get set on rsp->flags. As such, it would make sense to keep it as a
> > separate define (simply VM_EVENT_EMULATE_NOWRITE?). IMHO VM_EVENT_FLAG_*
> > defines should correspond to things set on the req/rsp->flags field.
>
> It does get set, it's just not very obvious, but please see line 1468
> below:
>
> 1417 void p2m_mem_access_emulate_check(struct vcpu *v,
> 1418                                   const vm_event_response_t *rsp)
> 1419 {
> 1420     /* Mark vcpu for skipping one instruction upon rescheduling. */
> 1421     if ( rsp->flags & MEM_ACCESS_EMULATE )
> 1422     {
> 1423         xenmem_access_t access;
> 1424         bool_t violation = 1;
> 1425         const struct vm_event_mem_access *data = &rsp->u.mem_access;
> 1426
> 1427         if ( p2m_get_mem_access(v->domain, data->gfn, &access) == 0 )
> 1428         {
> 1429             switch ( access )
> 1430             {
> 1431             case XENMEM_access_n:
> 1432             case XENMEM_access_n2rwx:
> 1433             default:
> 1434                 violation = data->flags & MEM_ACCESS_RWX;
> 1435                 break;
>
> [...]
>
> 1462             case XENMEM_access_rwx:
> 1463                 violation = 0;
> 1464                 break;
> 1465             }
> 1466         }
> 1467
> 1468         v->arch.vm_event.emulate_flags = violation ? rsp->flags : 0;
> 1469     }
> 1470 }
>
> With the right conditions, v->arch.vm_event.emulate_flags is assigned
> rsp->flags, which does have VM_EVENT_EMULATE_NOWRITE set quite a lot for
> us. :)


Ah OK. Maybe we don't need to copy the entire rsp->flags, only the emulate
related bits? But that's beyond the scope of this patch so:

Acked-by: Tamas K Lengyel <tlengyel@novetta.com>

[-- Attachment #1.2: Type: text/html, Size: 2342 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-07-07 15:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-07 13:54 [PATCH] vm_event: Rename MEM_ACCESS_EMULATE and MEM_ACCESS_EMULATE_NOWRITE Razvan Cojocaru
2015-07-07 14:08 ` Lengyel, Tamas
2015-07-07 14:15   ` Razvan Cojocaru
2015-07-07 15:00     ` Lengyel, Tamas

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.