The current implementation of the control port bind releases and
reacquires the port lock between allocating the port idr and resetting
the existing sockets. This creates a race condition where sockets
can send to the control port during the control port bind. Hold the
lock for the duration of the control port bind to prevent this.
In order to prevent messages from stale sockets being sent, check if
ENETRESET has been set on the socket and drop the packet.
Change-Id: Ie9abc6c51139e82d3c9ebd4d546d1acd7269875e
Signed-off-by: Chris Lew <clew@codeaurora.org>
There is a race between releasing a socket and a sock structure. Skbs
still in flight may hold references to the sock structure, preventing
it from being freed when the socket is released. Detach the socket in
the release call to prevent references to that sockets resources.
Change-Id: I44ac553cf73b3a2148ce50d7552c39b08f5e0f91
Signed-off-by: Chris Lew <clew@codeaurora.org>
Because of removing endpoint delay when the stop channel failed case
observing some junk packets received on a pipe. To avoid junk packets,
add change to avoid endpoint delay if stopping GSI channel fails.
Change-Id: I4d3d8d9a0de823229d780fe31c8d7f1162e20668
Signed-off-by: Ashok Vuyyuru <avuyyuru@codeaurora.org>
Enable QSEE IPC IRQ driver for Lahaina. This can now be
compiled as a module.
Change-Id: I3c196a6f819c3422663379cb72b0a9355c7c0233
Signed-off-by: Jay Jayanna <jayanna@codeaurora.org>
This snapshot is taken as of msm-4.19 'commit <d2f41beab007i>
("Merge "msm: npu: Add bandwidth monitor support"")'.
Update made to the license.
This is a basic driver for cascading interrupts from QSEE. This
driver will perform the common interrupt handling code for interrupts
from QSEE incluiding clearing the interrupt through a register write.
Change-Id: I8336a60749d3d642c96d0d045f0874f56812d04e
Signed-off-by: Jay Jayanna <jayanna@codeaurora.org>
Add api to write to mpm wakeup registers to configure a gpio
as wakeup capable.
Change-Id: Ia11a22160394e76969200691cfaf8fb1505bf5c1
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
Access ipa3_ctx through ipa_utils.c instead of direct access
which is prohibited.
Change-Id: I8b76b536c4bebef3374dd0c93d4af58cae122f1d
Acked-by: Suhas Mallesh <smallesh@qti.qualcomm.com>
Signed-off-by: Michael Adisumarta <madisuma@codeaurora.org>
The IPA enable/disable clock logic will be stubbed out on virtual
or emulation mode. The change here is to set the IPA clock flag
to true always and assume we always have IPA clock on.
Change-Id: Ibece0630033a8cd129461e6831ecfc85f00e2121
Signed-off-by: Bojun Pan <bojunp@codeaurora.org>
GSI QoS register upgrade for GSI v2.9, introduce the
new field of db_in_bytes.
Change-Id: I1d0ff4381a6b6ac1f5119d0be2efea29a49a5dcc
Signed-off-by: Bojun Pan <bojunp@codeaurora.org>
There is a race for clients that open sockets before the control port
is bound. If a client gets an idr that was allocated before the control
port is bound, there is a chance the previous address owner sent lookup
packets to the control port. The new address owner will get residual
responses to this the lookup packets.
Change the idr_alloc to idr_alloc_cyclic so new idr's are allocated
instead of trying to reuse the freed idrs.
Change-Id: Ie1bda7a818309503f80542e739bac646327296f7
Signed-off-by: Chris Lew <clew@codeaurora.org>
There is a chance for a remote processor to become unresponsive while
QRTR is trying to broadcast a control message. This results in the node
lock being held for an extended period of time and prevents node lookup
which is needed to send messages.
Change the mutex to a rw_semaphore to allow concurrency during node
lookups and broadcasts.
Change-Id: I2e3fdde22edaac64f164cf08900e9d09b16c380d
Signed-off-by: Chris Lew <clew@codeaurora.org>
A remote endpoint should not need to know when a client socket is freed
if the socket never established commnication with the endpoint. Add a
mode to keep track of which endpoints a socket communicates with.
There are three modes a socket can be in:
INIT - Socket has not sent anything or only local messages,
only send client close to local services.
SINGLE - Socket has sent messages to a single ept, send event
to this single ept.
MULTI - Socket has sent messages to multiple epts, broadcast
release of this socket.
Server state changes should be broadcast throughout the system. Change
the ipc state of a port when it sends a NEW SERVER control packet. This
ensures the DEL CLIENT control packet is propagated correctly for
servers.
This change squashes the following commits from msm-4.14:
commit 3373eb77cd6d ("net: qrtr: Add socket mode optimization")
commit d984a2d6f150 ("net: qrtr: Make servers multi state ports")
In addition, fix minor format issues.
Change-Id: I416742cff598bf7aa9da2baa2e86a53b18367870
Signed-off-by: Chris Lew <clew@codeaurora.org>
There is a race where broadcast packets can be sent to a node that has
not sent the hello message to the remote processor. This breaks the
protocol expectation. Add a status variable to track when the hello
packet has been sent.
An alternative solution attempted was to remove the nodes from the
broadcast list until the hello packet is sent. This is not a valid
solution because hello messages are broadcasted if the ns is restarted
or started late. There needs to be a status variable separate from the
broadcast list.
This change squashes the following commits from msm-4.14:
commit abd3961d05be ("qrtr: Only broadcast to initialized nodes")
commit 90cb0e473226 ("net: qrtr: Do not send packets before Hello
negotiation")
commit 07abd1abe803 ("net: qrtr: Fix hello packet drop memory leak")
In addition, fix minor format issues.
Change-Id: I2a55e587f324e64e2bde4ea634de66008f190de1
Signed-off-by: Chris Lew <clew@codeaurora.org>
The for_each_[available]_child_of_node iterators implicitly
increment the reference count on the current OF node at the
start of the iteration, and decrements it at the end of the
iteration.
However, if the control flow is such that the loop
can be broken out of prior to finishing an iteration, then
the reference count must be decremented in the subsequent
code path.
Thus, fix the error path in the MSM ION code to decrement the
reference on the current OF node when prematurely exiting
an of_node loop.
Change-Id: I5c2ec02a57eff416c04b1fe63c80d6e573a692d4
Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
Island IO can be assigned to Apps TLMM dynamically
if that island is not using the pin for any connectivity.
Add support for enabling EGPIO feature if the pin can
support it. EGPIO_PRESENT bit shows if EGPIO feature
is present or not for particular pin. Once EGPIO_ENABLE
bit is set the pin is now controlled by Apps TLMM.
When pinctrl properties are getting initialized by device
driver framework, pin functions select would call to
msm_pinmux_set_mux function to select pin function and
enable EGPIO.
Change-Id: I64514904096286f2a5df351880cd56d753f0658f
Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
This function is used by the Lahaina VIDEO_CC clock driver, so export it
to allow that driver to be compiled as a module.
Change-Id: Id9f5a4d3b63d3a6b47227a13386aea28a7b21380
Signed-off-by: Mike Tipton <mdtipton@codeaurora.org>
Lahaina uses different pipe endpoint mappings and group resources.
This change captures these configurations.
Change-Id: Ib45848bb52d9a6680b38b4305cbab38c0b00e7d2
Acked-by: Priyadarshini Rajagopal <prajagop@qti.qualcomm.com>
Signed-off-by: Bojun Pan <bojunp@codeaurora.org>
Remote IPC Router drivers expect the received packet to be aligned.
This case is only exposed using the MHI transport because it does not
ensure the packet will be received as one chunk like RPMSG GLINK.
Change-Id: I0e5c27e3c5896e6721c8bbbfcda29551f0968626
Signed-off-by: Chris Lew <clew@codeaurora.org>
Rather than enqueuing messages and scheduling a worker to deliver them
to the individual sockets we can now, thanks to the previous work, move
this directly into the endpoint callback.
This saves us a context switch per incoming message and removes the
possibility of an opportunistic suspend to happen between the message is
coming from the endpoint until it ends up in the socket's receive
buffer.
Change-Id: I7177fa36f9d7cc7e5de5f24975f15284ef1fcc80
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Patch-mainline: linux-arm-kernel @ 07/05/19, 23:06
Signed-off-by: Chris Lew <clew@codeaurora.org>
sk_user_data can be protected with RCU instead of calling the callback
rwlock. RCU will ensure the pointer obtained in qmi_data_ready is
formed properly and cleanup can synchronize before continuing in handle
release.
Change-Id: I6a687bd7b311fe169a89cb959ae755730b81a9f1
Signed-off-by: Chris Lew <clew@codeaurora.org>
Enable the CONFIG_QGKI as this is a Non GKI build.
Change-Id: I6d564b163d8bea2cb71278f7d3b2552c37ecf16c
Signed-off-by: Prakruthi Deepak Heragu <pheragu@codeaurora.org>