diff mbox

crypto: ccp - Use different flag vars for nested locks

Message ID 20160311163942.4791.47157.stgit@taos (mailing list archive)
State Changes Requested
Delegated to: Herbert Xu
Headers show

Commit Message

Gary R Hook March 11, 2016, 4:40 p.m. UTC
This patch fixes a coccinelle warning about reusing a flags
variable in nested lock acquisition.

Signed-off-by: Gary R Hook <gary.hook@amd.com>
---
 drivers/crypto/ccp/ccp-dev.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Tom Lendacky March 11, 2016, 11:01 p.m. UTC | #1
On 03/11/2016 10:40 AM, Gary R Hook wrote:
> This patch fixes a coccinelle warning about reusing a flags
> variable in nested lock acquisition.
> 
> Signed-off-by: Gary R Hook <gary.hook@amd.com>

Acked-by: Tom Lendacky <thomas.lendacky@amd.com>

> ---
>  drivers/crypto/ccp/ccp-dev.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/crypto/ccp/ccp-dev.c b/drivers/crypto/ccp/ccp-dev.c
> index 336e5b7..9c7bce8 100644
> --- a/drivers/crypto/ccp/ccp-dev.c
> +++ b/drivers/crypto/ccp/ccp-dev.c
> @@ -120,7 +120,7 @@ void ccp_del_device(struct ccp_device *ccp)
>  
>  static struct ccp_device *ccp_get_device(void)
>  {
> -	unsigned long flags;
> +	unsigned long flags, rrflags;
>  	struct ccp_device *dp = NULL;
>  
>  	/* We round-robin through the unit list.
> @@ -128,14 +128,14 @@ static struct ccp_device *ccp_get_device(void)
>  	 */
>  	read_lock_irqsave(&ccp_unit_lock, flags);
>  	if (!list_empty(&ccp_units)) {
> -		write_lock_irqsave(&ccp_rr_lock, flags);
> +		write_lock_irqsave(&ccp_rr_lock, rrflags);
>  		dp = ccp_rr;
>  		if (list_is_last(&ccp_rr->entry, &ccp_units))
>  			ccp_rr = list_first_entry(&ccp_units, struct ccp_device,
>  						  entry);
>  		else
>  			ccp_rr = list_next_entry(ccp_rr, entry);
> -		write_unlock_irqrestore(&ccp_rr_lock, flags);
> +		write_unlock_irqrestore(&ccp_rr_lock, rrflags);
>  	}
>  	read_unlock_irqrestore(&ccp_unit_lock, flags);
>  
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Herbert Xu March 12, 2016, 2:22 a.m. UTC | #2
On Fri, Mar 11, 2016 at 10:40:11AM -0600, Gary R Hook wrote:
>
> @@ -128,14 +128,14 @@ static struct ccp_device *ccp_get_device(void)
>  	 */
>  	read_lock_irqsave(&ccp_unit_lock, flags);
>  	if (!list_empty(&ccp_units)) {
> -		write_lock_irqsave(&ccp_rr_lock, flags);
> +		write_lock_irqsave(&ccp_rr_lock, rrflags);

The right thing to do is to drop the _irqsave on the inner lock.

Also why is this a write lock at all as nobody seems to take it
as a read lock?

Cheers,
Gary R Hook March 14, 2016, 2:15 p.m. UTC | #3
On 03/11/2016 08:22 PM, Herbert Xu wrote:
> On Fri, Mar 11, 2016 at 10:40:11AM -0600, Gary R Hook wrote:
>> @@ -128,14 +128,14 @@ static struct ccp_device *ccp_get_device(void)
>>   	 */
>>   	read_lock_irqsave(&ccp_unit_lock, flags);
>>   	if (!list_empty(&ccp_units)) {
>> -		write_lock_irqsave(&ccp_rr_lock, flags);
>> +		write_lock_irqsave(&ccp_rr_lock, rrflags);
> The right thing to do is to drop the _irqsave on the inner lock.
>
> Also why is this a write lock at all as nobody seems to take it
> as a read lock?
Roger on the _irqsave.

As for this being a read-write lock: an optimization during development 
removed the need for a read acquisition. This use of the lock was 
overlooked, and now only needs to be a spin lock.

Since the function of this patch has changed, and the subject line 
should be different, do you prefer a v2 patch, or a new patch? This one 
can be ignored, of course.

Gary
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/crypto/ccp/ccp-dev.c b/drivers/crypto/ccp/ccp-dev.c
index 336e5b7..9c7bce8 100644
--- a/drivers/crypto/ccp/ccp-dev.c
+++ b/drivers/crypto/ccp/ccp-dev.c
@@ -120,7 +120,7 @@  void ccp_del_device(struct ccp_device *ccp)
 
 static struct ccp_device *ccp_get_device(void)
 {
-	unsigned long flags;
+	unsigned long flags, rrflags;
 	struct ccp_device *dp = NULL;
 
 	/* We round-robin through the unit list.
@@ -128,14 +128,14 @@  static struct ccp_device *ccp_get_device(void)
 	 */
 	read_lock_irqsave(&ccp_unit_lock, flags);
 	if (!list_empty(&ccp_units)) {
-		write_lock_irqsave(&ccp_rr_lock, flags);
+		write_lock_irqsave(&ccp_rr_lock, rrflags);
 		dp = ccp_rr;
 		if (list_is_last(&ccp_rr->entry, &ccp_units))
 			ccp_rr = list_first_entry(&ccp_units, struct ccp_device,
 						  entry);
 		else
 			ccp_rr = list_next_entry(ccp_rr, entry);
-		write_unlock_irqrestore(&ccp_rr_lock, flags);
+		write_unlock_irqrestore(&ccp_rr_lock, rrflags);
 	}
 	read_unlock_irqrestore(&ccp_unit_lock, flags);