Commit 6a21d3c5 authored by Shrikanth Hegde's avatar Shrikanth Hegde Committed by Madhavan Srinivasan
Browse files

powerpc: rtas: use lock guard for mutex

use guard(mutex) 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



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-3-sshegde@linux.ibm.com
parent 77ad7ef4
Loading
Loading
Loading
Loading
+20 −44
Original line number Diff line number Diff line
@@ -312,13 +312,13 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer,
{
	struct rtas_update_flash_t *const uf = &rtas_update_flash_data;
	char *p;
	int next_free, rc;
	int next_free;
	struct flash_block_list *fl;

	mutex_lock(&rtas_update_flash_mutex);
	guard(mutex)(&rtas_update_flash_mutex);

	if (uf->status == FLASH_AUTH || count == 0)
		goto out;	/* discard data */
		return count;	/* discard data */

	/* In the case that the image is not ready for flashing, the memory
	 * allocated for the block list will be freed upon the release of the 
@@ -327,7 +327,7 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer,
	if (uf->flist == NULL) {
		uf->flist = kmem_cache_zalloc(flash_block_cache, GFP_KERNEL);
		if (!uf->flist)
			goto nomem;
			return -ENOMEM;
	}

	fl = uf->flist;
@@ -338,7 +338,7 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer,
		/* Need to allocate another block_list */
		fl->next = kmem_cache_zalloc(flash_block_cache, GFP_KERNEL);
		if (!fl->next)
			goto nomem;
			return -ENOMEM;
		fl = fl->next;
		next_free = 0;
	}
@@ -347,25 +347,17 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer,
		count = RTAS_BLK_SIZE;
	p = kmem_cache_zalloc(flash_block_cache, GFP_KERNEL);
	if (!p)
		goto nomem;
		return -ENOMEM;
	
	if(copy_from_user(p, buffer, count)) {
		kmem_cache_free(flash_block_cache, p);
		rc = -EFAULT;
		goto error;
		return -EFAULT;
	}
	fl->blocks[next_free].data = p;
	fl->blocks[next_free].length = count;
	fl->num_blocks++;
out:
	mutex_unlock(&rtas_update_flash_mutex);
	return count;

nomem:
	rc = -ENOMEM;
error:
	mutex_unlock(&rtas_update_flash_mutex);
	return rc;
	return count;
}

/*
@@ -405,19 +397,18 @@ static ssize_t manage_flash_write(struct file *file, const char __user *buf,
	static const char reject_str[] = "0";
	static const char commit_str[] = "1";
	char stkbuf[10];
	int op, rc;
	int op;

	mutex_lock(&rtas_manage_flash_mutex);
	guard(mutex)(&rtas_manage_flash_mutex);

	if ((args_buf->status == MANAGE_AUTH) || (count == 0))
		goto out;
		return count;
		
	op = -1;
	if (buf) {
		if (count > 9) count = 9;
		rc = -EFAULT;
		if (copy_from_user (stkbuf, buf, count))
			goto error;
			return -EFAULT;
		if (strncmp(stkbuf, reject_str, strlen(reject_str)) == 0) 
			op = RTAS_REJECT_TMP_IMG;
		else if (strncmp(stkbuf, commit_str, strlen(commit_str)) == 0) 
@@ -425,18 +416,11 @@ static ssize_t manage_flash_write(struct file *file, const char __user *buf,
	}
	
	if (op == -1) {   /* buf is empty, or contains invalid string */
		rc = -EINVAL;
		goto error;
		return -EINVAL;
	}

	manage_flash(args_buf, op);
out:
	mutex_unlock(&rtas_manage_flash_mutex);
	return count;

error:
	mutex_unlock(&rtas_manage_flash_mutex);
	return rc;
}

/*
@@ -499,16 +483,14 @@ static ssize_t validate_flash_write(struct file *file, const char __user *buf,
{
	struct rtas_validate_flash_t *const args_buf =
		&rtas_validate_flash_data;
	int rc;

	mutex_lock(&rtas_validate_flash_mutex);
	guard(mutex)(&rtas_validate_flash_mutex);

	/* We are only interested in the first 4K of the
	 * candidate image */
	if ((*off >= VALIDATE_BUF_SIZE) || 
		(args_buf->status == VALIDATE_AUTH)) {
		*off += count;
		mutex_unlock(&rtas_validate_flash_mutex);
		return count;
	}

@@ -519,20 +501,14 @@ static ssize_t validate_flash_write(struct file *file, const char __user *buf,
		args_buf->status = VALIDATE_INCOMPLETE;
	}

	if (!access_ok(buf, count)) {
		rc = -EFAULT;
		goto done;
	}
	if (copy_from_user(args_buf->buf + *off, buf, count)) {
		rc = -EFAULT;
		goto done;
	}
	if (!access_ok(buf, count))
		return -EFAULT;

	if (copy_from_user(args_buf->buf + *off, buf, count))
		return -EFAULT;

	*off += count;
	rc = count;
done:
	mutex_unlock(&rtas_validate_flash_mutex);
	return rc;
	return count;
}

static int validate_flash_release(struct inode *inode, struct file *file)