24 Aug, 2018

1 commit


30 May, 2018

1 commit

  • [ Upstream commit c77f5fbbefc04612755117775e8555c2a7006cac ]

    Added MODULE_ALIAS("rpmsg:IPCRTR") to ensure qrtr-smd and qrtr will load
    when IPCRTR channel is detected.

    Signed-off-by: Ramon Fried
    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ramon Fried
     

08 Nov, 2017

1 commit

  • Registering qrtr with module_init makes the ability of typical platform
    code to create AF_QIPCRTR socket during probe a matter of link order
    luck. Moving qrtr to postcore_initcall() avoids this.

    Signed-off-by: Bjorn Andersson
    Signed-off-by: David S. Miller

    Bjorn Andersson
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

10 Aug, 2017

1 commit

  • This change allows us to later indicate to rtnetlink core that certain
    doit functions should be called without acquiring rtnl_mutex.

    This change should have no effect, we simply replace the last (now
    unused) calcit argument with the new flag.

    Signed-off-by: Florian Westphal
    Reviewed-by: Hannes Frederic Sowa
    Signed-off-by: David S. Miller

    Florian Westphal
     

16 Jun, 2017

3 commits

  • It seems like a historic accident that these return unsigned char *,
    and in many places that means casts are required, more often than not.

    Make these functions (skb_put, __skb_put and pskb_put) return void *
    and remove all the casts across the tree, adding a (u8 *) cast only
    where the unsigned char pointer was used directly, all done with the
    following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = { skb_put, __skb_put };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = { skb_put, __skb_put };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)

    which actually doesn't cover pskb_put since there are only three
    users overall.

    A handful of stragglers were converted manually, notably a macro in
    drivers/isdn/i4l/isdn_bsdcomp.c and, oddly enough, one of the many
    instances in net/bluetooth/hci_sock.c. In the former file, I also
    had to fix one whitespace problem spatch introduced.

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     
  • A common pattern with skb_put() is to just want to memcpy()
    some data into the new space, introduce skb_put_data() for
    this.

    An spatch similar to the one for skb_put_zero() converts many
    of the places using it:

    @@
    identifier p, p2;
    expression len, skb, data;
    type t, t2;
    @@
    (
    -p = skb_put(skb, len);
    +p = skb_put_data(skb, data, len);
    |
    -p = (t)skb_put(skb, len);
    +p = skb_put_data(skb, data, len);
    )
    (
    p2 = (t2)p;
    -memcpy(p2, data, len);
    |
    -memcpy(p, data, len);
    )

    @@
    type t, t2;
    identifier p, p2;
    expression skb, data;
    @@
    t *p;
    ...
    (
    -p = skb_put(skb, sizeof(t));
    +p = skb_put_data(skb, data, sizeof(t));
    |
    -p = (t *)skb_put(skb, sizeof(t));
    +p = skb_put_data(skb, data, sizeof(t));
    )
    (
    p2 = (t2)p;
    -memcpy(p2, data, sizeof(*p));
    |
    -memcpy(p, data, sizeof(*p));
    )

    @@
    expression skb, len, data;
    @@
    -memcpy(skb_put(skb, len), data, len);
    +skb_put_data(skb, data, len);

    (again, manually post-processed to retain some comments)

    Reviewed-by: Stephen Hemminger
    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     
  • There were many places that my previous spatch didn't find,
    as pointed out by yuan linyu in various patches.

    The following spatch found many more and also removes the
    now unnecessary casts:

    @@
    identifier p, p2;
    expression len;
    expression skb;
    type t, t2;
    @@
    (
    -p = skb_put(skb, len);
    +p = skb_put_zero(skb, len);
    |
    -p = (t)skb_put(skb, len);
    +p = skb_put_zero(skb, len);
    )
    ... when != p
    (
    p2 = (t2)p;
    -memset(p2, 0, len);
    |
    -memset(p, 0, len);
    )

    @@
    type t, t2;
    identifier p, p2;
    expression skb;
    @@
    t *p;
    ...
    (
    -p = skb_put(skb, sizeof(t));
    +p = skb_put_zero(skb, sizeof(t));
    |
    -p = (t *)skb_put(skb, sizeof(t));
    +p = skb_put_zero(skb, sizeof(t));
    )
    ... when != p
    (
    p2 = (t2)p;
    -memset(p2, 0, sizeof(*p));
    |
    -memset(p, 0, sizeof(*p));
    )

    @@
    expression skb, len;
    @@
    -memset(skb_put(skb, len), 0, len);
    +skb_put_zero(skb, len);

    Apply it to the tree (with one manual fixup to keep the
    comment in vxlan.c, which spatch removed.)

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     

08 Jun, 2017

4 commits

  • As the higher level communication only deals with "services" the
    a service directory is required to keep track of local and remote
    services. In order for qrtr clients to be informed about when the
    service directory implementation is available some event needs to be
    passed to them.

    Rather than introducing support for broadcasting such a message in-band
    to all open local sockets we flag each socket with ENETRESET, as there
    are no other expected operations that would benefit from having support
    from locally broadcasting messages.

    Cc: Courtney Cavin
    Signed-off-by: Bjorn Andersson
    Signed-off-by: David S. Miller

    Bjorn Andersson
     
  • Per the QMUXv2 protocol specificiation a DEL_CLIENT message should be
    broadcasted when an endpoint is disconnected.

    The protocol specification does suggest that the router can keep track
    of which nodes the endpoint has been communicating with to not wake up
    sleeping remotes unecessarily, but implementation of this suggestion is
    left for the future.

    Cc: Courtney Cavin
    Signed-off-by: Bjorn Andersson
    Signed-off-by: David S. Miller

    Bjorn Andersson
     
  • Per the QMUX protocol specification a terminating node can send a BYE
    control message to signal that the link is going down, upon receiving
    this all information about remote services should be discarded and local
    clients should be notified.

    In the event that the link was brought down abruptly the router is
    supposed to act like a BYE message has arrived. As there is no harm in
    receiving an extra BYE from the remote this patch implements the latter
    by injecting a BYE when the link to the remote is unregistered.

    The name service will receive the BYE and can implement the notification
    to the local clients.

    Cc: Courtney Cavin
    Signed-off-by: Bjorn Andersson
    Signed-off-by: David S. Miller

    Bjorn Andersson
     
  • Extract the allocation and filling in the control message header fields
    to a separate function in order to reuse this in subsequent patches.

    Cc: Courtney Cavin
    Signed-off-by: Bjorn Andersson
    Signed-off-by: David S. Miller

    Bjorn Andersson
     

22 Apr, 2017

2 commits


18 Apr, 2017

1 commit

  • Add netlink_ext_ack arg to rtnl_doit_func. Pass extack arg to nlmsg_parse
    for doit functions that call it directly.

    This is the first step to using extended error reporting in rtnetlink.
    >From here individual subsystems can be updated to set netlink_ext_ack as
    needed.

    Signed-off-by: David Ahern
    Signed-off-by: David S. Miller

    David Ahern
     

14 Apr, 2017

1 commit


29 Mar, 2017

1 commit

  • By moving these client drivers to use RPMSG instead of the direct SMD
    API we can reuse them ontop of the newly added GLINK wire-protocol
    support found in the 820 and 835 Qualcomm platforms.

    As the new (RPMSG-based) and old SMD implementations are mutually
    exclusive we have to change all client drivers in one commit, to make
    sure we have a working system before and after this transition.

    Acked-by: Andy Gross
    Acked-by: Kalle Valo
    Acked-by: Marcel Holtmann
    Signed-off-by: Bjorn Andersson
    Signed-off-by: David S. Miller

    Bjorn Andersson
     

11 Jan, 2017

1 commit

  • Failure to mark this pointer as __le32 causes checkers like
    sparse to complain:

    net/qrtr/qrtr.c:274:16: warning: incorrect type in assignment (different base types)
    net/qrtr/qrtr.c:274:16: expected unsigned int [unsigned] [usertype]
    net/qrtr/qrtr.c:274:16: got restricted __le32 [usertype]
    net/qrtr/qrtr.c:275:16: warning: incorrect type in assignment (different base types)
    net/qrtr/qrtr.c:275:16: expected unsigned int [unsigned] [usertype]
    net/qrtr/qrtr.c:275:16: got restricted __le32 [usertype]
    net/qrtr/qrtr.c:276:16: warning: incorrect type in assignment (different base types)
    net/qrtr/qrtr.c:276:16: expected unsigned int [unsigned] [usertype]
    net/qrtr/qrtr.c:276:16: got restricted __le32 [usertype]

    Silence it.

    Cc: Bjorn Andersson
    Signed-off-by: Stephen Boyd
    Acked-by: Bjorn Andersson
    Signed-off-by: David S. Miller

    Stephen Boyd
     

18 May, 2016

1 commit


17 May, 2016

1 commit

  • Having multiple loadable modules with the same name cannot work
    with modprobe, and having both net/qrtr/smd.ko and drivers/soc/qcom/smd.ko
    results in a (somewhat cryptic) build error:

    ERROR: "qcom_smd_driver_unregister" [net/qrtr/smd.ko] undefined!
    ERROR: "qcom_smd_driver_register" [net/qrtr/smd.ko] undefined!
    ERROR: "qcom_smd_set_drvdata" [net/qrtr/smd.ko] undefined!
    ERROR: "qcom_smd_send" [net/qrtr/smd.ko] undefined!
    ERROR: "qcom_smd_get_drvdata" [net/qrtr/smd.ko] undefined!
    ERROR: "qcom_smd_driver_unregister" [drivers/soc/qcom/wcnss_ctrl.ko] undefined!
    ERROR: "qcom_smd_driver_register" [drivers/soc/qcom/wcnss_ctrl.ko] undefined!
    ERROR: "qcom_smd_set_drvdata" [drivers/soc/qcom/wcnss_ctrl.ko] undefined!
    ERROR: "qcom_smd_send" [drivers/soc/qcom/wcnss_ctrl.ko] undefined!
    ERROR: "qcom_smd_get_drvdata" [drivers/soc/qcom/wcnss_ctrl.ko] undefined!

    Also, the qrtr driver uses the SMD interface and has a Kconfig dependency,
    but also allows for compile-testing when SMD is disabled. However, if
    with QCOM_SMD=m and COMPILE_TEST=y we can end up with QRTR_SMD=y and
    that fails with a related link error.

    The changes the dependency so we can still compile-test the driver but
    not have it built-in if SMD is a module, to avoid running in the broken
    configuration, and changes the Makefile to provide the driver under
    a different module name.

    Signed-off-by: Arnd Bergmann
    Fixes: bdabad3e363d ("net: Add Qualcomm IPC router")
    Signed-off-by: David S. Miller

    Arnd Bergmann
     

14 May, 2016

1 commit


09 May, 2016

1 commit

  • Add an implementation of Qualcomm's IPC router protocol, used to
    communicate with service providing remote processors.

    Signed-off-by: Courtney Cavin
    Signed-off-by: Bjorn Andersson
    [bjorn: Cope with 0 being a valid node id and implement RTM_NEWADDR]
    Signed-off-by: Bjorn Andersson
    Signed-off-by: David S. Miller

    Courtney Cavin