Commit f0208b71 authored by Cathal Mullaney's avatar Cathal Mullaney Committed by Greg Kroah-Hartman

staging: unisys: visorbus: visorchannel: Refactor locking code to be statically deterministic.

This patch makes locking in visorchannel_signalempty statically
deterministic.
As a result this patch fixes the sparse warning:
Context imbalance in 'visorchannel_signalempty' - different lock
contexts for basic block.

The logic of the locking code doesn't change but the layout of the
original code is "frowned upon"
according to mails on sparse context checking.
Refactoring removes the warning and makes the code more readable.
Signed-off-by: default avatarCathal Mullaney <chuckleberryfinn@gmail.com>
Tested-by: default avatarDavid Kershner <david.kershner@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e0e69648
......@@ -300,22 +300,30 @@ EXPORT_SYMBOL_GPL(visorchannel_signalremove);
* Return: boolean indicating whether any messages in the designated
* channel/queue are present
*/
static bool
queue_empty(struct visorchannel *channel, u32 queue)
{
struct signal_queue_header sig_hdr;
if (sig_read_header(channel, queue, &sig_hdr))
return true;
return (sig_hdr.head == sig_hdr.tail);
}
bool
visorchannel_signalempty(struct visorchannel *channel, u32 queue)
{
unsigned long flags = 0;
struct signal_queue_header sig_hdr;
bool rc = false;
bool rc;
unsigned long flags;
if (channel->needs_lock)
spin_lock_irqsave(&channel->remove_lock, flags);
if (!channel->needs_lock)
return queue_empty(channel, queue);
if (sig_read_header(channel, queue, &sig_hdr))
rc = true;
if (sig_hdr.head == sig_hdr.tail)
rc = true;
if (channel->needs_lock)
spin_unlock_irqrestore(&channel->remove_lock, flags);
spin_lock_irqsave(&channel->remove_lock, flags);
rc = queue_empty(channel, queue);
spin_unlock_irqrestore(&channel->remove_lock, flags);
return rc;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment