Skip to content

Commit 2037110

Browse files
Florian WestphalJeff Kirsher
authored andcommitted
e1000: move tbi workaround code into helper function
Its the same in both handlers. Signed-off-by: Florian Westphal <fw@strlen.de> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
1 parent 4f0aeb1 commit 2037110

File tree

1 file changed

+33
-30
lines changed

1 file changed

+33
-30
lines changed

drivers/net/ethernet/intel/e1000/e1000_main.c

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4057,6 +4057,26 @@ static void e1000_tbi_adjust_stats(struct e1000_hw *hw,
40574057
}
40584058
}
40594059

4060+
static bool e1000_tbi_should_accept(struct e1000_adapter *adapter,
4061+
u8 status, u8 errors,
4062+
u32 length, const u8 *data)
4063+
{
4064+
struct e1000_hw *hw = &adapter->hw;
4065+
u8 last_byte = *(data + length - 1);
4066+
4067+
if (TBI_ACCEPT(hw, status, errors, length, last_byte)) {
4068+
unsigned long irq_flags;
4069+
4070+
spin_lock_irqsave(&adapter->stats_lock, irq_flags);
4071+
e1000_tbi_adjust_stats(hw, &adapter->stats, length, data);
4072+
spin_unlock_irqrestore(&adapter->stats_lock, irq_flags);
4073+
4074+
return true;
4075+
}
4076+
4077+
return false;
4078+
}
4079+
40604080
/**
40614081
* e1000_clean_jumbo_rx_irq - Send received data up the network stack; legacy
40624082
* @adapter: board private structure
@@ -4071,12 +4091,10 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
40714091
struct e1000_rx_ring *rx_ring,
40724092
int *work_done, int work_to_do)
40734093
{
4074-
struct e1000_hw *hw = &adapter->hw;
40754094
struct net_device *netdev = adapter->netdev;
40764095
struct pci_dev *pdev = adapter->pdev;
40774096
struct e1000_rx_desc *rx_desc, *next_rxd;
40784097
struct e1000_buffer *buffer_info, *next_buffer;
4079-
unsigned long irq_flags;
40804098
u32 length;
40814099
unsigned int i;
40824100
int cleaned_count = 0;
@@ -4117,23 +4135,15 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
41174135
/* errors is only valid for DD + EOP descriptors */
41184136
if (unlikely((status & E1000_RXD_STAT_EOP) &&
41194137
(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK))) {
4120-
u8 *mapped;
4121-
u8 last_byte;
4122-
4123-
mapped = page_address(buffer_info->page);
4124-
last_byte = *(mapped + length - 1);
4125-
if (TBI_ACCEPT(hw, status, rx_desc->errors, length,
4126-
last_byte)) {
4127-
spin_lock_irqsave(&adapter->stats_lock,
4128-
irq_flags);
4129-
e1000_tbi_adjust_stats(hw, &adapter->stats,
4130-
length, mapped);
4131-
spin_unlock_irqrestore(&adapter->stats_lock,
4132-
irq_flags);
4138+
u8 *mapped = page_address(buffer_info->page);
4139+
4140+
if (e1000_tbi_should_accept(adapter, status,
4141+
rx_desc->errors,
4142+
length, mapped)) {
41334143
length--;
4144+
} else if (netdev->features & NETIF_F_RXALL) {
4145+
goto process_skb;
41344146
} else {
4135-
if (netdev->features & NETIF_F_RXALL)
4136-
goto process_skb;
41374147
/* recycle both page and skb */
41384148
buffer_info->skb = skb;
41394149
/* an error means any chain goes out the window
@@ -4284,12 +4294,10 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
42844294
struct e1000_rx_ring *rx_ring,
42854295
int *work_done, int work_to_do)
42864296
{
4287-
struct e1000_hw *hw = &adapter->hw;
42884297
struct net_device *netdev = adapter->netdev;
42894298
struct pci_dev *pdev = adapter->pdev;
42904299
struct e1000_rx_desc *rx_desc, *next_rxd;
42914300
struct e1000_buffer *buffer_info, *next_buffer;
4292-
unsigned long flags;
42934301
u32 length;
42944302
unsigned int i;
42954303
int cleaned_count = 0;
@@ -4339,7 +4347,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
43394347

43404348
if (adapter->discarding) {
43414349
/* All receives must fit into a single buffer */
4342-
e_dbg("Receive packet consumed multiple buffers\n");
4350+
netdev_dbg(netdev, "Receive packet consumed multiple buffers\n");
43434351
/* recycle */
43444352
buffer_info->skb = skb;
43454353
if (status & E1000_RXD_STAT_EOP)
@@ -4348,18 +4356,13 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
43484356
}
43494357

43504358
if (unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) {
4351-
u8 last_byte = *(skb->data + length - 1);
4352-
if (TBI_ACCEPT(hw, status, rx_desc->errors, length,
4353-
last_byte)) {
4354-
spin_lock_irqsave(&adapter->stats_lock, flags);
4355-
e1000_tbi_adjust_stats(hw, &adapter->stats,
4356-
length, skb->data);
4357-
spin_unlock_irqrestore(&adapter->stats_lock,
4358-
flags);
4359+
if (e1000_tbi_should_accept(adapter, status,
4360+
rx_desc->errors,
4361+
length, skb->data)) {
43594362
length--;
4363+
} else if (netdev->features & NETIF_F_RXALL) {
4364+
goto process_skb;
43604365
} else {
4361-
if (netdev->features & NETIF_F_RXALL)
4362-
goto process_skb;
43634366
/* recycle */
43644367
buffer_info->skb = skb;
43654368
goto next_desc;

0 commit comments

Comments
 (0)