powerpc/kvm/book3s_hv: Rework the secondary inhibit code
As part of the support for split core on POWER8, we want to be able to block splitting of the core while KVM VMs are active. The logic to do that would be exactly the same as the code we currently have for inhibiting onlining of secondaries. Instead of adding an identical mechanism to block split core, rework the secondary inhibit code to be a "HV KVM is active" check. We can then use that in both the cpu hotplug code and the upcoming split core code. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Michael Neuling <mikey@neuling.org> Acked-by: Alexander Graf <agraf@suse.de> Acked-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

parent
64bb80d87f
commit
441c19c8a2
@@ -6,6 +6,7 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/kvm_host.h>
|
||||
#include <linux/preempt.h>
|
||||
#include <linux/export.h>
|
||||
@@ -181,3 +182,33 @@ void __init kvm_cma_reserve(void)
|
||||
kvm_cma_declare_contiguous(selected_size, align_size);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* When running HV mode KVM we need to block certain operations while KVM VMs
|
||||
* exist in the system. We use a counter of VMs to track this.
|
||||
*
|
||||
* One of the operations we need to block is onlining of secondaries, so we
|
||||
* protect hv_vm_count with get/put_online_cpus().
|
||||
*/
|
||||
static atomic_t hv_vm_count;
|
||||
|
||||
void kvm_hv_vm_activated(void)
|
||||
{
|
||||
get_online_cpus();
|
||||
atomic_inc(&hv_vm_count);
|
||||
put_online_cpus();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kvm_hv_vm_activated);
|
||||
|
||||
void kvm_hv_vm_deactivated(void)
|
||||
{
|
||||
get_online_cpus();
|
||||
atomic_dec(&hv_vm_count);
|
||||
put_online_cpus();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kvm_hv_vm_deactivated);
|
||||
|
||||
bool kvm_hv_mode_active(void)
|
||||
{
|
||||
return atomic_read(&hv_vm_count) != 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user