|
@@ -387,33 +387,14 @@ static struct kmem_cache *iommu_domain_cache;
|
|
|
static struct kmem_cache *iommu_devinfo_cache;
|
|
|
static struct kmem_cache *iommu_iova_cache;
|
|
|
|
|
|
-static inline void *iommu_kmem_cache_alloc(struct kmem_cache *cachep)
|
|
|
-{
|
|
|
- unsigned int flags;
|
|
|
- void *vaddr;
|
|
|
-
|
|
|
- /* trying to avoid low memory issues */
|
|
|
- flags = current->flags & PF_MEMALLOC;
|
|
|
- current->flags |= PF_MEMALLOC;
|
|
|
- vaddr = kmem_cache_alloc(cachep, GFP_ATOMIC);
|
|
|
- current->flags &= (~PF_MEMALLOC | flags);
|
|
|
- return vaddr;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
static inline void *alloc_pgtable_page(int node)
|
|
|
{
|
|
|
- unsigned int flags;
|
|
|
struct page *page;
|
|
|
void *vaddr = NULL;
|
|
|
|
|
|
- /* trying to avoid low memory issues */
|
|
|
- flags = current->flags & PF_MEMALLOC;
|
|
|
- current->flags |= PF_MEMALLOC;
|
|
|
page = alloc_pages_node(node, GFP_ATOMIC | __GFP_ZERO, 0);
|
|
|
if (page)
|
|
|
vaddr = page_address(page);
|
|
|
- current->flags &= (~PF_MEMALLOC | flags);
|
|
|
return vaddr;
|
|
|
}
|
|
|
|
|
@@ -424,7 +405,7 @@ static inline void free_pgtable_page(void *vaddr)
|
|
|
|
|
|
static inline void *alloc_domain_mem(void)
|
|
|
{
|
|
|
- return iommu_kmem_cache_alloc(iommu_domain_cache);
|
|
|
+ return kmem_cache_alloc(iommu_domain_cache, GFP_ATOMIC);
|
|
|
}
|
|
|
|
|
|
static void free_domain_mem(void *vaddr)
|
|
@@ -434,7 +415,7 @@ static void free_domain_mem(void *vaddr)
|
|
|
|
|
|
static inline void * alloc_devinfo_mem(void)
|
|
|
{
|
|
|
- return iommu_kmem_cache_alloc(iommu_devinfo_cache);
|
|
|
+ return kmem_cache_alloc(iommu_devinfo_cache, GFP_ATOMIC);
|
|
|
}
|
|
|
|
|
|
static inline void free_devinfo_mem(void *vaddr)
|
|
@@ -444,7 +425,7 @@ static inline void free_devinfo_mem(void *vaddr)
|
|
|
|
|
|
struct iova *alloc_iova_mem(void)
|
|
|
{
|
|
|
- return iommu_kmem_cache_alloc(iommu_iova_cache);
|
|
|
+ return kmem_cache_alloc(iommu_iova_cache, GFP_ATOMIC);
|
|
|
}
|
|
|
|
|
|
void free_iova_mem(struct iova *iova)
|