#define pr_fmt(fmt) "DMAR: " fmt
#include <linux/bitops.h>
#include <linux/cpufeature.h>
#include <linux/intel-iommu.h>
#include <linux/memory.h>
#include <linux/pci-ats.h>
#include <linux/spinlock.h>
static DEFINE_SPINLOCK(pasid_lock);
u32 intel_pasid_max_id = PASID_MAX;
static DEFINE_IDR(pasid_idr);
int intel_pasid_alloc_id(void *ptr, int start, int end, gfp_t gfp)
min = max_t(int, start, PASID_MIN);
max = min_t(int, end, intel_pasid_max_id);
ret = idr_alloc(&pasid_idr, ptr, min, max, GFP_ATOMIC);
spin_unlock(&pasid_lock);
void intel_pasid_free_id(int pasid)
idr_remove(&pasid_idr, pasid);
spin_unlock(&pasid_lock);
void *intel_pasid_lookup_id(int pasid)
p = idr_find(&pasid_idr, pasid);
spin_unlock(&pasid_lock);