Commit 37989b53 authored by Shrikanth Hegde's avatar Shrikanth Hegde Committed by Madhavan Srinivasan
Browse files

powerpc: book3s: vas: use lock guard for mutex

use lock guards for scope based resource management of mutex.
This would make the code simpler and easier to maintain.

More details on lock guards can be found at
https://lore.kernel.org/all/20230612093537.614161713@infradead.org/T/#u



This shows the use of both guard and scoped_guard

Reviewed-by: default avatarSrikar Dronamraju <srikar@linux.ibm.com>
Signed-off-by: default avatarShrikanth Hegde <sshegde@linux.ibm.com>
Tested-by: default avatarVenkat Rao Bagalkote <venkat88@linux.ibm.com>
Signed-off-by: default avatarMadhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20250505075333.184463-5-sshegde@linux.ibm.com
parent 56534636
Loading
Loading
Loading
Loading
+13 −19
Original line number Diff line number Diff line
@@ -425,23 +425,22 @@ static vm_fault_t vas_mmap_fault(struct vm_fault *vmf)
		return VM_FAULT_SIGBUS;
	}

	mutex_lock(&txwin->task_ref.mmap_mutex);
	/*
	 * The window may be inactive due to lost credit (Ex: core
	 * removal with DLPAR). If the window is active again when
	 * the credit is available, map the new paste address at the
	 * window virtual address.
	 */
	scoped_guard(mutex, &txwin->task_ref.mmap_mutex) {
		if (txwin->status == VAS_WIN_ACTIVE) {
			paste_addr = cp_inst->coproc->vops->paste_addr(txwin);
			if (paste_addr) {
				fault = vmf_insert_pfn(vma, vma->vm_start,
						(paste_addr >> PAGE_SHIFT));
			mutex_unlock(&txwin->task_ref.mmap_mutex);
				return fault;
			}
		}
	mutex_unlock(&txwin->task_ref.mmap_mutex);
	}

	/*
	 * Received this fault due to closing the actual window.
@@ -494,9 +493,8 @@ static void vas_mmap_close(struct vm_area_struct *vma)
		return;
	}

	mutex_lock(&txwin->task_ref.mmap_mutex);
	scoped_guard(mutex, &txwin->task_ref.mmap_mutex)
		txwin->task_ref.vma = NULL;
	mutex_unlock(&txwin->task_ref.mmap_mutex);
}

static const struct vm_operations_struct vas_vm_ops = {
@@ -552,18 +550,16 @@ static int coproc_mmap(struct file *fp, struct vm_area_struct *vma)
	 * close/open event and allows mmap() only when the window is
	 * active.
	 */
	mutex_lock(&txwin->task_ref.mmap_mutex);
	guard(mutex)(&txwin->task_ref.mmap_mutex);
	if (txwin->status != VAS_WIN_ACTIVE) {
		pr_err("Window is not active\n");
		rc = -EACCES;
		goto out;
		return -EACCES;
	}

	paste_addr = cp_inst->coproc->vops->paste_addr(txwin);
	if (!paste_addr) {
		pr_err("Window paste address failed\n");
		rc = -EINVAL;
		goto out;
		return -EINVAL;
	}

	pfn = paste_addr >> PAGE_SHIFT;
@@ -583,8 +579,6 @@ static int coproc_mmap(struct file *fp, struct vm_area_struct *vma)
	txwin->task_ref.vma = vma;
	vma->vm_ops = &vas_vm_ops;

out:
	mutex_unlock(&txwin->task_ref.mmap_mutex);
	return rc;
}