Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 368205
b: refs/heads/master
c: 179ea7f
h: refs/heads/master
i:
  368203: aea2c14
v: v3
  • Loading branch information
Ben Hutchings committed Mar 7, 2013
1 parent 2e37a84 commit 30d4b6a
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2768935a46603bb9bdd121864b1f2b2e8a71cccc
refs/heads/master: 179ea7f039f68ae4247a340bfb59fd861e7def12
1 change: 1 addition & 0 deletions trunk/drivers/net/ethernet/sfc/net_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ struct efx_rx_buffer {
u16 len;
u16 flags;
};
#define EFX_RX_BUF_LAST_IN_PAGE 0x0001
#define EFX_RX_PKT_CSUMMED 0x0002
#define EFX_RX_PKT_DISCARD 0x0004

Expand Down
17 changes: 6 additions & 11 deletions trunk/drivers/net/ethernet/sfc/rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,6 @@ static inline void efx_sync_rx_buffer(struct efx_nic *efx,
DMA_FROM_DEVICE);
}

/* Return true if this is the last RX buffer using a page. */
static inline bool efx_rx_is_last_buffer(struct efx_nic *efx,
struct efx_rx_buffer *rx_buf)
{
return (rx_buf->page_offset >= (PAGE_SIZE >> 1) ||
efx->rx_dma_len > EFX_RX_HALF_PAGE);
}

/* Check the RX page recycle ring for a page that can be reused. */
static struct page *efx_reuse_page(struct efx_rx_queue *rx_queue)
{
Expand Down Expand Up @@ -199,11 +191,14 @@ static int efx_init_rx_buffers(struct efx_rx_queue *rx_queue)
if ((~count & 1) && (efx->rx_dma_len <= EFX_RX_HALF_PAGE)) {
/* Use the second half of the page */
get_page(page);
rx_buf->flags = 0;
dma_addr += (PAGE_SIZE >> 1);
page_offset += (PAGE_SIZE >> 1);
++count;
goto split;
}

rx_buf->flags = EFX_RX_BUF_LAST_IN_PAGE;
}

return 0;
Expand Down Expand Up @@ -247,7 +242,7 @@ static void efx_recycle_rx_page(struct efx_channel *channel,
unsigned index;

/* Only recycle the page after processing the final buffer. */
if (!efx_rx_is_last_buffer(efx, rx_buf))
if (!(rx_buf->flags & EFX_RX_BUF_LAST_IN_PAGE))
return;

index = rx_queue->page_add & rx_queue->page_ptr_mask;
Expand Down Expand Up @@ -278,7 +273,7 @@ static void efx_fini_rx_buffer(struct efx_rx_queue *rx_queue,
put_page(rx_buf->page);

/* If this is the last buffer in a page, unmap and free it. */
if (efx_rx_is_last_buffer(rx_queue->efx, rx_buf)) {
if (rx_buf->flags & EFX_RX_BUF_LAST_IN_PAGE) {
efx_unmap_rx_buffer(rx_queue->efx, rx_buf);
efx_free_rx_buffer(rx_buf);
}
Expand Down Expand Up @@ -507,7 +502,7 @@ void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index,
struct efx_rx_buffer *rx_buf;

rx_buf = efx_rx_buffer(rx_queue, index);
rx_buf->flags = flags;
rx_buf->flags |= flags;

/* Validate the number of fragments and completed length */
if (n_frags == 1) {
Expand Down

0 comments on commit 30d4b6a

Please sign in to comment.