@@ -353,10 +353,6 @@ struct domain *domain_create(domid_t domid,
hardware_domain = d;
}
- /* Sort out our idea of is_{pv,hvm}_domain(). All system domains are PV. */
- d->guest_type = ((d->options & XEN_DOMCTL_CDF_hvm_guest)
- ? guest_type_hvm : guest_type_pv);
-
TRACE_1D(TRC_DOM0_DOM_ADD, d->domain_id);
/*
@@ -187,17 +187,9 @@ void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info)
(d->controller_pause_count > 0 ? XEN_DOMINF_paused : 0) |
(d->debugger_attached ? XEN_DOMINF_debugged : 0) |
(d->is_xenstore ? XEN_DOMINF_xs_domain : 0) |
+ (is_hvm_domain(d) ? XEN_DOMINF_hvm_guest : 0) |
d->shutdown_code << XEN_DOMINF_shutdownshift;
- switch ( d->guest_type )
- {
- case guest_type_hvm:
- info->flags |= XEN_DOMINF_hvm_guest;
- break;
- default:
- break;
- }
-
xsm_security_domaininfo(d, info);
info->tot_pages = d->tot_pages;
@@ -474,19 +474,14 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
fi.submap |= (1U << XENFEAT_ARM_SMCCC_supported);
#endif
#ifdef CONFIG_X86
- switch ( d->guest_type )
- {
- case guest_type_pv:
+ if ( is_pv_domain(d) )
fi.submap |= (1U << XENFEAT_mmu_pt_update_preserve_ad) |
(1U << XENFEAT_highmem_assist) |
(1U << XENFEAT_gnttab_map_avail_bits);
- break;
- case guest_type_hvm:
+ else
fi.submap |= (1U << XENFEAT_hvm_safe_pvclock) |
(1U << XENFEAT_hvm_callback_vector) |
(has_pirq(d) ? (1U << XENFEAT_hvm_pirqs) : 0);
- break;
- }
#endif
break;
default:
@@ -302,10 +302,6 @@ struct vm_event_domain
struct evtchn_port_ops;
-enum guest_type {
- guest_type_pv, guest_type_hvm
-};
-
struct domain
{
unsigned int options; /* copy of createdomain flags */
@@ -357,8 +353,6 @@ struct domain
struct radix_tree_root pirq_tree;
unsigned int nr_pirqs;
- enum guest_type guest_type;
-
/* Is this guest dying (i.e., a zombie)? */
enum { DOMDYING_alive, DOMDYING_dying, DOMDYING_dead } is_dying;
@@ -918,8 +912,8 @@ void watchdog_domain_destroy(struct domain *d);
static inline bool is_pv_domain(const struct domain *d)
{
- return IS_ENABLED(CONFIG_PV)
- ? evaluate_nospec(d->guest_type == guest_type_pv) : false;
+ return IS_ENABLED(CONFIG_PV) &&
+ evaluate_nospec(!(d->options & XEN_DOMCTL_CDF_hvm_guest));
}
static inline bool is_pv_vcpu(const struct vcpu *v)
@@ -950,8 +944,8 @@ static inline bool is_pv_64bit_vcpu(const struct vcpu *v)
#endif
static inline bool is_hvm_domain(const struct domain *d)
{
- return IS_ENABLED(CONFIG_HVM)
- ? evaluate_nospec(d->guest_type == guest_type_hvm) : false;
+ return IS_ENABLED(CONFIG_HVM) &&
+ evaluate_nospec(d->options & XEN_DOMCTL_CDF_hvm_guest);
}
static inline bool is_hvm_vcpu(const struct vcpu *v)