]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: s390: pci: Fix handling of AIF enable without AISB
authorMatthew Rosato <mjrosato@linux.ibm.com>
Thu, 9 Jul 2026 13:54:04 +0000 (09:54 -0400)
committerChristian Borntraeger <borntraeger@linux.ibm.com>
Thu, 9 Jul 2026 14:23:10 +0000 (16:23 +0200)
When a guest seeks to register IRQs without a summary bit specified,
ensure that the associated GAITE then stores 0 for the guest AISB
location instead of virt_to_phys(page_address(NULL)).

Fixes: 3c5a1b6f0a18 ("KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding")
Cc: stable@vger.kernel.org
Reviewed-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
arch/s390/kvm/pci.c

index 686113be053090f03ebe05c2cee465b2ba842d08..720bb58cabe2e90efba75c361534e77e01b37c5b 100644 (file)
@@ -300,9 +300,14 @@ static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib,
 
        gaite->gisc = fib->fmt0.isc;
        gaite->count++;
-       gaite->aisbo = fib->fmt0.aisbo;
-       gaite->aisb = virt_to_phys(page_address(aisb_page) + (fib->fmt0.aisb &
-                                                             ~PAGE_MASK));
+       if (fib->fmt0.sum == 1) {
+               gaite->aisbo = fib->fmt0.aisbo;
+               gaite->aisb = virt_to_phys(page_address(aisb_page) +
+                                          (fib->fmt0.aisb & ~PAGE_MASK));
+       } else {
+               gaite->aisbo = 0;
+               gaite->aisb = 0;
+       }
        aift->kzdev[zdev->aisb] = zdev->kzdev;
        spin_unlock_irq(&aift->gait_lock);