Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 17431928194b36a0f88082df875e2e036da7fddf 723 lines 21 kB view raw
1/**************************************************************************** 2 * Driver for Solarflare Solarstorm network controllers and boards 3 * Copyright 2005-2006 Fen Systems Ltd. 4 * Copyright 2005-2009 Solarflare Communications Inc. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 as published 8 * by the Free Software Foundation, incorporated herein by reference. 9 */ 10 11#include <linux/socket.h> 12#include <linux/in.h> 13#include <linux/slab.h> 14#include <linux/ip.h> 15#include <linux/tcp.h> 16#include <linux/udp.h> 17#include <net/ip.h> 18#include <net/checksum.h> 19#include "net_driver.h" 20#include "efx.h" 21#include "nic.h" 22#include "selftest.h" 23#include "workarounds.h" 24 25/* Number of RX descriptors pushed at once. */ 26#define EFX_RX_BATCH 8 27 28/* Size of buffer allocated for skb header area. */ 29#define EFX_SKB_HEADERS 64u 30 31/* 32 * rx_alloc_method - RX buffer allocation method 33 * 34 * This driver supports two methods for allocating and using RX buffers: 35 * each RX buffer may be backed by an skb or by an order-n page. 36 * 37 * When LRO is in use then the second method has a lower overhead, 38 * since we don't have to allocate then free skbs on reassembled frames. 39 * 40 * Values: 41 * - RX_ALLOC_METHOD_AUTO = 0 42 * - RX_ALLOC_METHOD_SKB = 1 43 * - RX_ALLOC_METHOD_PAGE = 2 44 * 45 * The heuristic for %RX_ALLOC_METHOD_AUTO is a simple hysteresis count 46 * controlled by the parameters below. 47 * 48 * - Since pushing and popping descriptors are separated by the rx_queue 49 * size, so the watermarks should be ~rxd_size. 50 * - The performance win by using page-based allocation for LRO is less 51 * than the performance hit of using page-based allocation of non-LRO, 52 * so the watermarks should reflect this. 53 * 54 * Per channel we maintain a single variable, updated by each channel: 55 * 56 * rx_alloc_level += (lro_performed ? RX_ALLOC_FACTOR_LRO : 57 * RX_ALLOC_FACTOR_SKB) 58 * Per NAPI poll interval, we constrain rx_alloc_level to 0..MAX (which 59 * limits the hysteresis), and update the allocation strategy: 60 * 61 * rx_alloc_method = (rx_alloc_level > RX_ALLOC_LEVEL_LRO ? 62 * RX_ALLOC_METHOD_PAGE : RX_ALLOC_METHOD_SKB) 63 */ 64static int rx_alloc_method = RX_ALLOC_METHOD_AUTO; 65 66#define RX_ALLOC_LEVEL_LRO 0x2000 67#define RX_ALLOC_LEVEL_MAX 0x3000 68#define RX_ALLOC_FACTOR_LRO 1 69#define RX_ALLOC_FACTOR_SKB (-2) 70 71/* This is the percentage fill level below which new RX descriptors 72 * will be added to the RX descriptor ring. 73 */ 74static unsigned int rx_refill_threshold = 90; 75 76/* This is the percentage fill level to which an RX queue will be refilled 77 * when the "RX refill threshold" is reached. 78 */ 79static unsigned int rx_refill_limit = 95; 80 81/* 82 * RX maximum head room required. 83 * 84 * This must be at least 1 to prevent overflow and at least 2 to allow 85 * pipelined receives. 86 */ 87#define EFX_RXD_HEAD_ROOM 2 88 89static inline unsigned int efx_rx_buf_offset(struct efx_rx_buffer *buf) 90{ 91 /* Offset is always within one page, so we don't need to consider 92 * the page order. 93 */ 94 return (__force unsigned long) buf->data & (PAGE_SIZE - 1); 95} 96static inline unsigned int efx_rx_buf_size(struct efx_nic *efx) 97{ 98 return PAGE_SIZE << efx->rx_buffer_order; 99} 100 101 102/** 103 * efx_init_rx_buffer_skb - create new RX buffer using skb-based allocation 104 * 105 * @rx_queue: Efx RX queue 106 * @rx_buf: RX buffer structure to populate 107 * 108 * This allocates memory for a new receive buffer, maps it for DMA, 109 * and populates a struct efx_rx_buffer with the relevant 110 * information. Return a negative error code or 0 on success. 111 */ 112static int efx_init_rx_buffer_skb(struct efx_rx_queue *rx_queue, 113 struct efx_rx_buffer *rx_buf) 114{ 115 struct efx_nic *efx = rx_queue->efx; 116 struct net_device *net_dev = efx->net_dev; 117 int skb_len = efx->rx_buffer_len; 118 119 rx_buf->skb = netdev_alloc_skb(net_dev, skb_len); 120 if (unlikely(!rx_buf->skb)) 121 return -ENOMEM; 122 123 /* Adjust the SKB for padding and checksum */ 124 skb_reserve(rx_buf->skb, NET_IP_ALIGN); 125 rx_buf->len = skb_len - NET_IP_ALIGN; 126 rx_buf->data = (char *)rx_buf->skb->data; 127 rx_buf->skb->ip_summed = CHECKSUM_UNNECESSARY; 128 129 rx_buf->dma_addr = pci_map_single(efx->pci_dev, 130 rx_buf->data, rx_buf->len, 131 PCI_DMA_FROMDEVICE); 132 133 if (unlikely(pci_dma_mapping_error(efx->pci_dev, rx_buf->dma_addr))) { 134 dev_kfree_skb_any(rx_buf->skb); 135 rx_buf->skb = NULL; 136 return -EIO; 137 } 138 139 return 0; 140} 141 142/** 143 * efx_init_rx_buffer_page - create new RX buffer using page-based allocation 144 * 145 * @rx_queue: Efx RX queue 146 * @rx_buf: RX buffer structure to populate 147 * 148 * This allocates memory for a new receive buffer, maps it for DMA, 149 * and populates a struct efx_rx_buffer with the relevant 150 * information. Return a negative error code or 0 on success. 151 */ 152static int efx_init_rx_buffer_page(struct efx_rx_queue *rx_queue, 153 struct efx_rx_buffer *rx_buf) 154{ 155 struct efx_nic *efx = rx_queue->efx; 156 int bytes, space, offset; 157 158 bytes = efx->rx_buffer_len - EFX_PAGE_IP_ALIGN; 159 160 /* If there is space left in the previously allocated page, 161 * then use it. Otherwise allocate a new one */ 162 rx_buf->page = rx_queue->buf_page; 163 if (rx_buf->page == NULL) { 164 dma_addr_t dma_addr; 165 166 rx_buf->page = alloc_pages(__GFP_COLD | __GFP_COMP | GFP_ATOMIC, 167 efx->rx_buffer_order); 168 if (unlikely(rx_buf->page == NULL)) 169 return -ENOMEM; 170 171 dma_addr = pci_map_page(efx->pci_dev, rx_buf->page, 172 0, efx_rx_buf_size(efx), 173 PCI_DMA_FROMDEVICE); 174 175 if (unlikely(pci_dma_mapping_error(efx->pci_dev, dma_addr))) { 176 __free_pages(rx_buf->page, efx->rx_buffer_order); 177 rx_buf->page = NULL; 178 return -EIO; 179 } 180 181 rx_queue->buf_page = rx_buf->page; 182 rx_queue->buf_dma_addr = dma_addr; 183 rx_queue->buf_data = (page_address(rx_buf->page) + 184 EFX_PAGE_IP_ALIGN); 185 } 186 187 rx_buf->len = bytes; 188 rx_buf->data = rx_queue->buf_data; 189 offset = efx_rx_buf_offset(rx_buf); 190 rx_buf->dma_addr = rx_queue->buf_dma_addr + offset; 191 192 /* Try to pack multiple buffers per page */ 193 if (efx->rx_buffer_order == 0) { 194 /* The next buffer starts on the next 512 byte boundary */ 195 rx_queue->buf_data += ((bytes + 0x1ff) & ~0x1ff); 196 offset += ((bytes + 0x1ff) & ~0x1ff); 197 198 space = efx_rx_buf_size(efx) - offset; 199 if (space >= bytes) { 200 /* Refs dropped on kernel releasing each skb */ 201 get_page(rx_queue->buf_page); 202 goto out; 203 } 204 } 205 206 /* This is the final RX buffer for this page, so mark it for 207 * unmapping */ 208 rx_queue->buf_page = NULL; 209 rx_buf->unmap_addr = rx_queue->buf_dma_addr; 210 211 out: 212 return 0; 213} 214 215/* This allocates memory for a new receive buffer, maps it for DMA, 216 * and populates a struct efx_rx_buffer with the relevant 217 * information. 218 */ 219static int efx_init_rx_buffer(struct efx_rx_queue *rx_queue, 220 struct efx_rx_buffer *new_rx_buf) 221{ 222 int rc = 0; 223 224 if (rx_queue->channel->rx_alloc_push_pages) { 225 new_rx_buf->skb = NULL; 226 rc = efx_init_rx_buffer_page(rx_queue, new_rx_buf); 227 rx_queue->alloc_page_count++; 228 } else { 229 new_rx_buf->page = NULL; 230 rc = efx_init_rx_buffer_skb(rx_queue, new_rx_buf); 231 rx_queue->alloc_skb_count++; 232 } 233 234 if (unlikely(rc < 0)) 235 EFX_LOG_RL(rx_queue->efx, "%s RXQ[%d] =%d\n", __func__, 236 rx_queue->queue, rc); 237 return rc; 238} 239 240static void efx_unmap_rx_buffer(struct efx_nic *efx, 241 struct efx_rx_buffer *rx_buf) 242{ 243 if (rx_buf->page) { 244 EFX_BUG_ON_PARANOID(rx_buf->skb); 245 if (rx_buf->unmap_addr) { 246 pci_unmap_page(efx->pci_dev, rx_buf->unmap_addr, 247 efx_rx_buf_size(efx), 248 PCI_DMA_FROMDEVICE); 249 rx_buf->unmap_addr = 0; 250 } 251 } else if (likely(rx_buf->skb)) { 252 pci_unmap_single(efx->pci_dev, rx_buf->dma_addr, 253 rx_buf->len, PCI_DMA_FROMDEVICE); 254 } 255} 256 257static void efx_free_rx_buffer(struct efx_nic *efx, 258 struct efx_rx_buffer *rx_buf) 259{ 260 if (rx_buf->page) { 261 __free_pages(rx_buf->page, efx->rx_buffer_order); 262 rx_buf->page = NULL; 263 } else if (likely(rx_buf->skb)) { 264 dev_kfree_skb_any(rx_buf->skb); 265 rx_buf->skb = NULL; 266 } 267} 268 269static void efx_fini_rx_buffer(struct efx_rx_queue *rx_queue, 270 struct efx_rx_buffer *rx_buf) 271{ 272 efx_unmap_rx_buffer(rx_queue->efx, rx_buf); 273 efx_free_rx_buffer(rx_queue->efx, rx_buf); 274} 275 276/** 277 * efx_fast_push_rx_descriptors - push new RX descriptors quickly 278 * @rx_queue: RX descriptor queue 279 * @retry: Recheck the fill level 280 * This will aim to fill the RX descriptor queue up to 281 * @rx_queue->@fast_fill_limit. If there is insufficient atomic 282 * memory to do so, the caller should retry. 283 */ 284static int __efx_fast_push_rx_descriptors(struct efx_rx_queue *rx_queue, 285 int retry) 286{ 287 struct efx_rx_buffer *rx_buf; 288 unsigned fill_level, index; 289 int i, space, rc = 0; 290 291 /* Calculate current fill level. Do this outside the lock, 292 * because most of the time we'll end up not wanting to do the 293 * fill anyway. 294 */ 295 fill_level = (rx_queue->added_count - rx_queue->removed_count); 296 EFX_BUG_ON_PARANOID(fill_level > EFX_RXQ_SIZE); 297 298 /* Don't fill if we don't need to */ 299 if (fill_level >= rx_queue->fast_fill_trigger) 300 return 0; 301 302 /* Record minimum fill level */ 303 if (unlikely(fill_level < rx_queue->min_fill)) { 304 if (fill_level) 305 rx_queue->min_fill = fill_level; 306 } 307 308 /* Acquire RX add lock. If this lock is contended, then a fast 309 * fill must already be in progress (e.g. in the refill 310 * tasklet), so we don't need to do anything 311 */ 312 if (!spin_trylock_bh(&rx_queue->add_lock)) 313 return -1; 314 315 retry: 316 /* Recalculate current fill level now that we have the lock */ 317 fill_level = (rx_queue->added_count - rx_queue->removed_count); 318 EFX_BUG_ON_PARANOID(fill_level > EFX_RXQ_SIZE); 319 space = rx_queue->fast_fill_limit - fill_level; 320 if (space < EFX_RX_BATCH) 321 goto out_unlock; 322 323 EFX_TRACE(rx_queue->efx, "RX queue %d fast-filling descriptor ring from" 324 " level %d to level %d using %s allocation\n", 325 rx_queue->queue, fill_level, rx_queue->fast_fill_limit, 326 rx_queue->channel->rx_alloc_push_pages ? "page" : "skb"); 327 328 do { 329 for (i = 0; i < EFX_RX_BATCH; ++i) { 330 index = rx_queue->added_count & EFX_RXQ_MASK; 331 rx_buf = efx_rx_buffer(rx_queue, index); 332 rc = efx_init_rx_buffer(rx_queue, rx_buf); 333 if (unlikely(rc)) 334 goto out; 335 ++rx_queue->added_count; 336 } 337 } while ((space -= EFX_RX_BATCH) >= EFX_RX_BATCH); 338 339 EFX_TRACE(rx_queue->efx, "RX queue %d fast-filled descriptor ring " 340 "to level %d\n", rx_queue->queue, 341 rx_queue->added_count - rx_queue->removed_count); 342 343 out: 344 /* Send write pointer to card. */ 345 efx_nic_notify_rx_desc(rx_queue); 346 347 /* If the fast fill is running inside from the refill tasklet, then 348 * for SMP systems it may be running on a different CPU to 349 * RX event processing, which means that the fill level may now be 350 * out of date. */ 351 if (unlikely(retry && (rc == 0))) 352 goto retry; 353 354 out_unlock: 355 spin_unlock_bh(&rx_queue->add_lock); 356 357 return rc; 358} 359 360/** 361 * efx_fast_push_rx_descriptors - push new RX descriptors quickly 362 * @rx_queue: RX descriptor queue 363 * 364 * This will aim to fill the RX descriptor queue up to 365 * @rx_queue->@fast_fill_limit. If there is insufficient memory to do so, 366 * it will schedule a work item to immediately continue the fast fill 367 */ 368void efx_fast_push_rx_descriptors(struct efx_rx_queue *rx_queue) 369{ 370 int rc; 371 372 rc = __efx_fast_push_rx_descriptors(rx_queue, 0); 373 if (unlikely(rc)) { 374 /* Schedule the work item to run immediately. The hope is 375 * that work is immediately pending to free some memory 376 * (e.g. an RX event or TX completion) 377 */ 378 efx_schedule_slow_fill(rx_queue, 0); 379 } 380} 381 382void efx_rx_work(struct work_struct *data) 383{ 384 struct efx_rx_queue *rx_queue; 385 int rc; 386 387 rx_queue = container_of(data, struct efx_rx_queue, work.work); 388 389 if (unlikely(!rx_queue->channel->enabled)) 390 return; 391 392 EFX_TRACE(rx_queue->efx, "RX queue %d worker thread executing on CPU " 393 "%d\n", rx_queue->queue, raw_smp_processor_id()); 394 395 ++rx_queue->slow_fill_count; 396 /* Push new RX descriptors, allowing at least 1 jiffy for 397 * the kernel to free some more memory. */ 398 rc = __efx_fast_push_rx_descriptors(rx_queue, 1); 399 if (rc) 400 efx_schedule_slow_fill(rx_queue, 1); 401} 402 403static void efx_rx_packet__check_len(struct efx_rx_queue *rx_queue, 404 struct efx_rx_buffer *rx_buf, 405 int len, bool *discard, 406 bool *leak_packet) 407{ 408 struct efx_nic *efx = rx_queue->efx; 409 unsigned max_len = rx_buf->len - efx->type->rx_buffer_padding; 410 411 if (likely(len <= max_len)) 412 return; 413 414 /* The packet must be discarded, but this is only a fatal error 415 * if the caller indicated it was 416 */ 417 *discard = true; 418 419 if ((len > rx_buf->len) && EFX_WORKAROUND_8071(efx)) { 420 EFX_ERR_RL(efx, " RX queue %d seriously overlength " 421 "RX event (0x%x > 0x%x+0x%x). Leaking\n", 422 rx_queue->queue, len, max_len, 423 efx->type->rx_buffer_padding); 424 /* If this buffer was skb-allocated, then the meta 425 * data at the end of the skb will be trashed. So 426 * we have no choice but to leak the fragment. 427 */ 428 *leak_packet = (rx_buf->skb != NULL); 429 efx_schedule_reset(efx, RESET_TYPE_RX_RECOVERY); 430 } else { 431 EFX_ERR_RL(efx, " RX queue %d overlength RX event " 432 "(0x%x > 0x%x)\n", rx_queue->queue, len, max_len); 433 } 434 435 rx_queue->channel->n_rx_overlength++; 436} 437 438/* Pass a received packet up through the generic LRO stack 439 * 440 * Handles driverlink veto, and passes the fragment up via 441 * the appropriate LRO method 442 */ 443static void efx_rx_packet_lro(struct efx_channel *channel, 444 struct efx_rx_buffer *rx_buf, 445 bool checksummed) 446{ 447 struct napi_struct *napi = &channel->napi_str; 448 gro_result_t gro_result; 449 450 /* Pass the skb/page into the LRO engine */ 451 if (rx_buf->page) { 452 struct page *page = rx_buf->page; 453 struct sk_buff *skb; 454 455 EFX_BUG_ON_PARANOID(rx_buf->skb); 456 rx_buf->page = NULL; 457 458 skb = napi_get_frags(napi); 459 if (!skb) { 460 put_page(page); 461 return; 462 } 463 464 skb_shinfo(skb)->frags[0].page = page; 465 skb_shinfo(skb)->frags[0].page_offset = 466 efx_rx_buf_offset(rx_buf); 467 skb_shinfo(skb)->frags[0].size = rx_buf->len; 468 skb_shinfo(skb)->nr_frags = 1; 469 470 skb->len = rx_buf->len; 471 skb->data_len = rx_buf->len; 472 skb->truesize += rx_buf->len; 473 skb->ip_summed = 474 checksummed ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE; 475 476 skb_record_rx_queue(skb, channel->channel); 477 478 gro_result = napi_gro_frags(napi); 479 } else { 480 struct sk_buff *skb = rx_buf->skb; 481 482 EFX_BUG_ON_PARANOID(!skb); 483 EFX_BUG_ON_PARANOID(!checksummed); 484 rx_buf->skb = NULL; 485 486 gro_result = napi_gro_receive(napi, skb); 487 } 488 489 if (gro_result == GRO_NORMAL) { 490 channel->rx_alloc_level += RX_ALLOC_FACTOR_SKB; 491 } else if (gro_result != GRO_DROP) { 492 channel->rx_alloc_level += RX_ALLOC_FACTOR_LRO; 493 channel->irq_mod_score += 2; 494 } 495} 496 497void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index, 498 unsigned int len, bool checksummed, bool discard) 499{ 500 struct efx_nic *efx = rx_queue->efx; 501 struct efx_rx_buffer *rx_buf; 502 bool leak_packet = false; 503 504 rx_buf = efx_rx_buffer(rx_queue, index); 505 EFX_BUG_ON_PARANOID(!rx_buf->data); 506 EFX_BUG_ON_PARANOID(rx_buf->skb && rx_buf->page); 507 EFX_BUG_ON_PARANOID(!(rx_buf->skb || rx_buf->page)); 508 509 /* This allows the refill path to post another buffer. 510 * EFX_RXD_HEAD_ROOM ensures that the slot we are using 511 * isn't overwritten yet. 512 */ 513 rx_queue->removed_count++; 514 515 /* Validate the length encoded in the event vs the descriptor pushed */ 516 efx_rx_packet__check_len(rx_queue, rx_buf, len, 517 &discard, &leak_packet); 518 519 EFX_TRACE(efx, "RX queue %d received id %x at %llx+%x %s%s\n", 520 rx_queue->queue, index, 521 (unsigned long long)rx_buf->dma_addr, len, 522 (checksummed ? " [SUMMED]" : ""), 523 (discard ? " [DISCARD]" : "")); 524 525 /* Discard packet, if instructed to do so */ 526 if (unlikely(discard)) { 527 if (unlikely(leak_packet)) 528 rx_queue->channel->n_skbuff_leaks++; 529 else 530 /* We haven't called efx_unmap_rx_buffer yet, 531 * so fini the entire rx_buffer here */ 532 efx_fini_rx_buffer(rx_queue, rx_buf); 533 return; 534 } 535 536 /* Release card resources - assumes all RX buffers consumed in-order 537 * per RX queue 538 */ 539 efx_unmap_rx_buffer(efx, rx_buf); 540 541 /* Prefetch nice and early so data will (hopefully) be in cache by 542 * the time we look at it. 543 */ 544 prefetch(rx_buf->data); 545 546 /* Pipeline receives so that we give time for packet headers to be 547 * prefetched into cache. 548 */ 549 rx_buf->len = len; 550 if (rx_queue->channel->rx_pkt) 551 __efx_rx_packet(rx_queue->channel, 552 rx_queue->channel->rx_pkt, 553 rx_queue->channel->rx_pkt_csummed); 554 rx_queue->channel->rx_pkt = rx_buf; 555 rx_queue->channel->rx_pkt_csummed = checksummed; 556} 557 558/* Handle a received packet. Second half: Touches packet payload. */ 559void __efx_rx_packet(struct efx_channel *channel, 560 struct efx_rx_buffer *rx_buf, bool checksummed) 561{ 562 struct efx_nic *efx = channel->efx; 563 struct sk_buff *skb; 564 565 /* If we're in loopback test, then pass the packet directly to the 566 * loopback layer, and free the rx_buf here 567 */ 568 if (unlikely(efx->loopback_selftest)) { 569 efx_loopback_rx_packet(efx, rx_buf->data, rx_buf->len); 570 efx_free_rx_buffer(efx, rx_buf); 571 return; 572 } 573 574 if (rx_buf->skb) { 575 prefetch(skb_shinfo(rx_buf->skb)); 576 577 skb_put(rx_buf->skb, rx_buf->len); 578 579 /* Move past the ethernet header. rx_buf->data still points 580 * at the ethernet header */ 581 rx_buf->skb->protocol = eth_type_trans(rx_buf->skb, 582 efx->net_dev); 583 584 skb_record_rx_queue(rx_buf->skb, channel->channel); 585 } 586 587 if (likely(checksummed || rx_buf->page)) { 588 efx_rx_packet_lro(channel, rx_buf, checksummed); 589 return; 590 } 591 592 /* We now own the SKB */ 593 skb = rx_buf->skb; 594 rx_buf->skb = NULL; 595 EFX_BUG_ON_PARANOID(!skb); 596 597 /* Set the SKB flags */ 598 skb->ip_summed = CHECKSUM_NONE; 599 600 /* Pass the packet up */ 601 netif_receive_skb(skb); 602 603 /* Update allocation strategy method */ 604 channel->rx_alloc_level += RX_ALLOC_FACTOR_SKB; 605} 606 607void efx_rx_strategy(struct efx_channel *channel) 608{ 609 enum efx_rx_alloc_method method = rx_alloc_method; 610 611 /* Only makes sense to use page based allocation if LRO is enabled */ 612 if (!(channel->efx->net_dev->features & NETIF_F_GRO)) { 613 method = RX_ALLOC_METHOD_SKB; 614 } else if (method == RX_ALLOC_METHOD_AUTO) { 615 /* Constrain the rx_alloc_level */ 616 if (channel->rx_alloc_level < 0) 617 channel->rx_alloc_level = 0; 618 else if (channel->rx_alloc_level > RX_ALLOC_LEVEL_MAX) 619 channel->rx_alloc_level = RX_ALLOC_LEVEL_MAX; 620 621 /* Decide on the allocation method */ 622 method = ((channel->rx_alloc_level > RX_ALLOC_LEVEL_LRO) ? 623 RX_ALLOC_METHOD_PAGE : RX_ALLOC_METHOD_SKB); 624 } 625 626 /* Push the option */ 627 channel->rx_alloc_push_pages = (method == RX_ALLOC_METHOD_PAGE); 628} 629 630int efx_probe_rx_queue(struct efx_rx_queue *rx_queue) 631{ 632 struct efx_nic *efx = rx_queue->efx; 633 unsigned int rxq_size; 634 int rc; 635 636 EFX_LOG(efx, "creating RX queue %d\n", rx_queue->queue); 637 638 /* Allocate RX buffers */ 639 rxq_size = EFX_RXQ_SIZE * sizeof(*rx_queue->buffer); 640 rx_queue->buffer = kzalloc(rxq_size, GFP_KERNEL); 641 if (!rx_queue->buffer) 642 return -ENOMEM; 643 644 rc = efx_nic_probe_rx(rx_queue); 645 if (rc) { 646 kfree(rx_queue->buffer); 647 rx_queue->buffer = NULL; 648 } 649 return rc; 650} 651 652void efx_init_rx_queue(struct efx_rx_queue *rx_queue) 653{ 654 unsigned int max_fill, trigger, limit; 655 656 EFX_LOG(rx_queue->efx, "initialising RX queue %d\n", rx_queue->queue); 657 658 /* Initialise ptr fields */ 659 rx_queue->added_count = 0; 660 rx_queue->notified_count = 0; 661 rx_queue->removed_count = 0; 662 rx_queue->min_fill = -1U; 663 rx_queue->min_overfill = -1U; 664 665 /* Initialise limit fields */ 666 max_fill = EFX_RXQ_SIZE - EFX_RXD_HEAD_ROOM; 667 trigger = max_fill * min(rx_refill_threshold, 100U) / 100U; 668 limit = max_fill * min(rx_refill_limit, 100U) / 100U; 669 670 rx_queue->max_fill = max_fill; 671 rx_queue->fast_fill_trigger = trigger; 672 rx_queue->fast_fill_limit = limit; 673 674 /* Set up RX descriptor ring */ 675 efx_nic_init_rx(rx_queue); 676} 677 678void efx_fini_rx_queue(struct efx_rx_queue *rx_queue) 679{ 680 int i; 681 struct efx_rx_buffer *rx_buf; 682 683 EFX_LOG(rx_queue->efx, "shutting down RX queue %d\n", rx_queue->queue); 684 685 efx_nic_fini_rx(rx_queue); 686 687 /* Release RX buffers NB start at index 0 not current HW ptr */ 688 if (rx_queue->buffer) { 689 for (i = 0; i <= EFX_RXQ_MASK; i++) { 690 rx_buf = efx_rx_buffer(rx_queue, i); 691 efx_fini_rx_buffer(rx_queue, rx_buf); 692 } 693 } 694 695 /* For a page that is part-way through splitting into RX buffers */ 696 if (rx_queue->buf_page != NULL) { 697 pci_unmap_page(rx_queue->efx->pci_dev, rx_queue->buf_dma_addr, 698 efx_rx_buf_size(rx_queue->efx), 699 PCI_DMA_FROMDEVICE); 700 __free_pages(rx_queue->buf_page, 701 rx_queue->efx->rx_buffer_order); 702 rx_queue->buf_page = NULL; 703 } 704} 705 706void efx_remove_rx_queue(struct efx_rx_queue *rx_queue) 707{ 708 EFX_LOG(rx_queue->efx, "destroying RX queue %d\n", rx_queue->queue); 709 710 efx_nic_remove_rx(rx_queue); 711 712 kfree(rx_queue->buffer); 713 rx_queue->buffer = NULL; 714} 715 716 717module_param(rx_alloc_method, int, 0644); 718MODULE_PARM_DESC(rx_alloc_method, "Allocation method used for RX buffers"); 719 720module_param(rx_refill_threshold, uint, 0444); 721MODULE_PARM_DESC(rx_refill_threshold, 722 "RX descriptor ring fast/slow fill threshold (%)"); 723