Skip to content

Commit 184ca82

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Buffers powersave frame test is reversed in cfg80211, fix from Felix Fietkau. 2) Remove bogus WARN_ON in openvswitch, from Jarno Rajahalme. 3) Fix some tg3 ethtool logic bugs, and one that would cause no interrupts to be generated when rx-coalescing is set to 0. From Satish Baddipadige and Siva Reddy Kallam. 4) QLCNIC mailbox corruption and napi budget handling fix from Manish Chopra. 5) Fix fib_trie logic when walking the trie during /proc/net/route output than can access a stale node pointer. From David Forster. 6) Several sctp_diag fixes from Phil Sutter. 7) PAUSE frame handling fixes in mlxsw driver from Ido Schimmel. 8) Checksum fixup fixes in bpf from Daniel Borkmann. 9) Memork leaks in nfnetlink, from Liping Zhang. 10) Use after free in rxrpc, from David Howells. 11) Use after free in new skb_array code of macvtap driver, from Jason Wang. 12) Calipso resource leak, from Colin Ian King. 13) mediatek bug fixes (missing stats sync init, etc.) from Sean Wang. 14) Fix bpf non-linear packet write helpers, from Daniel Borkmann. 15) Fix lockdep splats in macsec, from Sabrina Dubroca. 16) hv_netvsc bug fixes from Vitaly Kuznetsov, mostly to do with VF handling. 17) Various tc-action bug fixes, from CONG Wang. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (116 commits) net_sched: allow flushing tc police actions net_sched: unify the init logic for act_police net_sched: convert tcf_exts from list to pointer array net_sched: move tc offload macros to pkt_cls.h net_sched: fix a typo in tc_for_each_action() net_sched: remove an unnecessary list_del() net_sched: remove the leftover cleanup_a() mlxsw: spectrum: Allow packets to be trapped from any PG mlxsw: spectrum: Unmap 802.1Q FID before destroying it mlxsw: spectrum: Add missing rollbacks in error path mlxsw: reg: Fix missing op field fill-up mlxsw: spectrum: Trap loop-backed packets mlxsw: spectrum: Add missing packet traps mlxsw: spectrum: Mark port as active before registering it mlxsw: spectrum: Create PVID vPort before registering netdevice mlxsw: spectrum: Remove redundant errors from the code mlxsw: spectrum: Don't return upon error in removal path i40e: check for and deal with non-contiguous TCs ixgbe: Re-enable ability to toggle VLAN filtering ixgbe: Force VLNCTRL.VFE to be set in all VMDq paths ...
2 parents 5ff132c + b96c22c commit 184ca82

File tree

116 files changed

+1486
-1109
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+1486
-1109
lines changed

Documentation/networking/rxrpc.txt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -790,13 +790,12 @@ The kernel interface functions are as follows:
790790
Data messages can have their contents extracted with the usual bunch of
791791
socket buffer manipulation functions. A data message can be determined to
792792
be the last one in a sequence with rxrpc_kernel_is_data_last(). When a
793-
data message has been used up, rxrpc_kernel_data_delivered() should be
794-
called on it..
793+
data message has been used up, rxrpc_kernel_data_consumed() should be
794+
called on it.
795795

796-
Non-data messages should be handled to rxrpc_kernel_free_skb() to dispose
797-
of. It is possible to get extra refs on all types of message for later
798-
freeing, but this may pin the state of a call until the message is finally
799-
freed.
796+
Messages should be handled to rxrpc_kernel_free_skb() to dispose of. It
797+
is possible to get extra refs on all types of message for later freeing,
798+
but this may pin the state of a call until the message is finally freed.
800799

801800
(*) Accept an incoming call.
802801

@@ -821,12 +820,14 @@ The kernel interface functions are as follows:
821820
Other errors may be returned if the call had been aborted (-ECONNABORTED)
822821
or had timed out (-ETIME).
823822

824-
(*) Record the delivery of a data message and free it.
823+
(*) Record the delivery of a data message.
825824

826-
void rxrpc_kernel_data_delivered(struct sk_buff *skb);
825+
void rxrpc_kernel_data_consumed(struct rxrpc_call *call,
826+
struct sk_buff *skb);
827827

828-
This is used to record a data message as having been delivered and to
829-
update the ACK state for the call. The socket buffer will be freed.
828+
This is used to record a data message as having been consumed and to
829+
update the ACK state for the call. The message must still be passed to
830+
rxrpc_kernel_free_skb() for disposal by the caller.
830831

831832
(*) Free a message.
832833

drivers/net/bonding/bond_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ module_param(lacp_rate, charp, 0);
152152
MODULE_PARM_DESC(lacp_rate, "LACPDU tx rate to request from 802.3ad partner; "
153153
"0 for slow, 1 for fast");
154154
module_param(ad_select, charp, 0);
155-
MODULE_PARM_DESC(ad_select, "803.ad aggregation selection logic; "
155+
MODULE_PARM_DESC(ad_select, "802.3ad aggregation selection logic; "
156156
"0 for stable (default), 1 for bandwidth, "
157157
"2 for count");
158158
module_param(min_links, int, 0);

drivers/net/dsa/b53/b53_regs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@
258258
* BCM5325 and BCM5365 share most definitions below
259259
*/
260260
#define B53_ARLTBL_MAC_VID_ENTRY(n) (0x10 * (n))
261-
#define ARLTBL_MAC_MASK 0xffffffffffff
261+
#define ARLTBL_MAC_MASK 0xffffffffffffULL
262262
#define ARLTBL_VID_S 48
263263
#define ARLTBL_VID_MASK_25 0xff
264264
#define ARLTBL_VID_MASK 0xfff

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3187,6 +3187,7 @@ static int mv88e6xxx_set_addr(struct dsa_switch *ds, u8 *addr)
31873187
return err;
31883188
}
31893189

3190+
#ifdef CONFIG_NET_DSA_HWMON
31903191
static int mv88e6xxx_mdio_page_read(struct dsa_switch *ds, int port, int page,
31913192
int reg)
31923193
{
@@ -3212,6 +3213,7 @@ static int mv88e6xxx_mdio_page_write(struct dsa_switch *ds, int port, int page,
32123213

32133214
return ret;
32143215
}
3216+
#endif
32153217

32163218
static int mv88e6xxx_port_to_mdio_addr(struct mv88e6xxx_chip *chip, int port)
32173219
{

drivers/net/ethernet/apm/xgene/xgene_enet_hw.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,8 @@ int xgene_enet_phy_connect(struct net_device *ndev)
793793
netdev_err(ndev, "Could not connect to PHY\n");
794794
return -ENODEV;
795795
}
796+
#else
797+
return -ENODEV;
796798
#endif
797799
}
798800

drivers/net/ethernet/arc/emac_main.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -771,8 +771,10 @@ int arc_emac_probe(struct net_device *ndev, int interface)
771771
priv->dev = dev;
772772

773773
priv->regs = devm_ioremap_resource(dev, &res_regs);
774-
if (IS_ERR(priv->regs))
775-
return PTR_ERR(priv->regs);
774+
if (IS_ERR(priv->regs)) {
775+
err = PTR_ERR(priv->regs);
776+
goto out_put_node;
777+
}
776778

777779
dev_dbg(dev, "Registers base address is 0x%p\n", priv->regs);
778780

drivers/net/ethernet/broadcom/tg3.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12552,10 +12552,6 @@ static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
1255212552
info->data = TG3_RSS_MAX_NUM_QS;
1255312553
}
1255412554

12555-
/* The first interrupt vector only
12556-
* handles link interrupts.
12557-
*/
12558-
info->data -= 1;
1255912555
return 0;
1256012556

1256112557
default:
@@ -14014,6 +14010,7 @@ static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
1401414010
}
1401514011

1401614012
if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14013+
(!ec->rx_coalesce_usecs) ||
1401714014
(ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
1401814015
(ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
1401914016
(ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||

drivers/net/ethernet/cadence/macb.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,11 +403,11 @@
403403
#define MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII 0x00000004
404404
#define MACB_CAPS_NO_GIGABIT_HALF 0x00000008
405405
#define MACB_CAPS_USRIO_DISABLED 0x00000010
406+
#define MACB_CAPS_JUMBO 0x00000020
406407
#define MACB_CAPS_FIFO_MODE 0x10000000
407408
#define MACB_CAPS_GIGABIT_MODE_AVAILABLE 0x20000000
408409
#define MACB_CAPS_SG_DISABLED 0x40000000
409410
#define MACB_CAPS_MACB_IS_GEM 0x80000000
410-
#define MACB_CAPS_JUMBO 0x00000010
411411

412412
/* Bit manipulation macros */
413413
#define MACB_BIT(name) \

drivers/net/ethernet/davicom/dm9000.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,25 +1299,27 @@ static int
12991299
dm9000_open(struct net_device *dev)
13001300
{
13011301
struct board_info *db = netdev_priv(dev);
1302+
unsigned int irq_flags = irq_get_trigger_type(dev->irq);
13021303

13031304
if (netif_msg_ifup(db))
13041305
dev_dbg(db->dev, "enabling %s\n", dev->name);
13051306

13061307
/* If there is no IRQ type specified, tell the user that this is a
13071308
* problem
13081309
*/
1309-
if (irq_get_trigger_type(dev->irq) == IRQF_TRIGGER_NONE)
1310+
if (irq_flags == IRQF_TRIGGER_NONE)
13101311
dev_warn(db->dev, "WARNING: no IRQ resource flags set.\n");
13111312

1313+
irq_flags |= IRQF_SHARED;
1314+
13121315
/* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */
13131316
iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
13141317
mdelay(1); /* delay needs by DM9000B */
13151318

13161319
/* Initialize DM9000 board */
13171320
dm9000_init_dm9000(dev);
13181321

1319-
if (request_irq(dev->irq, dm9000_interrupt, IRQF_SHARED,
1320-
dev->name, dev))
1322+
if (request_irq(dev->irq, dm9000_interrupt, irq_flags, dev->name, dev))
13211323
return -EAGAIN;
13221324
/* Now that we have an interrupt handler hooked up we can unmask
13231325
* our interrupts

drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ static const struct mac_stats_string g_gmac_stats_string[] = {
1717
{"gmac_rx_octets_total_ok", MAC_STATS_FIELD_OFF(rx_good_bytes)},
1818
{"gmac_rx_octets_bad", MAC_STATS_FIELD_OFF(rx_bad_bytes)},
1919
{"gmac_rx_uc_pkts", MAC_STATS_FIELD_OFF(rx_uc_pkts)},
20-
{"gamc_rx_mc_pkts", MAC_STATS_FIELD_OFF(rx_mc_pkts)},
20+
{"gmac_rx_mc_pkts", MAC_STATS_FIELD_OFF(rx_mc_pkts)},
2121
{"gmac_rx_bc_pkts", MAC_STATS_FIELD_OFF(rx_bc_pkts)},
2222
{"gmac_rx_pkts_64octets", MAC_STATS_FIELD_OFF(rx_64bytes)},
2323
{"gmac_rx_pkts_65to127", MAC_STATS_FIELD_OFF(rx_65to127)},

drivers/net/ethernet/intel/e1000e/82571.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2032,7 +2032,8 @@ const struct e1000_info e1000_82574_info = {
20322032
| FLAG2_DISABLE_ASPM_L0S
20332033
| FLAG2_DISABLE_ASPM_L1
20342034
| FLAG2_NO_DISABLE_RX
2035-
| FLAG2_DMA_BURST,
2035+
| FLAG2_DMA_BURST
2036+
| FLAG2_CHECK_SYSTIM_OVERFLOW,
20362037
.pba = 32,
20372038
.max_hw_frame_size = DEFAULT_JUMBO,
20382039
.get_variants = e1000_get_variants_82571,
@@ -2053,7 +2054,8 @@ const struct e1000_info e1000_82583_info = {
20532054
| FLAG_HAS_CTRLEXT_ON_LOAD,
20542055
.flags2 = FLAG2_DISABLE_ASPM_L0S
20552056
| FLAG2_DISABLE_ASPM_L1
2056-
| FLAG2_NO_DISABLE_RX,
2057+
| FLAG2_NO_DISABLE_RX
2058+
| FLAG2_CHECK_SYSTIM_OVERFLOW,
20572059
.pba = 32,
20582060
.max_hw_frame_size = DEFAULT_JUMBO,
20592061
.get_variants = e1000_get_variants_82571,

drivers/net/ethernet/intel/e1000e/e1000.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ s32 e1000e_get_base_timinca(struct e1000_adapter *adapter, u32 *timinca);
452452
#define FLAG2_PCIM2PCI_ARBITER_WA BIT(11)
453453
#define FLAG2_DFLT_CRC_STRIPPING BIT(12)
454454
#define FLAG2_CHECK_RX_HWTSTAMP BIT(13)
455+
#define FLAG2_CHECK_SYSTIM_OVERFLOW BIT(14)
455456

456457
#define E1000_RX_DESC_PS(R, i) \
457458
(&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))

drivers/net/ethernet/intel/e1000e/ich8lan.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5885,7 +5885,8 @@ const struct e1000_info e1000_pch_lpt_info = {
58855885
| FLAG_HAS_JUMBO_FRAMES
58865886
| FLAG_APME_IN_WUC,
58875887
.flags2 = FLAG2_HAS_PHY_STATS
5888-
| FLAG2_HAS_EEE,
5888+
| FLAG2_HAS_EEE
5889+
| FLAG2_CHECK_SYSTIM_OVERFLOW,
58895890
.pba = 26,
58905891
.max_hw_frame_size = 9022,
58915892
.get_variants = e1000_get_variants_ich8lan,

drivers/net/ethernet/intel/e1000e/netdev.c

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4302,6 +4302,42 @@ void e1000e_reinit_locked(struct e1000_adapter *adapter)
43024302
clear_bit(__E1000_RESETTING, &adapter->state);
43034303
}
43044304

4305+
/**
4306+
* e1000e_sanitize_systim - sanitize raw cycle counter reads
4307+
* @hw: pointer to the HW structure
4308+
* @systim: cycle_t value read, sanitized and returned
4309+
*
4310+
* Errata for 82574/82583 possible bad bits read from SYSTIMH/L:
4311+
* check to see that the time is incrementing at a reasonable
4312+
* rate and is a multiple of incvalue.
4313+
**/
4314+
static cycle_t e1000e_sanitize_systim(struct e1000_hw *hw, cycle_t systim)
4315+
{
4316+
u64 time_delta, rem, temp;
4317+
cycle_t systim_next;
4318+
u32 incvalue;
4319+
int i;
4320+
4321+
incvalue = er32(TIMINCA) & E1000_TIMINCA_INCVALUE_MASK;
4322+
for (i = 0; i < E1000_MAX_82574_SYSTIM_REREADS; i++) {
4323+
/* latch SYSTIMH on read of SYSTIML */
4324+
systim_next = (cycle_t)er32(SYSTIML);
4325+
systim_next |= (cycle_t)er32(SYSTIMH) << 32;
4326+
4327+
time_delta = systim_next - systim;
4328+
temp = time_delta;
4329+
/* VMWare users have seen incvalue of zero, don't div / 0 */
4330+
rem = incvalue ? do_div(temp, incvalue) : (time_delta != 0);
4331+
4332+
systim = systim_next;
4333+
4334+
if ((time_delta < E1000_82574_SYSTIM_EPSILON) && (rem == 0))
4335+
break;
4336+
}
4337+
4338+
return systim;
4339+
}
4340+
43054341
/**
43064342
* e1000e_cyclecounter_read - read raw cycle counter (used by time counter)
43074343
* @cc: cyclecounter structure
@@ -4312,7 +4348,7 @@ static cycle_t e1000e_cyclecounter_read(const struct cyclecounter *cc)
43124348
cc);
43134349
struct e1000_hw *hw = &adapter->hw;
43144350
u32 systimel, systimeh;
4315-
cycle_t systim, systim_next;
4351+
cycle_t systim;
43164352
/* SYSTIMH latching upon SYSTIML read does not work well.
43174353
* This means that if SYSTIML overflows after we read it but before
43184354
* we read SYSTIMH, the value of SYSTIMH has been incremented and we
@@ -4335,33 +4371,9 @@ static cycle_t e1000e_cyclecounter_read(const struct cyclecounter *cc)
43354371
systim = (cycle_t)systimel;
43364372
systim |= (cycle_t)systimeh << 32;
43374373

4338-
if ((hw->mac.type == e1000_82574) || (hw->mac.type == e1000_82583)) {
4339-
u64 time_delta, rem, temp;
4340-
u32 incvalue;
4341-
int i;
4342-
4343-
/* errata for 82574/82583 possible bad bits read from SYSTIMH/L
4344-
* check to see that the time is incrementing at a reasonable
4345-
* rate and is a multiple of incvalue
4346-
*/
4347-
incvalue = er32(TIMINCA) & E1000_TIMINCA_INCVALUE_MASK;
4348-
for (i = 0; i < E1000_MAX_82574_SYSTIM_REREADS; i++) {
4349-
/* latch SYSTIMH on read of SYSTIML */
4350-
systim_next = (cycle_t)er32(SYSTIML);
4351-
systim_next |= (cycle_t)er32(SYSTIMH) << 32;
4352-
4353-
time_delta = systim_next - systim;
4354-
temp = time_delta;
4355-
/* VMWare users have seen incvalue of zero, don't div / 0 */
4356-
rem = incvalue ? do_div(temp, incvalue) : (time_delta != 0);
4357-
4358-
systim = systim_next;
4374+
if (adapter->flags2 & FLAG2_CHECK_SYSTIM_OVERFLOW)
4375+
systim = e1000e_sanitize_systim(hw, systim);
43594376

4360-
if ((time_delta < E1000_82574_SYSTIM_EPSILON) &&
4361-
(rem == 0))
4362-
break;
4363-
}
4364-
}
43654377
return systim;
43664378
}
43674379

drivers/net/ethernet/intel/i40e/i40e_main.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4554,23 +4554,38 @@ static u8 i40e_get_iscsi_tc_map(struct i40e_pf *pf)
45544554
**/
45554555
static u8 i40e_dcb_get_num_tc(struct i40e_dcbx_config *dcbcfg)
45564556
{
4557+
int i, tc_unused = 0;
45574558
u8 num_tc = 0;
4558-
int i;
4559+
u8 ret = 0;
45594560

45604561
/* Scan the ETS Config Priority Table to find
45614562
* traffic class enabled for a given priority
4562-
* and use the traffic class index to get the
4563-
* number of traffic classes enabled
4563+
* and create a bitmask of enabled TCs
45644564
*/
4565-
for (i = 0; i < I40E_MAX_USER_PRIORITY; i++) {
4566-
if (dcbcfg->etscfg.prioritytable[i] > num_tc)
4567-
num_tc = dcbcfg->etscfg.prioritytable[i];
4568-
}
4565+
for (i = 0; i < I40E_MAX_USER_PRIORITY; i++)
4566+
num_tc |= BIT(dcbcfg->etscfg.prioritytable[i]);
45694567

4570-
/* Traffic class index starts from zero so
4571-
* increment to return the actual count
4568+
/* Now scan the bitmask to check for
4569+
* contiguous TCs starting with TC0
45724570
*/
4573-
return num_tc + 1;
4571+
for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
4572+
if (num_tc & BIT(i)) {
4573+
if (!tc_unused) {
4574+
ret++;
4575+
} else {
4576+
pr_err("Non-contiguous TC - Disabling DCB\n");
4577+
return 1;
4578+
}
4579+
} else {
4580+
tc_unused = 1;
4581+
}
4582+
}
4583+
4584+
/* There is always at least TC0 */
4585+
if (!ret)
4586+
ret = 1;
4587+
4588+
return ret;
45744589
}
45754590

45764591
/**

drivers/net/ethernet/intel/igb/igb_ptp.c

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,8 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)
744744
}
745745
}
746746

747-
shhwtstamps.hwtstamp = ktime_sub_ns(shhwtstamps.hwtstamp, adjust);
747+
shhwtstamps.hwtstamp =
748+
ktime_add_ns(shhwtstamps.hwtstamp, adjust);
748749

749750
skb_tstamp_tx(adapter->ptp_tx_skb, &shhwtstamps);
750751
dev_kfree_skb_any(adapter->ptp_tx_skb);
@@ -767,13 +768,32 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector,
767768
struct sk_buff *skb)
768769
{
769770
__le64 *regval = (__le64 *)va;
771+
struct igb_adapter *adapter = q_vector->adapter;
772+
int adjust = 0;
770773

771774
/* The timestamp is recorded in little endian format.
772775
* DWORD: 0 1 2 3
773776
* Field: Reserved Reserved SYSTIML SYSTIMH
774777
*/
775-
igb_ptp_systim_to_hwtstamp(q_vector->adapter, skb_hwtstamps(skb),
778+
igb_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb),
776779
le64_to_cpu(regval[1]));
780+
781+
/* adjust timestamp for the RX latency based on link speed */
782+
if (adapter->hw.mac.type == e1000_i210) {
783+
switch (adapter->link_speed) {
784+
case SPEED_10:
785+
adjust = IGB_I210_RX_LATENCY_10;
786+
break;
787+
case SPEED_100:
788+
adjust = IGB_I210_RX_LATENCY_100;
789+
break;
790+
case SPEED_1000:
791+
adjust = IGB_I210_RX_LATENCY_1000;
792+
break;
793+
}
794+
}
795+
skb_hwtstamps(skb)->hwtstamp =
796+
ktime_sub_ns(skb_hwtstamps(skb)->hwtstamp, adjust);
777797
}
778798

779799
/**
@@ -825,7 +845,7 @@ void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector,
825845
}
826846
}
827847
skb_hwtstamps(skb)->hwtstamp =
828-
ktime_add_ns(skb_hwtstamps(skb)->hwtstamp, adjust);
848+
ktime_sub_ns(skb_hwtstamps(skb)->hwtstamp, adjust);
829849

830850
/* Update the last_rx_timestamp timer in order to enable watchdog check
831851
* for error case of latched timestamp on a dropped packet.

0 commit comments

Comments
 (0)