@@ -1701,8 +1701,6 @@ static void kvm_gen_update_masterclock(struct kvm *kvm)
kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu);
/* guest entries allowed */
- kvm_for_each_vcpu(i, vcpu, kvm)
- clear_bit(KVM_REQ_MCLOCK_INPROGRESS, &vcpu->requests);
spin_unlock(&ka->pvclock_gtod_sync_lock);
#endif
@@ -131,19 +131,18 @@ static inline bool is_error_page(struct page *page)
#define KVM_REQ_PMI 15
#define KVM_REQ_WATCHDOG 16
#define KVM_REQ_MASTERCLOCK_UPDATE 17
-#define KVM_REQ_MCLOCK_INPROGRESS 18
-#define KVM_REQ_EPR_EXIT 19
-#define KVM_REQ_SCAN_IOAPIC 20
-#define KVM_REQ_GLOBAL_CLOCK_UPDATE 21
-#define KVM_REQ_ENABLE_IBS 22
-#define KVM_REQ_DISABLE_IBS 23
-#define KVM_REQ_APIC_PAGE_RELOAD 24
-#define KVM_REQ_SMI 25
-#define KVM_REQ_HV_CRASH 26
-#define KVM_REQ_IOAPIC_EOI_EXIT 27
-#define KVM_REQ_HV_RESET 28
-#define KVM_REQ_HV_EXIT 29
-#define KVM_REQ_HV_STIMER 30
+#define KVM_REQ_EPR_EXIT 18
+#define KVM_REQ_SCAN_IOAPIC 19
+#define KVM_REQ_GLOBAL_CLOCK_UPDATE 20
+#define KVM_REQ_ENABLE_IBS 21
+#define KVM_REQ_DISABLE_IBS 22
+#define KVM_REQ_APIC_PAGE_RELOAD 23
+#define KVM_REQ_SMI 24
+#define KVM_REQ_HV_CRASH 25
+#define KVM_REQ_IOAPIC_EOI_EXIT 26
+#define KVM_REQ_HV_RESET 27
+#define KVM_REQ_HV_EXIT 28
+#define KVM_REQ_HV_STIMER 29
#define KVM_USERSPACE_IRQ_SOURCE_ID 0
#define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1
@@ -685,7 +684,7 @@ void kvm_flush_remote_tlbs(struct kvm *kvm);
void kvm_reload_remote_mmus(struct kvm *kvm);
void kvm_make_mclock_inprogress_request(struct kvm *kvm);
void kvm_make_scan_ioapic_request(struct kvm *kvm);
-bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req);
+bool kvm_make_all_cpus_request(struct kvm *kvm, int req);
long kvm_arch_dev_ioctl(struct file *filp,
unsigned int ioctl, unsigned long arg);
@@ -156,7 +156,7 @@ static void ack_flush(void *_completed)
{
}
-bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req)
+bool kvm_make_all_cpus_request(struct kvm *kvm, int req)
{
int i, cpu, me;
cpumask_var_t cpus;
@@ -167,7 +167,9 @@ bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req)
me = get_cpu();
kvm_for_each_vcpu(i, vcpu, kvm) {
- kvm_make_request(req, vcpu);
+ if (req >= 0)
+ kvm_make_request(req, vcpu);
+
cpu = vcpu->cpu;
/* Set ->requests bit before we read ->mode */
@@ -208,7 +210,7 @@ void kvm_reload_remote_mmus(struct kvm *kvm)
void kvm_make_mclock_inprogress_request(struct kvm *kvm)
{
- kvm_make_all_cpus_request(kvm, KVM_REQ_MCLOCK_INPROGRESS);
+ kvm_make_all_cpus_request(kvm, -1);
}
void kvm_make_scan_ioapic_request(struct kvm *kvm)
Now that we are running out of the bits in vcpu->requests, using one of them just to call kvm_make_all_cpus_request() with a valid request number should be avoided. This patch achieves this by making kvm_make_all_cpus_request() handle an empty request. Signed-off-by: Takuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp> --- arch/x86/kvm/x86.c | 2 -- include/linux/kvm_host.h | 27 +++++++++++++-------------- virt/kvm/kvm_main.c | 8 +++++--- 3 files changed, 18 insertions(+), 19 deletions(-)