gve_rx_dqo.c (19606B)
1// SPDX-License-Identifier: (GPL-2.0 OR MIT) 2/* Google virtual Ethernet (gve) driver 3 * 4 * Copyright (C) 2015-2021 Google, Inc. 5 */ 6 7#include "gve.h" 8#include "gve_dqo.h" 9#include "gve_adminq.h" 10#include "gve_utils.h" 11#include <linux/ip.h> 12#include <linux/ipv6.h> 13#include <linux/skbuff.h> 14#include <linux/slab.h> 15#include <net/ip6_checksum.h> 16#include <net/ipv6.h> 17#include <net/tcp.h> 18 19static int gve_buf_ref_cnt(struct gve_rx_buf_state_dqo *bs) 20{ 21 return page_count(bs->page_info.page) - bs->page_info.pagecnt_bias; 22} 23 24static void gve_free_page_dqo(struct gve_priv *priv, 25 struct gve_rx_buf_state_dqo *bs) 26{ 27 page_ref_sub(bs->page_info.page, bs->page_info.pagecnt_bias - 1); 28 gve_free_page(&priv->pdev->dev, bs->page_info.page, bs->addr, 29 DMA_FROM_DEVICE); 30 bs->page_info.page = NULL; 31} 32 33static struct gve_rx_buf_state_dqo *gve_alloc_buf_state(struct gve_rx_ring *rx) 34{ 35 struct gve_rx_buf_state_dqo *buf_state; 36 s16 buffer_id; 37 38 buffer_id = rx->dqo.free_buf_states; 39 if (unlikely(buffer_id == -1)) 40 return NULL; 41 42 buf_state = &rx->dqo.buf_states[buffer_id]; 43 44 /* Remove buf_state from free list */ 45 rx->dqo.free_buf_states = buf_state->next; 46 47 /* Point buf_state to itself to mark it as allocated */ 48 buf_state->next = buffer_id; 49 50 return buf_state; 51} 52 53static bool gve_buf_state_is_allocated(struct gve_rx_ring *rx, 54 struct gve_rx_buf_state_dqo *buf_state) 55{ 56 s16 buffer_id = buf_state - rx->dqo.buf_states; 57 58 return buf_state->next == buffer_id; 59} 60 61static void gve_free_buf_state(struct gve_rx_ring *rx, 62 struct gve_rx_buf_state_dqo *buf_state) 63{ 64 s16 buffer_id = buf_state - rx->dqo.buf_states; 65 66 buf_state->next = rx->dqo.free_buf_states; 67 rx->dqo.free_buf_states = buffer_id; 68} 69 70static struct gve_rx_buf_state_dqo * 71gve_dequeue_buf_state(struct gve_rx_ring *rx, struct gve_index_list *list) 72{ 73 struct gve_rx_buf_state_dqo *buf_state; 74 s16 buffer_id; 75 76 buffer_id = list->head; 77 if (unlikely(buffer_id == -1)) 78 return NULL; 79 80 buf_state = &rx->dqo.buf_states[buffer_id]; 81 82 /* Remove buf_state from list */ 83 list->head = buf_state->next; 84 if (buf_state->next == -1) 85 list->tail = -1; 86 87 /* Point buf_state to itself to mark it as allocated */ 88 buf_state->next = buffer_id; 89 90 return buf_state; 91} 92 93static void gve_enqueue_buf_state(struct gve_rx_ring *rx, 94 struct gve_index_list *list, 95 struct gve_rx_buf_state_dqo *buf_state) 96{ 97 s16 buffer_id = buf_state - rx->dqo.buf_states; 98 99 buf_state->next = -1; 100 101 if (list->head == -1) { 102 list->head = buffer_id; 103 list->tail = buffer_id; 104 } else { 105 int tail = list->tail; 106 107 rx->dqo.buf_states[tail].next = buffer_id; 108 list->tail = buffer_id; 109 } 110} 111 112static struct gve_rx_buf_state_dqo * 113gve_get_recycled_buf_state(struct gve_rx_ring *rx) 114{ 115 struct gve_rx_buf_state_dqo *buf_state; 116 int i; 117 118 /* Recycled buf states are immediately usable. */ 119 buf_state = gve_dequeue_buf_state(rx, &rx->dqo.recycled_buf_states); 120 if (likely(buf_state)) 121 return buf_state; 122 123 if (unlikely(rx->dqo.used_buf_states.head == -1)) 124 return NULL; 125 126 /* Used buf states are only usable when ref count reaches 0, which means 127 * no SKBs refer to them. 128 * 129 * Search a limited number before giving up. 130 */ 131 for (i = 0; i < 5; i++) { 132 buf_state = gve_dequeue_buf_state(rx, &rx->dqo.used_buf_states); 133 if (gve_buf_ref_cnt(buf_state) == 0) 134 return buf_state; 135 136 gve_enqueue_buf_state(rx, &rx->dqo.used_buf_states, buf_state); 137 } 138 139 /* If there are no free buf states discard an entry from 140 * `used_buf_states` so it can be used. 141 */ 142 if (unlikely(rx->dqo.free_buf_states == -1)) { 143 buf_state = gve_dequeue_buf_state(rx, &rx->dqo.used_buf_states); 144 if (gve_buf_ref_cnt(buf_state) == 0) 145 return buf_state; 146 147 gve_free_page_dqo(rx->gve, buf_state); 148 gve_free_buf_state(rx, buf_state); 149 } 150 151 return NULL; 152} 153 154static int gve_alloc_page_dqo(struct gve_priv *priv, 155 struct gve_rx_buf_state_dqo *buf_state) 156{ 157 int err; 158 159 err = gve_alloc_page(priv, &priv->pdev->dev, &buf_state->page_info.page, 160 &buf_state->addr, DMA_FROM_DEVICE, GFP_KERNEL); 161 if (err) 162 return err; 163 164 buf_state->page_info.page_offset = 0; 165 buf_state->page_info.page_address = 166 page_address(buf_state->page_info.page); 167 buf_state->last_single_ref_offset = 0; 168 169 /* The page already has 1 ref. */ 170 page_ref_add(buf_state->page_info.page, INT_MAX - 1); 171 buf_state->page_info.pagecnt_bias = INT_MAX; 172 173 return 0; 174} 175 176static void gve_rx_free_ring_dqo(struct gve_priv *priv, int idx) 177{ 178 struct gve_rx_ring *rx = &priv->rx[idx]; 179 struct device *hdev = &priv->pdev->dev; 180 size_t completion_queue_slots; 181 size_t buffer_queue_slots; 182 size_t size; 183 int i; 184 185 completion_queue_slots = rx->dqo.complq.mask + 1; 186 buffer_queue_slots = rx->dqo.bufq.mask + 1; 187 188 gve_rx_remove_from_block(priv, idx); 189 190 if (rx->q_resources) { 191 dma_free_coherent(hdev, sizeof(*rx->q_resources), 192 rx->q_resources, rx->q_resources_bus); 193 rx->q_resources = NULL; 194 } 195 196 for (i = 0; i < rx->dqo.num_buf_states; i++) { 197 struct gve_rx_buf_state_dqo *bs = &rx->dqo.buf_states[i]; 198 199 if (bs->page_info.page) 200 gve_free_page_dqo(priv, bs); 201 } 202 203 if (rx->dqo.bufq.desc_ring) { 204 size = sizeof(rx->dqo.bufq.desc_ring[0]) * buffer_queue_slots; 205 dma_free_coherent(hdev, size, rx->dqo.bufq.desc_ring, 206 rx->dqo.bufq.bus); 207 rx->dqo.bufq.desc_ring = NULL; 208 } 209 210 if (rx->dqo.complq.desc_ring) { 211 size = sizeof(rx->dqo.complq.desc_ring[0]) * 212 completion_queue_slots; 213 dma_free_coherent(hdev, size, rx->dqo.complq.desc_ring, 214 rx->dqo.complq.bus); 215 rx->dqo.complq.desc_ring = NULL; 216 } 217 218 kvfree(rx->dqo.buf_states); 219 rx->dqo.buf_states = NULL; 220 221 netif_dbg(priv, drv, priv->dev, "freed rx ring %d\n", idx); 222} 223 224static int gve_rx_alloc_ring_dqo(struct gve_priv *priv, int idx) 225{ 226 struct gve_rx_ring *rx = &priv->rx[idx]; 227 struct device *hdev = &priv->pdev->dev; 228 size_t size; 229 int i; 230 231 const u32 buffer_queue_slots = 232 priv->options_dqo_rda.rx_buff_ring_entries; 233 const u32 completion_queue_slots = priv->rx_desc_cnt; 234 235 netif_dbg(priv, drv, priv->dev, "allocating rx ring DQO\n"); 236 237 memset(rx, 0, sizeof(*rx)); 238 rx->gve = priv; 239 rx->q_num = idx; 240 rx->dqo.bufq.mask = buffer_queue_slots - 1; 241 rx->dqo.complq.num_free_slots = completion_queue_slots; 242 rx->dqo.complq.mask = completion_queue_slots - 1; 243 rx->ctx.skb_head = NULL; 244 rx->ctx.skb_tail = NULL; 245 246 rx->dqo.num_buf_states = min_t(s16, S16_MAX, buffer_queue_slots * 4); 247 rx->dqo.buf_states = kvcalloc(rx->dqo.num_buf_states, 248 sizeof(rx->dqo.buf_states[0]), 249 GFP_KERNEL); 250 if (!rx->dqo.buf_states) 251 return -ENOMEM; 252 253 /* Set up linked list of buffer IDs */ 254 for (i = 0; i < rx->dqo.num_buf_states - 1; i++) 255 rx->dqo.buf_states[i].next = i + 1; 256 257 rx->dqo.buf_states[rx->dqo.num_buf_states - 1].next = -1; 258 rx->dqo.recycled_buf_states.head = -1; 259 rx->dqo.recycled_buf_states.tail = -1; 260 rx->dqo.used_buf_states.head = -1; 261 rx->dqo.used_buf_states.tail = -1; 262 263 /* Allocate RX completion queue */ 264 size = sizeof(rx->dqo.complq.desc_ring[0]) * 265 completion_queue_slots; 266 rx->dqo.complq.desc_ring = 267 dma_alloc_coherent(hdev, size, &rx->dqo.complq.bus, GFP_KERNEL); 268 if (!rx->dqo.complq.desc_ring) 269 goto err; 270 271 /* Allocate RX buffer queue */ 272 size = sizeof(rx->dqo.bufq.desc_ring[0]) * buffer_queue_slots; 273 rx->dqo.bufq.desc_ring = 274 dma_alloc_coherent(hdev, size, &rx->dqo.bufq.bus, GFP_KERNEL); 275 if (!rx->dqo.bufq.desc_ring) 276 goto err; 277 278 rx->q_resources = dma_alloc_coherent(hdev, sizeof(*rx->q_resources), 279 &rx->q_resources_bus, GFP_KERNEL); 280 if (!rx->q_resources) 281 goto err; 282 283 gve_rx_add_to_block(priv, idx); 284 285 return 0; 286 287err: 288 gve_rx_free_ring_dqo(priv, idx); 289 return -ENOMEM; 290} 291 292void gve_rx_write_doorbell_dqo(const struct gve_priv *priv, int queue_idx) 293{ 294 const struct gve_rx_ring *rx = &priv->rx[queue_idx]; 295 u64 index = be32_to_cpu(rx->q_resources->db_index); 296 297 iowrite32(rx->dqo.bufq.tail, &priv->db_bar2[index]); 298} 299 300int gve_rx_alloc_rings_dqo(struct gve_priv *priv) 301{ 302 int err = 0; 303 int i; 304 305 for (i = 0; i < priv->rx_cfg.num_queues; i++) { 306 err = gve_rx_alloc_ring_dqo(priv, i); 307 if (err) { 308 netif_err(priv, drv, priv->dev, 309 "Failed to alloc rx ring=%d: err=%d\n", 310 i, err); 311 goto err; 312 } 313 } 314 315 return 0; 316 317err: 318 for (i--; i >= 0; i--) 319 gve_rx_free_ring_dqo(priv, i); 320 321 return err; 322} 323 324void gve_rx_free_rings_dqo(struct gve_priv *priv) 325{ 326 int i; 327 328 for (i = 0; i < priv->rx_cfg.num_queues; i++) 329 gve_rx_free_ring_dqo(priv, i); 330} 331 332void gve_rx_post_buffers_dqo(struct gve_rx_ring *rx) 333{ 334 struct gve_rx_compl_queue_dqo *complq = &rx->dqo.complq; 335 struct gve_rx_buf_queue_dqo *bufq = &rx->dqo.bufq; 336 struct gve_priv *priv = rx->gve; 337 u32 num_avail_slots; 338 u32 num_full_slots; 339 u32 num_posted = 0; 340 341 num_full_slots = (bufq->tail - bufq->head) & bufq->mask; 342 num_avail_slots = bufq->mask - num_full_slots; 343 344 num_avail_slots = min_t(u32, num_avail_slots, complq->num_free_slots); 345 while (num_posted < num_avail_slots) { 346 struct gve_rx_desc_dqo *desc = &bufq->desc_ring[bufq->tail]; 347 struct gve_rx_buf_state_dqo *buf_state; 348 349 buf_state = gve_get_recycled_buf_state(rx); 350 if (unlikely(!buf_state)) { 351 buf_state = gve_alloc_buf_state(rx); 352 if (unlikely(!buf_state)) 353 break; 354 355 if (unlikely(gve_alloc_page_dqo(priv, buf_state))) { 356 u64_stats_update_begin(&rx->statss); 357 rx->rx_buf_alloc_fail++; 358 u64_stats_update_end(&rx->statss); 359 gve_free_buf_state(rx, buf_state); 360 break; 361 } 362 } 363 364 desc->buf_id = cpu_to_le16(buf_state - rx->dqo.buf_states); 365 desc->buf_addr = cpu_to_le64(buf_state->addr + 366 buf_state->page_info.page_offset); 367 368 bufq->tail = (bufq->tail + 1) & bufq->mask; 369 complq->num_free_slots--; 370 num_posted++; 371 372 if ((bufq->tail & (GVE_RX_BUF_THRESH_DQO - 1)) == 0) 373 gve_rx_write_doorbell_dqo(priv, rx->q_num); 374 } 375 376 rx->fill_cnt += num_posted; 377} 378 379static void gve_try_recycle_buf(struct gve_priv *priv, struct gve_rx_ring *rx, 380 struct gve_rx_buf_state_dqo *buf_state) 381{ 382 const int data_buffer_size = priv->data_buffer_size_dqo; 383 int pagecount; 384 385 /* Can't reuse if we only fit one buffer per page */ 386 if (data_buffer_size * 2 > PAGE_SIZE) 387 goto mark_used; 388 389 pagecount = gve_buf_ref_cnt(buf_state); 390 391 /* Record the offset when we have a single remaining reference. 392 * 393 * When this happens, we know all of the other offsets of the page are 394 * usable. 395 */ 396 if (pagecount == 1) { 397 buf_state->last_single_ref_offset = 398 buf_state->page_info.page_offset; 399 } 400 401 /* Use the next buffer sized chunk in the page. */ 402 buf_state->page_info.page_offset += data_buffer_size; 403 buf_state->page_info.page_offset &= (PAGE_SIZE - 1); 404 405 /* If we wrap around to the same offset without ever dropping to 1 406 * reference, then we don't know if this offset was ever freed. 407 */ 408 if (buf_state->page_info.page_offset == 409 buf_state->last_single_ref_offset) { 410 goto mark_used; 411 } 412 413 gve_enqueue_buf_state(rx, &rx->dqo.recycled_buf_states, buf_state); 414 return; 415 416mark_used: 417 gve_enqueue_buf_state(rx, &rx->dqo.used_buf_states, buf_state); 418} 419 420static void gve_rx_skb_csum(struct sk_buff *skb, 421 const struct gve_rx_compl_desc_dqo *desc, 422 struct gve_ptype ptype) 423{ 424 skb->ip_summed = CHECKSUM_NONE; 425 426 /* HW did not identify and process L3 and L4 headers. */ 427 if (unlikely(!desc->l3_l4_processed)) 428 return; 429 430 if (ptype.l3_type == GVE_L3_TYPE_IPV4) { 431 if (unlikely(desc->csum_ip_err || desc->csum_external_ip_err)) 432 return; 433 } else if (ptype.l3_type == GVE_L3_TYPE_IPV6) { 434 /* Checksum should be skipped if this flag is set. */ 435 if (unlikely(desc->ipv6_ex_add)) 436 return; 437 } 438 439 if (unlikely(desc->csum_l4_err)) 440 return; 441 442 switch (ptype.l4_type) { 443 case GVE_L4_TYPE_TCP: 444 case GVE_L4_TYPE_UDP: 445 case GVE_L4_TYPE_ICMP: 446 case GVE_L4_TYPE_SCTP: 447 skb->ip_summed = CHECKSUM_UNNECESSARY; 448 break; 449 default: 450 break; 451 } 452} 453 454static void gve_rx_skb_hash(struct sk_buff *skb, 455 const struct gve_rx_compl_desc_dqo *compl_desc, 456 struct gve_ptype ptype) 457{ 458 enum pkt_hash_types hash_type = PKT_HASH_TYPE_L2; 459 460 if (ptype.l4_type != GVE_L4_TYPE_UNKNOWN) 461 hash_type = PKT_HASH_TYPE_L4; 462 else if (ptype.l3_type != GVE_L3_TYPE_UNKNOWN) 463 hash_type = PKT_HASH_TYPE_L3; 464 465 skb_set_hash(skb, le32_to_cpu(compl_desc->hash), hash_type); 466} 467 468static void gve_rx_free_skb(struct gve_rx_ring *rx) 469{ 470 if (!rx->ctx.skb_head) 471 return; 472 473 dev_kfree_skb_any(rx->ctx.skb_head); 474 rx->ctx.skb_head = NULL; 475 rx->ctx.skb_tail = NULL; 476} 477 478/* Chains multi skbs for single rx packet. 479 * Returns 0 if buffer is appended, -1 otherwise. 480 */ 481static int gve_rx_append_frags(struct napi_struct *napi, 482 struct gve_rx_buf_state_dqo *buf_state, 483 u16 buf_len, struct gve_rx_ring *rx, 484 struct gve_priv *priv) 485{ 486 int num_frags = skb_shinfo(rx->ctx.skb_tail)->nr_frags; 487 488 if (unlikely(num_frags == MAX_SKB_FRAGS)) { 489 struct sk_buff *skb; 490 491 skb = napi_alloc_skb(napi, 0); 492 if (!skb) 493 return -1; 494 495 skb_shinfo(rx->ctx.skb_tail)->frag_list = skb; 496 rx->ctx.skb_tail = skb; 497 num_frags = 0; 498 } 499 if (rx->ctx.skb_tail != rx->ctx.skb_head) { 500 rx->ctx.skb_head->len += buf_len; 501 rx->ctx.skb_head->data_len += buf_len; 502 rx->ctx.skb_head->truesize += priv->data_buffer_size_dqo; 503 } 504 505 skb_add_rx_frag(rx->ctx.skb_tail, num_frags, 506 buf_state->page_info.page, 507 buf_state->page_info.page_offset, 508 buf_len, priv->data_buffer_size_dqo); 509 gve_dec_pagecnt_bias(&buf_state->page_info); 510 511 return 0; 512} 513 514/* Returns 0 if descriptor is completed successfully. 515 * Returns -EINVAL if descriptor is invalid. 516 * Returns -ENOMEM if data cannot be copied to skb. 517 */ 518static int gve_rx_dqo(struct napi_struct *napi, struct gve_rx_ring *rx, 519 const struct gve_rx_compl_desc_dqo *compl_desc, 520 int queue_idx) 521{ 522 const u16 buffer_id = le16_to_cpu(compl_desc->buf_id); 523 const bool eop = compl_desc->end_of_packet != 0; 524 struct gve_rx_buf_state_dqo *buf_state; 525 struct gve_priv *priv = rx->gve; 526 u16 buf_len; 527 528 if (unlikely(buffer_id >= rx->dqo.num_buf_states)) { 529 net_err_ratelimited("%s: Invalid RX buffer_id=%u\n", 530 priv->dev->name, buffer_id); 531 return -EINVAL; 532 } 533 buf_state = &rx->dqo.buf_states[buffer_id]; 534 if (unlikely(!gve_buf_state_is_allocated(rx, buf_state))) { 535 net_err_ratelimited("%s: RX buffer_id is not allocated: %u\n", 536 priv->dev->name, buffer_id); 537 return -EINVAL; 538 } 539 540 if (unlikely(compl_desc->rx_error)) { 541 gve_enqueue_buf_state(rx, &rx->dqo.recycled_buf_states, 542 buf_state); 543 return -EINVAL; 544 } 545 546 buf_len = compl_desc->packet_len; 547 548 /* Page might have not been used for awhile and was likely last written 549 * by a different thread. 550 */ 551 prefetch(buf_state->page_info.page); 552 553 /* Sync the portion of dma buffer for CPU to read. */ 554 dma_sync_single_range_for_cpu(&priv->pdev->dev, buf_state->addr, 555 buf_state->page_info.page_offset, 556 buf_len, DMA_FROM_DEVICE); 557 558 /* Append to current skb if one exists. */ 559 if (rx->ctx.skb_head) { 560 if (unlikely(gve_rx_append_frags(napi, buf_state, buf_len, rx, 561 priv)) != 0) { 562 goto error; 563 } 564 565 gve_try_recycle_buf(priv, rx, buf_state); 566 return 0; 567 } 568 569 if (eop && buf_len <= priv->rx_copybreak) { 570 rx->ctx.skb_head = gve_rx_copy(priv->dev, napi, 571 &buf_state->page_info, buf_len, 0, NULL); 572 if (unlikely(!rx->ctx.skb_head)) 573 goto error; 574 rx->ctx.skb_tail = rx->ctx.skb_head; 575 576 u64_stats_update_begin(&rx->statss); 577 rx->rx_copied_pkt++; 578 rx->rx_copybreak_pkt++; 579 u64_stats_update_end(&rx->statss); 580 581 gve_enqueue_buf_state(rx, &rx->dqo.recycled_buf_states, 582 buf_state); 583 return 0; 584 } 585 586 rx->ctx.skb_head = napi_get_frags(napi); 587 if (unlikely(!rx->ctx.skb_head)) 588 goto error; 589 rx->ctx.skb_tail = rx->ctx.skb_head; 590 591 skb_add_rx_frag(rx->ctx.skb_head, 0, buf_state->page_info.page, 592 buf_state->page_info.page_offset, buf_len, 593 priv->data_buffer_size_dqo); 594 gve_dec_pagecnt_bias(&buf_state->page_info); 595 596 gve_try_recycle_buf(priv, rx, buf_state); 597 return 0; 598 599error: 600 gve_enqueue_buf_state(rx, &rx->dqo.recycled_buf_states, buf_state); 601 return -ENOMEM; 602} 603 604static int gve_rx_complete_rsc(struct sk_buff *skb, 605 const struct gve_rx_compl_desc_dqo *desc, 606 struct gve_ptype ptype) 607{ 608 struct skb_shared_info *shinfo = skb_shinfo(skb); 609 610 /* Only TCP is supported right now. */ 611 if (ptype.l4_type != GVE_L4_TYPE_TCP) 612 return -EINVAL; 613 614 switch (ptype.l3_type) { 615 case GVE_L3_TYPE_IPV4: 616 shinfo->gso_type = SKB_GSO_TCPV4; 617 break; 618 case GVE_L3_TYPE_IPV6: 619 shinfo->gso_type = SKB_GSO_TCPV6; 620 break; 621 default: 622 return -EINVAL; 623 } 624 625 shinfo->gso_size = le16_to_cpu(desc->rsc_seg_len); 626 return 0; 627} 628 629/* Returns 0 if skb is completed successfully, -1 otherwise. */ 630static int gve_rx_complete_skb(struct gve_rx_ring *rx, struct napi_struct *napi, 631 const struct gve_rx_compl_desc_dqo *desc, 632 netdev_features_t feat) 633{ 634 struct gve_ptype ptype = 635 rx->gve->ptype_lut_dqo->ptypes[desc->packet_type]; 636 int err; 637 638 skb_record_rx_queue(rx->ctx.skb_head, rx->q_num); 639 640 if (feat & NETIF_F_RXHASH) 641 gve_rx_skb_hash(rx->ctx.skb_head, desc, ptype); 642 643 if (feat & NETIF_F_RXCSUM) 644 gve_rx_skb_csum(rx->ctx.skb_head, desc, ptype); 645 646 /* RSC packets must set gso_size otherwise the TCP stack will complain 647 * that packets are larger than MTU. 648 */ 649 if (desc->rsc) { 650 err = gve_rx_complete_rsc(rx->ctx.skb_head, desc, ptype); 651 if (err < 0) 652 return err; 653 } 654 655 if (skb_headlen(rx->ctx.skb_head) == 0) 656 napi_gro_frags(napi); 657 else 658 napi_gro_receive(napi, rx->ctx.skb_head); 659 660 return 0; 661} 662 663int gve_rx_poll_dqo(struct gve_notify_block *block, int budget) 664{ 665 struct napi_struct *napi = &block->napi; 666 netdev_features_t feat = napi->dev->features; 667 668 struct gve_rx_ring *rx = block->rx; 669 struct gve_rx_compl_queue_dqo *complq = &rx->dqo.complq; 670 671 u32 work_done = 0; 672 u64 bytes = 0; 673 int err; 674 675 while (work_done < budget) { 676 struct gve_rx_compl_desc_dqo *compl_desc = 677 &complq->desc_ring[complq->head]; 678 u32 pkt_bytes; 679 680 /* No more new packets */ 681 if (compl_desc->generation == complq->cur_gen_bit) 682 break; 683 684 /* Prefetch the next two descriptors. */ 685 prefetch(&complq->desc_ring[(complq->head + 1) & complq->mask]); 686 prefetch(&complq->desc_ring[(complq->head + 2) & complq->mask]); 687 688 /* Do not read data until we own the descriptor */ 689 dma_rmb(); 690 691 err = gve_rx_dqo(napi, rx, compl_desc, rx->q_num); 692 if (err < 0) { 693 gve_rx_free_skb(rx); 694 u64_stats_update_begin(&rx->statss); 695 if (err == -ENOMEM) 696 rx->rx_skb_alloc_fail++; 697 else if (err == -EINVAL) 698 rx->rx_desc_err_dropped_pkt++; 699 u64_stats_update_end(&rx->statss); 700 } 701 702 complq->head = (complq->head + 1) & complq->mask; 703 complq->num_free_slots++; 704 705 /* When the ring wraps, the generation bit is flipped. */ 706 complq->cur_gen_bit ^= (complq->head == 0); 707 708 /* Receiving a completion means we have space to post another 709 * buffer on the buffer queue. 710 */ 711 { 712 struct gve_rx_buf_queue_dqo *bufq = &rx->dqo.bufq; 713 714 bufq->head = (bufq->head + 1) & bufq->mask; 715 } 716 717 /* Free running counter of completed descriptors */ 718 rx->cnt++; 719 720 if (!rx->ctx.skb_head) 721 continue; 722 723 if (!compl_desc->end_of_packet) 724 continue; 725 726 work_done++; 727 pkt_bytes = rx->ctx.skb_head->len; 728 /* The ethernet header (first ETH_HLEN bytes) is snipped off 729 * by eth_type_trans. 730 */ 731 if (skb_headlen(rx->ctx.skb_head)) 732 pkt_bytes += ETH_HLEN; 733 734 /* gve_rx_complete_skb() will consume skb if successful */ 735 if (gve_rx_complete_skb(rx, napi, compl_desc, feat) != 0) { 736 gve_rx_free_skb(rx); 737 u64_stats_update_begin(&rx->statss); 738 rx->rx_desc_err_dropped_pkt++; 739 u64_stats_update_end(&rx->statss); 740 continue; 741 } 742 743 bytes += pkt_bytes; 744 rx->ctx.skb_head = NULL; 745 rx->ctx.skb_tail = NULL; 746 } 747 748 gve_rx_post_buffers_dqo(rx); 749 750 u64_stats_update_begin(&rx->statss); 751 rx->rpackets += work_done; 752 rx->rbytes += bytes; 753 u64_stats_update_end(&rx->statss); 754 755 return work_done; 756}