|
@@ -585,7 +585,7 @@ static void ixgbe_alloc_rx_buffers(struct ixgbe_adapter *adapter,
|
|
|
rx_desc = IXGBE_RX_DESC_ADV(*rx_ring, i);
|
|
|
|
|
|
if (!bi->page_dma &&
|
|
|
- (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED)) {
|
|
|
+ (rx_ring->flags & IXGBE_RING_RX_PS_ENABLED)) {
|
|
|
if (!bi->page) {
|
|
|
bi->page = alloc_page(GFP_ATOMIC);
|
|
|
if (!bi->page) {
|
|
@@ -629,7 +629,7 @@ static void ixgbe_alloc_rx_buffers(struct ixgbe_adapter *adapter,
|
|
|
}
|
|
|
/* Refresh the desc even if buffer_addrs didn't change because
|
|
|
* each write-back erases this info. */
|
|
|
- if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
|
|
|
+ if (rx_ring->flags & IXGBE_RING_RX_PS_ENABLED) {
|
|
|
rx_desc->read.pkt_addr = cpu_to_le64(bi->page_dma);
|
|
|
rx_desc->read.hdr_addr = cpu_to_le64(bi->dma);
|
|
|
} else {
|
|
@@ -726,7 +726,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
|
|
|
break;
|
|
|
(*work_done)++;
|
|
|
|
|
|
- if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
|
|
|
+ if (rx_ring->flags & IXGBE_RING_RX_PS_ENABLED) {
|
|
|
hdr_info = le16_to_cpu(ixgbe_get_hdr_info(rx_desc));
|
|
|
len = (hdr_info & IXGBE_RXDADV_HDRBUFLEN_MASK) >>
|
|
|
IXGBE_RXDADV_HDRBUFLEN_SHIFT;
|
|
@@ -798,7 +798,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
|
|
|
rx_ring->stats.packets++;
|
|
|
rx_ring->stats.bytes += skb->len;
|
|
|
} else {
|
|
|
- if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
|
|
|
+ if (rx_ring->flags & IXGBE_RING_RX_PS_ENABLED) {
|
|
|
rx_buffer_info->skb = next_buffer->skb;
|
|
|
rx_buffer_info->dma = next_buffer->dma;
|
|
|
next_buffer->skb = skb;
|
|
@@ -1919,7 +1919,7 @@ static void ixgbe_configure_srrctl(struct ixgbe_adapter *adapter,
|
|
|
srrctl |= (IXGBE_RX_HDR_SIZE << IXGBE_SRRCTL_BSIZEHDRSIZE_SHIFT) &
|
|
|
IXGBE_SRRCTL_BSIZEHDR_MASK;
|
|
|
|
|
|
- if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
|
|
|
+ if (rx_ring->flags & IXGBE_RING_RX_PS_ENABLED) {
|
|
|
#if (PAGE_SIZE / 2) > IXGBE_MAX_RXBUFFER
|
|
|
srrctl |= IXGBE_MAX_RXBUFFER >> IXGBE_SRRCTL_BSIZEPKT_SHIFT;
|
|
|
#else
|
|
@@ -1992,11 +1992,6 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
|
|
|
/* Decide whether to use packet split mode or not */
|
|
|
adapter->flags |= IXGBE_FLAG_RX_PS_ENABLED;
|
|
|
|
|
|
-#ifdef IXGBE_FCOE
|
|
|
- if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED)
|
|
|
- adapter->flags &= ~IXGBE_FLAG_RX_PS_ENABLED;
|
|
|
-#endif /* IXGBE_FCOE */
|
|
|
-
|
|
|
/* Set the RX buffer length according to the mode */
|
|
|
if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
|
|
|
rx_buf_len = IXGBE_RX_HDR_SIZE;
|
|
@@ -2056,14 +2051,19 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
|
|
|
rx_ring->tail = IXGBE_RDT(j);
|
|
|
rx_ring->rx_buf_len = rx_buf_len;
|
|
|
|
|
|
+ if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED)
|
|
|
+ rx_ring->flags |= IXGBE_RING_RX_PS_ENABLED;
|
|
|
+
|
|
|
#ifdef IXGBE_FCOE
|
|
|
if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) {
|
|
|
struct ixgbe_ring_feature *f;
|
|
|
f = &adapter->ring_feature[RING_F_FCOE];
|
|
|
- if ((rx_buf_len < IXGBE_FCOE_JUMBO_FRAME_SIZE) &&
|
|
|
- (i >= f->mask) && (i < f->mask + f->indices))
|
|
|
- rx_ring->rx_buf_len =
|
|
|
- IXGBE_FCOE_JUMBO_FRAME_SIZE;
|
|
|
+ if ((i >= f->mask) && (i < f->mask + f->indices)) {
|
|
|
+ rx_ring->flags &= ~IXGBE_RING_RX_PS_ENABLED;
|
|
|
+ if (rx_buf_len < IXGBE_FCOE_JUMBO_FRAME_SIZE)
|
|
|
+ rx_ring->rx_buf_len =
|
|
|
+ IXGBE_FCOE_JUMBO_FRAME_SIZE;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
#endif /* IXGBE_FCOE */
|
|
@@ -2143,7 +2143,8 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
|
|
|
if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) {
|
|
|
/* Enable 82599 HW-RSC */
|
|
|
for (i = 0; i < adapter->num_rx_queues; i++) {
|
|
|
- j = adapter->rx_ring[i].reg_idx;
|
|
|
+ rx_ring = &adapter->rx_ring[i];
|
|
|
+ j = rx_ring->reg_idx;
|
|
|
rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(j));
|
|
|
rscctrl |= IXGBE_RSCCTL_RSCEN;
|
|
|
/*
|
|
@@ -2151,7 +2152,7 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
|
|
|
* total size of max desc * buf_len is not greater
|
|
|
* than 65535
|
|
|
*/
|
|
|
- if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
|
|
|
+ if (rx_ring->flags & IXGBE_RING_RX_PS_ENABLED) {
|
|
|
#if (MAX_SKB_FRAGS > 16)
|
|
|
rscctrl |= IXGBE_RSCCTL_MAXDESC_16;
|
|
|
#elif (MAX_SKB_FRAGS > 8)
|