diff options
Diffstat (limited to 'drivers/fpga')
| -rw-r--r-- | drivers/fpga/dfl-afu-dma-region.c | 53 | 
1 files changed, 4 insertions, 49 deletions
| diff --git a/drivers/fpga/dfl-afu-dma-region.c b/drivers/fpga/dfl-afu-dma-region.c index dcd80b088c7b..62f924489db5 100644 --- a/drivers/fpga/dfl-afu-dma-region.c +++ b/drivers/fpga/dfl-afu-dma-region.c @@ -12,6 +12,7 @@  #include <linux/dma-mapping.h>  #include <linux/sched/signal.h>  #include <linux/uaccess.h> +#include <linux/mm.h>  #include "dfl-afu.h" @@ -32,52 +33,6 @@ void afu_dma_region_init(struct dfl_feature_platform_data *pdata)  }  /** - * afu_dma_adjust_locked_vm - adjust locked memory - * @dev: port device - * @npages: number of pages - * @incr: increase or decrease locked memory - * - * Increase or decrease the locked memory size with npages input. - * - * Return 0 on success. - * Return -ENOMEM if locked memory size is over the limit and no CAP_IPC_LOCK. - */ -static int afu_dma_adjust_locked_vm(struct device *dev, long npages, bool incr) -{ -	unsigned long locked, lock_limit; -	int ret = 0; - -	/* the task is exiting. */ -	if (!current->mm) -		return 0; - -	down_write(¤t->mm->mmap_sem); - -	if (incr) { -		locked = current->mm->locked_vm + npages; -		lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; - -		if (locked > lock_limit && !capable(CAP_IPC_LOCK)) -			ret = -ENOMEM; -		else -			current->mm->locked_vm += npages; -	} else { -		if (WARN_ON_ONCE(npages > current->mm->locked_vm)) -			npages = current->mm->locked_vm; -		current->mm->locked_vm -= npages; -	} - -	dev_dbg(dev, "[%d] RLIMIT_MEMLOCK %c%ld %ld/%ld%s\n", current->pid, -		incr ? '+' : '-', npages << PAGE_SHIFT, -		current->mm->locked_vm << PAGE_SHIFT, rlimit(RLIMIT_MEMLOCK), -		ret ? "- exceeded" : ""); - -	up_write(¤t->mm->mmap_sem); - -	return ret; -} - -/**   * afu_dma_pin_pages - pin pages of given dma memory region   * @pdata: feature device platform data   * @region: dma memory region to be pinned @@ -92,7 +47,7 @@ static int afu_dma_pin_pages(struct dfl_feature_platform_data *pdata,  	struct device *dev = &pdata->dev->dev;  	int ret, pinned; -	ret = afu_dma_adjust_locked_vm(dev, npages, true); +	ret = account_locked_vm(current->mm, npages, true);  	if (ret)  		return ret; @@ -121,7 +76,7 @@ put_pages:  free_pages:  	kfree(region->pages);  unlock_vm: -	afu_dma_adjust_locked_vm(dev, npages, false); +	account_locked_vm(current->mm, npages, false);  	return ret;  } @@ -141,7 +96,7 @@ static void afu_dma_unpin_pages(struct dfl_feature_platform_data *pdata,  	put_all_pages(region->pages, npages);  	kfree(region->pages); -	afu_dma_adjust_locked_vm(dev, npages, false); +	account_locked_vm(current->mm, npages, false);  	dev_dbg(dev, "%ld pages unpinned\n", npages);  } | 
