xics/kvm: Add proper rollback to xics_kvm_init()
Make xics_kvm_disconnect() able to undo the changes of a partial execution of xics_kvm_connect() and use it to perform rollback. Note that kvmppc_define_rtas_kernel_token(0) never fails, no matter the RTAS call has been defined or not. Signed-off-by: Greg Kurz <groug@kaod.org> Message-Id: <156077922319.433243.609897156640506891.stgit@bahia.lan> Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
330a21e3c4
commit
4812f26152
@ -421,10 +421,7 @@ int xics_kvm_connect(SpaprMachineState *spapr, Error **errp)
|
|||||||
|
|
||||||
fail:
|
fail:
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
kvmppc_define_rtas_kernel_token(0, "ibm,set-xive");
|
xics_kvm_disconnect(spapr, NULL);
|
||||||
kvmppc_define_rtas_kernel_token(0, "ibm,get-xive");
|
|
||||||
kvmppc_define_rtas_kernel_token(0, "ibm,int-on");
|
|
||||||
kvmppc_define_rtas_kernel_token(0, "ibm,int-off");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,8 +445,10 @@ void xics_kvm_disconnect(SpaprMachineState *spapr, Error **errp)
|
|||||||
* removed from the list of devices of the VM. The VCPU presenters
|
* removed from the list of devices of the VM. The VCPU presenters
|
||||||
* are also detached from the device.
|
* are also detached from the device.
|
||||||
*/
|
*/
|
||||||
close(kernel_xics_fd);
|
if (kernel_xics_fd != -1) {
|
||||||
kernel_xics_fd = -1;
|
close(kernel_xics_fd);
|
||||||
|
kernel_xics_fd = -1;
|
||||||
|
}
|
||||||
|
|
||||||
kvmppc_define_rtas_kernel_token(0, "ibm,set-xive");
|
kvmppc_define_rtas_kernel_token(0, "ibm,set-xive");
|
||||||
kvmppc_define_rtas_kernel_token(0, "ibm,get-xive");
|
kvmppc_define_rtas_kernel_token(0, "ibm,get-xive");
|
||||||
|
Loading…
Reference in New Issue
Block a user