mirror of
https://github.com/torvalds/linux.git
synced 2024-12-02 00:51:44 +00:00
ixgbe: tweak page counting for XDP_REDIRECT
The current page counting scheme assumes that the reference count cannot decrease until the received frame is sent to the upper layers of the networking stack. This assumption does not hold for the XDP_REDIRECT action, since a page (pointed out by xdp_buff) can have its reference count decreased via the xdp_do_redirect call. To work around that, we now start off by a large page count and then don't allow a refcount less than two. Signed-off-by: Björn Töpel <bjorn.topel@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
2eb34bafb3
commit
ed93a39871
@ -1629,7 +1629,8 @@ static bool ixgbe_alloc_mapped_page(struct ixgbe_ring *rx_ring,
|
||||
bi->dma = dma;
|
||||
bi->page = page;
|
||||
bi->page_offset = ixgbe_rx_offset(rx_ring);
|
||||
bi->pagecnt_bias = 1;
|
||||
page_ref_add(page, USHRT_MAX - 1);
|
||||
bi->pagecnt_bias = USHRT_MAX;
|
||||
rx_ring->rx_stats.alloc_rx_page++;
|
||||
|
||||
return true;
|
||||
@ -2039,8 +2040,8 @@ static bool ixgbe_can_reuse_rx_page(struct ixgbe_rx_buffer *rx_buffer)
|
||||
* the pagecnt_bias and page count so that we fully restock the
|
||||
* number of references the driver holds.
|
||||
*/
|
||||
if (unlikely(!pagecnt_bias)) {
|
||||
page_ref_add(page, USHRT_MAX);
|
||||
if (unlikely(pagecnt_bias == 1)) {
|
||||
page_ref_add(page, USHRT_MAX - 1);
|
||||
rx_buffer->pagecnt_bias = USHRT_MAX;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user