[Xen-devel] [RFC PATCH 1/4] arm/monitor: Introduce monitoring of single-step events

2017-09-05 Thread Sergej Proskurin
In this commit, we extend the capabilities of the monitor to allow
tracing of single-step events on ARM.

Signed-off-by: Sergej Proskurin 
---
Cc: Razvan Cojocaru 
Cc: Tamas K Lengyel 
Cc: Stefano Stabellini 
Cc: Julien Grall 
---
 xen/arch/arm/monitor.c| 23 +++
 xen/include/asm-arm/domain.h  |  1 +
 xen/include/asm-arm/monitor.h |  5 -
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/monitor.c b/xen/arch/arm/monitor.c
index 59ce8f635f..a4466c9574 100644
--- a/xen/arch/arm/monitor.c
+++ b/xen/arch/arm/monitor.c
@@ -32,6 +32,20 @@ int arch_monitor_domctl_event(struct domain *d,
 
 switch ( mop->event )
 {
+case XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP:
+{
+bool old_status = ad->monitor.single_step_enabled;
+
+if ( unlikely(old_status == requested_status) )
+return -EEXIST;
+
+domain_pause(d);
+ad->monitor.single_step_enabled = requested_status;
+domain_unpause(d);
+
+break;
+}
+
 case XEN_DOMCTL_MONITOR_EVENT_PRIVILEGED_CALL:
 {
 bool_t old_status = ad->monitor.privileged_call_enabled;
@@ -66,6 +80,15 @@ int monitor_smc(void)
 return monitor_traps(current, 1, &req);
 }
 
+int monitor_ss(void)
+{
+vm_event_request_t req = {
+.reason = VM_EVENT_REASON_SINGLESTEP,
+};
+
+return monitor_traps(current, 1, &req);
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h
index 8dfc1d1ec2..0e4ee2956e 100644
--- a/xen/include/asm-arm/domain.h
+++ b/xen/include/asm-arm/domain.h
@@ -143,6 +143,7 @@ struct arch_domain
 
 /* Monitor options */
 struct {
+uint8_t single_step_enabled : 1;
 uint8_t privileged_call_enabled : 1;
 } monitor;
 }  __cacheline_aligned;
diff --git a/xen/include/asm-arm/monitor.h b/xen/include/asm-arm/monitor.h
index 7567be66bd..66c7fe14fe 100644
--- a/xen/include/asm-arm/monitor.h
+++ b/xen/include/asm-arm/monitor.h
@@ -57,12 +57,15 @@ static inline uint32_t arch_monitor_get_capabilities(struct 
domain *d)
 {
 uint32_t capabilities = 0;
 
-capabilities = (1U << XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST |
+capabilities = (1U << XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP |
+1U << XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST |
 1U << XEN_DOMCTL_MONITOR_EVENT_PRIVILEGED_CALL);
 
 return capabilities;
 }
 
+int monitor_ss(void);
+
 int monitor_smc(void);
 
 #endif /* __ASM_ARM_MONITOR_H__ */
-- 
2.13.3


___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [RFC PATCH 1/4] arm/monitor: Introduce monitoring of single-step events

2017-09-05 Thread Razvan Cojocaru
On 09/05/2017 11:57 AM, Sergej Proskurin wrote:
> In this commit, we extend the capabilities of the monitor to allow
> tracing of single-step events on ARM.
> 
> Signed-off-by: Sergej Proskurin 

Acked-by: Razvan Cojocaru 

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [RFC PATCH 1/4] arm/monitor: Introduce monitoring of single-step events

2017-09-05 Thread Tamas K Lengyel
> diff --git a/xen/include/asm-arm/monitor.h b/xen/include/asm-arm/monitor.h
> index 7567be66bd..66c7fe14fe 100644
> --- a/xen/include/asm-arm/monitor.h
> +++ b/xen/include/asm-arm/monitor.h
> @@ -57,12 +57,15 @@ static inline uint32_t 
> arch_monitor_get_capabilities(struct domain *d)
>  {
>  uint32_t capabilities = 0;
>
> -capabilities = (1U << XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST |
> +capabilities = (1U << XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP |
> +1U << XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST |
>  1U << XEN_DOMCTL_MONITOR_EVENT_PRIVILEGED_CALL);

Please append the new capability bit instead of prepending.

Tamas

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel