greybus: get rid of message status
We (sort of) maintain the status of each message, but we shouldn't need to. Right now we're not using it consistently in any case. If a message fails to send, the caller will know to destroy the operation that contained it. If a message has been sent (i.e., handed to the host device layer) it'll have a non-null cookie pointer. If a does complete in error, we can update the status of the operation that contains it. That isn't happening right now but it will soon. Signed-off-by: Alex Elder <elder@linaro.org> Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
This commit is contained in:
parent
c41f1651c4
commit
6014718d4d
@ -107,28 +107,30 @@ static int gb_message_send(struct gb_message *message, gfp_t gfp_mask)
|
|||||||
{
|
{
|
||||||
struct gb_connection *connection = message->operation->connection;
|
struct gb_connection *connection = message->operation->connection;
|
||||||
u16 dest_cport_id = connection->interface_cport_id;
|
u16 dest_cport_id = connection->interface_cport_id;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
message->status = -EINPROGRESS;
|
|
||||||
message->cookie = connection->hd->driver->buffer_send(connection->hd,
|
message->cookie = connection->hd->driver->buffer_send(connection->hd,
|
||||||
dest_cport_id,
|
dest_cport_id,
|
||||||
message->buffer,
|
message->buffer,
|
||||||
message->buffer_size,
|
message->buffer_size,
|
||||||
gfp_mask);
|
gfp_mask);
|
||||||
if (IS_ERR(message->cookie)) {
|
if (IS_ERR(message->cookie)) {
|
||||||
message->status = PTR_ERR(message->cookie);
|
ret = PTR_ERR(message->cookie);
|
||||||
message->cookie = NULL;
|
message->cookie = NULL;
|
||||||
|
|
||||||
return message->status;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cancel a message whose buffer we have passed to the host device
|
||||||
|
* layer to be sent.
|
||||||
|
*/
|
||||||
static void gb_message_cancel(struct gb_message *message)
|
static void gb_message_cancel(struct gb_message *message)
|
||||||
{
|
{
|
||||||
struct greybus_host_device *hd;
|
struct greybus_host_device *hd;
|
||||||
|
|
||||||
if (message->status != -EINPROGRESS)
|
if (!message->cookie)
|
||||||
return;
|
return; /* Don't bother if the message isn't in flight */
|
||||||
|
|
||||||
hd = message->operation->connection->hd;
|
hd = message->operation->connection->hd;
|
||||||
hd->driver->buffer_cancel(message->cookie);
|
hd->driver->buffer_cancel(message->cookie);
|
||||||
@ -252,7 +254,6 @@ static int gb_operation_message_init(struct gb_operation *operation,
|
|||||||
if (!message->buffer)
|
if (!message->buffer)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
message->buffer_size = size;
|
message->buffer_size = size;
|
||||||
message->status = -EBADR; /* Initial value--means "never set" */
|
|
||||||
|
|
||||||
/* Fill in the header structure */
|
/* Fill in the header structure */
|
||||||
header = message->buffer;
|
header = message->buffer;
|
||||||
|
@ -28,7 +28,6 @@ struct gb_message {
|
|||||||
void *payload;
|
void *payload;
|
||||||
|
|
||||||
struct gb_operation *operation;
|
struct gb_operation *operation;
|
||||||
int status;
|
|
||||||
|
|
||||||
void *buffer;
|
void *buffer;
|
||||||
size_t buffer_size;
|
size_t buffer_size;
|
||||||
|
Loading…
Reference in New Issue
Block a user