This patch adds domain and vcpu init hooks for viridian features. The init
hooks do not yet do anything; the functionality will be added to by
subsequent patches.
NOTE: This patch also removes the call from the domain deinit function to
the vcpu deinit function, as this is not necessary.
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
---
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: "Roger Pau Monné" <roger.pau@citrix.com>
v3:
- Re-instate call from domain deinit to vcpu deinit
v2:
- Remove call from domain deinit to vcpu deinit
if ( hvm_tsc_scaling_supported )
d->arch.hvm.tsc_scaling_ratio = hvm_default_tsc_scaling_ratio;
+ rc = viridian_domain_init(d);
+ if ( rc )
+ goto fail2;
+
rc = hvm_funcs.domain_initialise(d);
if ( rc != 0 )
- goto fail2;
+ goto fail3;
return 0;
+ fail3:
+ viridian_domain_deinit(d);
fail2:
rtc_deinit(d);
stdvga_deinit(d);
if ( rc != 0 )
goto fail6;
+ rc = viridian_vcpu_init(v);
+ if ( rc )
+ goto fail7;
+
if ( v->vcpu_id == 0 )
{
/* NB. All these really belong in hvm_domain_initialise(). */
return 0;
+ fail7:
+ hvm_all_ioreq_servers_remove_vcpu(d, v);
fail6:
nestedhvm_vcpu_destroy(v);
fail5:
return X86EMUL_OKAY;
}
+int viridian_vcpu_init(struct vcpu *v)
+{
+ return 0;
+}
+
+int viridian_domain_init(struct domain *d)
+{
+ return 0;
+}
+
void viridian_vcpu_deinit(struct vcpu *v)
{
viridian_synic_wrmsr(v, HV_X64_MSR_VP_ASSIST_PAGE, 0);
void viridian_time_ref_count_freeze(struct domain *d);
void viridian_time_ref_count_thaw(struct domain *d);
+int viridian_vcpu_init(struct vcpu *v);
+int viridian_domain_init(struct domain *d);
+
void viridian_vcpu_deinit(struct vcpu *v);
void viridian_domain_deinit(struct domain *d);