|
@@ -325,9 +325,10 @@ static inline void hyperv_setup_mmu_ops(void) {}
|
|
|
|
|
|
#ifdef CONFIG_HYPERV_TSCPAGE
|
|
#ifdef CONFIG_HYPERV_TSCPAGE
|
|
struct ms_hyperv_tsc_page *hv_get_tsc_page(void);
|
|
struct ms_hyperv_tsc_page *hv_get_tsc_page(void);
|
|
-static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg)
|
|
|
|
|
|
+static inline u64 hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg,
|
|
|
|
+ u64 *cur_tsc)
|
|
{
|
|
{
|
|
- u64 scale, offset, cur_tsc;
|
|
|
|
|
|
+ u64 scale, offset;
|
|
u32 sequence;
|
|
u32 sequence;
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -358,7 +359,7 @@ static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg)
|
|
|
|
|
|
scale = READ_ONCE(tsc_pg->tsc_scale);
|
|
scale = READ_ONCE(tsc_pg->tsc_scale);
|
|
offset = READ_ONCE(tsc_pg->tsc_offset);
|
|
offset = READ_ONCE(tsc_pg->tsc_offset);
|
|
- cur_tsc = rdtsc_ordered();
|
|
|
|
|
|
+ *cur_tsc = rdtsc_ordered();
|
|
|
|
|
|
/*
|
|
/*
|
|
* Make sure we read sequence after we read all other values
|
|
* Make sure we read sequence after we read all other values
|
|
@@ -368,7 +369,14 @@ static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg)
|
|
|
|
|
|
} while (READ_ONCE(tsc_pg->tsc_sequence) != sequence);
|
|
} while (READ_ONCE(tsc_pg->tsc_sequence) != sequence);
|
|
|
|
|
|
- return mul_u64_u64_shr(cur_tsc, scale, 64) + offset;
|
|
|
|
|
|
+ return mul_u64_u64_shr(*cur_tsc, scale, 64) + offset;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg)
|
|
|
|
+{
|
|
|
|
+ u64 cur_tsc;
|
|
|
|
+
|
|
|
|
+ return hv_read_tsc_page_tsc(tsc_pg, &cur_tsc);
|
|
}
|
|
}
|
|
|
|
|
|
#else
|
|
#else
|
|
@@ -376,5 +384,12 @@ static inline struct ms_hyperv_tsc_page *hv_get_tsc_page(void)
|
|
{
|
|
{
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+static inline u64 hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg,
|
|
|
|
+ u64 *cur_tsc)
|
|
|
|
+{
|
|
|
|
+ BUG();
|
|
|
|
+ return U64_MAX;
|
|
|
|
+}
|
|
#endif
|
|
#endif
|
|
#endif
|
|
#endif
|