#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/io-64-nonatomic-lo-hi.h>
#include <linux/dmaengine.h>
#include <linux/delay.h>
#include <linux/iommu.h>
#include <linux/sched/mm.h>
#include <uapi/linux/idxd.h>
#include "../dmaengine.h"
#include "idxd.h"
#include "registers.h"
enum irq_work_type { … };
struct idxd_resubmit { … };
struct idxd_int_handle_revoke { … };
static void idxd_device_reinit(struct work_struct *work)
{ … }
static void idxd_int_handle_revoke_drain(struct idxd_irq_entry *ie)
{ … }
static void idxd_abort_invalid_int_handle_descs(struct idxd_irq_entry *ie)
{ … }
static void idxd_int_handle_revoke(struct work_struct *work)
{ … }
static void idxd_evl_fault_work(struct work_struct *work)
{ … }
static void process_evl_entry(struct idxd_device *idxd,
struct __evl_entry *entry_head, unsigned int index)
{ … }
static void process_evl_entries(struct idxd_device *idxd)
{ … }
irqreturn_t idxd_misc_thread(int vec, void *data)
{ … }
static void idxd_int_handle_resubmit_work(struct work_struct *work)
{ … }
bool idxd_queue_int_handle_resubmit(struct idxd_desc *desc)
{ … }
static void irq_process_pending_llist(struct idxd_irq_entry *irq_entry)
{ … }
static void irq_process_work_list(struct idxd_irq_entry *irq_entry)
{ … }
irqreturn_t idxd_wq_thread(int irq, void *data)
{ … }