Commit Graph

1773 Commits

Author SHA1 Message Date
Johan Hovold d18da86b51 greybus: greybus_protocols: remove svc-eject timeout define
The SVC eject timeout is implementation specific and does not belong in
the protocol header so move it to the svc module.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold e676ccd713 greybus: svc: print an error message on failed eject attempts
Print an error message when the SVC fails to eject an interface.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold c80514a39a greybus: svc: unexport eject helper
Do no export the interface-eject helper, which is only supposed to be
used by core.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 629c0d007d greybus: interface: separate disabling from removal
Separate interface disable from interface removal.

Disabling an interface means tearing down its control connection and
destroying (i.e. deregistering and releasing) its bundles, while
removing it means deregistering and releasing the interface itself.

This is needed to implement controlled module removal, where the module
interfaces are disabled before being physically ejected.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 35580af0bd greybus: interface: rename initialisation function
Rename the interface-initialisation function gb_interface_enable(),
which is more descriptive.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 66d674cfaf greybus: interface: move interface-removal helper
Move helper to remove all interfaces of a host-device to the svc code
and call it when removing the svc device as this needs to be coordinated
with flushing the SVC work queue.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 64acb6611f greybus: interface: remove useless spinlock
Remove useless global interface spinlock that appeared to protect the
host-device interface list, but really did not as we are doing lock-less
look-ups by relying on the single-threaded SVC workqueue.

Document the locking assumptions.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 11548c8327 greybus: interface: disable control connection on initialisation errors
Disable the control connection immediately on any errors during
interface initialisation as there's no need to keep it around for an
interface in an error state.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 986d691108 greybus: svc: always register interfaces at hotplug
Always register interfaces at hotplug regardless of whether
initialisation succeeded or not.

Even if a module failed to initialise we want it to have a
representation while it is physically present.

Note that the vendor and product-string attribute will read as "(null)"
for now on an interface that failed (early) initialisation.

Also note that the switch route is kept until the interface is finally
removed also on initialisation errors.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold a77660a75a greybus: interface: free bundles on initialisation errors
Immediately free any created bundle structures on interface
initialisation errors.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 7a137fb290 greybus: interface: separate initialisation and registration
Separate interface initialisation from registration of the interface and
its bundles.

This is a step towards registering also interfaces that failed to
initialise (e.g. a dummy interface).

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 39495a2bea greybus: svc: refactor interface-route destruction
Add interface-route-destroy helper to tear down the route and release
the interface device id.

Note that we currently need to grab a reference to the interface to
prevent it from being deallocated before tearing down the route.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold bb2533a974 greybus: svc: refactor interface-route creation
Add interface-route-create helper to allocate an interface device id and
setup the route.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 60269b958e greybus: interface: add comment about early control-connection disable
Add comment about why the control connection is disabled early when the
interface is already gone.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 52bbd5b3a0 greybus: interface: remove unused drvdata helpers
Remove the unused interface drvdata helpers along with some dubious
comments about public and private definitions.

Greybus drivers bind to bundles and should be using the
greybus_set_drvdata and greybus_get_drvdata helpers.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Johan Hovold 83a124e2c5 greybus: interface: remove unused function prototype
Remove unused gb_interface_destroy() prototype.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-10 13:57:42 -08:00
Alexandre Bailon 01480ba336 greybus: loopback: Fix broken synchonous test
loopback driver use the send_count variable to know the test progress.
The test may be stopped or change but this variable is never cleaned.
Such situation may break the next run.

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-09 22:31:32 -08:00
Alexandre Bailon 58a527afff greybus: loopback: round closest the sixth decimal
The original round was removed becaused it was rounding
the integer whereas we had decimals.
Round the sixth decimal.

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-09 22:31:32 -08:00
Alexandre Bailon 89ec14ceae greybus: loopback: Fix warning on 32-bit build
gb_loopback_ro_avg_attr() is using "/" to divide two 64-bit integer,
causing a reference to __aeabi_uldivmod() that is not availalbe on 32-bit.
Instead, use do_div().

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-09 22:31:32 -08:00
Johan Hovold a23aa56452 greybus: greybus_manifest: remove unused SVC class
Mark the SVC Bundle-class id as unused.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-09 22:31:13 -08:00
Johan Hovold 9230e298cf greybus: greybus_manifest: remove unused AP class and protocol
Mark the AP Bundle-class and protocol ids as unused.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-09 22:31:13 -08:00
Axel Haslam 4b82dd7be3 greybus: loopback_test: Use timeout argument
Patch "c3b0a32 Loopback_test: use poll instead of inotify"
added a optional argument for the user to specify a timeout value,
but did not use this parameter in the actual poll function. The
default of 30 seconds is always used.

Fix this by actually using the the poll_timeout parameter so the user
can run long tests.

Signed-off-by: Axel Haslam <ahaslam@baylibre.com>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-08 06:22:53 -08:00
David Lin 7fe9301422 greybus: arche-platform: fix incorrect gpio variable type
GPIO number obtained from of_get_named_gpio() should be signed to allow
error handling.

Testing Done:
Built & booted on EVT1.5

Signed-off-by: David Lin <dtwlin@google.com>
Reviewed-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-08 06:21:21 -08:00
Greg Kroah-Hartman 9fa3a9b8cb greybus: properly annotate struct gb_control_timesync_enable_request
A patch from created struct gb_control_timesync_enable_request,
but forgot to properly annotate that the fields are little-endian.  The
code is correct in treating them this way, so there isn't a bug, but
sparse complains.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-05 08:38:03 -08:00
Fabien Parent 53f965065a greybus: camera: disable E2EFC on CSI connection
Following Toshiba's recommendation we shouldn't use E2EFC on a CSI connection.
Disable E2EFC on the CSI connection.

Signed-off-by: Fabien Parent <fparent@baylibre.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-04 18:32:00 -08:00
Johan Hovold aa2a5459aa greybus: hd: rename CPort-features callbacks
Rename the CPort-features callbacks, that are not just used to enable
FCT flow, to the more descriptive cport_features_enable/disable.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-04 18:26:08 -08:00
Johan Hovold 64a6d13884 greybus: connection: add CSD connection flag
Add CSD connection flag that can be specified when allocating a
connection to enable Controlled Segment Dropping in favour of E2EFC
which is enabled by default.

Note that most connections are expected to have E2EFC enabled.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-04 18:26:08 -08:00
Johan Hovold 27f25c17ad greybus: connection: generalise CPortFlags handling
Generalise the svc connection-create helper to accept a cport-flags
argument and handle the flags in the connection code instead.

Note that the camera driver currently manages its data connection
directly. We keep E2EFC enabled for now even though it will soon need
to be disabled due to some pending firmware updates.

Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-04 18:26:08 -08:00
Johan Hovold 34145b608d greybus: svc: clean up CPortFlags handling
Clean up CPortFlags handling and explicitly disable CSD when E2EFC is
enabled (CSD_n is ignored when E2EFC is set).

Note that the bootrom requires E2EFC, CSD, and CSV to all be disabled.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-04 18:26:08 -08:00
Johan Hovold cb033188d8 greybus: connection: add connection-flag interface
Add interface for associating a flag bitmask with a connection when
creating it.

Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-04 18:26:08 -08:00
Bryan O'Donoghue 8fd9466b8c greybus: control: Add TimeSync control commands
Simple addition of the TimeSync commands defined in the specification.
Note for the case of timesync_authoritative we're passing the request
structure directly so as not to have to pass eight parameters into the
function.

Adds:
- control.c::timesync_enable(u8 count, u64 frame_time,
                             u32 strobe_delay, u32 refclk)
  Informs an Interface to expect count TimeSync strobe pulses with
  strobe_delay milliseconds delay between each strobe. Once enabled
  an Interface may not enter a low-power mode which will result in the
  reference timer used to track time switching off.

- control.c::timesync_disable(void)
  Commands an Interface to immediately halt TimeSync logic. This will allow
  an Interface to transition into low-power modes where the reference time
  being used for TimeSync may switch off.

- control.c::timesync_authoritative(u64 *frame_time, u8 count)
  Used by the AP Module to inform an Interface of the authoritative
  TimeSync clock-master time at each strobe pulse. Down-stream clock slaves
  shall adjust their local frame-time appropriately based on the
  diseminated authoritative frame-time.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-03 15:22:52 -08:00
Bryan O'Donoghue 0bd39ca489 greybus: timesync: Add Control and SVC protocol TimeSync operation definitions
This patch adds the protocol command extenions for SVC and Control
protocols to the greybus_protocols definition header consistent with
the greybus-spec.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-03 15:16:52 -08:00
Bryan O'Donoghue 177d4a4d34 greybus: timesync: Add Control and SVC TimeSync command/response data definitions
This patch adds the protocol command/response definitions for the SVC and
Control protocols to the greybus_protocols definition header consistent
with the greybus-spec.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-03 15:16:52 -08:00
Greg Kroah-Hartman d6fefbe193 greybus: manifest: reserve the Bridged PHY class
This reserves the bridged phy class number to be used later on.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
2016-03-03 13:52:10 -08:00
Greg Kroah-Hartman c7b0726504 greybus: gpbridge.h: move protocol init/exit prototypes
Create gpbridge.h for the gpbridge-specific function prototypes, the
rest of the greybus drivers don't care about them.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
2016-03-03 13:52:02 -08:00
Michael Mogenson 3522a09fa7 greybus: remove gb_i2c_retries_operation
Set retries operation was removed from the Greybus specification. Remove
gb_i2c_retries_operation and all other no longer necessary code bits from the
Greybus kernel code.

Signed-off-by: Michael Mogenson <michael.mogenson@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-03 13:46:02 -08:00
Michael Mogenson e494b580ea greybus: remove gb_i2c_timeout_operation
Set timeout operation was removed from the Greybus specification. Remove
gb_i2c_timeout_operation and all other no longer necessary code bits from the
Greybus kernel code.

Signed-off-by: Michael Mogenson <michael.mogenson@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-03 13:46:02 -08:00
Johan Hovold c7733b6167 greybus: raw: use hexadecimal notation for request types
Use hexadecimal notation for request types in log messages.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-03 10:02:48 -08:00
Johan Hovold 41993cd54f greybus: loopback: fix double error count
Make sure not count errors during asynchronous tests twice (first in
the timeout handler then again in the completion handler) to avoid
obviously broken error stats such as:

$ loopback_test -i 1000 -t transfer -p -o 200000 -c 64 -x -s 2000

1970-1-1 1:3:35
 test:                  transfer
 path:                  gb_loopback0
 size:                  2000
 iterations:            1000
 errors:                1998
 async:                 Enabled
 requests per-sec:      min=0, max=0, average=0.310556, jitter=0
 ap-throughput B/s:     min=0 max=4026 average=1254.647461 jitter=4026
 ap-latency usec:       min=12803 max=12803 average=12803.000000 jitter=0
 apbridge-latency usec: min=89 max=89 average=89.000000 jitter=0
 gpbridge-latency usec: min=294 max=294 average=294.000000 jitter=0

where we supposedly have more errors than iterations (operations
initiated).

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-03 10:02:48 -08:00
Mark Greer 5bbe14b7ac greybus: audio: Split start and stop APBridgeA requests
Provide finer-grained control of the audio streaming on APB1 by
splitting the transmit/receive start and stop requests into prepare,
start, stop, and shutdown.

CC: Vaibhav Agarwal <vaibhav.agarwal@linaro.org>
Signed-off-by: Mark Greer <mgreer@animalcreek.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-03-01 22:44:49 -08:00
Axel Haslam 9250c0ee26 greybus: Loopback_test: use poll instead of inotify
Inotify does not handle sysfs events, so use poll instead.

The loopback kernel driver will send a notification when the test is
complete. So, open a poll file descriptor for every enabled device,
and after starting the test, wait for an event from each device.
After all events are received, read the total number of iterations
and make sure the test is complete.

Also, add missing stdint header which was included in inotify.

Signed-off-by: Axel Haslam <ahaslam@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-29 14:51:38 -08:00
Axel Haslam 39c2787b12 greybus: Notify user space only when the test finished.
Currently, user space is notified for every message sent,
but this is not really needed and does not work in the async case
where all messages are sent from the start.

Instead, notify userspace only when all the transfers are complete.
This allows userspace to wait in a poll loop and wakeup only when
the test is finished.

Also, don't use the bundle kobj to send the notification it is
the loopback device that contains the loopback attributes.

Signed-off-by: Axel Haslam <ahaslam@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-29 14:51:38 -08:00
Viresh Kumar 9b22f155be greybus: hid: Replace WARN_ON() with dev_err()
WARN_ON() is a bit harsh here, as we just failed to power-off the HID
device while it is getting removed.

Replace it with dev_err().

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-29 14:49:28 -08:00
Viresh Kumar b22b7104d5 greybus: hid: Don't disable connection-tx before destroying hid-device
hid_destroy_device() can potentially call callbacks defined in struct
hid_ll_driver, which may initiate few greybus operations.

And so connection (tx) should be kept enabled until the hid-device isn't
destroyed.

Reported-by: Jiss Kuruvila <jkuruvila@google.com>
Reported-by: Laurent Pinchart <laurent.pinchart@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-29 14:49:28 -08:00
Mark Greer 4a8e519902 greybus: audio: Register CPorts for specific directions
Currently, it is assumed that all audio data CPorts registered on
APB1 are used for transmitting audio data.  That may not always be
true like when a microphone is connected but no speakers.  Also,
the current special protocol lacks a way to tell APB1 whether the CPort
being registered is for transmitting, receiving, or both.

Fix by adding a 'direction' field to the register and unregister CPort
requests and define bits indicating which direction (or both) audio
data will go on that CPort.

Signed-off-by: Mark Greer <mgreer@animalcreek.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-29 13:37:39 -08:00
Greg Kroah-Hartman 611924dd72 greybus: expose full 32 bits of vid/pid to userspace
Now that userspace is ready for all 32 bits of the vid/pid, take off our
mask and send the full values.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-26 21:57:03 -08:00
Alexandre Bailon fb37f137b7 greybus: loopback: Fix averaging
Currently, we are adding 0.5 to the average to round the average.
But we are using the remainder to calculate the decimal, so we do not
need to round the average.
In addition, use a u64 type for the remainder to avoid overflow
that might happen when stats->sum value is too big,
usually for requests per seconds and the throughput.

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-25 17:05:31 -08:00
Alexandre Bailon ab81bb9c68 greybus: loopback: Fix throughput calculations
Throughput and requests per second calculations are broken for
asynchronous request.
Instead of calculate the throughput for each iteration,
calculate it once at the end of the test.
In addition, update every seconds the min and the max
for throughput and requests per second.

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-25 17:05:31 -08:00
Alexandre Bailon d9048d8c96 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: Alexandre Bailon <abailon@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-25 17:05:31 -08:00
Alexandre Bailon d97bbf3ed6 greybus: loopback: Fix calculations error for ping transfers
For the async ping transfer, statistics are counted twice,
once after the after the gb_loopback_async_operation() and
once in the callback.
Only keep the one in the callback.

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2016-02-25 17:05:31 -08:00