net: ipa: use an array for transactions
authorAlex Elder <elder@linaro.org>
Wed, 31 Aug 2022 22:40:12 +0000 (17:40 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 Sep 2022 11:08:44 +0000 (12:08 +0100)
commit12382d11670e893f976ae19087fde2f83ed4813d
treec2186b8488c075ed1090bbc71ae2408ea4591f2c
parenta01105f1748e8151ef43c300659b99d471f5f61d
net: ipa: use an array for transactions

Transactions are always allocated one at a time.  The maximum number
of them we could ever need occurs if each TRE is assigned to a
transaction.  So a channel requires no more transactions than the
number of TREs in its transfer ring.  That number is known to be a
power-of-2 less than 65536.

The transaction pool abstraction is used for other things, but for
transactions we can use a simple array of transaction structures,
and use a free index to indicate which entry in the array is the
next one free for allocation.

By having the number of elements in the array be a power-of-2, we
can use an ever-incrementing 16-bit free index, and use it modulo
the array size.  Distinguish a "trans_id" (whose value can exceed
the number of entries in the transaction array) from a "trans_index"
(which is less than the number of entries).

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ipa/gsi.h
drivers/net/ipa/gsi_trans.c