From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:06
This series contains updates and fixes to e1000e, igb, ixgbe and fm10k. A
true smorgasbord of changes.
Jake cleans up some obscurity by not using the BIT() macro on bitshift
operation and also fixed the calculated index when looping through the
indir array. Fixes the issue with igb's workqueue item for overflow
check from causing a surprise remove event. The ptp_flags variable is
added to simplify the work of writing several complex MAC type checks
in the PTP code while fixing the workqueue.
Alex Duyck fixes the receive buffers alignment which should not be L1
cache aligned, but to 512 bytes instead.
Denys Vlasenko prevents a division by zero which was reported under
VMWare for e1000e.
Amritha fixes an issue where filters in a child hash table must be
cleared from the hardware before delete the filter links in ixgbe.
Bhaktipriya Shridhar simply replaces the deprecated create_workqueue()
with alloc_workqueue() for fm10k.
Tony corrects ixgbe ethtool reporting to show x550 supports hardware
timestamping of all packets.
Emil fixes an issue where MAC-VLANs on the VF fail to pass traffic due
to spoofed packets.
Andrew Lunn increases performance on some systems where syncing a buffer
for DMA is expensive. So rather than sync the whole 2K receive buffer,
only synchronize the length of the frame.
The following are changes since commit 6f30e8b022c8e3a722928ddb1a2ae0be852fcc0e:
Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue 1GbE
Alexander Duyck (1):
fm10k: Align Rx buffers to 512B blocks
Amritha Nambiar (2):
ixgbe: Fix deleting link filters for cls_u32 offloads
ixgbe: Error handler for duplicate filter locations in hardware for
cls_u32 offloads
Andrew Lunn (1):
igb: Only DMA sync frame length
Bhaktipriya Shridhar (1):
fm10k: Remove create_workqueue
Denys Vlasenko (1):
e1000e: prevent division by zero if TIMINCA is zero
Emil Tantilov (1):
ixgbe: fix spoofed packets with macvlans
Jacob Keller (7):
fm10k: don't use BIT() macro where the value isn't a bitmask
fm10k: fix incorrect index calculation in fm10k_write_reta
igb: introduce ptp_flags variable and use it to replace IGB_FLAG_PTP
igb: introduce IGB_PTP_OVERFLOW_CHECK flag
igb: re-use igb_ptp_reset in igb_ptp_init
igb: implement igb_ptp_suspend
igb: call igb_ptp_suspend during suspend/resume cycle
Tony Nguyen (1):
ixgbe: Correct reporting of timestamping for x550
drivers/net/ethernet/intel/e1000e/netdev.c | 3 +-
drivers/net/ethernet/intel/fm10k/fm10k.h | 2 +-
drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c | 5 +-
drivers/net/ethernet/intel/fm10k/fm10k_main.c | 5 +-
drivers/net/ethernet/intel/igb/igb.h | 7 +-
drivers/net/ethernet/intel/igb/igb_main.c | 12 ++--
drivers/net/ethernet/intel/igb/igb_ptp.c | 92 +++++++++++-------------
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 8 ++-
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 76 +++++++++++++++++++-
drivers/net/ethernet/intel/ixgbe/ixgbe_model.h | 4 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 1 +
11 files changed, 148 insertions(+), 67 deletions(-)
--
2.5.5
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:05
From: Denys Vlasenko <redacted>
Users report that under VMWare, er32(TIMINCA) returns zero.
This causes division by zero at init time as follows:
==> incvalue = er32(TIMINCA) & E1000_TIMINCA_INCVALUE_MASK;
for (i = 0; i < E1000_MAX_82574_SYSTIM_REREADS; i++) {
/* latch SYSTIMH on read of SYSTIML */
systim_next = (cycle_t)er32(SYSTIML);
systim_next |= (cycle_t)er32(SYSTIMH) << 32;
time_delta = systim_next - systim;
temp = time_delta;
====> rem = do_div(temp, incvalue);
This change makes kernel survive this, and users report that
NIC does work after this change.
Since on real hardware incvalue is never zero, this should not affect
real hardware use case.
Signed-off-by: Denys Vlasenko <redacted>
Tested-by: Aaron Brown <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/e1000e/netdev.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:06
From: Amritha Nambiar <redacted>
On deleting filters which are links to a child hash table, the filters
in the child hash table must be cleared from the hardware if there
is no link between the parent and child hash table.
Verified with the following filters:
Create a child hash table:
handle 1: u32 divisor 1
Link to the child hash table from parent hash table:
handle 800:0:10 u32 ht 800: link 1: \
offset at 0 mask 0f00 shift 6 plus 0 eat \
match ip protocol 6 ff match ip dst 15.0.0.1/32
Add filters into child hash table:
handle 1:0:2 u32 ht 1: \
match tcp src 22 ffff action drop
handle 1:0:3 u32 ht 1: \
match tcp src 33 ffff action drop
Delete link filter from parent hash table:
handle 800:0:10 u32
Signed-off-by: Amritha Nambiar <redacted>
Acked-by: Sridhar Samudrala <sridhar.samudrala@intel.com>
Tested-by: Andrew Bowers <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 75 +++++++++++++++++++++++---
drivers/net/ethernet/intel/ixgbe/ixgbe_model.h | 4 ++
2 files changed, 72 insertions(+), 7 deletions(-)
@@ -8300,14 +8300,50 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)staticintixgbe_delete_clsu32(structixgbe_adapter*adapter,structtc_cls_u32_offload*cls){+u32hdl=cls->knode.handle;u32uhtid=TC_U32_USERHTID(cls->knode.handle);-u32loc;-interr;+u32loc=cls->knode.handle&0xfffff;+interr=0,i,j;+structixgbe_jump_table*jump=NULL;++if(loc>IXGBE_MAX_HW_ENTRIES)+return-EINVAL;if((uhtid!=0x800)&&(uhtid>=IXGBE_MAX_LINK_HANDLE))return-EINVAL;-loc=cls->knode.handle&0xfffff;+/* Clear this filter in the link data it is associated with */+if(uhtid!=0x800){+jump=adapter->jump_tables[uhtid];+if(jump)+clear_bit(loc-1,jump->child_loc_map);+}++/* Check if the filter being deleted is a link */+for(i=1;i<IXGBE_MAX_LINK_HANDLE;i++){+jump=adapter->jump_tables[i];+if(jump&&jump->link_hdl==hdl){+/* Delete filters in the hardware in the child hash+*tableassociatedwiththislink+*/+for(j=0;j<IXGBE_MAX_HW_ENTRIES;j++){+if(!test_bit(j,jump->child_loc_map))+continue;+spin_lock(&adapter->fdir_perfect_lock);+err=ixgbe_update_ethtool_fdir_entry(adapter,+NULL,+j+1);+spin_unlock(&adapter->fdir_perfect_lock);+clear_bit(j,jump->child_loc_map);+}+/* Remove resources for this link */+kfree(jump->input);+kfree(jump->mask);+kfree(jump);+adapter->jump_tables[i]=NULL;+returnerr;+}+}spin_lock(&adapter->fdir_perfect_lock);err=ixgbe_update_ethtool_fdir_entry(adapter,NULL,loc);
@@ -8541,6 +8577,18 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,if(!test_bit(link_uhtid-1,&adapter->tables))returnerr;+/* Multiple filters as links to the same hash table are not+*supported.Toaddanewfilterwiththesamenextheader+*butdifferentmatch/jumpconditions,createanewhashtable+*andlinktoit.+*/+if(adapter->jump_tables[link_uhtid]&&+(adapter->jump_tables[link_uhtid])->link_hdl){+e_err(drv,"Link filter exists for link: %x\n",+link_uhtid);+returnerr;+}+for(i=0;nexthdr[i].jump;i++){if(nexthdr[i].o!=cls->knode.sel->offoff||nexthdr[i].s!=cls->knode.sel->offshift||
@@ -8558,10 +8606,12 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,mask=kzalloc(sizeof(*mask),GFP_KERNEL);if(!mask){err=-ENOMEM;-gotofree_input;+gotoerr_out;}jump->input=input;jump->mask=mask;+jump->link_hdl=cls->knode.handle;+err=ixgbe_clsu32_build_input(input,mask,cls,field_ptr,&nexthdr[i]);if(!err){
@@ -8579,7 +8629,7 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,mask=kzalloc(sizeof(*mask),GFP_KERNEL);if(!mask){err=-ENOMEM;-gotofree_input;+gotoerr_out;}if((uhtid!=0x800)&&(adapter->jump_tables[uhtid])){
@@ -8620,14 +8670,25 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,ixgbe_update_ethtool_fdir_entry(adapter,input,input->sw_idx);spin_unlock(&adapter->fdir_perfect_lock);+if((uhtid!=0x800)&&(adapter->jump_tables[uhtid])){+structixgbe_jump_table*link=adapter->jump_tables[uhtid];++if(test_bit(loc-1,link->child_loc_map)){+e_err(drv,"Filter: %x exists in hash table: %x\n",+loc,uhtid);+err=-EINVAL;+gotofree_mask;+}+set_bit(loc-1,link->child_loc_map);+}kfree(mask);returnerr;err_out_w_lock:spin_unlock(&adapter->fdir_perfect_lock);err_out:-kfree(mask);-free_input:kfree(input);+free_mask:+kfree(mask);free_jump:kfree(jump);returnerr;
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:06
From: Amritha Nambiar <redacted>
For u32 classifier filters, avoid overwriting existing filter
in a hardware location without removing it first, to clean up
inconsistencies due to duplicate values for filter location.
Verified with the following filters:
Create child hash tables:
handle 1: u32 divisor 1
handle 2: u32 divisor 1
Link to the child hash table from parent hash table:
handle 800:0:11 u32 ht 800: link 1: \
offset at 0 mask 0f00 shift 6 plus 0 eat \
match ip protocol 6 ff match ip dst 15.0.0.1/32
handle 800:0:12 u32 ht 800: link 2: \
offset at 0 mask 0f00 shift 6 plus 0 eat \
match ip protocol 17 ff match ip dst 16.0.0.1/32
Add filter into child hash table:
handle 1:0:3 u32 ht 1: \
match tcp src 22 ffff action drop
Add another filter to the same location:
handle 2:0:3 u32 ht 2: \
match tcp src 33 ffff action drop
Signed-off-by: Amritha Nambiar <redacted>
Tested-by: Andrew Bowers <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 41 ++++++++++++++++-----------
1 file changed, 25 insertions(+), 16 deletions(-)
@@ -8315,8 +8315,11 @@ static int ixgbe_delete_clsu32(struct ixgbe_adapter *adapter,/* Clear this filter in the link data it is associated with */if(uhtid!=0x800){jump=adapter->jump_tables[uhtid];-if(jump)-clear_bit(loc-1,jump->child_loc_map);+if(!jump)+return-EINVAL;+if(!test_bit(loc-1,jump->child_loc_map))+return-EINVAL;+clear_bit(loc-1,jump->child_loc_map);}/* Check if the filter being deleted is a link */
@@ -8606,7 +8609,7 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,mask=kzalloc(sizeof(*mask),GFP_KERNEL);if(!mask){err=-ENOMEM;-gotoerr_out;+gotofree_input;}jump->input=input;jump->mask=mask;
@@ -8629,7 +8632,7 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,mask=kzalloc(sizeof(*mask),GFP_KERNEL);if(!mask){err=-ENOMEM;-gotoerr_out;+gotofree_input;}if((uhtid!=0x800)&&(adapter->jump_tables[uhtid])){
@@ -8639,6 +8642,20 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,if((adapter->jump_tables[uhtid])->mask)memcpy(mask,(adapter->jump_tables[uhtid])->mask,sizeof(*mask));++/* Lookup in all child hash tables if this location is already+*filledwithafilter+*/+for(i=1;i<IXGBE_MAX_LINK_HANDLE;i++){+structixgbe_jump_table*link=adapter->jump_tables[i];++if(link&&(test_bit(loc-1,link->child_loc_map))){+e_err(drv,"Filter exists in location: %x\n",+loc);+err=-EINVAL;+gotoerr_out;+}+}}err=ixgbe_clsu32_build_input(input,mask,cls,field_ptr,NULL);if(err)
@@ -8670,25 +8687,17 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,ixgbe_update_ethtool_fdir_entry(adapter,input,input->sw_idx);spin_unlock(&adapter->fdir_perfect_lock);-if((uhtid!=0x800)&&(adapter->jump_tables[uhtid])){-structixgbe_jump_table*link=adapter->jump_tables[uhtid];+if((uhtid!=0x800)&&(adapter->jump_tables[uhtid]))+set_bit(loc-1,(adapter->jump_tables[uhtid])->child_loc_map);-if(test_bit(loc-1,link->child_loc_map)){-e_err(drv,"Filter: %x exists in hash table: %x\n",-loc,uhtid);-err=-EINVAL;-gotofree_mask;-}-set_bit(loc-1,link->child_loc_map);-}kfree(mask);returnerr;err_out_w_lock:spin_unlock(&adapter->fdir_perfect_lock);err_out:-kfree(input);-free_mask:kfree(mask);+free_input:+kfree(input);free_jump:kfree(jump);returnerr;
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:06
From: Jacob Keller <jacob.e.keller@intel.com>
The FM10K_MAX_DATA_PER_TXD is really just using a bitshift as a power of
2 operation in an efficient manner. We shouldn't represent this as a BIT()
because that obscures the intention of the operation.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Krishneil Singh <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/fm10k/fm10k.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:07
From: Alexander Duyck <redacted>
While reviewing the i40e driver changes to support page based receive I
realized that I had overlooked the fact that the fm10k hardware required a
512 byte alignment for Rx buffers. This patch is meant to address that by
changing the alignment for Rx buffers to 512 bytes instead of allowing it
to be L1 cache aligned.
Signed-off-by: Alexander Duyck <redacted>
Tested-by: Krishneil Singh <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/fm10k/fm10k_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:07
From: Jacob Keller <jacob.e.keller@intel.com>
Upcoming patches will introduce new PTP specific flags. To avoid
cluttering the normal flags variable, introduce PTP specific "ptp_flags"
variable for this purpose, and move IGB_FLAG_PTP to become
IGB_PTP_ENABLED.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Aaron Brown <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/igb/igb.h | 5 ++++-
drivers/net/ethernet/intel/igb/igb_ptp.c | 7 ++++---
2 files changed, 8 insertions(+), 4 deletions(-)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:08
From: Jacob Keller <jacob.e.keller@intel.com>
The index calculated when looping through the indir array passed to
fm10k_write_reta was incorrectly calculated as the first part i needs to
be multiplied by 4.
Fixes: 0cfea7a65738 ("fm10k: fix possible null pointer deref after kcalloc", 2016-04-13)
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Krishneil Singh <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
@@ -983,9 +983,10 @@ void fm10k_write_reta(struct fm10k_intfc *interface, const u32 *indir)/* generate a new table if we weren't given one */for(j=0;j<4;j++){if(indir)-n=indir[i+j];+n=indir[4*i+j];else-n=ethtool_rxfh_indir_default(i+j,rss_i);+n=ethtool_rxfh_indir_default(4*i+j,+rss_i);table[j]=n;}
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:08
From: Jacob Keller <jacob.e.keller@intel.com>
Make igb_ptp_stop take advantage of this new function to reduce code
duplication.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Aaron Brown <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/igb/igb.h | 1 +
drivers/net/ethernet/intel/igb/igb_ptp.c | 22 +++++++++++++++++-----
2 files changed, 18 insertions(+), 5 deletions(-)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:08
From: Bhaktipriya Shridhar <redacted>
alloc_workqueue replaces deprecated create_workqueue().
A dedicated workqueue has been used since the workitem (viz
fm10k_service_task, which manages and runs other subtasks) is involved in
normal device operation and requires forward progress under memory
pressure.
create_workqueue has been replaced with alloc_workqueue with max_active
as 0 since there is no need for throttling the number of active work
items.
Since network devices may be used in memory reclaim path,
WQ_MEM_RECLAIM has been set to guarantee forward progress.
flush_workqueue is unnecessary since destroy_workqueue() itself calls
drain_workqueue() which flushes repeatedly till the workqueue
becomes empty. Hence the call to flush_workqueue() has been dropped.
Signed-off-by: Bhaktipriya Shridhar <redacted>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/fm10k/fm10k_main.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:08
From: Tony Nguyen <anthony.l.nguyen@intel.com>
Update ixgbe_ethtool_get_ts_info() to show that x550 supports hardware
timestamping of all packets.
Reported-by: Guy Harris <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Andrew Bowers <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:08
From: Jacob Keller <jacob.e.keller@intel.com>
Properly stop the extra workqueue items and ensure that we resume
cleanly. This is better than using igb_ptp_init and igb_ptp_stop since
these functions destroy the PHC device, which will cause other problems
if we do so. Since igb_ptp_reset now re-schedules the work-queue item we
don't need an equivalent igb_ptp_resume in the resume workflow.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Aaron Brown <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/igb/igb_main.c | 2 ++
1 file changed, 2 insertions(+)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:08
From: Jacob Keller <jacob.e.keller@intel.com>
Don't continue to use complex MAC type checks for handling various cases
where we have overflow check code. Make this code more obvious by
introducing a flag which is enabled for hardware that needs these
checks.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Aaron Brown <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/igb/igb.h | 1 +
drivers/net/ethernet/intel/igb/igb_ptp.c | 21 ++++++++-------------
2 files changed, 9 insertions(+), 13 deletions(-)
@@ -1169,20 +1173,11 @@ void igb_ptp_init(struct igb_adapter *adapter)**/voidigb_ptp_stop(structigb_adapter*adapter){-switch(adapter->hw.mac.type){-casee1000_82576:-casee1000_82580:-casee1000_i354:-casee1000_i350:-cancel_delayed_work_sync(&adapter->ptp_overflow_work);-break;-casee1000_i210:-casee1000_i211:-/* No delayed work to cancel. */-break;-default:+if(!(adapter->ptp_flags&IGB_PTP_ENABLED))return;-}++if(adapter->ptp_flags&IGB_PTP_OVERFLOW_CHECK)+cancel_delayed_work_sync(&adapter->ptp_overflow_work);cancel_work_sync(&adapter->ptp_tx_work);if(adapter->ptp_tx_skb){
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:08
From: Jacob Keller <jacob.e.keller@intel.com>
Modify igb_ptp_init to take advantage of igb_ptp_reset, and remove
duplicated work that was occurring in both igb_ptp_reset and
igb_ptp_init.
In total, resetting the TSAUXC register, and resetting the system time
both happen in igb_ptp_reset already. igb_ptp_reset now also takes care
of starting the delayed work item for overflow checks, as well.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Aaron Brown <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/igb/igb_main.c | 3 +-
drivers/net/ethernet/intel/igb/igb_ptp.c | 48 +++++++++++--------------------
2 files changed, 18 insertions(+), 33 deletions(-)
@@ -1086,8 +1091,6 @@ void igb_ptp_init(struct igb_adapter *adapter)adapter->cc.mask=CYCLECOUNTER_MASK(IGB_NBITS_82580);adapter->cc.mult=1;adapter->cc.shift=0;-/* Enable the timer functions by clearing bit 31. */-wr32(E1000_TSAUXC,0x0);adapter->ptp_flags|=IGB_PTP_OVERFLOW_CHECK;break;casee1000_i210:
@@ -1113,46 +1116,24 @@ void igb_ptp_init(struct igb_adapter *adapter)adapter->ptp_caps.settime64=igb_ptp_settime_i210;adapter->ptp_caps.enable=igb_ptp_feature_enable_i210;adapter->ptp_caps.verify=igb_ptp_verify_pin;-/* Enable the timer functions by clearing bit 31. */-wr32(E1000_TSAUXC,0x0);break;default:adapter->ptp_clock=NULL;return;}-wrfl();-spin_lock_init(&adapter->tmreg_lock);INIT_WORK(&adapter->ptp_tx_work,igb_ptp_tx_work);-/* Initialize the clock and overflow work for devices that need it. */-if((hw->mac.type==e1000_i210)||(hw->mac.type==e1000_i211)){-structtimespec64ts=ktime_to_timespec64(ktime_get_real());--igb_ptp_settime_i210(&adapter->ptp_caps,&ts);-}else{-timecounter_init(&adapter->tc,&adapter->cc,-ktime_to_ns(ktime_get_real()));-}--if(adapter->ptp_flags&IGB_PTP_OVERFLOW_CHECK){+if(adapter->ptp_flags&IGB_PTP_OVERFLOW_CHECK)INIT_DELAYED_WORK(&adapter->ptp_overflow_work,igb_ptp_overflow_check);-schedule_delayed_work(&adapter->ptp_overflow_work,-IGB_SYSTIM_OVERFLOW_PERIOD);-}--/* Initialize the time sync interrupts for devices that support it. */-if(hw->mac.type>=e1000_82580){-wr32(E1000_TSIM,TSYNC_INTERRUPTS);-wr32(E1000_IMS,E1000_IMS_TS);-}-adapter->tstamp_config.rx_filter=HWTSTAMP_FILTER_NONE;adapter->tstamp_config.tx_type=HWTSTAMP_TX_OFF;+igb_ptp_reset(adapter);+adapter->ptp_clock=ptp_clock_register(&adapter->ptp_caps,&adapter->pdev->dev);if(IS_ERR(adapter->ptp_clock)){
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:09
From: Emil Tantilov <redacted>
When setting spoofing, both VLAN and MAC need to be set together.
This change resolves an issue where MAC-VLANs on the VF fail to pass
traffic due to spoofed packets.
Signed-off-by: Emil Tantilov <redacted>
Tested-by: Andrew Bowers <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 1 +
1 file changed, 1 insertion(+)
From: Jeff Kirsher <hidden> Date: 2016-06-29 21:33:09
From: Andrew Lunn <andrew@lunn.ch>
On some platforms, syncing a buffer for DMA is expensive. Rather than
sync the whole 2K receive buffer, only synchronise the length of the
frame, which will typically be the MTU, or a much smaller TCP ACK.
For an IMX6Q, this gives around 6% increased TCP receive performance,
which is cache operations bound and reduces CPU load for TCP transmit.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Aaron Brown <redacted>
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/igb/igb_main.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
@@ -6948,11 +6949,11 @@ static struct sk_buff *igb_fetch_rx_buffer(struct igb_ring *rx_ring,dma_sync_single_range_for_cpu(rx_ring->dev,rx_buffer->dma,rx_buffer->page_offset,-IGB_RX_BUFSZ,+size,DMA_FROM_DEVICE);/* pull page into skb */-if(igb_add_rx_frag(rx_ring,rx_buffer,rx_desc,skb)){+if(igb_add_rx_frag(rx_ring,rx_buffer,size,rx_desc,skb)){/* hand second half of page back to the ring */igb_reuse_rx_page(rx_ring,rx_buffer);}else{