]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/misc/ocxl/link.c
ocxl: Add AFU interrupt support
[mirror_ubuntu-bionic-kernel.git] / drivers / misc / ocxl / link.c
index 64d7a98c904a8c1d7a74bb397751b2733b80cce1..8bdcef9c3cbad469e111061177d5ad80673dc4d3 100644 (file)
@@ -601,3 +601,31 @@ unlock:
        mutex_unlock(&spa->spa_lock);
        return rc;
 }
+
+int ocxl_link_irq_alloc(void *link_handle, int *hw_irq, u64 *trigger_addr)
+{
+       struct link *link = (struct link *) link_handle;
+       int rc, irq;
+       u64 addr;
+
+       if (atomic_dec_if_positive(&link->irq_available) < 0)
+               return -ENOSPC;
+
+       rc = pnv_ocxl_alloc_xive_irq(&irq, &addr);
+       if (rc) {
+               atomic_inc(&link->irq_available);
+               return rc;
+       }
+
+       *hw_irq = irq;
+       *trigger_addr = addr;
+       return 0;
+}
+
+void ocxl_link_free_irq(void *link_handle, int hw_irq)
+{
+       struct link *link = (struct link *) link_handle;
+
+       pnv_ocxl_free_xive_irq(hw_irq);
+       atomic_inc(&link->irq_available);
+}