diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2019-08-09 16:53:39 +0200 | 
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2019-08-09 16:53:39 +0200 | 
| commit | 0e1c438c44dd9cde56effb44c5f1cfeda72e108d (patch) | |
| tree | fa3492d4d7d8b7444e5d8ebe6c78210826333e4b /drivers/fpga | |
| parent | c096397c78f766db972f923433031f2dec01cae0 (diff) | |
| parent | cdb2d3ee0436d74fa9092f2df46aaa6f9e03c969 (diff) | |
Merge tag 'kvmarm-fixes-for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
KVM/arm fixes for 5.3
- A bunch of switch/case fall-through annotation, fixing one actual bug
- Fix PMU reset bug
- Add missing exception class debug strings
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);  } | 
