aboutsummarylogtreecommitdiffstats
path: root/twelve.patch
diff options
context:
space:
mode:
Diffstat (limited to 'twelve.patch')
-rw-r--r--twelve.patch260
1 files changed, 0 insertions, 260 deletions
diff --git a/twelve.patch b/twelve.patch
deleted file mode 100644
index 3a268f2f7170..000000000000
--- a/twelve.patch
+++ /dev/null
@@ -1,260 +0,0 @@
---- ./nvidia-vgpu-vfio/nvidia-vgpu-vfio.c
-+++ ./nvidia-vgpu-vfio/nvidia-vgpu-vfio.c
-@@ -24,6 +24,7 @@
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/err.h>
-+#include <linux/eventfd.h>
- #include "nvstatus.h"
- #include "nv-misc.h"
- #include "nv-linux.h"
-@@ -2666,19 +2667,18 @@
-
- static int vgpu_save_fd(vgpu_dev_t *vgpu_dev, int fd, NvU32 index)
- {
-- struct fd irqfd;
-+ struct eventfd_ctx *evt;
-
-- irqfd = fdget(fd);
-- if (!irqfd.file)
-- return -EBADF;
-+ evt = eventfd_ctx_fdget(fd);
-+ if (IS_ERR(evt))
-+ return PTR_ERR(evt);
-
- if (index == VFIO_PCI_INTX_IRQ_INDEX)
-- vgpu_dev->intr_info.intx_file = irqfd.file;
-- else if (index == VFIO_PCI_MSI_IRQ_INDEX)
-- vgpu_dev->intr_info.msi_file = irqfd.file;
-+ vgpu_dev->intr_info.intx_evtfd = evt;
-+ else if (index == VFIO_PCI_MSI_IRQ_INDEX)
-+ vgpu_dev->intr_info.msi_evtfd = evt;
-
- vgpu_dev->intr_info.index = index;
-- fdput(irqfd);
-
- return 0;
- }
-@@ -2687,11 +2687,8 @@
- static irqreturn_t vgpu_msix_handler(int irq, void *arg)
- {
- vgpu_dev_t *vgpu_dev = (vgpu_dev_t *)arg;
-- struct file *pfile = NULL;
-- mm_segment_t old_fs;
-- NvU64 val = 1;
-+ struct eventfd_ctx *evt = NULL;
- int ret = 0;
-- loff_t offset = 0;
- int i;
- unsigned long eflags;
-
-@@ -2699,21 +2696,16 @@
- {
- if (vgpu_dev->intr_info.allocated_irq[i] == irq)
- {
-- pfile = vgpu_dev->intr_info.msix_fd[i].file;
-+ evt = vgpu_dev->intr_info.msix_evtfd[i];
- break;
- }
- }
-
-- if (pfile && pfile->f_op && pfile->f_op->write)
-+ if (evt)
- {
-- old_fs = get_fs();
-- set_fs(KERNEL_DS);
--
- NV_SAVE_FLAGS(eflags);
-- ret = pfile->f_op->write(pfile, (char *)&val, sizeof(val), &offset);
-+ ret = eventfd_signal(evt, 1);
- NV_RESTORE_FLAGS(eflags);
--
-- set_fs(old_fs);
- }
-
- return IRQ_HANDLED;
-@@ -2724,23 +2716,24 @@
- {
- struct pci_dev *pdev;
- int irq = INVALID_IRQ, ret;
-- struct fd irqfd;
-+ struct eventfd_ctx *evt;
-
- pdev = to_pci_dev(NV_GET_MDEV_PARENT(vgpu_dev->mdev));
-
-- if (vgpu_dev->intr_info.msix_fd[vector].file)
-+ if (vgpu_dev->intr_info.msix_evtfd[vector])
- {
- free_irq(vgpu_dev->intr_info.allocated_irq[vector], vgpu_dev);
-- vgpu_dev->intr_info.msix_fd[vector].file = NULL;
-+ eventfd_ctx_put(vgpu_dev->intr_info.msix_evtfd[vector]);
-+ vgpu_dev->intr_info.msix_evtfd[vector] = NULL;
- vgpu_dev->intr_info.allocated_irq[vector] = INVALID_IRQ;
- }
-
- if (fd < 0)
- return 0;
-
-- irqfd = fdget(fd);
-- if (!irqfd.file)
-- return -EBADF;
-+ evt = eventfd_ctx_fdget(fd);
-+ if (IS_ERR(evt))
-+ return PTR_ERR(evt);
-
- if (vector < 0 || vector >= vgpu_dev->intr_info.num_ctx)
- return -EINVAL;
-@@ -2756,7 +2749,7 @@
-
- vgpu_dev->intr_info.allocated_irq[vector] = irq;
-
-- vgpu_dev->intr_info.msix_fd[vector]= irqfd;
-+ vgpu_dev->intr_info.msix_evtfd[vector]= evt;
-
- return 0;
- }
-@@ -2773,7 +2766,12 @@
- if (vgpu_dev->intr_info.allocated_irq[i] != INVALID_IRQ)
- {
- free_irq(vgpu_dev->intr_info.allocated_irq[i], vgpu_dev);
-- vgpu_dev->intr_info.msix_fd[i].file = NULL;
-+
-+ if (vgpu_dev->intr_info.msix_evtfd[i]) {
-+ eventfd_ctx_put(vgpu_dev->intr_info.msix_evtfd[i]);
-+ vgpu_dev->intr_info.msix_evtfd[i] = NULL;
-+ }
-+
- vgpu_dev->intr_info.allocated_irq[i] = INVALID_IRQ;
- }
- }
-@@ -2862,7 +2860,10 @@
- {
- if (flags & VFIO_IRQ_SET_DATA_NONE)
- {
-- vgpu_dev->intr_info.intx_file = NULL;
-+ if (vgpu_dev->intr_info.intx_evtfd) {
-+ eventfd_ctx_put(vgpu_dev->intr_info.intx_evtfd);
-+ vgpu_dev->intr_info.intx_evtfd = NULL;
-+ }
- break;
- }
-
-@@ -2887,7 +2888,10 @@
- {
- if (flags & VFIO_IRQ_SET_DATA_NONE)
- {
-- vgpu_dev->intr_info.msi_file = NULL;
-+ if (vgpu_dev->intr_info.msi_evtfd) {
-+ eventfd_ctx_put(vgpu_dev->intr_info.msi_evtfd);
-+ vgpu_dev->intr_info.msi_evtfd = NULL;
-+ }
- vgpu_dev->intr_info.index = VFIO_PCI_INTX_IRQ_INDEX;
- break;
- }
-@@ -2895,10 +2899,9 @@
- if (flags & VFIO_IRQ_SET_DATA_EVENTFD)
- {
- int fd = *(int *)data;
-- if (fd > 0)
-+ if (fd > 0 && !vgpu_dev->intr_info.msi_evtfd)
- {
-- if (vgpu_dev->intr_info.msi_file == NULL)
-- ret = vgpu_save_fd(vgpu_dev, fd, index);
-+ ret = vgpu_save_fd(vgpu_dev, fd, index);
- }
- }
- break;
-@@ -2953,12 +2956,9 @@
-
- NV_STATUS nv_vgpu_inject_interrupt(void *vgpuRef)
- {
-- mm_segment_t old_fs;
-- NvU64 val = 1;
- int ret = 0;
-- loff_t offset = 0;
- NV_STATUS status = NV_OK;
-- struct file *pfile = NULL;
-+ struct eventfd_ctx *evt = NULL;
- vgpu_dev_t *vgpu_dev = vgpuRef;
- unsigned long eflags;
-
-@@ -2967,12 +2967,12 @@
-
- NV_SPIN_LOCK_IRQSAVE(&vgpu_dev->intr_info_lock, eflags);
-
-- if ((vgpu_dev->intr_info.index == VFIO_PCI_MSI_IRQ_INDEX) && (vgpu_dev->intr_info.msi_file == NULL))
-+ if ((vgpu_dev->intr_info.index == VFIO_PCI_MSI_IRQ_INDEX) && (!vgpu_dev->intr_info.msi_evtfd))
- {
- NV_SPIN_UNLOCK_IRQRESTORE(&vgpu_dev->intr_info_lock, eflags);
- return NV_ERR_INVALID_REQUEST;
- }
-- else if ((vgpu_dev->intr_info.index == VFIO_PCI_INTX_IRQ_INDEX) && (vgpu_dev->intr_info.intx_file == NULL))
-+ else if ((vgpu_dev->intr_info.index == VFIO_PCI_INTX_IRQ_INDEX) && (!vgpu_dev->intr_info.intx_evtfd))
- {
- NV_SPIN_UNLOCK_IRQRESTORE(&vgpu_dev->intr_info_lock, eflags);
- return NV_ERR_INVALID_REQUEST;
-@@ -2984,9 +2984,9 @@
- }
-
- if (vgpu_dev->intr_info.index == VFIO_PCI_MSI_IRQ_INDEX)
-- pfile = vgpu_dev->intr_info.msi_file;
-+ evt = vgpu_dev->intr_info.msi_evtfd;
- else
-- pfile = vgpu_dev->intr_info.intx_file;
-+ evt = vgpu_dev->intr_info.intx_evtfd;
-
- // QEMU has exited. So, safe to ignore interrupts.
- if (vgpu_dev->intr_info.ignore_interrupts == NV_TRUE)
-@@ -2996,19 +2996,14 @@
- }
- NV_SPIN_UNLOCK_IRQRESTORE(&vgpu_dev->intr_info_lock, eflags);
-
-- old_fs = get_fs();
-- set_fs(KERNEL_DS);
--
-- if (pfile->f_op && pfile->f_op->write)
-- ret = pfile->f_op->write(pfile, (char *)&val, sizeof(val), &offset);
-- else
-- status = NV_ERR_INVALID_REQUEST;
-+ if (evt)
-+ ret = eventfd_signal(evt, 1);
-+ else
-+ status = NV_ERR_INVALID_REQUEST;
-
- if (ret < 0)
- status = NV_ERR_INVALID_STATE;
-
-- set_fs(old_fs);
--
- return status;
- }
-
---- ./nvidia-vgpu-vfio/nvidia-vgpu-vfio.h
-+++ ./nvidia-vgpu-vfio/nvidia-vgpu-vfio.h
-@@ -37,6 +37,7 @@
- #include <linux/list.h>
- #include <linux/pci.h>
- #include <linux/sched.h>
-+#include <linux/eventfd.h>
-
- struct vgpu_dev_s;
- struct mapping_node_s;
-@@ -293,15 +294,15 @@
-
- typedef struct
- {
-- struct file *intx_file;
-- struct file *msi_file;
-+ struct eventfd_ctx *intx_evtfd;
-+ struct eventfd_ctx *msi_evtfd;
- int index;
- NvBool ignore_interrupts;
-
- NvU32 allocated_irq[MAX_NUM_VECTORS];
- NvU32 num_ctx;
- #if defined(NV_VGPU_KVM_BUILD)
-- struct fd msix_fd[MAX_NUM_VECTORS];
-+ struct eventfd_ctx *msix_evtfd[MAX_NUM_VECTORS];
- #endif
-
- } intr_info_t;