2020-04-03 16:07:34

by Jules Irenge

[permalink] [raw]
Subject: [PATCH 5/5] ipmi: Add missing annotation for ipmi_ssif_lock_cond() and ipmi_ssif_unlock_cond()

Sparse reports a warning at ipmi_ssif_unlock_cond()
and ipmi_ssif_lock_cond()

warning: context imbalance in ipmi_ssif_lock_cond()
- wrong count at exit
warning: context imbalance in ipmi_ssif_unlock_cond()
- unexpected unlock

The root cause is the missing annotation at ipmi_ssif_unlock_cond()
and ipmi_ssif_lock_cond()

Add the missing __acquires(&ata_scsi_rbuf_lock)
Add the missing __releases(&ata_scsi_rbuf_lock)

Signed-off-by: Jules Irenge <[email protected]>
---
drivers/char/ipmi/ipmi_ssif.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
index 22c6a2e61236..030e7c09e44f 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -313,6 +313,7 @@ static int start_send(struct ssif_info *ssif_info,

static unsigned long *ipmi_ssif_lock_cond(struct ssif_info *ssif_info,
unsigned long *flags)
+ __acquires(&ssif_info->lock)
{
spin_lock_irqsave(&ssif_info->lock, *flags);
return flags;
@@ -320,6 +321,7 @@ static unsigned long *ipmi_ssif_lock_cond(struct ssif_info *ssif_info,

static void ipmi_ssif_unlock_cond(struct ssif_info *ssif_info,
unsigned long *flags)
+ __releases(&ssif_info->lock)
{
spin_unlock_irqrestore(&ssif_info->lock, *flags);
}
--
2.24.1


2020-04-03 18:42:17

by Corey Minyard

[permalink] [raw]
Subject: Re: [PATCH 5/5] ipmi: Add missing annotation for ipmi_ssif_lock_cond() and ipmi_ssif_unlock_cond()

On Fri, Apr 03, 2020 at 05:05:05PM +0100, Jules Irenge wrote:
> Sparse reports a warning at ipmi_ssif_unlock_cond()
> and ipmi_ssif_lock_cond()
>
> warning: context imbalance in ipmi_ssif_lock_cond()
> - wrong count at exit
> warning: context imbalance in ipmi_ssif_unlock_cond()
> - unexpected unlock
>
> The root cause is the missing annotation at ipmi_ssif_unlock_cond()
> and ipmi_ssif_lock_cond()
>
> Add the missing __acquires(&ata_scsi_rbuf_lock)
> Add the missing __releases(&ata_scsi_rbuf_lock)

Yeah, this is good, I've included it in my tree.

-corey

>
> Signed-off-by: Jules Irenge <[email protected]>
> ---
> drivers/char/ipmi/ipmi_ssif.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
> index 22c6a2e61236..030e7c09e44f 100644
> --- a/drivers/char/ipmi/ipmi_ssif.c
> +++ b/drivers/char/ipmi/ipmi_ssif.c
> @@ -313,6 +313,7 @@ static int start_send(struct ssif_info *ssif_info,
>
> static unsigned long *ipmi_ssif_lock_cond(struct ssif_info *ssif_info,
> unsigned long *flags)
> + __acquires(&ssif_info->lock)
> {
> spin_lock_irqsave(&ssif_info->lock, *flags);
> return flags;
> @@ -320,6 +321,7 @@ static unsigned long *ipmi_ssif_lock_cond(struct ssif_info *ssif_info,
>
> static void ipmi_ssif_unlock_cond(struct ssif_info *ssif_info,
> unsigned long *flags)
> + __releases(&ssif_info->lock)
> {
> spin_unlock_irqrestore(&ssif_info->lock, *flags);
> }
> --
> 2.24.1
>