21 Feb, 2019

2 commits


04 Oct, 2018

1 commit


28 Sep, 2018

1 commit

  • Currently a failed allocation of channel->name leads to an
    immediate return without freeing channel. Fix this by setting
    ret to -ENOMEM and jumping to an exit path that kfree's channel.

    Detected by CoverityScan, CID#1473692 ("Resource Leak")

    Fixes: 53e2822e56c7 ("rpmsg: Introduce Qualcomm SMD backend")
    Cc: stable@vger.kernel.org
    Signed-off-by: Colin Ian King
    Signed-off-by: Bjorn Andersson

    Colin Ian King
     

02 Sep, 2018

1 commit

  • It is possible for the chunk sizes coming from the non RPM remote procs
    to not be word aligned. Remove the alignment warning and continue to
    read from the FIFO so execution is not stalled.

    Signed-off-by: Chris Lew
    Signed-off-by: Arun Kumar Neelakantam
    Signed-off-by: Bjorn Andersson

    Chris Lew
     

28 Aug, 2018

2 commits


31 Jul, 2018

6 commits

  • Add compat ioctl callback to support 32bit user space applications.

    Signed-off-by: Arun Kumar Neelakantam
    Signed-off-by: Bjorn Andersson

    Arun Kumar Neelakantam
     
  • Channels may need to identify the edge their channel was probed for.
    Store the edge name by reading the label property from device tree or
    default to the node name.

    Signed-off-by: Chris Lew
    Signed-off-by: Arun Kumar Neelakantam
    Signed-off-by: Bjorn Andersson

    Chris Lew
     
  • Some of the rpmsg devices need to switch on power domains to communicate
    with remote processor. For example on Qualcomm DB820c platform LPASS
    power domain needs to switched on for any kind of audio services.
    This patch adds the missing power domain support in rpmsg core.

    Without this patch attempting to play audio via QDSP on DB820c would
    reboot the system.

    Signed-off-by: Srinivas Kandagatla
    Signed-off-by: Bjorn Andersson

    Srinivas Kandagatla
     
  • This patch fixes below kerneldoc warnings

    qcom_smd.c:141: warning: Function parameter or member 'dev' not described in 'qcom_smd_edge'
    qcom_smd.c:141: warning: Function parameter or member 'name' not described in 'qcom_smd_edge'
    qcom_smd.c:141: warning: Function parameter or member 'new_channel_event' not described in 'qcom_smd_edge'
    qcom_smd.c:222: warning: Function parameter or member 'qsept' not described in 'qcom_smd_channel'
    qcom_smd.c:222: warning: Function parameter or member 'registered' not described in 'qcom_smd_channel'
    qcom_smd.c:222: warning: Function parameter or member 'state_change_event' not described in 'qcom_smd_channel'
    qcom_smd.c:222: warning: Function parameter or member 'drvdata' not described in 'qcom_smd_channel'
    qcom_smd.c:737: warning: Function parameter or member 'wait' not described in '__qcom_smd_send'

    Signed-off-by: Srinivas Kandagatla
    Signed-off-by: Bjorn Andersson

    Srinivas Kandagatla
     
  • Fix below kerneldoc warnings while building with W=1
    qcom_glink_native.c:53: warning: Function parameter or member 'data' not described in 'glink_defer_cmd'
    qcom_glink_native.c:75: warning: Function parameter or member 'data' not described in 'glink_core_rx_intent'
    qcom_glink_native.c:75: warning: Function parameter or member 'id' not described in 'glink_core_rx_intent'
    qcom_glink_native.c:75: warning: Function parameter or member 'size' not described in 'glink_core_rx_intent'
    qcom_glink_native.c:75: warning: Function parameter or member 'reuse' not described in 'glink_core_rx_intent'
    qcom_glink_native.c:75: warning: Function parameter or member 'in_use' not described in 'glink_core_rx_intent'
    qcom_glink_native.c:75: warning: Function parameter or member 'offset' not described in 'glink_core_rx_intent'
    qcom_glink_native.c:75: warning: Function parameter or member 'node' not described in 'glink_core_rx_intent'
    qcom_glink_native.c:116: warning: Function parameter or member 'features' not described in 'qcom_glink'
    qcom_glink_native.c:116: warning: Function parameter or member 'intentless' not described in 'qcom_glink'
    qcom_glink_native.c:524: warning: Function parameter or member 'version' not described in 'qcom_glink_receive_version'
    qcom_glink_native.c:524: warning: Function parameter or member 'features' not described in 'qcom_glink_receive_version'
    qcom_glink_native.c:524: warning: Excess function parameter 'r_version' description in 'qcom_glink_receive_version'
    qcom_glink_native.c:524: warning: Excess function parameter 'r_features' description in 'qcom_glink_receive_version'
    qcom_glink_native.c:551: warning: Function parameter or member 'version' not described in 'qcom_glink_receive_version_ack'
    qcom_glink_native.c:551: warning: Function parameter or member 'features' not described in 'qcom_glink_receive_version_ack'
    qcom_glink_native.c:551: warning: Excess function parameter 'r_version' description in 'qcom_glink_receive_version_ack'
    qcom_glink_native.c:551: warning: Excess function parameter 'r_features' description in 'qcom_glink_receive_version_ack'
    qcom_glink_native.c:570: warning: bad line: wire format and transmit
    qcom_glink_native.c:604: warning: Function parameter or member 'intent' not described in 'qcom_glink_advertise_intent'
    qcom_glink_native.c:604: warning: Excess function parameter 'size' description in 'qcom_glink_advertise_intent'
    qcom_glink_native.c:710: warning: Function parameter or member 'glink' not described in 'qcom_glink_handle_intent_req'
    qcom_glink_native.c:710: warning: Function parameter or member 'cid' not described in 'qcom_glink_handle_intent_req'
    qcom_glink_native.c:710: warning: Function parameter or member 'size' not described in 'qcom_glink_handle_intent_req'

    Signed-off-by: Srinivas Kandagatla
    Signed-off-by: Bjorn Andersson

    Srinivas Kandagatla
     
  • As intent structure members are not correctly annotated, leading to below warnings

    qcom_glink_native.c:614:16: warning: incorrect type in assignment (different base types)
    qcom_glink_native.c:614:16: expected unsigned short [unsigned] [usertype] id
    qcom_glink_native.c:614:16: got restricted __le16 [usertype]
    qcom_glink_native.c:615:18: warning: incorrect type in assignment (different base types)
    qcom_glink_native.c:615:18: expected unsigned short [unsigned] [usertype] lcid
    qcom_glink_native.c:615:18: got restricted __le16 [usertype]
    qcom_glink_native.c:616:19: warning: incorrect type in assignment (different base types)
    qcom_glink_native.c:616:19: expected unsigned int [unsigned] [usertype] count
    qcom_glink_native.c:616:19: got restricted __le32 [usertype]
    qcom_glink_native.c:617:18: warning: incorrect type in assignment (different base types)
    qcom_glink_native.c:617:18: expected unsigned int [unsigned] [usertype] size
    qcom_glink_native.c:617:18: got restricted __le32 [usertype]
    qcom_glink_native.c:618:18: warning: incorrect type in assignment (different base types)
    qcom_glink_native.c:618:18: expected unsigned int [unsigned] [usertype] liid
    qcom_glink_native.c:618:18: got restricted __le32 [usertype]

    Fix this by correctly annotating them.

    Signed-off-by: Srinivas Kandagatla
    Signed-off-by: Bjorn Andersson

    Srinivas Kandagatla
     

02 Jul, 2018

1 commit

  • Add missing include of sizes.h.

    drivers/rpmsg/qcom_smd.c: In function ‘qcom_smd_channel_open’:
    drivers/rpmsg/qcom_smd.c:809:36: error: ‘SZ_4K’ undeclared (first use in this function)
    bb_size = min(channel->fifo_size, SZ_4K);
    ^~~~~

    Signed-off-by: Niklas Cassel
    Signed-off-by: Bjorn Andersson

    Niklas Cassel
     

05 Jun, 2018

1 commit

  • All the managed resources would be freed by the time release function
    is invoked. Handling such memory in qcom_smd_edge_release() would do
    bad things.

    Found this issue while testing Audio usecase where the dsp is started up
    and shutdown in a loop.

    This patch fixes this issue by using simple kzalloc for allocating
    channel->name and channel which is then freed in qcom_smd_edge_release().

    Without this patch restarting a remoteproc would crash the system.
    Fixes: 53e2822e56c7 ("rpmsg: Introduce Qualcomm SMD backend")
    Cc:
    Signed-off-by: Srinivas Kandagatla
    Signed-off-by: Bjorn Andersson

    Srinivas Kandagatla
     

04 Jun, 2018

5 commits


10 May, 2018

1 commit


26 Apr, 2018

3 commits


28 Mar, 2018

4 commits

  • It is possible that incoming data arrives before the client driver has
    reached a point in the probe method where adequate context for handling
    the incoming message has been established.

    In the event that the client's callback function returns an error the
    message will be left on the FIFO and by invoking the receive handler
    after the device has been probed the message will be picked off the FIFO
    and the callback invoked again.

    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     
  • For special rpmsg devices without a primary endpoint there is nothing to
    announce so don't call the backend announce create function if we didn't
    create an endpoint.

    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     
  • The container_of macros should not use the same name for the parameter
    as the member to use for lookup, as this will result in a compilation
    error unless the passed parameter has the same name as the member.

    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     
  • In an effort to pick up channels that are in a funky state we
    optimistically tried to open all channels that we found, with the
    addition that we failed if the other side did not handshake the opening.

    But as we're starting the modem a second time all channels are found -
    in a "funky" state - and we try to open them. But the modem firmware
    requires the IPCRTR to be up in order to initialize. So any channels we
    try to open before that will fail and will not be opened again.

    This takes care of the regression, at the cost of reintroducing the
    previous behavior of handling of channels with "funky" states.

    Reverts commit c12fc4519f60 ("rpmsg: smd: Create device for all channels")

    Reported-by: Srinivas Kandagatla
    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     

20 Mar, 2018

2 commits

  • Switch the tx_lock to a spinlock we allow clients to use rpmsg_trysend()
    from atomic context.

    In order to allow clients to sleep while waiting for space in the FIFO
    we release the lock temporarily around the delay; which should be
    replaced by sending a READ_NOTIF and waiting for the remote to signal
    us that space has been made available.

    Tested-by: Srinivas Kandagatla
    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     
  • By switching the tx_lock to a spinlock we allow clients to use
    rpmsg_trysend() from atomic context.

    The mutex was interruptable as it was previously held for the duration
    of some client waiting for available space in the FIFO, but this was
    recently changed to only be held temporarily - allowing us to replace it
    with a spinlock.

    Tested-by: Srinivas Kandagatla
    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     

18 Mar, 2018

2 commits


12 Feb, 2018

1 commit

  • This is the mindless scripted replacement of kernel use of POLL*
    variables as described by Al, done by this script:

    for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
    L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
    for f in $L; do sed -i "-es/^\([^\"]*\)\(\\)/\\1E\\2/" $f; done
    done

    with de-mangling cleanups yet to come.

    NOTE! On almost all architectures, the EPOLL* constants have the same
    values as the POLL* constants do. But they keyword here is "almost".
    For various bad reasons they aren't the same, and epoll() doesn't
    actually work quite correctly in some cases due to this on Sparc et al.

    The next patch from Al will sort out the final differences, and we
    should be all done.

    Scripted-by: Al Viro
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

06 Feb, 2018

1 commit

  • Pull rpmsg updates from Bjorn Andersson:
    "This fixes a few issues found in the SMD and GLINK drivers and
    corrects the handling of SMD channels that are found in an
    (previously) unexpected state"

    * tag 'rpmsg-v4.16' of git://github.com/andersson/remoteproc:
    rpmsg: smd: Fix double unlock in __qcom_smd_send()
    rpmsg: glink: Fix missing mutex_init() in qcom_glink_alloc_channel()
    rpmsg: smd: Don't hold the tx lock during wait
    rpmsg: smd: Fail send on a closed channel
    rpmsg: smd: Wake up all waiters
    rpmsg: smd: Create device for all channels
    rpmsg: smd: Perform handshake during open
    rpmsg: glink: smem: Ensure ordering during tx
    drivers: rpmsg: remove duplicate includes
    remoteproc: qcom: Use PTR_ERR_OR_ZERO() in glink prob

    Linus Torvalds
     

19 Jan, 2018

1 commit


03 Jan, 2018

1 commit


19 Dec, 2017

4 commits

  • Holding the tx lock while waiting for tx-drain events from the remote
    side blocks try_send requests from failing quickly, so temporarily drop
    the tx lock while waiting.

    While this allows try_send to fail quickly it also could allow a
    subsequent send to succeed putting a smaller packet in the FIFO while
    we're waiting for room for our large packet. But as this lock is per
    channel we expect that clients with ordering concerns implements their
    own ordering mechanism.

    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     
  • Move the check for a closed channel out from the tx-full loop to fail
    any send request on a non-open channel.

    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     
  • It's possible to have multiple contexts waiting for new channel events
    and with an upcoming change it's possible to have multiple contexts
    waiting for a full FIFO. As such we need to wake them all up.

    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     
  • Rather than selectively creating devices only for the channels that the
    remote have moved to "opening" state let's create devices for all
    channels found. The driver model will match drivers to the ones we care
    about and attempt to open these.

    The one case where this fails is if the user loads a firmware that lacks
    a particular channel of the previous firmware that was running, in which
    case we would find the old channel and attempt to probe it. The channel
    opening handshake will ensure this will result in a graceful failure.

    The result of this patch is that we will actively open the RPM channel
    even though it's left in a state other than "opening" after the boot
    loader's closing of the channel.

    Tested-by: Will Newton
    Reported-by: Jeremy McNicoll
    Reported-by: Will Newton
    Signed-off-by: Bjorn Andersson

    Bjorn Andersson