Skip to content

Commit 904effd

Browse files
josh8551021kuba-moo
authored andcommitted
gve: merge packet buffer size fields
The data_buffer_size_dqo field in gve_priv and the packet_buffer_size field in gve_rx_ring theoretically have the same meaning, but they are defined in two different places and used in two separate contexts. There is no good reason for this, so this change merges those fields into the packet_buffer_size field in the RX ring. This change also introduces a packet_buffer_size field to struct gve_rx_queue_config to account for cases where queues are not allocated, such as when the interface is down. Reviewed-by: Willem de Bruijn <[email protected]> Signed-off-by: Joshua Washington <[email protected]> Signed-off-by: Harshitha Ramamurthy <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 57a070c commit 904effd

File tree

7 files changed

+12
-17
lines changed

7 files changed

+12
-17
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ struct gve_rx_cnts {
227227
/* Contains datapath state used to represent an RX queue. */
228228
struct gve_rx_ring {
229229
struct gve_priv *gve;
230+
u16 packet_buffer_size;
230231
union {
231232
/* GQI fields */
232233
struct {
@@ -235,7 +236,6 @@ struct gve_rx_ring {
235236

236237
/* threshold for posting new buffs and descs */
237238
u32 db_threshold;
238-
u16 packet_buffer_size;
239239

240240
u32 qpl_copy_pool_mask;
241241
u32 qpl_copy_pool_head;
@@ -635,6 +635,7 @@ struct gve_notify_block {
635635
struct gve_rx_queue_config {
636636
u16 max_queues;
637637
u16 num_queues;
638+
u16 packet_buffer_size;
638639
};
639640

640641
/* Tracks allowed and current tx queue settings */
@@ -842,7 +843,6 @@ struct gve_priv {
842843
struct gve_ptype_lut *ptype_lut_dqo;
843844

844845
/* Must be a power of two. */
845-
u16 data_buffer_size_dqo;
846846
u16 max_rx_buffer_size; /* device limit */
847847

848848
enum gve_queue_format queue_format;

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,7 @@ static void gve_adminq_get_create_rx_queue_cmd(struct gve_priv *priv,
731731
.ntfy_id = cpu_to_be32(rx->ntfy_id),
732732
.queue_resources_addr = cpu_to_be64(rx->q_resources_bus),
733733
.rx_ring_size = cpu_to_be16(priv->rx_desc_cnt),
734+
.packet_buffer_size = cpu_to_be16(rx->packet_buffer_size),
734735
};
735736

736737
if (gve_is_gqi(priv)) {
@@ -743,7 +744,6 @@ static void gve_adminq_get_create_rx_queue_cmd(struct gve_priv *priv,
743744
cpu_to_be64(rx->data.data_bus);
744745
cmd->create_rx_queue.index = cpu_to_be32(queue_index);
745746
cmd->create_rx_queue.queue_page_list_id = cpu_to_be32(qpl_id);
746-
cmd->create_rx_queue.packet_buffer_size = cpu_to_be16(rx->packet_buffer_size);
747747
} else {
748748
u32 qpl_id = 0;
749749

@@ -756,8 +756,6 @@ static void gve_adminq_get_create_rx_queue_cmd(struct gve_priv *priv,
756756
cpu_to_be64(rx->dqo.complq.bus);
757757
cmd->create_rx_queue.rx_data_ring_addr =
758758
cpu_to_be64(rx->dqo.bufq.bus);
759-
cmd->create_rx_queue.packet_buffer_size =
760-
cpu_to_be16(priv->data_buffer_size_dqo);
761759
cmd->create_rx_queue.rx_buff_ring_size =
762760
cpu_to_be16(priv->rx_desc_cnt);
763761
cmd->create_rx_queue.enable_rsc =

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ int gve_alloc_qpl_page_dqo(struct gve_rx_ring *rx,
139139
buf_state->page_info.page_offset = 0;
140140
buf_state->page_info.page_address =
141141
page_address(buf_state->page_info.page);
142-
buf_state->page_info.buf_size = priv->data_buffer_size_dqo;
142+
buf_state->page_info.buf_size = rx->packet_buffer_size;
143143
buf_state->last_single_ref_offset = 0;
144144

145145
/* The page already has 1 ref. */
@@ -162,7 +162,7 @@ void gve_free_qpl_page_dqo(struct gve_rx_buf_state_dqo *buf_state)
162162
void gve_try_recycle_buf(struct gve_priv *priv, struct gve_rx_ring *rx,
163163
struct gve_rx_buf_state_dqo *buf_state)
164164
{
165-
const u16 data_buffer_size = priv->data_buffer_size_dqo;
165+
const u16 data_buffer_size = rx->packet_buffer_size;
166166
int pagecount;
167167

168168
/* Can't reuse if we only fit one buffer per page */
@@ -217,10 +217,9 @@ void gve_free_to_page_pool(struct gve_rx_ring *rx,
217217
static int gve_alloc_from_page_pool(struct gve_rx_ring *rx,
218218
struct gve_rx_buf_state_dqo *buf_state)
219219
{
220-
struct gve_priv *priv = rx->gve;
221220
netmem_ref netmem;
222221

223-
buf_state->page_info.buf_size = priv->data_buffer_size_dqo;
222+
buf_state->page_info.buf_size = rx->packet_buffer_size;
224223
netmem = page_pool_alloc_netmem(rx->dqo.page_pool,
225224
&buf_state->page_info.page_offset,
226225
&buf_state->page_info.buf_size,

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -647,8 +647,7 @@ static int gve_set_tunable(struct net_device *netdev,
647647
switch (etuna->id) {
648648
case ETHTOOL_RX_COPYBREAK:
649649
{
650-
u32 max_copybreak = gve_is_gqi(priv) ?
651-
GVE_DEFAULT_RX_BUFFER_SIZE : priv->data_buffer_size_dqo;
650+
u32 max_copybreak = priv->rx_cfg.packet_buffer_size;
652651

653652
len = *(u32 *)value;
654653
if (len > max_copybreak)

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,9 +1224,7 @@ static void gve_rx_get_curr_alloc_cfg(struct gve_priv *priv,
12241224
cfg->raw_addressing = !gve_is_qpl(priv);
12251225
cfg->enable_header_split = priv->header_split_enabled;
12261226
cfg->ring_size = priv->rx_desc_cnt;
1227-
cfg->packet_buffer_size = gve_is_gqi(priv) ?
1228-
GVE_DEFAULT_RX_BUFFER_SIZE :
1229-
priv->data_buffer_size_dqo;
1227+
cfg->packet_buffer_size = priv->rx_cfg.packet_buffer_size;
12301228
cfg->rx = priv->rx;
12311229
}
12321230

@@ -1331,7 +1329,7 @@ static int gve_queues_start(struct gve_priv *priv,
13311329
goto reset;
13321330

13331331
priv->header_split_enabled = rx_alloc_cfg->enable_header_split;
1334-
priv->data_buffer_size_dqo = rx_alloc_cfg->packet_buffer_size;
1332+
priv->rx_cfg.packet_buffer_size = rx_alloc_cfg->packet_buffer_size;
13351333

13361334
err = gve_create_rings(priv);
13371335
if (err)
@@ -2627,7 +2625,7 @@ static int gve_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
26272625
priv->service_task_flags = 0x0;
26282626
priv->state_flags = 0x0;
26292627
priv->ethtool_flags = 0x0;
2630-
priv->data_buffer_size_dqo = GVE_DEFAULT_RX_BUFFER_SIZE;
2628+
priv->rx_cfg.packet_buffer_size = GVE_DEFAULT_RX_BUFFER_SIZE;
26312629
priv->max_rx_buffer_size = GVE_DEFAULT_RX_BUFFER_SIZE;
26322630

26332631
gve_set_probe_in_progress(priv);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ int gve_rx_alloc_ring_gqi(struct gve_priv *priv,
288288

289289
rx->gve = priv;
290290
rx->q_num = idx;
291-
rx->packet_buffer_size = GVE_DEFAULT_RX_BUFFER_SIZE;
291+
rx->packet_buffer_size = cfg->packet_buffer_size;
292292

293293
rx->mask = slots - 1;
294294
rx->data.raw_addressing = cfg->raw_addressing;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ int gve_rx_alloc_ring_dqo(struct gve_priv *priv,
223223
memset(rx, 0, sizeof(*rx));
224224
rx->gve = priv;
225225
rx->q_num = idx;
226+
rx->packet_buffer_size = cfg->packet_buffer_size;
226227

227228
rx->dqo.num_buf_states = cfg->raw_addressing ? buffer_queue_slots :
228229
gve_get_rx_pages_per_qpl_dqo(cfg->ring_size);

0 commit comments

Comments
 (0)