greybus: loopback: warn user if kfifo cannot log all data

The depth of the kfifo used to log the latency data for user-space can be
moved upwards or downward by way of a module parameter. The user may still
specify a test set that's larger than the number of kfifo elements we have
available. If the user specifies more iterations than can be logged give a
warning as feedback and continue with the test.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Bryan O'Donoghue 2015-07-28 18:34:39 +01:00 committed by Greg Kroah-Hartman
parent cbd204b48d
commit cb60f4960e

View file

@ -131,14 +131,15 @@ static ssize_t field##_store(struct device *dev, \
if (ret != 1) \ if (ret != 1) \
len = -EINVAL; \ len = -EINVAL; \
else \ else \
gb_loopback_check_attr(gb); \ gb_loopback_check_attr(connection, gb); \
mutex_unlock(&gb->mutex); \ mutex_unlock(&gb->mutex); \
return len; \ return len; \
} \ } \
static DEVICE_ATTR_RW(field) static DEVICE_ATTR_RW(field)
static void gb_loopback_reset_stats(struct gb_loopback *gb); static void gb_loopback_reset_stats(struct gb_loopback *gb);
static void gb_loopback_check_attr(struct gb_loopback *gb) static void gb_loopback_check_attr(struct gb_connection *connection,
struct gb_loopback *gb)
{ {
if (gb->ms_wait > GB_LOOPBACK_MS_WAIT_MAX) if (gb->ms_wait > GB_LOOPBACK_MS_WAIT_MAX)
gb->ms_wait = GB_LOOPBACK_MS_WAIT_MAX; gb->ms_wait = GB_LOOPBACK_MS_WAIT_MAX;
@ -148,6 +149,12 @@ static void gb_loopback_check_attr(struct gb_loopback *gb)
gb->iteration_count = 0; gb->iteration_count = 0;
gb_loopback_reset_stats(gb); gb_loopback_reset_stats(gb);
if (kfifo_depth < gb->iteration_max) {
dev_warn(&connection->dev,
"iteration_max %u kfifo_depth %u cannot log all data\n",
gb->iteration_max, kfifo_depth);
}
switch (gb->type) { switch (gb->type) {
case GB_LOOPBACK_TYPE_PING: case GB_LOOPBACK_TYPE_PING:
case GB_LOOPBACK_TYPE_TRANSFER: case GB_LOOPBACK_TYPE_TRANSFER: