Commit 9ec5411a authored by Alex Elder's avatar Alex Elder Committed by Greg Kroah-Hartman

greybus: free space without gbufs

Switch the host driver free routine to take a pointer to the
previously-allocated buffer that should be freed.

Rename the method to reflect it's no longer tied to a gbuf.
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent d2a259f2
...@@ -169,8 +169,7 @@ struct greybus_host_device *greybus_create_hd(struct greybus_host_driver *driver ...@@ -169,8 +169,7 @@ struct greybus_host_device *greybus_create_hd(struct greybus_host_driver *driver
* Validate that the driver implements all of the callbacks * Validate that the driver implements all of the callbacks
* so that we don't have to every time we make them. * so that we don't have to every time we make them.
*/ */
if ((!driver->buffer_alloc) || if ((!driver->buffer_alloc) || (!driver->buffer_free) ||
(!driver->free_gbuf_data) ||
(!driver->submit_svc) || (!driver->submit_svc) ||
(!driver->submit_gbuf) || (!driver->submit_gbuf) ||
(!driver->kill_gbuf)) { (!driver->kill_gbuf)) {
......
...@@ -114,19 +114,18 @@ static void *buffer_alloc(unsigned int size, gfp_t gfp_mask) ...@@ -114,19 +114,18 @@ static void *buffer_alloc(unsigned int size, gfp_t gfp_mask)
return buffer; return buffer;
} }
/* Free the memory we allocated with a gbuf */ /* Free a previously-allocated buffer */
static void free_gbuf_data(struct gbuf *gbuf) static void buffer_free(void *buffer)
{ {
u8 *transfer_buffer = gbuf->transfer_buffer; u8 *allocated = buffer;
/* Can be called with a NULL transfer_buffer on some error paths */ /* Can be called with a NULL buffer on some error paths */
if (!transfer_buffer) if (!allocated)
return; return;
/* Account for the space set aside for the prepended cport id */ /* Account for the space set aside for the prepended cport id */
transfer_buffer -= GB_BUFFER_ALIGN; allocated -= GB_BUFFER_ALIGN;
kfree(transfer_buffer); kfree(allocated);
gbuf->transfer_buffer = NULL;
} }
#define ES1_TIMEOUT 500 /* 500 ms for the SVC to do something */ #define ES1_TIMEOUT 500 /* 500 ms for the SVC to do something */
...@@ -240,7 +239,7 @@ static void kill_gbuf(struct gbuf *gbuf) ...@@ -240,7 +239,7 @@ static void kill_gbuf(struct gbuf *gbuf)
static struct greybus_host_driver es1_driver = { static struct greybus_host_driver es1_driver = {
.hd_priv_size = sizeof(struct es1_ap_dev), .hd_priv_size = sizeof(struct es1_ap_dev),
.buffer_alloc = buffer_alloc, .buffer_alloc = buffer_alloc,
.free_gbuf_data = free_gbuf_data, .buffer_free = buffer_free,
.submit_svc = submit_svc, .submit_svc = submit_svc,
.submit_gbuf = submit_gbuf, .submit_gbuf = submit_gbuf,
.kill_gbuf = kill_gbuf, .kill_gbuf = kill_gbuf,
......
...@@ -80,7 +80,7 @@ struct greybus_host_driver { ...@@ -80,7 +80,7 @@ struct greybus_host_driver {
size_t hd_priv_size; size_t hd_priv_size;
void *(*buffer_alloc)(unsigned int size, gfp_t gfp_mask); void *(*buffer_alloc)(unsigned int size, gfp_t gfp_mask);
void (*free_gbuf_data)(struct gbuf *gbuf); void (*buffer_free)(void *buffer);
int (*submit_svc)(struct svc_msg *svc_msg, int (*submit_svc)(struct svc_msg *svc_msg,
struct greybus_host_device *hd); struct greybus_host_device *hd);
int (*submit_gbuf)(struct gbuf *gbuf, gfp_t gfp_mask); int (*submit_gbuf)(struct gbuf *gbuf, gfp_t gfp_mask);
......
...@@ -264,7 +264,9 @@ static void gb_operation_message_exit(struct gb_message *message) ...@@ -264,7 +264,9 @@ static void gb_operation_message_exit(struct gb_message *message)
{ {
message->operation = NULL; message->operation = NULL;
message->payload = NULL; message->payload = NULL;
message->gbuf.hd->driver->free_gbuf_data(&message->gbuf); message->gbuf.hd->driver->buffer_free(message->gbuf.transfer_buffer);
message->gbuf.transfer_buffer = NULL;
message->gbuf.transfer_buffer_length = 0;
} }
/* /*
......
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