diff mbox

[v3,1/2] xen/x86: merge 2 hvm_event_... functions into 1

Message ID 1455518118-414-2-git-send-email-czuzu@bitdefender.com (mailing list archive)
State New, archived
Headers show

Commit Message

Corneliu ZUZU Feb. 15, 2016, 6:35 a.m. UTC
This patch merges almost identical functions hvm_event_int3 and
hvm_event_single_step into a single function called hvm_event_breakpoint.
Also fixes event.c file header comment in the process.

Signed-off-by: Corneliu ZUZU <czuzu@bitdefender.com>
---
 xen/arch/x86/hvm/event.c        | 108 +++++++++++++++++++---------------------
 xen/arch/x86/hvm/vmx/vmx.c      |  15 +++---
 xen/include/asm-x86/hvm/event.h |  11 ++--
 3 files changed, 67 insertions(+), 67 deletions(-)

Comments

Razvan Cojocaru Feb. 15, 2016, 8:30 a.m. UTC | #1
On 02/15/2016 08:35 AM, Corneliu ZUZU wrote:
> This patch merges almost identical functions hvm_event_int3 and
> hvm_event_single_step into a single function called hvm_event_breakpoint.
> Also fixes event.c file header comment in the process.
> 
> Signed-off-by: Corneliu ZUZU <czuzu@bitdefender.com>
> ---
>  xen/arch/x86/hvm/event.c        | 108 +++++++++++++++++++---------------------
>  xen/arch/x86/hvm/vmx/vmx.c      |  15 +++---
>  xen/include/asm-x86/hvm/event.h |  11 ++--
>  3 files changed, 67 insertions(+), 67 deletions(-)

Looks good to me.

Acked-by: Razvan Cojocaru <rcojocaru@bitdefender.com>


Thanks,
Razvan
Corneliu ZUZU Feb. 15, 2016, 5:40 p.m. UTC | #2
On 2/15/2016 10:30 AM, Razvan Cojocaru wrote:
> On 02/15/2016 08:35 AM, Corneliu ZUZU wrote:
>> This patch merges almost identical functions hvm_event_int3 and
>> hvm_event_single_step into a single function called hvm_event_breakpoint.
>> Also fixes event.c file header comment in the process.
>>
>> Signed-off-by: Corneliu ZUZU <czuzu@bitdefender.com>
>> ---
>>   xen/arch/x86/hvm/event.c        | 108 +++++++++++++++++++---------------------
>>   xen/arch/x86/hvm/vmx/vmx.c      |  15 +++---
>>   xen/include/asm-x86/hvm/event.h |  11 ++--
>>   3 files changed, 67 insertions(+), 67 deletions(-)
> Looks good to me.
>
> Acked-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
>
>
> Thanks,
> Razvan
>

I forgot to ask: when getting an Acked-By response, should I include 
that patch in the next patch-series
or ommit it? I've done that w/ the first patch in the last patch-series, 
but IDK if I was correct to do so.

Thanks,
Corneliu.
Tamas K Lengyel Feb. 15, 2016, 5:47 p.m. UTC | #3
On Mon, Feb 15, 2016 at 10:40 AM, Corneliu ZUZU <czuzu@bitdefender.com>
wrote:

> On 2/15/2016 10:30 AM, Razvan Cojocaru wrote:
>
>> On 02/15/2016 08:35 AM, Corneliu ZUZU wrote:
>>
>>> This patch merges almost identical functions hvm_event_int3 and
>>> hvm_event_single_step into a single function called hvm_event_breakpoint.
>>> Also fixes event.c file header comment in the process.
>>>
>>> Signed-off-by: Corneliu ZUZU <czuzu@bitdefender.com>
>>> ---
>>>   xen/arch/x86/hvm/event.c        | 108
>>> +++++++++++++++++++---------------------
>>>   xen/arch/x86/hvm/vmx/vmx.c      |  15 +++---
>>>   xen/include/asm-x86/hvm/event.h |  11 ++--
>>>   3 files changed, 67 insertions(+), 67 deletions(-)
>>>
>> Looks good to me.
>>
>> Acked-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
>>
>>
>> Thanks,
>> Razvan
>>
>>
If the patch hasn't been merged to staging yet then include it. If it's a
longer series the cover page can indicate which patches are still in need
of review and which ones have been already acked. Furthermore, for each
patch under the Signed-off-by tag you can say what changed in each
revision. If nothing changed, you can say no change or just don't put
anything for that revision. See
http://lists.xen.org/archives/html/xen-devel/2016-02/msg00943.html for an
example. Also keep in mind that if the changes in a revision are
significant enough you can't keep the Acked-by tag on the patch, it will
need to be re-acked.

Tamas
Corneliu ZUZU Feb. 15, 2016, 5:54 p.m. UTC | #4
On 2/15/2016 7:47 PM, Tamas K Lengyel wrote:
>
>
> On Mon, Feb 15, 2016 at 10:40 AM, Corneliu ZUZU <czuzu@bitdefender.com 
> <mailto:czuzu@bitdefender.com>> wrote:
>
>     On 2/15/2016 10:30 AM, Razvan Cojocaru wrote:
>
>         On 02/15/2016 08:35 AM, Corneliu ZUZU wrote:
>
>             This patch merges almost identical functions
>             hvm_event_int3 and
>             hvm_event_single_step into a single function called
>             hvm_event_breakpoint.
>             Also fixes event.c file header comment in the process.
>
>             Signed-off-by: Corneliu ZUZU <czuzu@bitdefender.com
>             <mailto:czuzu@bitdefender.com>>
>             ---
>               xen/arch/x86/hvm/event.c        | 108
>             +++++++++++++++++++---------------------
>               xen/arch/x86/hvm/vmx/vmx.c      |  15 +++---
>               xen/include/asm-x86/hvm/event.h |  11 ++--
>               3 files changed, 67 insertions(+), 67 deletions(-)
>
>         Looks good to me.
>
>         Acked-by: Razvan Cojocaru <rcojocaru@bitdefender.com
>         <mailto:rcojocaru@bitdefender.com>>
>
>
>         Thanks,
>         Razvan
>
>
> If the patch hasn't been merged to staging yet then include it. If 
> it's a longer series the cover page can indicate which patches are 
> still in need of review and which ones have been already acked. 
> Furthermore, for each patch under the Signed-off-by tag you can say 
> what changed in each revision. If nothing changed, you can say no 
> change or just don't put anything for that revision. See 
> http://lists.xen.org/archives/html/xen-devel/2016-02/msg00943.html for 
> an example. Also keep in mind that if the changes in a revision are 
> significant enough you can't keep the Acked-by tag on the patch, it 
> will need to be re-acked.
>
> Tamas

Got it, thanks.

Corneliu.
Razvan Cojocaru Feb. 15, 2016, 6:10 p.m. UTC | #5
On 02/15/2016 07:54 PM, Corneliu ZUZU wrote:
> On 2/15/2016 7:47 PM, Tamas K Lengyel wrote:
>>
>>
>> On Mon, Feb 15, 2016 at 10:40 AM, Corneliu ZUZU <czuzu@bitdefender.com
>> <mailto:czuzu@bitdefender.com>> wrote:
>>
>>     On 2/15/2016 10:30 AM, Razvan Cojocaru wrote:
>>
>>         On 02/15/2016 08:35 AM, Corneliu ZUZU wrote:
>>
>>             This patch merges almost identical functions
>>             hvm_event_int3 and
>>             hvm_event_single_step into a single function called
>>             hvm_event_breakpoint.
>>             Also fixes event.c file header comment in the process.
>>
>>             Signed-off-by: Corneliu ZUZU
>>             <<mailto:czuzu@bitdefender.com>czuzu@bitdefender.com>
>>             ---
>>               xen/arch/x86/hvm/event.c        | 108
>>             +++++++++++++++++++---------------------
>>               xen/arch/x86/hvm/vmx/vmx.c      |  15 +++---
>>               xen/include/asm-x86/hvm/event.h |  11 ++--
>>               3 files changed, 67 insertions(+), 67 deletions(-)
>>
>>         Looks good to me.
>>
>>         Acked-by: Razvan Cojocaru
>>         <<mailto:rcojocaru@bitdefender.com>rcojocaru@bitdefender.com>
>>
>>
>>         Thanks,
>>         Razvan
>>
>>
>> If the patch hasn't been merged to staging yet then include it. If
>> it's a longer series the cover page can indicate which patches are
>> still in need of review and which ones have been already acked.
>> Furthermore, for each patch under the Signed-off-by tag you can say
>> what changed in each revision. If nothing changed, you can say no
>> change or just don't put anything for that revision. See
>> <http://lists.xen.org/archives/html/xen-devel/2016-02/msg00943.html>http://lists.xen.org/archives/html/xen-devel/2016-02/msg00943.html
>> for an example. Also keep in mind that if the changes in a revision
>> are significant enough you can't keep the Acked-by tag on the patch,
>> it will need to be re-acked.
>>
>> Tamas
> 
> Got it, thanks.

This particular patch did make it into staging. It's
557c7873f35aa39bd84977b28948457b1b342f92.
diff mbox

Patch

diff --git a/xen/arch/x86/hvm/event.c b/xen/arch/x86/hvm/event.c
index a3d4892..874a36c 100644
--- a/xen/arch/x86/hvm/event.c
+++ b/xen/arch/x86/hvm/event.c
@@ -1,22 +1,24 @@ 
 /*
-* event.c: Common hardware virtual machine event abstractions.
-*
-* Copyright (c) 2004, Intel Corporation.
-* Copyright (c) 2005, International Business Machines Corporation.
-* Copyright (c) 2008, Citrix Systems, Inc.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms and conditions of the GNU General Public License,
-* version 2, as published by the Free Software Foundation.
-*
-* This program is distributed in the hope 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/>.
-*/
+ * arch/x86/hvm/event.c
+ *
+ * Arch-specific hardware virtual machine event abstractions.
+ *
+ * Copyright (c) 2004, Intel Corporation.
+ * Copyright (c) 2005, International Business Machines Corporation.
+ * Copyright (c) 2008, Citrix Systems, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope 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/>.
+ */
 
 #include <xen/vm_event.h>
 #include <xen/paging.h>
@@ -151,61 +153,51 @@  void hvm_event_guest_request(void)
     }
 }
 
-int hvm_event_int3(unsigned long rip)
+static inline unsigned long gfn_of_rip(unsigned long rip)
 {
-    int rc = 0;
     struct vcpu *curr = current;
+    struct segment_register sreg;
+    uint32_t pfec = PFEC_page_present | PFEC_insn_fetch;
 
-    if ( curr->domain->arch.monitor.software_breakpoint_enabled )
-    {
-        struct segment_register sreg;
-        uint32_t pfec = PFEC_page_present | PFEC_insn_fetch;
-        vm_event_request_t req = {
-            .reason = VM_EVENT_REASON_SOFTWARE_BREAKPOINT,
-            .vcpu_id = curr->vcpu_id,
-        };
-
-        hvm_get_segment_register(curr, x86_seg_ss, &sreg);
-        if ( sreg.attr.fields.dpl == 3 )
-            pfec |= PFEC_user_mode;
+    hvm_get_segment_register(curr, x86_seg_ss, &sreg);
+    if ( sreg.attr.fields.dpl == 3 )
+        pfec |= PFEC_user_mode;
 
-        hvm_get_segment_register(curr, x86_seg_cs, &sreg);
-        req.u.software_breakpoint.gfn = paging_gva_to_gfn(curr,
-                                                          sreg.base + rip,
-                                                          &pfec);
-
-        rc = hvm_event_traps(1, &req);
-    }
+    hvm_get_segment_register(curr, x86_seg_cs, &sreg);
 
-    return rc;
+    return paging_gva_to_gfn(curr, sreg.base + rip, &pfec);
 }
 
-int hvm_event_single_step(unsigned long rip)
+int hvm_event_breakpoint(unsigned long rip,
+                         enum hvm_event_breakpoint_type type)
 {
-    int rc = 0;
     struct vcpu *curr = current;
+    struct arch_domain *ad = &curr->domain->arch;
+    vm_event_request_t req;
 
-    if ( curr->domain->arch.monitor.singlestep_enabled )
+    switch ( type )
     {
-        struct segment_register sreg;
-        uint32_t pfec = PFEC_page_present | PFEC_insn_fetch;
-        vm_event_request_t req = {
-            .reason = VM_EVENT_REASON_SINGLESTEP,
-            .vcpu_id = curr->vcpu_id,
-        };
-
-        hvm_get_segment_register(curr, x86_seg_ss, &sreg);
-        if ( sreg.attr.fields.dpl == 3 )
-            pfec |= PFEC_user_mode;
+    case HVM_EVENT_SOFTWARE_BREAKPOINT:
+        if ( !ad->monitor.software_breakpoint_enabled )
+            return 0;
+        req.reason = VM_EVENT_REASON_SOFTWARE_BREAKPOINT;
+        req.u.software_breakpoint.gfn = gfn_of_rip(rip);
+        break;
 
-        hvm_get_segment_register(curr, x86_seg_cs, &sreg);
-        req.u.singlestep.gfn = paging_gva_to_gfn(curr, sreg.base + rip,
-                                                 &pfec);
+    case HVM_EVENT_SINGLESTEP_BREAKPOINT:
+        if ( !ad->monitor.singlestep_enabled )
+            return 0;
+        req.reason = VM_EVENT_REASON_SINGLESTEP;
+        req.u.singlestep.gfn = gfn_of_rip(rip);
+        break;
 
-        rc = hvm_event_traps(1, &req);
+    default:
+        return -EOPNOTSUPP;
     }
 
-    return rc;
+    req.vcpu_id = curr->vcpu_id;
+
+    return hvm_event_traps(1, &req);
 }
 
 /*
diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index 5e99226..44e778f 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -3192,8 +3192,10 @@  void vmx_vmexit_handler(struct cpu_user_regs *regs)
                 break;
             }
             else {
-                int handled = hvm_event_int3(regs->eip);
-                
+                int handled =
+                        hvm_event_breakpoint(regs->eip,
+                                             HVM_EVENT_SOFTWARE_BREAKPOINT);
+
                 if ( handled < 0 ) 
                 {
                     struct hvm_trap trap = {
@@ -3517,10 +3519,11 @@  void vmx_vmexit_handler(struct cpu_user_regs *regs)
     case EXIT_REASON_MONITOR_TRAP_FLAG:
         v->arch.hvm_vmx.exec_control &= ~CPU_BASED_MONITOR_TRAP_FLAG;
         vmx_update_cpu_exec_control(v);
-        if ( v->arch.hvm_vcpu.single_step ) {
-          hvm_event_single_step(regs->eip);
-          if ( v->domain->debugger_attached )
-              domain_pause_for_debugger();
+        if ( v->arch.hvm_vcpu.single_step )
+        {
+            hvm_event_breakpoint(regs->eip, HVM_EVENT_SINGLESTEP_BREAKPOINT);
+            if ( v->domain->debugger_attached )
+                domain_pause_for_debugger();
         }
 
         break;
diff --git a/xen/include/asm-x86/hvm/event.h b/xen/include/asm-x86/hvm/event.h
index 11eb1fe..7a83b45 100644
--- a/xen/include/asm-x86/hvm/event.h
+++ b/xen/include/asm-x86/hvm/event.h
@@ -17,6 +17,12 @@ 
 #ifndef __ASM_X86_HVM_EVENT_H__
 #define __ASM_X86_HVM_EVENT_H__
 
+enum hvm_event_breakpoint_type
+{
+    HVM_EVENT_SOFTWARE_BREAKPOINT,
+    HVM_EVENT_SINGLESTEP_BREAKPOINT,
+};
+
 /*
  * Called for current VCPU on crX/MSR changes by guest.
  * The event might not fire if the client has subscribed to it in onchangeonly
@@ -27,9 +33,8 @@  bool_t hvm_event_cr(unsigned int index, unsigned long value,
 #define hvm_event_crX(what, new, old) \
     hvm_event_cr(VM_EVENT_X86_##what, new, old)
 void hvm_event_msr(unsigned int msr, uint64_t value);
-/* Called for current VCPU: returns -1 if no listener */
-int hvm_event_int3(unsigned long rip);
-int hvm_event_single_step(unsigned long rip);
+int hvm_event_breakpoint(unsigned long rip,
+                         enum hvm_event_breakpoint_type type);
 void hvm_event_guest_request(void);
 
 #endif /* __ASM_X86_HVM_EVENT_H__ */