Commit fd167f7a authored by Jett Rink's avatar Jett Rink Committed by Enric Balletbo i Serra

platform/chrome: cros_ec_ishtp: free ishtp buffer before sending event

Recycle the ISH buffer before notifying of a response or an event. Often
a new message is sent in response to an event and in high traffic
scenarios this can lead to exhausting all available buffers. We can
ensure we are using the fewest buffers possible by freeing buffers as
soon as they are used.
Signed-off-by: default avatarJett Rink <jettrink@chromium.org>
Signed-off-by: default avatarMathew King <mathewk@chromium.org>
Signed-off-by: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
parent 0f706b4f
......@@ -303,6 +303,10 @@ static void process_recv(struct ishtp_cl *cros_ish_cl,
rb_in_proc->buffer.data, data_len);
error_wake_up:
/* Free the buffer since we copied data or didn't need it */
ishtp_cl_io_rb_recycle(rb_in_proc);
rb_in_proc = NULL;
/* Set flag before waking up the caller */
client_data->response.received = true;
......@@ -312,12 +316,14 @@ static void process_recv(struct ishtp_cl *cros_ish_cl,
break;
case CROS_MKBP_EVENT:
/* Free the buffer. This is just an event without data */
ishtp_cl_io_rb_recycle(rb_in_proc);
rb_in_proc = NULL;
/*
* Set timestamp from beginning of function since we actually
* got an incoming MKBP event
*/
client_data->ec_dev->last_event_time = timestamp;
/* The event system doesn't send any data in buffer */
schedule_work(&client_data->work_ec_evt);
break;
......@@ -327,8 +333,9 @@ static void process_recv(struct ishtp_cl *cros_ish_cl,
}
end_error:
/* Free the buffer */
ishtp_cl_io_rb_recycle(rb_in_proc);
/* Free the buffer if we already haven't */
if (rb_in_proc)
ishtp_cl_io_rb_recycle(rb_in_proc);
up_read(&init_lock);
}
......
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