summaryrefslogtreecommitdiff
path: root/drivers/staging/unisys
diff options
context:
space:
mode:
authorDavid Kershner <david.kershner@unisys.com>2017-04-18 16:55:07 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-04-28 11:49:52 +0200
commit9b2cae6decb94a222190a2096f1188af5ed68554 (patch)
tree7f520f2b612afd661c0e3a378aba31da4629e584 /drivers/staging/unisys
parent04dbc09b255ec0be67e6b0f7bf114675ac143cd9 (diff)
staging: unisys: visorbus: handle visorchannel_write errors in code
Catch and report back errors when visorchannel_write fails. Signed-off-by: David Kershner <david.kershner@unisys.com> Reviewed-by: Tim Sell <timothy.sell@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/unisys')
-rw-r--r--drivers/staging/unisys/visorbus/visorchannel.c35
1 files changed, 16 insertions, 19 deletions
diff --git a/drivers/staging/unisys/visorbus/visorchannel.c b/drivers/staging/unisys/visorbus/visorchannel.c
index 8c27b56a7aa7..9e1cea22ce68 100644
--- a/drivers/staging/unisys/visorbus/visorchannel.c
+++ b/drivers/staging/unisys/visorbus/visorchannel.c
@@ -328,27 +328,24 @@ static int
signalinsert_inner(struct visorchannel *channel, u32 queue, void *msg)
{
struct signal_queue_header sig_hdr;
- int error;
+ int err;
- error = sig_read_header(channel, queue, &sig_hdr);
- if (error)
- return error;
+ err = sig_read_header(channel, queue, &sig_hdr);
+ if (err)
+ return err;
sig_hdr.head = (sig_hdr.head + 1) % sig_hdr.max_slots;
if (sig_hdr.head == sig_hdr.tail) {
sig_hdr.num_overflows++;
- visorchannel_write(channel,
- SIG_QUEUE_OFFSET(&channel->chan_hdr, queue) +
- offsetof(struct signal_queue_header,
- num_overflows),
- &sig_hdr.num_overflows,
- sizeof(sig_hdr.num_overflows));
+ err = SIG_WRITE_FIELD(channel, queue, &sig_hdr, num_overflows);
+ if (err)
+ return err;
return -EIO;
}
- error = sig_write_data(channel, queue, &sig_hdr, sig_hdr.head, msg);
- if (error)
- return error;
+ err = sig_write_data(channel, queue, &sig_hdr, sig_hdr.head, msg);
+ if (err)
+ return err;
sig_hdr.num_sent++;
@@ -358,12 +355,12 @@ signalinsert_inner(struct visorchannel *channel, u32 queue, void *msg)
*/
mb(); /* required for channel synch */
- error = SIG_WRITE_FIELD(channel, queue, &sig_hdr, head);
- if (error)
- return error;
- error = SIG_WRITE_FIELD(channel, queue, &sig_hdr, num_sent);
- if (error)
- return error;
+ err = SIG_WRITE_FIELD(channel, queue, &sig_hdr, head);
+ if (err)
+ return err;
+ err = SIG_WRITE_FIELD(channel, queue, &sig_hdr, num_sent);
+ if (err)
+ return err;
return 0;
}