Skip to content

Commit a9b1fab

Browse files
committed
Merge branch 'ionic-convert-rx-queue-buffers-to-use-page_pool'
Brett Creeley says: ==================== ionic: convert Rx queue buffers to use page_pool Our home-grown buffer management needs to go away and we need to play nicely with the page_pool infrastructure. This patchset cleans up some of our API use and converts the Rx traffic queues to use page_pool. The first few patches are for tidying up things, then a small XDP configuration refactor, adding page_pool support, and finally adding support to hot swap an XDP program without having to reconfigure anything. The result is code that more closely follows current patterns, as well as a either a performance boost or equivalent performance as seen with iperf testing: mss netio tx_pps rx_pps total_pps tx_bw rx_bw total_bw ---- ------- ---------- ---------- ----------- ------- ------- ---------- Before: 256 bidir 13,839,293 15,515,227 29,354,520 34 38 71 512 bidir 13,913,249 14,671,693 28,584,942 62 65 127 1024 bidir 13,006,189 13,695,413 26,701,602 109 115 224 1448 bidir 12,489,905 12,791,734 25,281,639 145 149 294 2048 bidir 9,195,622 9,247,649 18,443,271 148 149 297 4096 bidir 5,149,716 5,247,917 10,397,633 160 163 323 8192 bidir 3,029,993 3,008,882 6,038,875 179 179 358 9000 bidir 2,789,358 2,800,744 5,590,102 181 180 361 After: 256 bidir 21,540,037 21,344,644 42,884,681 52 52 104 512 bidir 23,170,014 19,207,260 42,377,274 103 85 188 1024 bidir 17,934,280 17,819,247 35,753,527 150 149 299 1448 bidir 15,242,515 14,907,030 30,149,545 167 174 341 2048 bidir 10,692,542 10,663,023 21,355,565 177 176 353 4096 bidir 6,024,977 6,083,580 12,108,557 187 180 367 8192 bidir 3,090,449 3,048,266 6,138,715 180 176 356 9000 bidir 2,859,146 2,864,226 5,723,372 178 180 358 v2: https://lore.kernel.org/[email protected] v1: https://lore.kernel.org/[email protected] ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 760664b + 3c0bf13 commit a9b1fab

File tree

6 files changed

+330
-279
lines changed

6 files changed

+330
-279
lines changed

drivers/net/ethernet/pensando/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ config IONIC
2323
depends on PTP_1588_CLOCK_OPTIONAL
2424
select NET_DEVLINK
2525
select DIMLIB
26+
select PAGE_POOL
2627
help
2728
This enables the support for the Pensando family of Ethernet
2829
adapters. More specific information on this driver can be

drivers/net/ethernet/pensando/ionic/ionic_dev.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,7 @@ struct ionic_queue;
181181
struct ionic_qcq;
182182

183183
#define IONIC_MAX_BUF_LEN ((u16)-1)
184-
#define IONIC_PAGE_SIZE PAGE_SIZE
185-
#define IONIC_PAGE_SPLIT_SZ (PAGE_SIZE / 2)
186-
#define IONIC_PAGE_GFP_MASK (GFP_ATOMIC | __GFP_NOWARN |\
187-
__GFP_COMP | __GFP_MEMALLOC)
184+
#define IONIC_PAGE_SIZE MIN(PAGE_SIZE, IONIC_MAX_BUF_LEN)
188185

189186
#define IONIC_XDP_MAX_LINEAR_MTU (IONIC_PAGE_SIZE - \
190187
(VLAN_ETH_HLEN + \
@@ -238,9 +235,8 @@ struct ionic_queue {
238235
unsigned int index;
239236
unsigned int num_descs;
240237
unsigned int max_sg_elems;
238+
241239
u64 features;
242-
unsigned int type;
243-
unsigned int hw_index;
244240
unsigned int hw_type;
245241
bool xdp_flush;
246242
union {
@@ -249,19 +245,24 @@ struct ionic_queue {
249245
struct ionic_rxq_desc *rxq;
250246
struct ionic_admin_cmd *adminq;
251247
};
252-
union {
253-
void __iomem *cmb_base;
254-
struct ionic_txq_desc __iomem *cmb_txq;
255-
struct ionic_rxq_desc __iomem *cmb_rxq;
256-
};
257248
union {
258249
void *sg_base;
259250
struct ionic_txq_sg_desc *txq_sgl;
260251
struct ionic_txq_sg_desc_v1 *txq_sgl_v1;
261252
struct ionic_rxq_sg_desc *rxq_sgl;
262253
};
263254
struct xdp_rxq_info *xdp_rxq_info;
255+
struct bpf_prog *xdp_prog;
256+
struct page_pool *page_pool;
264257
struct ionic_queue *partner;
258+
259+
union {
260+
void __iomem *cmb_base;
261+
struct ionic_txq_desc __iomem *cmb_txq;
262+
struct ionic_rxq_desc __iomem *cmb_rxq;
263+
};
264+
unsigned int type;
265+
unsigned int hw_index;
265266
dma_addr_t base_pa;
266267
dma_addr_t cmb_base_pa;
267268
dma_addr_t sg_base_pa;

0 commit comments

Comments
 (0)