mbox series

[net-next,v2,0/6] net: ipa: hardware pipeline cleanup fixes

Message ID 20210126185703.29087-1-elder@linaro.org
Headers show
Series net: ipa: hardware pipeline cleanup fixes | expand

Message

Alex Elder Jan. 26, 2021, 6:56 p.m. UTC
Version 2 of this series fixes a "restricted __le16 degrades to
integer" warning from sparse in the third patch.  The normal host
architecture is little-endian, so the problem did not produce
incorrect behavior, but the code was wrong not to perform the
endianness conversion.  The updated patch uses le16_get_bits() to
properly extract the value of the field we're interested in.

Everything else remains the same.  Below is the original description.

					-Alex

There is a procedure currently referred to as a "tag process" that
is performed to clear the IPA hardware pipeline--either at the time
of a modem crash, or when suspending modem GSI channels.

One thing done in this procedure is issuing a command that sends a
data packet originating from the AP->command TX endpoint, destined
for the AP<-LAN RX (default) endpoint.  And although we currently
wait for the send to complete, we do *not* wait for the packet to be
received.  But the pipeline can't be assumed clear until we have
actually received this packet.

This series addresses this by detecting when the pipeline-clearing
packet has been received, and using a completion to allow a waiter
to know when that has happened.  This uses the IPA status capability
(which sends an extra status buffer for certain packets).  It also
uses the ability to supply a "tag" with a packet, which will be
delivered with the packet's status buffer.  We tag the data packet
that's sent to clear the pipeline, and use the receipt of a status
buffer associated with a tagged packet to determine when that packet
has arrived.

"Tag status" just desribes one aspect of this procedure, so some
symbols are renamed to be more like "pipeline clear" so they better
describe the larger purpose.  Finally, two functions used in this
code don't use their arguments, so those arguments are removed.

					-Alex

Alex Elder (6):
  net: ipa: rename "tag status" symbols
  net: ipa: minor update to handling of packet with status
  net: ipa: drop packet if status has valid tag
  net: ipa: signal when tag transfer completes
  net: ipa: don't pass tag value to ipa_cmd_ip_tag_status_add()
  net: ipa: don't pass size to ipa_cmd_transfer_add()

 drivers/net/ipa/ipa.h          |  2 +
 drivers/net/ipa/ipa_cmd.c      | 45 +++++++++++++------
 drivers/net/ipa/ipa_cmd.h      | 24 ++++++-----
 drivers/net/ipa/ipa_endpoint.c | 79 ++++++++++++++++++++++++++--------
 drivers/net/ipa/ipa_main.c     |  1 +
 5 files changed, 109 insertions(+), 42 deletions(-)

-- 
2.20.1

Comments

Willem de Bruijn Jan. 27, 2021, 2:39 p.m. UTC | #1
On Wed, Jan 27, 2021 at 5:04 AM Alex Elder <elder@linaro.org> wrote:
>

> Version 2 of this series fixes a "restricted __le16 degrades to

> integer" warning from sparse in the third patch.  The normal host

> architecture is little-endian, so the problem did not produce

> incorrect behavior, but the code was wrong not to perform the

> endianness conversion.  The updated patch uses le16_get_bits() to

> properly extract the value of the field we're interested in.

>

> Everything else remains the same.  Below is the original description.

>

>                                         -Alex

>

> There is a procedure currently referred to as a "tag process" that

> is performed to clear the IPA hardware pipeline--either at the time

> of a modem crash, or when suspending modem GSI channels.

>

> One thing done in this procedure is issuing a command that sends a

> data packet originating from the AP->command TX endpoint, destined

> for the AP<-LAN RX (default) endpoint.  And although we currently

> wait for the send to complete, we do *not* wait for the packet to be

> received.  But the pipeline can't be assumed clear until we have

> actually received this packet.

>

> This series addresses this by detecting when the pipeline-clearing

> packet has been received, and using a completion to allow a waiter

> to know when that has happened.  This uses the IPA status capability

> (which sends an extra status buffer for certain packets).  It also

> uses the ability to supply a "tag" with a packet, which will be

> delivered with the packet's status buffer.  We tag the data packet

> that's sent to clear the pipeline, and use the receipt of a status

> buffer associated with a tagged packet to determine when that packet

> has arrived.

>

> "Tag status" just desribes one aspect of this procedure, so some

> symbols are renamed to be more like "pipeline clear" so they better

> describe the larger purpose.  Finally, two functions used in this

> code don't use their arguments, so those arguments are removed.

>

>                                         -Alex

>

> Alex Elder (6):

>   net: ipa: rename "tag status" symbols

>   net: ipa: minor update to handling of packet with status

>   net: ipa: drop packet if status has valid tag

>   net: ipa: signal when tag transfer completes

>   net: ipa: don't pass tag value to ipa_cmd_ip_tag_status_add()

>   net: ipa: don't pass size to ipa_cmd_transfer_add()

>

>  drivers/net/ipa/ipa.h          |  2 +

>  drivers/net/ipa/ipa_cmd.c      | 45 +++++++++++++------

>  drivers/net/ipa/ipa_cmd.h      | 24 ++++++-----

>  drivers/net/ipa/ipa_endpoint.c | 79 ++++++++++++++++++++++++++--------

>  drivers/net/ipa/ipa_main.c     |  1 +

>  5 files changed, 109 insertions(+), 42 deletions(-)


For netdrv

Acked-by: Willem de Bruijn <willemb@google.com>
patchwork-bot+netdevbpf@kernel.org Jan. 29, 2021, 4:50 a.m. UTC | #2
Hello:

This series was applied to netdev/net-next.git (refs/heads/master):

On Tue, 26 Jan 2021 12:56:57 -0600 you wrote:
> Version 2 of this series fixes a "restricted __le16 degrades to

> integer" warning from sparse in the third patch.  The normal host

> architecture is little-endian, so the problem did not produce

> incorrect behavior, but the code was wrong not to perform the

> endianness conversion.  The updated patch uses le16_get_bits() to

> properly extract the value of the field we're interested in.

> 

> [...]


Here is the summary with links:
  - [net-next,v2,1/6] net: ipa: rename "tag status" symbols
    https://git.kernel.org/netdev/net-next/c/aa56e3e5cdb4
  - [net-next,v2,2/6] net: ipa: minor update to handling of packet with status
    https://git.kernel.org/netdev/net-next/c/162fbc6f4519
  - [net-next,v2,3/6] net: ipa: drop packet if status has valid tag
    https://git.kernel.org/netdev/net-next/c/f6aba7b5199a
  - [net-next,v2,4/6] net: ipa: signal when tag transfer completes
    https://git.kernel.org/netdev/net-next/c/51c48ce264f8
  - [net-next,v2,5/6] net: ipa: don't pass tag value to ipa_cmd_ip_tag_status_add()
    https://git.kernel.org/netdev/net-next/c/792b75b14786
  - [net-next,v2,6/6] net: ipa: don't pass size to ipa_cmd_transfer_add()
    https://git.kernel.org/netdev/net-next/c/070740d389aa

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html