[PATCH v3 08/11] KVM: arm: implement dirty bit mechanism for debug registers

Zhichao Huang zhichao.huang at linaro.org
Wed Jul 8 03:50:22 PDT 2015

Hi, Will,

Are you happy with this?:

diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c

+bool hw_breakpoint_enabled(void)
+    struct perf_event **slots;
+    int i;
+    slots = this_cpu_ptr(bp_on_reg);
+    for (i = 0; i < core_num_brps; i++) {
+        if (slots[i])
+            return true;
+    }
+    slots = this_cpu_ptr(wp_on_reg);
+    for (i = 0; i < core_num_wrps; i++) {
+        if (slots[i])
+            return true;
+    }
+    return false;

It doesn't change any existing functions, and even doesn't add a new
variables, it just provide an indication for KVM, and it's low-overhead.

We will only call it upon guest entry, so there is also no race for it.

On July 7, 2015 6:24:06 PM GMT+08:00, Will Deacon <will.deacon at arm.com> wrote:
>On Tue, Jul 07, 2015 at 11:06:57AM +0100, Zhichao Huang wrote:
>> Chazy and me are talking about how to reduce the saving/restoring
>> overhead for debug registers.
>> We want to add a state in hw_breakpoint.c to indicate whether the
>> enable any hwbrpts or not (might export a fuction that kvm can call),
>> then we can read this state from memory instead of reading from real
>> hardware registers, and to decide whether we need a world switch or
>> not.
>> Does it acceptable?
>Maybe, hard to tell without the code. There are obvious races to deal
>if you use variables to indicate whether resources are in use -- why
>just trap debug access from the host as well? Then you could keep track
>the "owner" in kvm and trap accesses from everybody else.

Zhichao Huang

More information about the linux-arm-kernel mailing list