mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-28 21:46:02 -04:00
ionic: add tx/rx-push support with device Component Memory Buffers
The ionic device has on-board memory (CMB) that can be used for descriptors as a way to speed descriptor access for faster packet processing. It is rumored to improve latency and/or packets-per-second for some profiles of small packet traffic, although your mileage may vary. Signed-off-by: Shannon Nelson <shannon.nelson@amd.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
5b4e9a7a71
commit
40bc471dc7
@@ -402,6 +402,14 @@ bool ionic_rx_service(struct ionic_cq *cq, struct ionic_cq_info *cq_info)
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline void ionic_write_cmb_desc(struct ionic_queue *q,
|
||||
void __iomem *cmb_desc,
|
||||
void *desc)
|
||||
{
|
||||
if (q_to_qcq(q)->flags & IONIC_QCQ_F_CMB_RINGS)
|
||||
memcpy_toio(cmb_desc, desc, q->desc_size);
|
||||
}
|
||||
|
||||
void ionic_rx_fill(struct ionic_queue *q)
|
||||
{
|
||||
struct net_device *netdev = q->lif->netdev;
|
||||
@@ -480,6 +488,8 @@ void ionic_rx_fill(struct ionic_queue *q)
|
||||
IONIC_RXQ_DESC_OPCODE_SIMPLE;
|
||||
desc_info->nbufs = nfrags;
|
||||
|
||||
ionic_write_cmb_desc(q, desc_info->cmb_desc, desc);
|
||||
|
||||
ionic_rxq_post(q, false, ionic_rx_clean, NULL);
|
||||
}
|
||||
|
||||
@@ -943,7 +953,8 @@ static int ionic_tx_tcp_pseudo_csum(struct sk_buff *skb)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ionic_tx_tso_post(struct ionic_queue *q, struct ionic_txq_desc *desc,
|
||||
static void ionic_tx_tso_post(struct ionic_queue *q,
|
||||
struct ionic_desc_info *desc_info,
|
||||
struct sk_buff *skb,
|
||||
dma_addr_t addr, u8 nsge, u16 len,
|
||||
unsigned int hdrlen, unsigned int mss,
|
||||
@@ -951,6 +962,7 @@ static void ionic_tx_tso_post(struct ionic_queue *q, struct ionic_txq_desc *desc
|
||||
u16 vlan_tci, bool has_vlan,
|
||||
bool start, bool done)
|
||||
{
|
||||
struct ionic_txq_desc *desc = desc_info->desc;
|
||||
u8 flags = 0;
|
||||
u64 cmd;
|
||||
|
||||
@@ -966,6 +978,8 @@ static void ionic_tx_tso_post(struct ionic_queue *q, struct ionic_txq_desc *desc
|
||||
desc->hdr_len = cpu_to_le16(hdrlen);
|
||||
desc->mss = cpu_to_le16(mss);
|
||||
|
||||
ionic_write_cmb_desc(q, desc_info->cmb_desc, desc);
|
||||
|
||||
if (start) {
|
||||
skb_tx_timestamp(skb);
|
||||
if (!unlikely(q->features & IONIC_TXQ_F_HWSTAMP))
|
||||
@@ -1084,7 +1098,7 @@ static int ionic_tx_tso(struct ionic_queue *q, struct sk_buff *skb)
|
||||
seg_rem = min(tso_rem, mss);
|
||||
done = (tso_rem == 0);
|
||||
/* post descriptor */
|
||||
ionic_tx_tso_post(q, desc, skb,
|
||||
ionic_tx_tso_post(q, desc_info, skb,
|
||||
desc_addr, desc_nsge, desc_len,
|
||||
hdrlen, mss, outer_csum, vlan_tci, has_vlan,
|
||||
start, done);
|
||||
@@ -1133,6 +1147,8 @@ static void ionic_tx_calc_csum(struct ionic_queue *q, struct sk_buff *skb,
|
||||
desc->csum_start = cpu_to_le16(skb_checksum_start_offset(skb));
|
||||
desc->csum_offset = cpu_to_le16(skb->csum_offset);
|
||||
|
||||
ionic_write_cmb_desc(q, desc_info->cmb_desc, desc);
|
||||
|
||||
if (skb_csum_is_sctp(skb))
|
||||
stats->crc32_csum++;
|
||||
else
|
||||
@@ -1170,6 +1186,8 @@ static void ionic_tx_calc_no_csum(struct ionic_queue *q, struct sk_buff *skb,
|
||||
desc->csum_start = 0;
|
||||
desc->csum_offset = 0;
|
||||
|
||||
ionic_write_cmb_desc(q, desc_info->cmb_desc, desc);
|
||||
|
||||
stats->csum_none++;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user