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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Johan Hovold [Tue, 14 Jul 2015 13:43:24 +0000 (15:43 +0200)]
greybus: operation: clean up create-incoming error path
Clean up gb_operation_create_incoming error path by returning
immediately on allocation failures.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Tue, 14 Jul 2015 13:43:23 +0000 (15:43 +0200)]
greybus: operation: fix another cancellation use-after-free
An incoming operation could already be scheduled even if
gb_operation_result_set succeeds as its initial status is -EINPROGRESS.
Avoid potential use-after-free by never dropping the reference count for
incoming operations as part of cancellation.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Tue, 14 Jul 2015 01:10:18 +0000 (02:10 +0100)]
greybus: uart: fix typo in defintion
Fixing needless redefinition of operation types in gbsim reveals this typo
GB_UART_TYPE_SET_BREAK -> GB_UART_TYPE_SEND_BREAK. This patch should be
applied in lock-step to the patch to gbsim 'gbsim/uart: remove unnecessary
redefinition of operation types' since gbsim does not contain the typo.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 23:53:13 +0000 (00:53 +0100)]
greybus: loopback: fix 64bit printf format error
Last patchset missed compilation on 64 bit contained warning.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 23:53:12 +0000 (00:53 +0100)]
greybus: loopback: fix broken tabs in greybus_protocols.h
Copy/paste of code from one file to another missed inappropriate use of tab
after define.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 19:20:51 +0000 (20:20 +0100)]
greybus: loopback: update throughput metrics to improve granularity
Throughput capture should account for the entire size of the data going out
on the wire. In addition throughput should be captured for each supported
loopback operation.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 19:20:50 +0000 (20:20 +0100)]
greybus: loopback: truncate maximum loop data to link size
Get maximum payload by way of gb_operation_get_payload_size_max() and
truncate any requested loopback size greater than this value. RX of data
from firmware over the specified size will not be accepted.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 19:20:49 +0000 (20:20 +0100)]
greybus: loopback: add sink to loopback protocol
Loopback sink command will operate as an amalgam of the ping and tranfer
operations. Sink will send an ACK'd variable size operation over greybus.
Unlike the transfer type which transmits the received data back, the sink
type will simply ACK without sending the received data back.
This patch adds the kernel side of the sink command.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 19:20:48 +0000 (20:20 +0100)]
greybus: loopback: make loopback type input equivalent to protocol type
Sepcifying loopback operation type with a type value that is internal to
the loopback driver is non-intunitive and requires reading code to
understand. Remove confusing duplicate definitions and update code to
accept the greybus-specification function identity defintiions as the
appropriate type values for initiating loopback operations.
See greybus-spec section 10.16.1 'Greybus Loopback Message Types' for a
full list of valid messages to set this type field to.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 19:20:47 +0000 (20:20 +0100)]
greybus: loopback: remove spurious pr_err in sysfs store
Dangling debug code removed.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 19:20:46 +0000 (20:20 +0100)]
greybus: loopback: remove magic number in state-machine
Magic number 2 used instead of define GB_LOOPBACK_TYPE_PING, remove and and
use the define instead.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 13 Jul 2015 19:20:45 +0000 (20:20 +0100)]
greybus: loopback: Move loopback operation definitions
In order to have one point of type definition for gbsim move the loopback
operation definitions to greybus_protocols.h.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Thu, 9 Jul 2015 05:26:30 +0000 (10:56 +0530)]
greybus: Cleanup connection leftovers
This wouldn't happen normally, but in a buggy corner case it is possible
that all the connections aren't removed properly and they are still
present after the interfaces and endo are removed.
Warn in such a case and cleanup connections, so that /sys/bus/greybus/
can be removed while removing greybus modules.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Thu, 9 Jul 2015 13:18:01 +0000 (15:18 +0200)]
greybus: operation: fix incoming-response corruption
Make sure not to update the response message buffer for an operation
that is already scheduled for completion.
Currently if we get two incoming responses with the same id, the second
one would overwrite the response message buffer.
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>
Johan Hovold [Thu, 9 Jul 2015 13:18:00 +0000 (15:18 +0200)]
greybus: operation: fix outgoing-response corruption
Fix potential corruption of outgoing responses by verifying that the
operations is indeed outgoing when receiving a response.
Failure to do so could lead to an incoming response corrupting an
outgoing response that uses the same operation id.
Reported-by: Viresh Kumar <viresh.kumar@linaro.org>
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>
Johan Hovold [Thu, 9 Jul 2015 13:17:59 +0000 (15:17 +0200)]
greybus: operation: fix use-after-free in response receive path
Fix potential use-after-free in response receive path, due to lack of
reference counting when looking up operations on a connection.
Make sure to acquire a reference to the operation while holding the
connection-list lock.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Thu, 9 Jul 2015 13:17:58 +0000 (15:17 +0200)]
greybus: operation: fix operation-destroy race
Make sure to acquire the connection-list lock atomically when releasing
the final reference.
This allows the list to be traversed and references to be acquired
(while holding the lock) without racing with the destructor.
Suggested-by: Greg Kroah-Hartman <gregkh@google.com>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Greg Kroah-Hartman [Wed, 8 Jul 2015 17:44:09 +0000 (10:44 -0700)]
greybus: properly cleanup ida and idr structures when shutting down
idr and ida structures have internal memory allocated that needs to be
freed when modules are removed. So call the proper idr_destroy() or
ida_destroy() functions on the module exit path to free the memory.
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Viresh Kumar [Fri, 3 Jul 2015 11:30:30 +0000 (17:00 +0530)]
greybus: svc: save pointer to struct gb_svc in struct gb_interface
Its another special protocol (just like control protocol) and is
required to be accessed from other files, lets save a pointer to it in
interface structure.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 3 Jul 2015 11:30:29 +0000 (17:00 +0530)]
greybus: svc: SVC is part of greybus core
Its an essential part of greybus core and shouldn't be present as a
separate module. Make it part of greybus.ko module.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 3 Jul 2015 11:30:27 +0000 (17:00 +0530)]
greybus: connection: Use connection->dev for printing messages
We failed to bind a protocol for the connection, not for bundle. And so
connection's 'dev' must be used for printing message.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 3 Jul 2015 11:30:26 +0000 (17:00 +0530)]
greybus: interface: Fix comment mistake (s/add/init)
Function's name is gb_interface_init(), not gb_interface_add().
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 3 Jul 2015 11:30:25 +0000 (17:00 +0530)]
greybus: connection: Exit connection before destroying it
gb_connection_create() can initialize a connection if bundle->device id
is valid. And so the connection must be destroyed by calling
gb_connection_exit() before gb_connection_destroy(). This wasn't done in
the code that is parsing the manifest.
Fix it.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:11:37 +0000 (19:11 +0100)]
greybus: sdio: fix transfer buffer handling and blocks counting
Fix copy to/from scatterlist destination buffer offset, fix
calculation of blocks to be transfer and make a more verbose out of
error when the blocks receive/send do not match.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:11:36 +0000 (19:11 +0100)]
greybus: sdio: add need poll to host caps
As we do not have, yet, a event callback to notify core about changes
we add the MMC_CAP_NEEDS_POLL capability to the rest of the caps
received from the module.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:11:35 +0000 (19:11 +0100)]
greybus: sdio: check number of blocks in transfer
Before initiating a transfers, check if the command (for single block)
match the number of blocks in the request.
While at it, fix also a missing break.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:11:34 +0000 (19:11 +0100)]
greybus: sdio: pass only data pointer to tranfer funtion
No need to pass the all request to the transfer related funtctions.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:11:33 +0000 (19:11 +0100)]
greybus: sdio: fix call to stop command if no data exist
If data is not available the stop command could dereference NULL.
Fetch the stop command directly from the request instead.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:11:32 +0000 (19:11 +0100)]
greybus: sdio: fix return of get_cd and get_ro
Functions were returning the wrong flag for the expected value. Swap
them.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:11:31 +0000 (19:11 +0100)]
greybus: sdio: rework of event handler
Between the time connection with module is up and the host is added,
we can receive events (card inserted/removed, write protection
switch), so until the setup is complete we queue the events received
and handle them after.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:11:30 +0000 (19:11 +0100)]
greybus: sdio: split cmd_flags to there meaning
Instead of using values in the command cmd_flags field use the real
flags in a bit mask.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Greg Kroah-Hartman [Mon, 6 Jul 2015 01:11:21 +0000 (18:11 -0700)]
greybus: Revert "examples: add manifest file for sdio"
This reverts commit
22690d72ae145cf12ae3df033670ed8ad7ecdde7.
It was meant for the gbsim repo, not this one :(
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 2 Jul 2015 18:32:05 +0000 (19:32 +0100)]
greybus: examples: add manifest file for sdio
Add example manifest file for sdio.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Perry Hung [Fri, 3 Jul 2015 04:27:12 +0000 (00:27 -0400)]
greybus: makefile: fix unused cflags
The ccflags variable was spelled wrong, so no extra compilation flags
could be specified.
The proper flag is 'ccflags-y.'
Signed-off-by: Perry Hung <perry@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:31 +0000 (12:37 +0200)]
greybus: operation: fix cancellation of responses
An operation with a response in-flight will already have set the
operation result and would therefore never be cancelled by the current
implementation.
Note that the reference taken when sending the result will be dropped
in the message completion callback.
Also note that an incoming, non-unidirectional messages will always have
an allocated response if its result has been set.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:30 +0000 (12:37 +0200)]
greybus: operation: allocate response before setting result
Make sure to allocate a response message before setting the operation
result.
This is needed to handle cancellation of incoming operations.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:29 +0000 (12:37 +0200)]
greybus: operation: drop redundant oom message
Drop redundant OOM message, which would already have been logged by the
memory subsystem.
Also remove a FIXME about possibly sending a pre-allocated response,
which is neither possible or desirable. If we ever run out of memory we
have bigger problems then getting a response back to firmware.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:28 +0000 (12:37 +0200)]
greybus: operation: remove obsolete operation-field comments
Remove obsolete operation-field comments.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:27 +0000 (12:37 +0200)]
greybus: operation: add unidirectional-operation flag
Add flag to identify unidirectional operations.
Use convenience helper rather than open coding the identification when
suppressing response messages.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:26 +0000 (12:37 +0200)]
greybus: operation: add incoming-operation flag
Add flag field to struct gb_operation, and a first flag
GB_OPERATION_FLAG_INCOMING to identify incoming operations.
Pass an initial set of flags when allocating new operations, and use
these to identify incoming operations rather than overloading the
meaning of GB_OPERATION_TYPE_INVALID. This also allows us to set the
type for all operations during allocation.
Also add convenience helper to identify incoming operations.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:25 +0000 (12:37 +0200)]
greybus: operation: fix cancellation use-after-free
The final reference of an operation will be put after its completion
handler has run, so we must not drop the reference if it has already
been scheduled to avoid use-after-free.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:24 +0000 (12:37 +0200)]
greybus: operation: make response helper static
Since commit
46ce118a2678 ("operation: refactor response handling")
sending operation responses is handled by greybus core so there is
currently no need to export the response helper.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:23 +0000 (12:37 +0200)]
greybus: operation: allow atomic request submissions
Add gfp mask argument to gb_operation_request_send in order to allow
submissions from atomic context.
Note that responses are currently always sent from non-atomic context as
incoming requests are processed in a work queue.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:22 +0000 (12:37 +0200)]
greybus: operation: allow atomic operation allocations
Add gfp mask argument to gb_operation_create to allow operations to be
allocated in atomic context.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 1 Jul 2015 10:37:21 +0000 (12:37 +0200)]
greybus: operation/esx: fix message-cancellation lifetime bugs
The current host-controller message-cancellation implementation suffer
from a lifetime bug as dynamically allocated URBs would complete and be
deallocated while being unlinked as part of cancellation.
The current locking is also insufficient to prevent the related race
where the URB is deallocated before being unlinked.
Fix this by pushing the cancellation implementation from greybus core
down to the host-controller drivers, and replace the "cookie" pointer
with a hcpriv field that those drivers can use to maintain their state
with the required locking and reference counting in place.
Specifically the drivers need to acquire a reference to the URB under a
lock before calling usb_kill_urb as part of cancellation.
Note that this also removes the insufficient gb_message_mutex, which
also effectively prevented us from implementing support for submissions
from atomic context.
Instead the host-controller drivers must now explicitly make sure that
the pre-allocated URBs are not reused while cancellation is in progress.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 1 Jul 2015 06:43:59 +0000 (12:13 +0530)]
greybus: bundles: remove gb_bundle(s)_init()
They aren't used anymore, remove them. This also gets rid of
gb_bundle_connections_init().
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 1 Jul 2015 06:43:58 +0000 (12:13 +0530)]
greybus: interface: device_id belongs to the interface
While introducing bundles, the device_id also got moved to the bundle,
whereas it identifies an interface block to the AP.
Move it back to interface instead of bundle.
Calls to gb_bundle(s)_init() are dropped as connections will be
initialized while they are created now, as device_id will be valid.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>