Commit 6af29086 authored by Alex Elder's avatar Alex Elder Committed by Greg Kroah-Hartman

greybus: use gbuf's destination cport id

If the buffer allocated in the ES1 alloc_gbuf_data() routine is for
outbound data, we are getting the destination CPort id from the
connection.  Switch to using the copy of the destination cport id
we now have in the gbuf instead.

Check for a valid CPort id there only if we're inserting it into
the buffer.
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent 63921d88
......@@ -96,7 +96,6 @@ static void cport_out_callback(struct urb *urb);
static int alloc_gbuf_data(struct gbuf *gbuf, unsigned int size,
gfp_t gfp_mask)
{
struct gb_connection *connection = gbuf->operation->connection;
u32 cport_reserve = gbuf->dest_cport_id == CPORT_ID_BAD ? 0 : 1;
u8 *buffer;
......@@ -118,20 +117,16 @@ static int alloc_gbuf_data(struct gbuf *gbuf, unsigned int size,
if (!buffer)
return -ENOMEM;
/*
* we will encode the cport number in the first byte of the buffer, so
* set the second byte to be the "transfer buffer"
*/
if (connection->interface_cport_id > (u16)U8_MAX) {
pr_err("gbuf->interface_cport_id (%hd) is out of range!\n",
connection->interface_cport_id);
/* Insert the cport id for outbound buffers */
if (cport_reserve) {
if (gbuf->dest_cport_id > (u16)U8_MAX) {
pr_err("gbuf->dest_cport_id (%hd) is out of range!\n",
gbuf->dest_cport_id);
kfree(buffer);
return -EINVAL;
}
/* Insert the cport id for outbound buffers */
if (cport_reserve)
*buffer++ = connection->interface_cport_id;
*buffer++ = gbuf->dest_cport_id;
}
gbuf->transfer_buffer = buffer;
gbuf->transfer_buffer_length = size;
......
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