cascardo/linux.git
8 years agogreybus: Merge branch 'master' into svc
Greg Kroah-Hartman [Thu, 30 Jul 2015 20:58:00 +0000 (13:58 -0700)]
greybus: Merge branch 'master' into svc

Get the USB driver fixes in this branch to prevent oopses from happening
when the USB host driver protocol is found in a manifest.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: usb: disable protocol driver
Johan Hovold [Thu, 30 Jul 2015 18:30:41 +0000 (20:30 +0200)]
greybus: usb: disable protocol driver

The USB bridged-PHY protocol driver currently depends on changes to USB
core that are not yet upstream.

Disable for now.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: usb: implement hub_control callback
Johan Hovold [Thu, 30 Jul 2015 18:30:40 +0000 (20:30 +0200)]
greybus: usb: implement hub_control callback

Implement the hub_control callback.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: usb: fix hc_driver fields
Johan Hovold [Thu, 30 Jul 2015 18:30:39 +0000 (20:30 +0200)]
greybus: usb: fix hc_driver fields

Fix hc_driver description, product_desc and flags fields.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: usb: fix hcd allocation, deregistration and deallocation
Johan Hovold [Thu, 30 Jul 2015 18:30:38 +0000 (20:30 +0200)]
greybus: usb: fix hcd allocation, deregistration and deallocation

Fix allocation, deregistration and deallocation of USB HCD, and update
the hcd_priv helper functions.

The HCD private data was not allocated correctly, something which would
lead to a crash when accessed in hcd_start. The HCD was neither
reregistered or deallocated on connection tear down.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: usb: renumber operation types
Johan Hovold [Thu, 30 Jul 2015 18:30:37 +0000 (20:30 +0200)]
greybus: usb: renumber operation types

Renumber the current operation types.

NOTE: Protocol change.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: usb: clean up driver
Johan Hovold [Thu, 30 Jul 2015 18:30:36 +0000 (20:30 +0200)]
greybus: usb: clean up driver

Remove unused, broken or unneeded code and constructs.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: Revert "connection: remove special check for svc cport id"
Greg Kroah-Hartman [Thu, 30 Jul 2015 19:22:09 +0000 (12:22 -0700)]
greybus: Revert "connection: remove special check for svc cport id"

This reverts commit 60b1d71fdfc2c5266051a1297df01ea0b1f3ba99 as we want
the port number to be correct in the svc branch.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: Merge branch 'master' into svc to keep it up to date.
Greg Kroah-Hartman [Thu, 30 Jul 2015 19:21:33 +0000 (12:21 -0700)]
greybus: Merge branch 'master' into svc to keep it up to date.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: remove special check for svc cport id
Viresh Kumar [Thu, 30 Jul 2015 16:43:27 +0000 (22:13 +0530)]
greybus: connection: remove special check for svc cport id

This is required to get things working for now, after the latest revert
of svc protocol is done.

Currently svc's cport id is set to 2 and that hd cport id will be used
for the third connection we make. And that protocol (which is i2c in one
of the cases), may not work as the (dis)connected event isn't sent for
it.

Fix this by getting rid of svc protocol check from (dis)connected
events for now. This must be reverted later, once svc protocol is
included again.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Mark Greer <mgreer@animalcreek.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: initialize svc connection while creating hd
Viresh Kumar [Tue, 28 Jul 2015 01:58:42 +0000 (07:28 +0530)]
greybus: initialize svc connection while creating hd

Its really part of initializing the host device and is required for
every 'hd' that is created. Lets move the call to do basic
initialization of svc connection to greybus_create_hd().

Also add a comment to specify why we need to do it that early.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: remove svc_msg.h
Viresh Kumar [Sat, 25 Jul 2015 04:40:06 +0000 (10:10 +0530)]
greybus: remove svc_msg.h

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: es1: create svc connection early enough
Viresh Kumar [Sat, 25 Jul 2015 04:40:05 +0000 (10:10 +0530)]
greybus: es1: create svc connection early enough

The svc connection needs to be ready before creating the URBs, otherwise
the svc version request might come in before the AP was ready to parse
them.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: interface: make gb_interface_destroy() static
Greg Kroah-Hartman [Sat, 25 Jul 2015 00:21:25 +0000 (17:21 -0700)]
greybus: interface: make gb_interface_destroy() static

The function is only called locally, so mark it static to make sparse
happy.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: remove submit_svc from the host driver
Greg Kroah-Hartman [Sat, 25 Jul 2015 00:19:21 +0000 (17:19 -0700)]
greybus: remove submit_svc from the host driver

The callback is never used anymore, so remove it from struct
greybus_host_driver as well as from the es1 and es2 drivers.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: greybus.h: remove greybus_svc_in()
Greg Kroah-Hartman [Sat, 25 Jul 2015 00:15:59 +0000 (17:15 -0700)]
greybus: greybus.h: remove greybus_svc_in()

The function is gone, remove it from the header file as well.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: add flags and traffic class parameter to connection create op
Perry Hung [Fri, 24 Jul 2015 23:02:34 +0000 (19:02 -0400)]
greybus: svc: add flags and traffic class parameter to connection create op

The AP needs to be able to specify L4 CPort flags and traffic class
parameters on a connection-by-connection basis. Extend the connection
create operation to accept these. Since there's no policy to decide
these, fix them at TC0 with end-to-end-flow control, controlled segment
dropping, and CPort safety valve enabled.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: connection: ask SVC to create connections
Perry Hung [Fri, 24 Jul 2015 23:02:33 +0000 (19:02 -0400)]
greybus: svc: connection: ask SVC to create connections

Ask the SVC to do all the necessary bits for creating a new connection.
This is skipped for the initial SVC connection.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: create bidirectional routes on hotplug request
Perry Hung [Fri, 24 Jul 2015 23:02:32 +0000 (19:02 -0400)]
greybus: svc: create bidirectional routes on hotplug request

Upon receiving a hotplug request, we need to prepare the routing table
to allow packets to flow between the AP interface and the newly detected
interface.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: add route create operation
Perry Hung [Fri, 24 Jul 2015 23:02:31 +0000 (19:02 -0400)]
greybus: svc: add route create operation

Implement the SVC Protocol Route Create Operation.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: get rid of old svc-protocol
Viresh Kumar [Fri, 24 Jul 2015 10:02:26 +0000 (15:32 +0530)]
greybus: get rid of old svc-protocol

Its not used anymore as we have more sophisticated svc protocol in
place, lets get rid of earlier code.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: es2: remove svc endpoint message handling
Greg Kroah-Hartman [Sat, 25 Jul 2015 00:09:48 +0000 (17:09 -0700)]
greybus: es2: remove svc endpoint message handling

We have switched over to use the "new" svc messages, no more need to
have a special USB endpoint to handle them, they come through the normal
CPort messages.

Based on a patch from Viresh.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: es1: remove svc endpoint message handling
Greg Kroah-Hartman [Fri, 24 Jul 2015 23:47:07 +0000 (16:47 -0700)]
greybus: es1: remove svc endpoint message handling

We have switched over to use the "new" svc messages, no more need to
have a special USB endpoint to handle them, they come through the normal
CPort messages.

Based on a patch from Viresh.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: Switch to Cport 0 for svc and control protocol
Viresh Kumar [Fri, 24 Jul 2015 10:02:24 +0000 (15:32 +0530)]
greybus: Switch to Cport 0 for svc and control protocol

Initially we fixed it to Cport 2, but its changed to Cport 0 now. Lets
switch that in code as well.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: es1/2: Lets start using svc protocol
Viresh Kumar [Fri, 24 Jul 2015 10:02:23 +0000 (15:32 +0530)]
greybus: es1/2: Lets start using svc protocol

All bits and pieces are in place now. Lets start using svc protocol
instead of stuff present in ap.c.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: revert svc changes to keep things working for a while.
Greg Kroah-Hartman [Wed, 29 Jul 2015 17:05:09 +0000 (10:05 -0700)]
greybus: svc: revert svc changes to keep things working for a while.

The firmware for the svc changes isn't quite ready, so revert the whole
set of patches in one hunk to get things back to a working state for the
other firmware developers.  The svc patches will be added back in a
separate branch.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: warn user if kfifo cannot log all data
Bryan O'Donoghue [Tue, 28 Jul 2015 17:34:39 +0000 (18:34 +0100)]
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>
8 years agogreybus: loopback: provide interface to read all latency data-points
Bryan O'Donoghue [Tue, 28 Jul 2015 17:34:38 +0000 (18:34 +0100)]
greybus: loopback: provide interface to read all latency data-points

The current loopback code provides the minimum, maximum and average latency
values for a given test set. It would be highly useful for user-space to
have access to each one of the latency metrics in order to graph outliers.

This patch adds a simple character device interface implmenting a read()
interface that allows user-space to read out the saved latency metrics
which have been stored in a kfifo for this purpose.

A module parameter is provided to allow varying the depth of the kfifo in
order to allow a user to capture potentially large data sets. This version
sets the default depth for the kfifo at 8192 dwords.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: make loopback code thread safe
Bryan O'Donoghue [Tue, 28 Jul 2015 17:34:36 +0000 (18:34 +0100)]
greybus: loopback: make loopback code thread safe

Current code allows a sysfs callback and a kernel worker thread to write
all over and act upon data that could be in the process of being updated by
the other. This patch adds a reasonably coarse mutex to enscure sync
between the two.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: remove redundant timestamping
Bryan O'Donoghue [Tue, 28 Jul 2015 17:34:35 +0000 (18:34 +0100)]
greybus: loopback: remove redundant timestamping

It is of more interest to graphing system performance to base our
timestamps on the time it takes a greybus_operation_sync() to complete.
Higher level timestamping code is less accurate and not relevant to
throughput and latency characterization.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: initialize svc connection while creating hd
Viresh Kumar [Tue, 28 Jul 2015 01:58:42 +0000 (07:28 +0530)]
greybus: initialize svc connection while creating hd

Its really part of initializing the host device and is required for
every 'hd' that is created. Lets move the call to do basic
initialization of svc connection to greybus_create_hd().

Also add a comment to specify why we need to do it that early.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: core: clean up ida memory for host controller
Greg Kroah-Hartman [Mon, 27 Jul 2015 21:23:44 +0000 (14:23 -0700)]
greybus: core: clean up ida memory for host controller

We forgot to free any ida internal structures that were used by this
host controller structure when we free the memory for the controller.
So fix that up by doing so in the release function.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
8 years agogreybus: remove svc_msg.h
Viresh Kumar [Sat, 25 Jul 2015 04:40:06 +0000 (10:10 +0530)]
greybus: remove svc_msg.h

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: es1: create svc connection early enough
Viresh Kumar [Sat, 25 Jul 2015 04:40:05 +0000 (10:10 +0530)]
greybus: es1: create svc connection early enough

The svc connection needs to be ready before creating the URBs, otherwise
the svc version request might come in before the AP was ready to parse
them.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: interface: make gb_interface_destroy() static
Greg Kroah-Hartman [Sat, 25 Jul 2015 00:21:25 +0000 (17:21 -0700)]
greybus: interface: make gb_interface_destroy() static

The function is only called locally, so mark it static to make sparse
happy.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: remove submit_svc from the host driver
Greg Kroah-Hartman [Sat, 25 Jul 2015 00:19:21 +0000 (17:19 -0700)]
greybus: remove submit_svc from the host driver

The callback is never used anymore, so remove it from struct
greybus_host_driver as well as from the es1 and es2 drivers.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: greybus.h: remove greybus_svc_in()
Greg Kroah-Hartman [Sat, 25 Jul 2015 00:15:59 +0000 (17:15 -0700)]
greybus: greybus.h: remove greybus_svc_in()

The function is gone, remove it from the header file as well.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: add flags and traffic class parameter to connection create op
Perry Hung [Fri, 24 Jul 2015 23:02:34 +0000 (19:02 -0400)]
greybus: svc: add flags and traffic class parameter to connection create op

The AP needs to be able to specify L4 CPort flags and traffic class
parameters on a connection-by-connection basis. Extend the connection
create operation to accept these. Since there's no policy to decide
these, fix them at TC0 with end-to-end-flow control, controlled segment
dropping, and CPort safety valve enabled.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: connection: ask SVC to create connections
Perry Hung [Fri, 24 Jul 2015 23:02:33 +0000 (19:02 -0400)]
greybus: svc: connection: ask SVC to create connections

Ask the SVC to do all the necessary bits for creating a new connection.
This is skipped for the initial SVC connection.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: create bidirectional routes on hotplug request
Perry Hung [Fri, 24 Jul 2015 23:02:32 +0000 (19:02 -0400)]
greybus: svc: create bidirectional routes on hotplug request

Upon receiving a hotplug request, we need to prepare the routing table
to allow packets to flow between the AP interface and the newly detected
interface.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: add route create operation
Perry Hung [Fri, 24 Jul 2015 23:02:31 +0000 (19:02 -0400)]
greybus: svc: add route create operation

Implement the SVC Protocol Route Create Operation.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: get rid of old svc-protocol
Viresh Kumar [Fri, 24 Jul 2015 10:02:26 +0000 (15:32 +0530)]
greybus: get rid of old svc-protocol

Its not used anymore as we have more sophisticated svc protocol in
place, lets get rid of earlier code.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: es2: remove svc endpoint message handling
Greg Kroah-Hartman [Sat, 25 Jul 2015 00:09:48 +0000 (17:09 -0700)]
greybus: es2: remove svc endpoint message handling

We have switched over to use the "new" svc messages, no more need to
have a special USB endpoint to handle them, they come through the normal
CPort messages.

Based on a patch from Viresh.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: es1: remove svc endpoint message handling
Greg Kroah-Hartman [Fri, 24 Jul 2015 23:47:07 +0000 (16:47 -0700)]
greybus: es1: remove svc endpoint message handling

We have switched over to use the "new" svc messages, no more need to
have a special USB endpoint to handle them, they come through the normal
CPort messages.

Based on a patch from Viresh.

Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: Switch to Cport 0 for svc and control protocol
Viresh Kumar [Fri, 24 Jul 2015 10:02:24 +0000 (15:32 +0530)]
greybus: Switch to Cport 0 for svc and control protocol

Initially we fixed it to Cport 2, but its changed to Cport 0 now. Lets
switch that in code as well.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: es1/2: Lets start using svc protocol
Viresh Kumar [Fri, 24 Jul 2015 10:02:23 +0000 (15:32 +0530)]
greybus: es1/2: Lets start using svc protocol

All bits and pieces are in place now. Lets start using svc protocol
instead of stuff present in ap.c.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: compare hd_cport_id for matching SVC protocol
Viresh Kumar [Fri, 24 Jul 2015 13:12:03 +0000 (18:42 +0530)]
greybus: connection: compare hd_cport_id for matching SVC protocol

SVC protocol isn't per interface, but per entire entire endo. And so svc
cport id must be matched against hd_cport_id, not per-interface cport
id.

Fixes: 82edfac17e5f ("connection: don't send connected/disconnected events for SVC connection")
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: silence warning on unbound protocols
Perry Hung [Fri, 24 Jul 2015 23:02:30 +0000 (19:02 -0400)]
greybus: connection: silence warning on unbound protocols

If a protocol was not successfully created, we can't drop the refcount
on it. This might happen for example if the connection fails to bind a
protocol.

Silences a warning on cleanup.

Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: battery: fix panic on operation error
Perry Hung [Fri, 24 Jul 2015 23:02:29 +0000 (19:02 -0400)]
greybus: battery: fix panic on operation error

If an operation times out or otherwise returns an error, val->intval
should not be set and an error-code should be returned.

Fixes a panic on unload while receiving -ENOTCONN.

Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: interface: localize gb_interface_destroy()
Viresh Kumar [Fri, 24 Jul 2015 10:02:22 +0000 (15:32 +0530)]
greybus: interface: localize gb_interface_destroy()

Its not referenced by svc or any other code anymore, lets stop exposing
it to rest of the files.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: remove interface->svc pointer
Viresh Kumar [Fri, 24 Jul 2015 10:02:21 +0000 (15:32 +0530)]
greybus: svc: remove interface->svc pointer

Its not updated/used anymore, remove it. Also move back the struct
gb_svc to svc.c as its not referenced by external users anymore.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: connection is created only once now
Viresh Kumar [Fri, 24 Jul 2015 10:02:20 +0000 (15:32 +0530)]
greybus: svc: connection is created only once now

We no longer create a fresh connection on receiving svc-hello message,
but rather update the initial one.

Update 'initial_svc_connection' after the connection is fully
initialized. Look for the partially initialized connection while
removing hd, as hd might be removed before getting svc-hello requests
from svc.

Also update gb_svc_connection_init() to initialize id_map on the first
(and the only) call to connection-init function.

We also can't update connection->bundle->intf->svc, as its a bundle-less
connection. Lets stop updating intf->svc as its not really used.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: fully initialize the partially initialized connection
Viresh Kumar [Fri, 24 Jul 2015 10:02:19 +0000 (15:32 +0530)]
greybus: svc: fully initialize the partially initialized connection

SVC hello message is received now and we should fully initialize the
partially initialized connection. This can be done by removing and
re-adding the device corresponding to the connection.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: convert loopback wake/sleep to a waitqueue
Bryan O'Donoghue [Fri, 24 Jul 2015 09:02:56 +0000 (10:02 +0100)]
greybus: loopback: convert loopback wake/sleep to a waitqueue

Current code will incrementally poll for gb->type == 0 and sleep.
This type of polling strategy wastes cycles.

This patch changes the sleep strategy by introducing a wait-queue which
waits for gb->type != 0 or kthread_should_stop() to wake-up and work or
to wake-up and terminate.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: add poll support to the iteration_count sysfs file
Greg Kroah-Hartman [Wed, 22 Jul 2015 18:09:23 +0000 (11:09 -0700)]
greybus: loopback: add poll support to the iteration_count sysfs file

This adds the ability to poll on "iteration_count" in sysfs and be woken
up when it changes, saving some cycles constantly hammering on the file
waiting for it to change.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
8 years agogreybus: operation: add completion work queue
Johan Hovold [Thu, 23 Jul 2015 08:50:03 +0000 (10:50 +0200)]
greybus: operation: add completion work queue

Add dedicated bound work queue for operation completions and use the
connection work queues for incoming requests only.

There is no need to keep responses ordered internally or with respect to
requests. Instead allow operations to complete as soon as possible when
a response arrives (or the operation is cancelled).

Note that this also allows synchronous requests to be submitted from
request handlers as responses will no longer be blocked on the same
single-threaded work queue. Similarly, operations can now also be
cancelled from a request handler.

Tested-by: Rui Miguel Silva <rui.silva@linaro.org>
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>
8 years agogreybus: operation: use per-connection work queues
Johan Hovold [Thu, 23 Jul 2015 08:50:02 +0000 (10:50 +0200)]
greybus: operation: use per-connection work queues

Replace the global operation work queue with per-connection work queues.

There is no need to keep operations strictly ordered across connections,
something which only adds unnecessary latency.

Tested-by: Rui Miguel Silva <rui.silva@linaro.org>
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>
8 years agogreybus: connection: clean up creation error paths
Johan Hovold [Thu, 23 Jul 2015 08:50:01 +0000 (10:50 +0200)]
greybus: connection: clean up creation error paths

Clean up connection-creation error paths.

Tested-by: Rui Miguel Silva <rui.silva@linaro.org>
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>
8 years agogreybus: connection: clean up connection creation
Johan Hovold [Thu, 23 Jul 2015 08:50:00 +0000 (10:50 +0200)]
greybus: connection: clean up connection creation

Add variable for the host cport id rather than overload retval.
Remove redundant automatic variable for the id map.

Tested-by: Rui Miguel Silva <rui.silva@linaro.org>
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>
8 years agogreybus: connection: prevent oops for protocol_id sysfs file
Greg Kroah-Hartman [Thu, 23 Jul 2015 01:21:04 +0000 (18:21 -0700)]
greybus: connection: prevent oops for protocol_id sysfs file

If we don't have a protocol assigned to a connection, don't oops when
trying to read the "protocol_id" sysfs file.

Fixes Jira SW-968.

Reported-by: Alexandre Bailon <abailon@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
8 years agogreybus: svc: Fix build warning on 64bit systems
Viresh Kumar [Thu, 23 Jul 2015 05:00:47 +0000 (10:30 +0530)]
greybus: svc: Fix build warning on 64bit systems

Fix below warnings that only generate for a 64 bit system:

greybus/svc.c:202:16: warning: format â€˜%d’ expects argument of type â€˜int’, but argument 4 has type â€˜size_t {aka long unsigned int}’ [-Wformat=]
   dev_err(dev, "%s: Illegal size of hello request (%d %d)\n",
                ^
greybus/svc.c:202:16: warning: format â€˜%d’ expects argument of type â€˜int’, but argument 5 has type â€˜long unsigned int’ [-Wformat=]

Fixes: 9cbe73e0cf45 ("svc: Implement SVC requests")
Reported-by: Greg KH <gregkh@google.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: fix connection initialisation
Johan Hovold [Wed, 22 Jul 2015 15:49:19 +0000 (17:49 +0200)]
greybus: connection: fix connection initialisation

Make sure connection is fully initialised before registering the
connection device and adding it to the host-device and bundle lists.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Tested-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: clean up greybus_message_sent
Johan Hovold [Wed, 22 Jul 2015 15:49:18 +0000 (17:49 +0200)]
greybus: operation: clean up greybus_message_sent

Add connection variable to greybus_message_sent.

This will be put to more use by a follow-up up patch.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Tested-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: fix operation ordering
Johan Hovold [Wed, 22 Jul 2015 15:49:17 +0000 (17:49 +0200)]
greybus: operation: fix operation ordering

Make the operation work queue single threaded.

The operation work queue was meant to be single threaded, but due to a
missing flag instead allowed one active task per CPU, something which
could lead to requests being processed out of order on SMP systems.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Tested-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: rename frequency to requests
Bryan O'Donoghue [Tue, 21 Jul 2015 22:50:10 +0000 (23:50 +0100)]
greybus: loopback: rename frequency to requests

The name frequency does not adequately describe the data-point tracking the
number of greybus operations performed in a second by the loopback code.
Firmware team is moving towards calling this variable requests-per-second
or similar. This patch renames to keep the namespace consistent.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: add commentary to sysfs variables
Bryan O'Donoghue [Tue, 21 Jul 2015 22:50:09 +0000 (23:50 +0100)]
greybus: loopback: add commentary to sysfs variables

Add some missing comments.
Add a TODO to look at doing iteration_count with KOBJ_CHANGE event instead
of having user-space poll the value reported in iteration_count to
determine when a test set is complete.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: run operations a set number of times
Bryan O'Donoghue [Tue, 21 Jul 2015 22:50:08 +0000 (23:50 +0100)]
greybus: loopback: run operations a set number of times

In order to extract a meaningful set of data out of loopback metrics it
makes sense to have the ability to specify how many times a loopback
operation should run and then to stop when the threshold is hit.

This will allow exactly the same loopback data pattern to be run again and
again, which is a fundamental prerequisite to instrumenting and
characterizing the loopback interface over time.

This patch introduces a simple sysfs controlled variable iteration_max.
iteration_max is the maximum number of iterations to run for a given set.
iteration_count is used internally to count from zero to iteration_max
if-and-only-if iteration_max is non zero. If iteration_max is zero then the
original behaviour of running the test command ad infinitum is maintained.
User-space should incrementally poll the iteration_count to determine when
the sequence is finished.

To accomplish this we move away from running as many commands as possible
in a one second window and instead run a fixed number of commands and log
the time it takes for those commands to complete in aggregate. Since we are
no longer resetting counters every one second, the tracker variables have
been moved from u32 to u64 to allow for reasonably long tests to gather
reasonably large amounts of data, without fear of over-flowing the
data-points.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: update loopback operation description comment
Bryan O'Donoghue [Tue, 21 Jul 2015 22:50:07 +0000 (23:50 +0100)]
greybus: loopback: update loopback operation description comment

Old comment needs updating to match 8a282c411ba0 ('greybus/loopback: make
loopback type input equivalent to protocol type')

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: loopback: timestamp seeding should not drop metrics
Bryan O'Donoghue [Tue, 21 Jul 2015 22:50:06 +0000 (23:50 +0100)]
greybus: loopback: timestamp seeding should not drop metrics

In the current code if the ts variable is not initialized then any data
already gathered in a previous loopback command is dropped instead of
logged. Also the timestamping of ts is done after the greybus operation.

This delayed time-stamping means that the delta between the before and
after timestamps is incorrect and if a delay in-between loopback operations
has been specified by the user, the ts timestamp will be very skewed
indeed.

- Move the ts initialization directly before the greybus operation.
- Remove the continue statement on first initialization of the ts variable.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: manifest: convert pr_err to dev_err
Bryan O'Donoghue [Tue, 21 Jul 2015 08:10:28 +0000 (09:10 +0100)]
greybus: manifest: convert pr_err to dev_err

This patch converts a dangling pr_err in the manifest parsing error path to
a dev_err in order to remain consistent with similar error messages
elsewhere.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: manifest: reserve control connection cport/bundle ids
Bryan O'Donoghue [Tue, 21 Jul 2015 08:10:27 +0000 (09:10 +0100)]
greybus: manifest: reserve control connection cport/bundle ids

5ae6906e ('interface: Get manifest using Control protocol') in
gb_create_control_connection introduces the concept that the Control
Protocol is at cport_id 2 and bundle_id 0. Currently the manifest parsing
code does not enforce that concept and as a result it is possible for a
manifest to declare the Control Protocol at a different address.

Based on that change 6a6945c9684e ('greybus-spec/control: Formally define
Control Protocol reserved addresses') makes the above coding convention a
formal requirement of the greybus specification. This patch implements the
change introduced in the specification @ 6a6945c9684e.

This patch will reject a manifest if it doesn't match the critiera laid
down in the spec.

This patch makes three changes:
- Changes gb_manifest_parse_cports so that only GB_CONTROL_CPORT_ID may
  have a protocol_id of GREYBUS_PROTOCOL_CONTROL, otherwise the manifest
  will be rejected.
- Changes gb_manifest_parse_bundles so that only GB_CONTROL_BUNDLE_ID may
  have a class of GREYBUS_CLASS_CONTROL, otherwise the manifest will be
  rejected.
- gb_connection_exit() and gb_connection_destroy() are removed from
  gb_manifest_parse_cports on error - since gb_manifest_parse_bundles()
  already has a call into gb_bundle_destroy() which will again call
  gb_connection_exit() and gb_connection_destroy() leading to an oops.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: No need of a separate version request
Viresh Kumar [Tue, 21 Jul 2015 12:14:20 +0000 (17:44 +0530)]
greybus: svc: No need of a separate version request

SVC already provided version to the AP on version-request, no need to
ask for that again. Drop it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: Implement SVC requests
Viresh Kumar [Tue, 21 Jul 2015 12:14:19 +0000 (17:44 +0530)]
greybus: svc: Implement SVC requests

Some of the SVC request are already partially implement, whereas few
others are not. This patch implements and updates these requests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: svc: Add helpers to create AP<->SVC connection
Viresh Kumar [Tue, 21 Jul 2015 12:14:18 +0000 (17:44 +0530)]
greybus: svc: Add helpers to create AP<->SVC connection

SVC connection is required before the AP knows its position on the endo
and type of endo. To enable message processing between the AP and SVC at
this time, we need a partially initialized connection which can handle
these messages.

Once the AP receives more information from the SVC, it can discard this
partially initialized connection and create a proper one, tied to a
bundle and interface.

Destroying the partially initialized connection is a bit tricky, as it
is required to send a response to svc-hello. That part will be properly
fixed separately.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: interface: Update gb_create_control_connection() to support SVC protocol
Viresh Kumar [Tue, 21 Jul 2015 12:14:17 +0000 (17:44 +0530)]
greybus: interface: Update gb_create_control_connection() to support SVC protocol

We need to create bundle/connection for svc cport after the endo layout
and interface id is known to the AP. gb_create_control_connection() can
be reused for this, but it should be renamed to something more
appropriate, as its not about control-connection anymore.

Lets name it gb_create_bundle_connection().

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: Allow a bundle-less connection
Viresh Kumar [Tue, 21 Jul 2015 12:14:16 +0000 (17:44 +0530)]
greybus: connection: Allow a bundle-less connection

We need a bundle-less connection for AP's SVC protocol, as that will be
used much before the endo layout and interface-id of the AP is known to
greybus core.

This updates gb_connection_create_range() to take few more arguments,
which were earlier fetched from the 'bundle' pointer.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: Create gb_connection_create_range() to specify hd-cport-id range
Viresh Kumar [Tue, 21 Jul 2015 12:14:15 +0000 (17:44 +0530)]
greybus: connection: Create gb_connection_create_range() to specify hd-cport-id range

We need to allocate specific hd-cport-id for AP's control/svc protocols.
Support that by splitting functionality of gb_connection_create() into a
new routine, which takes range of hd_cport_id's to allocate from.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: don't send connected/disconnected events for SVC connection
Viresh Kumar [Tue, 21 Jul 2015 12:14:14 +0000 (17:44 +0530)]
greybus: connection: don't send connected/disconnected events for SVC connection

SVC is also a special protocol (like control) and AP doesn't need to
send (dis)connected events for its cport.

Lets skip them.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: Define cport/bundle for SVC protocol
Viresh Kumar [Tue, 21 Jul 2015 12:14:13 +0000 (17:44 +0530)]
greybus: Define cport/bundle for SVC protocol

For now, the plan is to use a single cport for both control and svc
protocol. Defining separate macros for control and svc protocol's
cport/bundle would make the code more flexible, in case we need two
separate cports in future.

Lets define cport/bundle for svc protocol as well.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: Define device ids for AP/SVC/modules
Viresh Kumar [Tue, 21 Jul 2015 12:14:12 +0000 (17:44 +0530)]
greybus: Define device ids for AP/SVC/modules

Define device-ids for AP, SVC and modules (starting id only).

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: protocol: move version_response structure to greybus_protocols.h
Viresh Kumar [Tue, 21 Jul 2015 12:14:11 +0000 (17:44 +0530)]
greybus: protocol: move version_response structure to greybus_protocols.h

Version response structure is also required by external entities like
gbsim and so its structure should be moved to greybus_protocols.h.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: sync protocol and class definitions
Viresh Kumar [Tue, 21 Jul 2015 12:14:10 +0000 (17:44 +0530)]
greybus: sync protocol and class definitions

Class types aren't in sync with protocol types, lets keep them in sync
for now.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: interface: drop stale comment
Viresh Kumar [Tue, 21 Jul 2015 12:14:09 +0000 (17:44 +0530)]
greybus: interface: drop stale comment

We don't do what the comment says, drop it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connections: comment style fix
Viresh Kumar [Tue, 21 Jul 2015 12:14:08 +0000 (17:44 +0530)]
greybus: connections: comment style fix

Replace '* *' with '*'.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: fix atomic message submission
Johan Hovold [Fri, 17 Jul 2015 16:50:26 +0000 (18:50 +0200)]
greybus: operation: fix atomic message submission

The recently added GFP-flags argument to gb_message_send was never used.

Fixes: 9218fac2a24d ("operation: allow atomic request submissions")
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: fix atomic response allocation
Johan Hovold [Fri, 17 Jul 2015 16:50:25 +0000 (18:50 +0200)]
greybus: operation: fix atomic response allocation

Response allocation also needs a GFP-flags argument as a response is
allocated as part of an outgoing operation.

Fixes: 9aa174d202e5 ("operation: allow atomic operation allocations")
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: kernel_ver: add list_last_entry for old kernels
Johan Hovold [Thu, 16 Jul 2015 09:44:01 +0000 (11:44 +0200)]
greybus: kernel_ver: add list_last_entry for old kernels

Add list_last_entry macro for kernels older than 3.13.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: add gb_operation_sync_timeout helper
Johan Hovold [Tue, 14 Jul 2015 13:43:37 +0000 (15:43 +0200)]
greybus: operation: add gb_operation_sync_timeout helper

Add gb_operation_sync_timeout convenience function, which allows drivers
to configure the operation timeout.

Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: allow drivers to define custom timeouts
Johan Hovold [Tue, 14 Jul 2015 13:43:36 +0000 (15:43 +0200)]
greybus: operation: allow drivers to define custom timeouts

Add new interface gb_operation_request_send_sync_timeout, which allows
drivers to define a custom operation timeout instead of the default
one-second timeout.

The timeout is expected to depend on protocol and operation and
therefore needs to be configurable.

Note that that a timeout of zero is used to wait indefinitely.

Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: split incoming and outgoing cancellation
Johan Hovold [Tue, 14 Jul 2015 13:43:35 +0000 (15:43 +0200)]
greybus: operation: split incoming and outgoing cancellation

Split incoming and outgoing operation-cancellation helpers.

Incoming operations are only cancelled as part of connection tear down
and is specifically not needed in the driver API.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: fix response-cancellation race
Johan Hovold [Tue, 14 Jul 2015 13:43:34 +0000 (15:43 +0200)]
greybus: operation: fix response-cancellation race

Make sure the request handler has submitted the response before
cancelling it during operation cancellation.

This prevents cancelling not-yet-submitted messages. It currently also
avoids us ending up with an active message on a stalled connection (e.g.
due to E2EFC).

Note that the call to gb_operation_result_set() is now redundant but is
kept as a precaution to guarantee that a response has indeed been
allocated as part of response submission.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: fix operation look-up race
Johan Hovold [Tue, 14 Jul 2015 13:43:33 +0000 (15:43 +0200)]
greybus: operation: fix operation look-up race

Make sure to fully initialise the operation before adding it to the
active list when sending a request.

The operation should be fully initialised before adding it to the active
list to avoid racing with operation look up when receiving a response,
something which could potentially lead to a match against some earlier
(or intermediate) value of the id field.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: fix protocol tear-down race
Johan Hovold [Tue, 14 Jul 2015 13:43:32 +0000 (15:43 +0200)]
greybus: connection: fix protocol tear-down race

Make sure to cancel all active operations before calling protocol
connection_exit to prevent use-after-free issues when the protocol state
is being deallocated (e.g. late processing of already-queued requests or
completions).

Note that already-queued requests or completions will be processed as
part of cancellation.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: fix connection tear down
Johan Hovold [Tue, 14 Jul 2015 13:43:31 +0000 (15:43 +0200)]
greybus: operation: fix connection tear down

Fix connection tear down, which was done in an unsafe way that could
result in use-after-free as the per-connection list of operations was
iterated without any locking or refcounting.

Specifically, the operations list was iterated without holding any locks or
operation refcounts even though operations were being both removed from
the list and deallocated during per-operation cancellation. Any
operation completing during tear down could also cause corruption.

Change the per-connection operation list to only contain active
operations and use the recently introduced active counter to maintain
the list.

Add new helper that is called on connection tear down to cancel all
outstanding operations in a safe way by using proper locks and making
sure to hold a reference to any operation being cancelled.

Note that by verifying the connection state before incrementing the
active count we can make sure that all active operations have been
cancelled and that no new ones have been started when the helper
returns.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: connection: add connection-state locking
Johan Hovold [Tue, 14 Jul 2015 13:43:30 +0000 (15:43 +0200)]
greybus: connection: add connection-state locking

Add locking, and the implied barriers, to connection-state updates.

This will be used to fix a number of races in the operations and
connection-tear-down implementations.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: suppress response submission on connection tear down
Johan Hovold [Tue, 14 Jul 2015 13:43:29 +0000 (15:43 +0200)]
greybus: operation: suppress response submission on connection tear down

Suppress response submission on connection tear down as we do with
requests.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: clean up operation work function
Johan Hovold [Tue, 14 Jul 2015 13:43:28 +0000 (15:43 +0200)]
greybus: operation: clean up operation work function

Call request handler helper explicitly from the work function rather
than overload the operation completion callback.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: complete operations on cancellation
Johan Hovold [Tue, 14 Jul 2015 13:43:27 +0000 (15:43 +0200)]
greybus: operation: complete operations on cancellation

Make sure to call the operation completion callback also when the
operation is being cancelled.

The completion callback may need to release resources allocated at
submission and the driver should be informed that the operation has
failed due to cancellation.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: make cancellation synchronous
Johan Hovold [Tue, 14 Jul 2015 13:43:26 +0000 (15:43 +0200)]
greybus: operation: make cancellation synchronous

Make sure to wait for the operation to become inactive before returning
after having cancelled an operation.

This makes sure that any ongoing operation completion callbacks have
finished.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
8 years agogreybus: operation: add active counter
Johan Hovold [Tue, 14 Jul 2015 13:43:25 +0000 (15:43 +0200)]
greybus: operation: add active counter

Add active counter to track operations that are in use.

Note that the active count is always less than the reference count.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>