Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9048d8c authored by Alexandre Bailon's avatar Alexandre Bailon Committed by Greg Kroah-Hartman
Browse files

greybus: loopback: Fix incoherency in calculations in the case of error



Currently, in case the case of error, statistics are updated for
asynchronous but not for an asynchronous operation.
Do not update the statistics in the case of error.

Signed-off-by: default avatarAlexandre Bailon <abailon@baylibre.com>
Reviewed-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent d97bbf3e
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -398,10 +398,8 @@ static int gb_loopback_operation_sync(struct gb_loopback *gb, int type,
	do_gettimeofday(&ts);
	operation = gb_operation_create(gb->connection, type, request_size,
					response_size, GFP_KERNEL);
	if (!operation) {
		ret = -ENOMEM;
		goto error;
	}
	if (!operation)
		return -ENOMEM;

	if (request_size)
		memcpy(operation->request->payload, request, request_size);
@@ -410,6 +408,7 @@ static int gb_loopback_operation_sync(struct gb_loopback *gb, int type,
	if (ret) {
		dev_err(&gb->connection->bundle->dev,
			"synchronous operation failed: %d\n", ret);
		goto out_put_operation;
	} else {
		if (response_size == operation->response->payload_size) {
			memcpy(response, operation->response->payload,
@@ -419,18 +418,20 @@ static int gb_loopback_operation_sync(struct gb_loopback *gb, int type,
				"response size %zu expected %d\n",
				operation->response->payload_size,
				response_size);
			ret = -EINVAL;
			goto out_put_operation;
		}
	}

	gb_operation_put(operation);

error:
	do_gettimeofday(&te);

	/* Calculate the total time the message took */
	gb_loopback_push_latency_ts(gb, &ts, &te);
	gb->elapsed_nsecs = gb_loopback_calc_latency(&ts, &te);

out_put_operation:
	gb_operation_put(operation);

	return ret;
}

@@ -988,8 +989,9 @@ static int gb_loopback_fn(void *data)

			if (error)
				gb->error++;
			gb->iteration_count++;
			else
				gb_loopback_calculate_stats(gb);
			gb->iteration_count++;
		}
		send_count++;
		if (us_wait)