Skip to content

Commit 169650d

Browse files
committed
Merge branch 'nfp-cleanups-and-RX-path-rewrite'
Jakub Kicinski says: ==================== nfp: cleanups and RX path rewrite This series lays groundwork for upcoming XDP support by updating the RX path not to pre-allocate sk_buffs. I start with few cleanups, removal of NFP3200-related code being the most significant. Patch 7 moves to alloc_frag() and build_skb() APIs. Again, a number of small cleanups follow. The set ends with adding support for different number of RX and TX rings. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 6d052e9 + cbeaf7a commit 169650d

File tree

5 files changed

+263
-318
lines changed

5 files changed

+263
-318
lines changed

drivers/net/ethernet/netronome/nfp/nfp_net.h

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575

7676
/* Default size for MTU and freelist buffer sizes */
7777
#define NFP_NET_DEFAULT_MTU 1500
78-
#define NFP_NET_DEFAULT_RX_BUFSZ 2048
7978

8079
/* Maximum number of bytes prepended to a packet */
8180
#define NFP_NET_MAX_PREPEND 64
@@ -88,6 +87,9 @@
8887
/* Queue/Ring definitions */
8988
#define NFP_NET_MAX_TX_RINGS 64 /* Max. # of Tx rings per device */
9089
#define NFP_NET_MAX_RX_RINGS 64 /* Max. # of Rx rings per device */
90+
#define NFP_NET_MAX_R_VECS (NFP_NET_MAX_TX_RINGS > NFP_NET_MAX_RX_RINGS ? \
91+
NFP_NET_MAX_TX_RINGS : NFP_NET_MAX_RX_RINGS)
92+
#define NFP_NET_MAX_IRQS (NFP_NET_NON_Q_VECTORS + NFP_NET_MAX_R_VECS)
9193

9294
#define NFP_NET_MIN_TX_DESCS 256 /* Min. # of Tx descs per ring */
9395
#define NFP_NET_MIN_RX_DESCS 256 /* Min. # of Rx descs per ring */
@@ -102,6 +104,10 @@
102104
/* Offload definitions */
103105
#define NFP_NET_N_VXLAN_PORTS (NFP_NET_CFG_VXLAN_SZ / sizeof(__be16))
104106

107+
#define NFP_NET_RX_BUF_HEADROOM (NET_SKB_PAD + NET_IP_ALIGN)
108+
#define NFP_NET_RX_BUF_NON_DATA (NFP_NET_RX_BUF_HEADROOM + \
109+
SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
110+
105111
/* Forward declarations */
106112
struct nfp_net;
107113
struct nfp_net_r_vector;
@@ -278,11 +284,11 @@ struct nfp_net_rx_hash {
278284

279285
/**
280286
* struct nfp_net_rx_buf - software RX buffer descriptor
281-
* @skb: sk_buff associated with this buffer
287+
* @frag: page fragment buffer
282288
* @dma_addr: DMA mapping address of the buffer
283289
*/
284290
struct nfp_net_rx_buf {
285-
struct sk_buff *skb;
291+
void *frag;
286292
dma_addr_t dma_addr;
287293
};
288294

@@ -421,7 +427,6 @@ struct nfp_stat_pair {
421427
* @netdev: Backpointer to net_device structure
422428
* @nfp_fallback: Is the driver used in fallback mode?
423429
* @is_vf: Is the driver attached to a VF?
424-
* @is_nfp3200: Is the driver for a NFP-3200 card?
425430
* @fw_loaded: Is the firmware loaded?
426431
* @bpf_offload_skip_sw: Offloaded BPF program will not be rerun by cls_bpf
427432
* @ctrl: Local copy of the control register/word.
@@ -451,7 +456,7 @@ struct nfp_stat_pair {
451456
* @rxd_cnt: Size of the RX ring in number of descriptors
452457
* @tx_rings: Array of pre-allocated TX ring structures
453458
* @rx_rings: Array of pre-allocated RX ring structures
454-
* @num_irqs: Number of allocated interrupt vectors
459+
* @max_r_vecs: Number of allocated interrupt vectors for RX/TX
455460
* @num_r_vecs: Number of used ring vectors
456461
* @r_vecs: Pre-allocated array of ring vectors
457462
* @irq_entries: Pre-allocated array of MSI-X entries
@@ -487,7 +492,6 @@ struct nfp_net {
487492

488493
unsigned nfp_fallback:1;
489494
unsigned is_vf:1;
490-
unsigned is_nfp3200:1;
491495
unsigned fw_loaded:1;
492496
unsigned bpf_offload_skip_sw:1;
493497

@@ -524,23 +528,22 @@ struct nfp_net {
524528
struct timer_list rx_filter_stats_timer;
525529
spinlock_t rx_filter_lock;
526530

527-
int max_tx_rings;
528-
int max_rx_rings;
531+
unsigned int max_tx_rings;
532+
unsigned int max_rx_rings;
529533

530-
int num_tx_rings;
531-
int num_rx_rings;
534+
unsigned int num_tx_rings;
535+
unsigned int num_rx_rings;
532536

533537
int stride_tx;
534538
int stride_rx;
535539

536540
int txd_cnt;
537541
int rxd_cnt;
538542

539-
u8 num_irqs;
540-
u8 num_r_vecs;
541-
struct nfp_net_r_vector r_vecs[NFP_NET_MAX_TX_RINGS];
542-
struct msix_entry irq_entries[NFP_NET_NON_Q_VECTORS +
543-
NFP_NET_MAX_TX_RINGS];
543+
unsigned int max_r_vecs;
544+
unsigned int num_r_vecs;
545+
struct nfp_net_r_vector r_vecs[NFP_NET_MAX_R_VECS];
546+
struct msix_entry irq_entries[NFP_NET_MAX_IRQS];
544547

545548
irq_handler_t lsc_handler;
546549
char lsc_name[IFNAMSIZ + 8];
@@ -593,16 +596,13 @@ static inline void nn_writeb(struct nfp_net *nn, int off, u8 val)
593596
writeb(val, nn->ctrl_bar + off);
594597
}
595598

596-
/* NFP-3200 can't handle 16-bit accesses too well */
597599
static inline u16 nn_readw(struct nfp_net *nn, int off)
598600
{
599-
WARN_ON_ONCE(nn->is_nfp3200);
600601
return readw(nn->ctrl_bar + off);
601602
}
602603

603604
static inline void nn_writew(struct nfp_net *nn, int off, u16 val)
604605
{
605-
WARN_ON_ONCE(nn->is_nfp3200);
606606
writew(val, nn->ctrl_bar + off);
607607
}
608608

@@ -650,7 +650,7 @@ static inline void nn_pci_flush(struct nfp_net *nn)
650650
#define NFP_QCP_QUEUE_STS_HI 0x000c
651651
#define NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask 0x3ffff
652652

653-
/* The offset of a QCP queues in the PCIe Target (same on NFP3200 and NFP6000 */
653+
/* The offset of a QCP queues in the PCIe Target */
654654
#define NFP_PCIE_QUEUE(_q) (0x80000 + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & 0xff)))
655655

656656
/* nfp_qcp_ptr - Read or Write Pointer of a queue */
@@ -757,8 +757,9 @@ extern const char nfp_net_driver_version[];
757757
void nfp_net_get_fw_version(struct nfp_net_fw_version *fw_ver,
758758
void __iomem *ctrl_bar);
759759

760-
struct nfp_net *nfp_net_netdev_alloc(struct pci_dev *pdev,
761-
int max_tx_rings, int max_rx_rings);
760+
struct nfp_net *
761+
nfp_net_netdev_alloc(struct pci_dev *pdev,
762+
unsigned int max_tx_rings, unsigned int max_rx_rings);
762763
void nfp_net_netdev_free(struct nfp_net *nn);
763764
int nfp_net_netdev_init(struct net_device *netdev);
764765
void nfp_net_netdev_clean(struct net_device *netdev);

0 commit comments

Comments
 (0)