]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: x86: Move kvm_{request,free}_irq_source_id() to i8254.c (PIT)
authorSean Christopherson <seanjc@google.com>
Wed, 11 Jun 2025 21:35:48 +0000 (14:35 -0700)
committerSean Christopherson <seanjc@google.com>
Fri, 20 Jun 2025 20:52:47 +0000 (13:52 -0700)
Move kvm_{request,free}_irq_source_id() to i8254.c, i.e. the dedicated PIT
emulation file, in anticipation of removing them entirely in favor of
hardcoding the PIT's "requested" source ID (the source ID can only ever be
'2', and the request can never fail).

No functional change intended.

Acked-by: Kai Huang <kai.huang@intel.com>
Link: https://lore.kernel.org/r/20250611213557.294358-10-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/i8254.c
arch/x86/kvm/irq_comm.c
include/linux/kvm_host.h

index 59f956f35f4cb8e161ebcbc98887eb4f44fd3474..2bb223bf0dac267d4578a772aa28def37c21644e 100644 (file)
@@ -641,6 +641,50 @@ static void kvm_pit_reset(struct kvm_pit *pit)
        kvm_pit_reset_reinject(pit);
 }
 
+static int kvm_request_irq_source_id(struct kvm *kvm)
+{
+       unsigned long *bitmap = &kvm->arch.irq_sources_bitmap;
+       int irq_source_id;
+
+       mutex_lock(&kvm->irq_lock);
+       irq_source_id = find_first_zero_bit(bitmap, BITS_PER_LONG);
+
+       if (irq_source_id >= BITS_PER_LONG) {
+               pr_warn("exhausted allocatable IRQ sources!\n");
+               irq_source_id = -EFAULT;
+               goto unlock;
+       }
+
+       ASSERT(irq_source_id != KVM_USERSPACE_IRQ_SOURCE_ID);
+       ASSERT(irq_source_id != KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID);
+       set_bit(irq_source_id, bitmap);
+unlock:
+       mutex_unlock(&kvm->irq_lock);
+
+       return irq_source_id;
+}
+
+static void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id)
+{
+       ASSERT(irq_source_id != KVM_USERSPACE_IRQ_SOURCE_ID);
+       ASSERT(irq_source_id != KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID);
+
+       mutex_lock(&kvm->irq_lock);
+       if (irq_source_id < 0 ||
+           irq_source_id >= BITS_PER_LONG) {
+               pr_err("IRQ source ID out of range!\n");
+               goto unlock;
+       }
+       clear_bit(irq_source_id, &kvm->arch.irq_sources_bitmap);
+       if (!irqchip_full(kvm))
+               goto unlock;
+
+       kvm_ioapic_clear_all(kvm->arch.vioapic, irq_source_id);
+       kvm_pic_clear_all(kvm->arch.vpic, irq_source_id);
+unlock:
+       mutex_unlock(&kvm->irq_lock);
+}
+
 static void pit_mask_notifer(struct kvm_irq_mask_notifier *kimn, bool mask)
 {
        struct kvm_pit *pit = container_of(kimn, struct kvm_pit, mask_notifier);
index 99c521bd9db558ebb2eb820b73b44a3d55998c08..138c675dc24b76ac6fe7a6ebd1b52dd4b8c609d2 100644 (file)
@@ -165,50 +165,6 @@ int kvm_arch_set_irq_inatomic(struct kvm_kernel_irq_routing_entry *e,
        return -EWOULDBLOCK;
 }
 
-int kvm_request_irq_source_id(struct kvm *kvm)
-{
-       unsigned long *bitmap = &kvm->arch.irq_sources_bitmap;
-       int irq_source_id;
-
-       mutex_lock(&kvm->irq_lock);
-       irq_source_id = find_first_zero_bit(bitmap, BITS_PER_LONG);
-
-       if (irq_source_id >= BITS_PER_LONG) {
-               pr_warn("exhausted allocatable IRQ sources!\n");
-               irq_source_id = -EFAULT;
-               goto unlock;
-       }
-
-       ASSERT(irq_source_id != KVM_USERSPACE_IRQ_SOURCE_ID);
-       ASSERT(irq_source_id != KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID);
-       set_bit(irq_source_id, bitmap);
-unlock:
-       mutex_unlock(&kvm->irq_lock);
-
-       return irq_source_id;
-}
-
-void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id)
-{
-       ASSERT(irq_source_id != KVM_USERSPACE_IRQ_SOURCE_ID);
-       ASSERT(irq_source_id != KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID);
-
-       mutex_lock(&kvm->irq_lock);
-       if (irq_source_id < 0 ||
-           irq_source_id >= BITS_PER_LONG) {
-               pr_err("IRQ source ID out of range!\n");
-               goto unlock;
-       }
-       clear_bit(irq_source_id, &kvm->arch.irq_sources_bitmap);
-       if (!irqchip_full(kvm))
-               goto unlock;
-
-       kvm_ioapic_clear_all(kvm->arch.vioapic, irq_source_id);
-       kvm_pic_clear_all(kvm->arch.vpic, irq_source_id);
-unlock:
-       mutex_unlock(&kvm->irq_lock);
-}
-
 void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq,
                                    struct kvm_irq_mask_notifier *kimn)
 {
index 9461517b4e62533d2761d4cba0ef6763e1e3b158..cba8fc4529e8e826a02d5d134ac0ffcfa568a719 100644 (file)
@@ -1784,8 +1784,6 @@ void kvm_register_irq_ack_notifier(struct kvm *kvm,
                                   struct kvm_irq_ack_notifier *kian);
 void kvm_unregister_irq_ack_notifier(struct kvm *kvm,
                                   struct kvm_irq_ack_notifier *kian);
-int kvm_request_irq_source_id(struct kvm *kvm);
-void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id);
 bool kvm_arch_irqfd_allowed(struct kvm *kvm, struct kvm_irqfd *args);
 
 /*