[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v8 08/11] viridian: stop directly calling viridian_time_ref_count_freeze/thaw()...


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Paul Durrant <paul.durrant@xxxxxxxxxx>
  • Date: Mon, 18 Mar 2019 11:20:56 +0000
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Paul Durrant <paul.durrant@xxxxxxxxxx>, Wei Liu <wei.liu2@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Mon, 18 Mar 2019 11:21:15 +0000
  • Ironport-data: A9a23:Qm+3FK2QJHekBAuj3PbDix16xVm7qk9dZSB6s+R8DyB0pV0GPGx97D uKzLUkopUAQnJEN2Bag4kgu/4O4M+aA/v0HWXmihCR1vnuWJEqXLNj+EzkxnuRmEGtGpLTj5 q65bhplfNIIyvaLFRLOSiAGknMARhLVsNH8ELf3LBCPO80SAfZKfSxaXTMnlA/PT6AOFCcxY m+uLfy0tceuhsjMSfgINGaGrxvyhnN29oBdAPi0xH9nVyg9tdOUNkG747sDxy3u+ZNwO1/hA ty7Ppv2MQi52kDWkcXrwqer8EgOFLZQYDu85Nv0fpggaYgeNHbeg96sj7ngvM2+n5gPtHULR M2sXRUGSGdNpyvcB6gtZt+MgEbTpScI7j/eb/uCfevzfRt4Wr9tzHCRrfcBqNcYvIVrC51Pv OdFMh5Y19FSW8TCFrGY9L00TlJeK4sHB/yczSfyt5CeOL0+nMYYZ17pKm0rX/XYr5VcVU9/F DPltGvwyKR8hJSOkQ+58kDAMojUuuAEpoNkq4RVtzFVkkJ7Hj0KhtOk/PKhTpZt4Q0kUk+fK eJkbqjNDAZZJwxhP1I+0xHaAcNHUrh/XksVJ4SemDrP8g0uUDVj2tvowLqsQ/iwSDU5TuVc7 6d8sQX8QPRmfyGnGsbdBaXCzFB4+PeTVmVfbKMUzgo3E7BxKMBE4KWuhf3IGXcF68bDN6ltY apmwSAzpwMOkAQvQJMI7f5ILvxVGkiaxmrAlCV2K4oGtKXWk2LUaFNV0dTxSJaAMUgziIECO NFL7G4KBK2pte0gNkEDt/DXvFwvCUy+1p9e5k/FF1l07qJOZj45JNmFJwtWXhpm5i8PFIXF3 6CfXcNWw/DzPHaDNb+RgeSvj1lrbOP4uD56UeRlNuEkEnsJeruyr7hghiaNZZXZoUYhJEpIg wDbr31INt2N14RE7WrjYF1PS/AZb5Htvb8TTMXylWNWlWgGQl58owX/zuBfSX1THX0fzWSaR 5MtaKJ8B3OfONUb4HXYNgQN6/ZBY6l0FIoejhwvYRosyJgEVvESF9Sl+XwyLOxfwIntKaOey HV7ok1O5f9ODs7VNcJS0Y7TEeXRa+iaghv6CT4K2bI0HQzo1k21cUZbpwcXRg5OmpH+Vd/pd m2lKfIszGIAOzVfMeCNxp05DDut1uY9N7dvFi2lsesxhD1jt2Y0coO+Dwk6LiGJ81kd3iGlc TBH9AVFzn8HxdQZ1+PVplV/yHvbIw+TA9Hv6sxCYhLFzk4ohkcUf7DyYwiPpgc/rB6jhzXhG tnXvBI11aaMBEQNCjX0BnveEQb9HeWi/vssMy/N3hGLT77IF9necDjzUdwlPq04kw+N6O5Ty FkBj7fYHZrL8C1v7z3vYc9RlHcMPDNis+N6f37oyCNYB9tsIE4ExVSpmXrKKfWaXl4YzxjMk ftVV374gpCSeBxZgITpOHjdrRmvUpYOBjJoVSPqtxqmOKMMWRIRYsMSApJ+fnDQbDIH5TBRi tY0QzrfNsOQAUwhwn4o7i+6ZTSRIiG9y30e/h6t1Hq8MgY6GX/OpLsl44Bkzdx1ZuWqbzUgi FCJ6ai2/TInetU5gHS0uy/YTJoC6RazCIMFI1OtPBIdPW476c/qT1Zqigwq2854VsCXl7uRP iZZNx4mtuNlFO5pSVfgONeXbT6rCKUJEGcXza1K4GCCItTG2MsywLEdMdXtfJIpTGIEG6mQ6 OR89gTolh+UURK0iWS12rjpx4MsZWXglMk3rR4wIboIOIW/+zjzXpY1A/Uw18yZNXt/I9RKk wqnyd9w3SaxoFoecksKiEOf2qT4Lw2KRpGtGfqbLD6NQ1ZHdkNm4vODQI=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

...from arch_domain_shutdown/pause/unpause().

A subsequent patch will introduce an implementaion of synthetic timers
which will also need freeze/thaw hooks, so make the exported hooks more
generic and call through to (re-named and static) time_ref_count_freeze/thaw
functions.

NOTE: This patch also introduces a new time_ref_count() helper to return
      the current counter value. This is currently only used by the MSR
      read handler but the synthetic timer code will also need to use it.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Cc: "Roger Pau Monné" <roger.pau@xxxxxxxxxx>
---
 xen/arch/x86/domain.c              | 12 ++++++------
 xen/arch/x86/hvm/viridian/time.c   | 24 +++++++++++++++++++++---
 xen/include/asm-x86/hvm/viridian.h |  4 ++--
 3 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 8d579e2cf9..02afa7518e 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -657,20 +657,20 @@ void arch_domain_destroy(struct domain *d)
 
 void arch_domain_shutdown(struct domain *d)
 {
-    if ( has_viridian_time_ref_count(d) )
-        viridian_time_ref_count_freeze(d);
+    if ( is_viridian_domain(d) )
+        viridian_time_domain_freeze(d);
 }
 
 void arch_domain_pause(struct domain *d)
 {
-    if ( has_viridian_time_ref_count(d) )
-        viridian_time_ref_count_freeze(d);
+    if ( is_viridian_domain(d) )
+        viridian_time_domain_freeze(d);
 }
 
 void arch_domain_unpause(struct domain *d)
 {
-    if ( has_viridian_time_ref_count(d) )
-        viridian_time_ref_count_thaw(d);
+    if ( is_viridian_domain(d) )
+        viridian_time_domain_thaw(d);
 }
 
 int arch_domain_soft_reset(struct domain *d)
diff --git a/xen/arch/x86/hvm/viridian/time.c b/xen/arch/x86/hvm/viridian/time.c
index 16fe41d411..71291d921c 100644
--- a/xen/arch/x86/hvm/viridian/time.c
+++ b/xen/arch/x86/hvm/viridian/time.c
@@ -91,7 +91,7 @@ static int64_t raw_trc_val(const struct domain *d)
     return scale_delta(tsc, &tsc_to_ns) / 100ul;
 }
 
-void viridian_time_ref_count_freeze(const struct domain *d)
+static void time_ref_count_freeze(const struct domain *d)
 {
     struct viridian_time_ref_count *trc =
         &d->arch.hvm.viridian->time_ref_count;
@@ -100,7 +100,7 @@ void viridian_time_ref_count_freeze(const struct domain *d)
         trc->val = raw_trc_val(d) + trc->off;
 }
 
-void viridian_time_ref_count_thaw(const struct domain *d)
+static void time_ref_count_thaw(const struct domain *d)
 {
     struct viridian_time_ref_count *trc =
         &d->arch.hvm.viridian->time_ref_count;
@@ -110,6 +110,24 @@ void viridian_time_ref_count_thaw(const struct domain *d)
         trc->off = (int64_t)trc->val - raw_trc_val(d);
 }
 
+static int64_t time_ref_count(const struct domain *d)
+{
+    struct viridian_time_ref_count *trc =
+        &d->arch.hvm.viridian->time_ref_count;
+
+    return raw_trc_val(d) + trc->off;
+}
+
+void viridian_time_domain_freeze(const struct domain *d)
+{
+    time_ref_count_freeze(d);
+}
+
+void viridian_time_domain_thaw(const struct domain *d)
+{
+    time_ref_count_thaw(d);
+}
+
 int viridian_time_wrmsr(struct vcpu *v, uint32_t idx, uint64_t val)
 {
     struct domain *d = v->domain;
@@ -179,7 +197,7 @@ int viridian_time_rdmsr(const struct vcpu *v, uint32_t idx, 
uint64_t *val)
             printk(XENLOG_G_INFO "d%d: VIRIDIAN MSR_TIME_REF_COUNT: 
accessed\n",
                    d->domain_id);
 
-        *val = raw_trc_val(d) + trc->off;
+        *val = time_ref_count(d);
         break;
     }
 
diff --git a/xen/include/asm-x86/hvm/viridian.h 
b/xen/include/asm-x86/hvm/viridian.h
index c65c044191..8146e2fc46 100644
--- a/xen/include/asm-x86/hvm/viridian.h
+++ b/xen/include/asm-x86/hvm/viridian.h
@@ -77,8 +77,8 @@ int guest_rdmsr_viridian(const struct vcpu *v, uint32_t idx, 
uint64_t *val);
 int
 viridian_hypercall(struct cpu_user_regs *regs);
 
-void viridian_time_ref_count_freeze(const struct domain *d);
-void viridian_time_ref_count_thaw(const struct domain *d);
+void viridian_time_domain_freeze(const struct domain *d);
+void viridian_time_domain_thaw(const struct domain *d);
 
 int viridian_vcpu_init(struct vcpu *v);
 int viridian_domain_init(struct domain *d);
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.