Skip to content

Commit da7d4b4

Browse files
jfrakerkuba-moo
authored andcommitted
gve: Remove dependency on 4k page size.
Prior to this change, gve crashes when attempting to run in kernels with page sizes other than 4k. This change removes unnecessary references to PAGE_SIZE and replaces them with more meaningful constants. Signed-off-by: Jordan Kimbrough <jrkim@google.com> Signed-off-by: John Fraker <jfraker@google.com> Reviewed-by: Willem de Bruijn <willemb@google.com> Link: https://lore.kernel.org/r/20231128002648.320892-6-jfraker@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 513072f commit da7d4b4

File tree

5 files changed

+11
-10
lines changed

5 files changed

+11
-10
lines changed

drivers/net/ethernet/google/gve/gve.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@
4949
/* PTYPEs are always 10 bits. */
5050
#define GVE_NUM_PTYPES 1024
5151

52-
#define GVE_RX_BUFFER_SIZE_DQO 2048
52+
#define GVE_DEFAULT_RX_BUFFER_SIZE 2048
53+
54+
#define GVE_DEFAULT_RX_BUFFER_OFFSET 2048
5355

5456
#define GVE_XDP_ACTIONS 5
5557

drivers/net/ethernet/google/gve/gve_ethtool.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ static int gve_set_tunable(struct net_device *netdev,
519519
case ETHTOOL_RX_COPYBREAK:
520520
{
521521
u32 max_copybreak = gve_is_gqi(priv) ?
522-
(PAGE_SIZE / 2) : priv->data_buffer_size_dqo;
522+
GVE_DEFAULT_RX_BUFFER_SIZE : priv->data_buffer_size_dqo;
523523

524524
len = *(u32 *)value;
525525
if (len > max_copybreak)

drivers/net/ethernet/google/gve/gve_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,7 +1328,7 @@ static int gve_open(struct net_device *dev)
13281328
/* Hard code this for now. This may be tuned in the future for
13291329
* performance.
13301330
*/
1331-
priv->data_buffer_size_dqo = GVE_RX_BUFFER_SIZE_DQO;
1331+
priv->data_buffer_size_dqo = GVE_DEFAULT_RX_BUFFER_SIZE;
13321332
}
13331333
err = gve_create_rings(priv);
13341334
if (err)
@@ -1664,7 +1664,7 @@ static int verify_xdp_configuration(struct net_device *dev)
16641664
return -EOPNOTSUPP;
16651665
}
16661666

1667-
if (dev->mtu > (PAGE_SIZE / 2) - sizeof(struct ethhdr) - GVE_RX_PAD) {
1667+
if (dev->mtu > GVE_DEFAULT_RX_BUFFER_SIZE - sizeof(struct ethhdr) - GVE_RX_PAD) {
16681668
netdev_warn(dev, "XDP is not supported for mtu %d.\n",
16691669
dev->mtu);
16701670
return -EOPNOTSUPP;

drivers/net/ethernet/google/gve/gve_rx.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ static int gve_rx_alloc_ring(struct gve_priv *priv, int idx)
283283
/* Allocating half-page buffers allows page-flipping which is faster
284284
* than copying or allocating new pages.
285285
*/
286-
rx->packet_buffer_size = PAGE_SIZE / 2;
286+
rx->packet_buffer_size = GVE_DEFAULT_RX_BUFFER_SIZE;
287287
gve_rx_ctx_clear(&rx->ctx);
288288
gve_rx_add_to_block(priv, idx);
289289

@@ -399,10 +399,10 @@ static struct sk_buff *gve_rx_add_frags(struct napi_struct *napi,
399399

400400
static void gve_rx_flip_buff(struct gve_rx_slot_page_info *page_info, __be64 *slot_addr)
401401
{
402-
const __be64 offset = cpu_to_be64(PAGE_SIZE / 2);
402+
const __be64 offset = cpu_to_be64(GVE_DEFAULT_RX_BUFFER_OFFSET);
403403

404404
/* "flip" to other packet buffer on this page */
405-
page_info->page_offset ^= PAGE_SIZE / 2;
405+
page_info->page_offset ^= GVE_DEFAULT_RX_BUFFER_OFFSET;
406406
*(slot_addr) ^= offset;
407407
}
408408

@@ -507,8 +507,7 @@ static struct sk_buff *gve_rx_copy_to_pool(struct gve_rx_ring *rx,
507507
return NULL;
508508

509509
gve_dec_pagecnt_bias(copy_page_info);
510-
copy_page_info->page_offset += rx->packet_buffer_size;
511-
copy_page_info->page_offset &= (PAGE_SIZE - 1);
510+
copy_page_info->page_offset ^= GVE_DEFAULT_RX_BUFFER_OFFSET;
512511

513512
if (copy_page_info->can_flip) {
514513
/* We have used both halves of this copy page, it

drivers/net/ethernet/google/gve/gve_tx.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -819,7 +819,7 @@ int gve_xdp_xmit_one(struct gve_priv *priv, struct gve_tx_ring *tx,
819819
return 0;
820820
}
821821

822-
#define GVE_TX_START_THRESH PAGE_SIZE
822+
#define GVE_TX_START_THRESH 4096
823823

824824
static int gve_clean_tx_done(struct gve_priv *priv, struct gve_tx_ring *tx,
825825
u32 to_do, bool try_to_wake)

0 commit comments

Comments
 (0)