x86: fix !CONFIG_HVM build for clang 3.8
authorWei Liu <wei.liu2@citrix.com>
Thu, 4 Oct 2018 16:37:56 +0000 (17:37 +0100)
committerWei Liu <wei.liu2@citrix.com>
Fri, 5 Oct 2018 09:04:06 +0000 (10:04 +0100)
It is discovered that hvm_funcs made it into monitor.o even when HVM
is disabled. This version of clang doesn't seem to completely
eliminate the code after is_hvm_domain() in
arch_monitor_get_capabilities().

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/include/asm-x86/hvm/hvm.h
xen/include/asm-x86/monitor.h

index 3959604287b66f6684711c19bf4319e71b22d31d..e2cbcf53dbcf80bf2317b1e1b13319de8e7270c2 100644 (file)
@@ -379,6 +379,11 @@ unsigned long hvm_cr4_guest_valid_bits(const struct domain *d, bool restore);
 
 #define hvm_long_mode_active(v) (!!((v)->arch.hvm.guest_efer & EFER_LMA))
 
+static inline bool hvm_has_set_descriptor_access_exiting(void)
+{
+    return hvm_funcs.set_descriptor_access_exiting;
+}
+
 static inline int
 hvm_guest_x86_mode(struct vcpu *v)
 {
@@ -757,6 +762,11 @@ static inline void hvm_inject_hw_exception(unsigned int vector, int errcode)
     ASSERT_UNREACHABLE();
 }
 
+static inline bool hvm_has_set_descriptor_access_exiting(void)
+{
+    return false;
+}
+
 #define is_viridian_domain(d) ((void)(d), false)
 #define has_viridian_time_ref_count(d) ((void)(d), false)
 #define hvm_long_mode_active(v) ((void)(v), false)
index e02484f56b12e31931cbd79ebe0eed64a712e239..4afb0665e8ca61df3bd4c1e62ecf1a7c5f37c5a3 100644 (file)
@@ -90,7 +90,7 @@ static inline uint32_t arch_monitor_get_capabilities(struct domain *d)
     if ( hvm_is_singlestep_supported() )
         capabilities |= (1U << XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP);
 
-    if ( hvm_funcs.set_descriptor_access_exiting )
+    if ( hvm_has_set_descriptor_access_exiting() )
         capabilities |= (1U << XEN_DOMCTL_MONITOR_EVENT_DESC_ACCESS);
 
     return capabilities;