1
0
Fork 0

net: Remove usage of net_device last_rx member

The network stack no longer uses the last_rx member of struct net_device
since the bonding driver switched to use its own private last_rx in
commit 9f24273837 ("bonding: use last_arp_rx in slave_last_rx()").

However, some drivers still (ab)use the field for their own purposes and
some driver just update it without actually using it.

Previously, there was an accompanying comment for the last_rx member
added in commit 4dc89133f4 ("net: add a comment on netdev->last_rx")
which asked drivers not to update is, unless really needed. However,
this commend was removed in commit f8ff080dac ("bonding: remove
useless updating of slave->dev->last_rx"), so some drivers added later
on still did update last_rx.

Remove all usage of last_rx and switch three drivers (sky2, atp and
smc91c92_cs) which actually read and write it to use their own private
copy in netdev_priv.

Compile-tested with allyesconfig and allmodconfig on x86 and arm.

Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Jay Vosburgh <j.vosburgh@gmail.com>
Cc: Veaceslav Falico <vfalico@gmail.com>
Cc: Andy Gospodarek <andy@greyhouse.net>
Cc: Mirko Lindner <mlindner@marvell.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Acked-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Jay Vosburgh <jay.vosburgh@canonical.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
zero-colors
Tobias Klauser 2017-01-18 17:45:01 +01:00 committed by David S. Miller
parent 9520ed8fb8
commit 4a7c972644
24 changed files with 22 additions and 46 deletions

View File

@ -124,7 +124,6 @@ static inline void recv_packet(struct net_device *dev)
skb->protocol = eth_type_trans(skb, dev); skb->protocol = eth_type_trans(skb, dev);
netif_rx(skb); netif_rx(skb);
dev->last_rx = jiffies;
dev->stats.rx_packets++; dev->stats.rx_packets++;
dev->stats.rx_bytes += pktlen; dev->stats.rx_bytes += pktlen;

View File

@ -2360,7 +2360,6 @@ liquidio_push_packet(u32 octeon_id __attribute__((unused)),
if (packet_was_received) { if (packet_was_received) {
droq->stats.rx_bytes_received += len; droq->stats.rx_bytes_received += len;
droq->stats.rx_pkts_received++; droq->stats.rx_pkts_received++;
netdev->last_rx = jiffies;
} else { } else {
droq->stats.rx_dropped++; droq->stats.rx_dropped++;
netif_info(lio, rx_err, lio->netdev, netif_info(lio, rx_err, lio->netdev,

View File

@ -1571,7 +1571,6 @@ liquidio_push_packet(u32 octeon_id __attribute__((unused)),
if (packet_was_received) { if (packet_was_received) {
droq->stats.rx_bytes_received += len; droq->stats.rx_bytes_received += len;
droq->stats.rx_pkts_received++; droq->stats.rx_pkts_received++;
netdev->last_rx = jiffies;
} else { } else {
droq->stats.rx_dropped++; droq->stats.rx_dropped++;
netif_info(lio, rx_err, lio->netdev, netif_info(lio, rx_err, lio->netdev,

View File

@ -797,7 +797,6 @@ static void hns_nic_rx_up_pro(struct hns_nic_ring_data *ring_data,
skb->protocol = eth_type_trans(skb, ndev); skb->protocol = eth_type_trans(skb, ndev);
(void)napi_gro_receive(&ring_data->napi, skb); (void)napi_gro_receive(&ring_data->napi, skb);
ndev->last_rx = jiffies;
} }
static int hns_desc_unused(struct hnae_ring *ring) static int hns_desc_unused(struct hnae_ring *ring)

View File

@ -240,9 +240,9 @@ static void e1000e_dump(struct e1000_adapter *adapter)
/* Print netdevice Info */ /* Print netdevice Info */
if (netdev) { if (netdev) {
dev_info(&adapter->pdev->dev, "Net device Info\n"); dev_info(&adapter->pdev->dev, "Net device Info\n");
pr_info("Device Name state trans_start last_rx\n"); pr_info("Device Name state trans_start\n");
pr_info("%-15s %016lX %016lX %016lX\n", netdev->name, pr_info("%-15s %016lX %016lX\n", netdev->name,
netdev->state, dev_trans_start(netdev), netdev->last_rx); netdev->state, dev_trans_start(netdev));
} }
/* Print Registers */ /* Print Registers */

View File

@ -383,9 +383,9 @@ static void igb_dump(struct igb_adapter *adapter)
/* Print netdevice Info */ /* Print netdevice Info */
if (netdev) { if (netdev) {
dev_info(&adapter->pdev->dev, "Net device Info\n"); dev_info(&adapter->pdev->dev, "Net device Info\n");
pr_info("Device Name state trans_start last_rx\n"); pr_info("Device Name state trans_start\n");
pr_info("%-15s %016lX %016lX %016lX\n", netdev->name, pr_info("%-15s %016lX %016lX\n", netdev->name,
netdev->state, dev_trans_start(netdev), netdev->last_rx); netdev->state, dev_trans_start(netdev));
} }
/* Print Registers */ /* Print Registers */

View File

@ -611,12 +611,11 @@ static void ixgbe_dump(struct ixgbe_adapter *adapter)
if (netdev) { if (netdev) {
dev_info(&adapter->pdev->dev, "Net device Info\n"); dev_info(&adapter->pdev->dev, "Net device Info\n");
pr_info("Device Name state " pr_info("Device Name state "
"trans_start last_rx\n"); "trans_start\n");
pr_info("%-15s %016lX %016lX %016lX\n", pr_info("%-15s %016lX %016lX\n",
netdev->name, netdev->name,
netdev->state, netdev->state,
dev_trans_start(netdev), dev_trans_start(netdev));
netdev->last_rx);
} }
/* Print Registers */ /* Print Registers */

View File

@ -2666,7 +2666,7 @@ static inline void sky2_rx_done(struct sky2_hw *hw, unsigned port,
sky2->rx_stats.bytes += bytes; sky2->rx_stats.bytes += bytes;
u64_stats_update_end(&sky2->rx_stats.syncp); u64_stats_update_end(&sky2->rx_stats.syncp);
dev->last_rx = jiffies; sky2->last_rx = jiffies;
sky2_rx_update(netdev_priv(dev), rxqaddr[port]); sky2_rx_update(netdev_priv(dev), rxqaddr[port]);
} }
@ -2953,7 +2953,7 @@ static int sky2_rx_hung(struct net_device *dev)
u8 fifo_lev = sky2_read8(hw, Q_ADDR(rxq, Q_RL)); u8 fifo_lev = sky2_read8(hw, Q_ADDR(rxq, Q_RL));
/* If idle and MAC or PCI is stuck */ /* If idle and MAC or PCI is stuck */
if (sky2->check.last == dev->last_rx && if (sky2->check.last == sky2->last_rx &&
((mac_rp == sky2->check.mac_rp && ((mac_rp == sky2->check.mac_rp &&
mac_lev != 0 && mac_lev >= sky2->check.mac_lev) || mac_lev != 0 && mac_lev >= sky2->check.mac_lev) ||
/* Check if the PCI RX hang */ /* Check if the PCI RX hang */
@ -2965,7 +2965,7 @@ static int sky2_rx_hung(struct net_device *dev)
fifo_rp, sky2_read8(hw, Q_ADDR(rxq, Q_WP))); fifo_rp, sky2_read8(hw, Q_ADDR(rxq, Q_WP)));
return 1; return 1;
} else { } else {
sky2->check.last = dev->last_rx; sky2->check.last = sky2->last_rx;
sky2->check.mac_rp = mac_rp; sky2->check.mac_rp = mac_rp;
sky2->check.mac_lev = mac_lev; sky2->check.mac_lev = mac_lev;
sky2->check.fifo_rp = fifo_rp; sky2->check.fifo_rp = fifo_rp;

View File

@ -2247,6 +2247,7 @@ struct sky2_port {
u16 rx_data_size; u16 rx_data_size;
u16 rx_nfrags; u16 rx_nfrags;
unsigned long last_rx;
struct { struct {
unsigned long last; unsigned long last;
u32 mac_rp; u32 mac_rp;

View File

@ -1213,7 +1213,6 @@ void emac_mac_rx_process(struct emac_adapter *adpt, struct emac_rx_queue *rx_q,
emac_receive_skb(rx_q, skb, (u16)RRD_CVALN_TAG(&rrd), emac_receive_skb(rx_q, skb, (u16)RRD_CVALN_TAG(&rrd),
(bool)RRD_CVTAG(&rrd)); (bool)RRD_CVTAG(&rrd));
netdev->last_rx = jiffies;
(*num_pkts)++; (*num_pkts)++;
} while (*num_pkts < max_pkts); } while (*num_pkts < max_pkts);

View File

@ -170,7 +170,7 @@ struct net_local {
spinlock_t lock; spinlock_t lock;
struct net_device *next_module; struct net_device *next_module;
struct timer_list timer; /* Media selection timer. */ struct timer_list timer; /* Media selection timer. */
long last_rx_time; /* Last Rx, in jiffies, to handle Rx hang. */ unsigned long last_rx_time; /* Last Rx, in jiffies, to handle Rx hang. */
int saved_tx_size; int saved_tx_size;
unsigned int tx_unit_busy:1; unsigned int tx_unit_busy:1;
unsigned char re_tx, /* Number of packet retransmissions. */ unsigned char re_tx, /* Number of packet retransmissions. */
@ -668,11 +668,11 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
} }
num_tx_since_rx++; num_tx_since_rx++;
} else if (num_tx_since_rx > 8 && } else if (num_tx_since_rx > 8 &&
time_after(jiffies, dev->last_rx + HZ)) { time_after(jiffies, lp->last_rx_time + HZ)) {
if (net_debug > 2) if (net_debug > 2)
printk(KERN_DEBUG "%s: Missed packet? No Rx after %d Tx and " printk(KERN_DEBUG "%s: Missed packet? No Rx after %d Tx and "
"%ld jiffies status %02x CMR1 %02x.\n", dev->name, "%ld jiffies status %02x CMR1 %02x.\n", dev->name,
num_tx_since_rx, jiffies - dev->last_rx, status, num_tx_since_rx, jiffies - lp->last_rx_time, status,
(read_nibble(ioaddr, CMR1) >> 3) & 15); (read_nibble(ioaddr, CMR1) >> 3) & 15);
dev->stats.rx_missed_errors++; dev->stats.rx_missed_errors++;
hardware_init(dev); hardware_init(dev);
@ -789,7 +789,6 @@ static void net_rx(struct net_device *dev)
read_block(ioaddr, pkt_len, skb_put(skb,pkt_len), dev->if_port); read_block(ioaddr, pkt_len, skb_put(skb,pkt_len), dev->if_port);
skb->protocol = eth_type_trans(skb, dev); skb->protocol = eth_type_trans(skb, dev);
netif_rx(skb); netif_rx(skb);
dev->last_rx = jiffies;
dev->stats.rx_packets++; dev->stats.rx_packets++;
dev->stats.rx_bytes += pkt_len; dev->stats.rx_bytes += pkt_len;
} }

View File

@ -113,6 +113,7 @@ struct smc_private {
struct mii_if_info mii_if; struct mii_if_info mii_if;
int duplex; int duplex;
int rx_ovrn; int rx_ovrn;
unsigned long last_rx;
}; };
/* Special definitions for Megahertz multifunction cards */ /* Special definitions for Megahertz multifunction cards */
@ -1491,6 +1492,7 @@ static void smc_rx(struct net_device *dev)
if (!(rx_status & RS_ERRORS)) { if (!(rx_status & RS_ERRORS)) {
/* do stuff to make a new packet */ /* do stuff to make a new packet */
struct sk_buff *skb; struct sk_buff *skb;
struct smc_private *smc = netdev_priv(dev);
/* Note: packet_length adds 5 or 6 extra bytes here! */ /* Note: packet_length adds 5 or 6 extra bytes here! */
skb = netdev_alloc_skb(dev, packet_length+2); skb = netdev_alloc_skb(dev, packet_length+2);
@ -1509,7 +1511,7 @@ static void smc_rx(struct net_device *dev)
skb->protocol = eth_type_trans(skb, dev); skb->protocol = eth_type_trans(skb, dev);
netif_rx(skb); netif_rx(skb);
dev->last_rx = jiffies; smc->last_rx = jiffies;
dev->stats.rx_packets++; dev->stats.rx_packets++;
dev->stats.rx_bytes += packet_length; dev->stats.rx_bytes += packet_length;
if (rx_status & RS_MULTICAST) if (rx_status & RS_MULTICAST)
@ -1790,7 +1792,7 @@ static void media_check(u_long arg)
} }
/* Ignore collisions unless we've had no rx's recently */ /* Ignore collisions unless we've had no rx's recently */
if (time_after(jiffies, dev->last_rx + HZ)) { if (time_after(jiffies, smc->last_rx + HZ)) {
if (smc->tx_err || (smc->media_status & EPH_16COL)) if (smc->tx_err || (smc->media_status & EPH_16COL))
media |= EPH_16COL; media |= EPH_16COL;
} }

View File

@ -22,7 +22,7 @@ static int max_rate = 57600;
static int max_rate = 115200; static int max_rate = 115200;
#endif #endif
static void turnaround_delay(unsigned long last_jif, int mtt) static void turnaround_delay(int mtt)
{ {
long ticks; long ticks;
@ -209,7 +209,6 @@ static void bfin_sir_rx_chars(struct net_device *dev)
UART_CLEAR_LSR(port); UART_CLEAR_LSR(port);
ch = UART_GET_CHAR(port); ch = UART_GET_CHAR(port);
async_unwrap_char(dev, &self->stats, &self->rx_buff, ch); async_unwrap_char(dev, &self->stats, &self->rx_buff, ch);
dev->last_rx = jiffies;
} }
static irqreturn_t bfin_sir_rx_int(int irq, void *dev_id) static irqreturn_t bfin_sir_rx_int(int irq, void *dev_id)
@ -510,7 +509,7 @@ static void bfin_sir_send_work(struct work_struct *work)
int tx_cnt = 10; int tx_cnt = 10;
while (bfin_sir_is_receiving(dev) && --tx_cnt) while (bfin_sir_is_receiving(dev) && --tx_cnt)
turnaround_delay(dev->last_rx, self->mtt); turnaround_delay(self->mtt);
bfin_sir_stop_rx(port); bfin_sir_stop_rx(port);

View File

@ -547,7 +547,6 @@ static void sh_sir_rx(struct sh_sir_self *self)
async_unwrap_char(self->ndev, &self->ndev->stats, async_unwrap_char(self->ndev, &self->ndev->stats,
&self->rx_buff, (u8)data); &self->rx_buff, (u8)data);
self->ndev->last_rx = jiffies;
if (EOFD & sh_sir_read(self, IRIF_SIR_FRM)) if (EOFD & sh_sir_read(self, IRIF_SIR_FRM))
continue; continue;

View File

@ -461,7 +461,6 @@ void hostif_data_indication(struct ks_wlan_private *priv)
skb->protocol = eth_type_trans(skb, skb->dev); skb->protocol = eth_type_trans(skb, skb->dev);
priv->nstats.rx_packets++; priv->nstats.rx_packets++;
priv->nstats.rx_bytes += rx_ind_size; priv->nstats.rx_bytes += rx_ind_size;
skb->dev->last_rx = jiffies;
netif_rx(skb); netif_rx(skb);
} else { } else {
priv->nstats.rx_dropped++; priv->nstats.rx_dropped++;
@ -494,7 +493,6 @@ void hostif_data_indication(struct ks_wlan_private *priv)
skb->protocol = eth_type_trans(skb, skb->dev); skb->protocol = eth_type_trans(skb, skb->dev);
priv->nstats.rx_packets++; priv->nstats.rx_packets++;
priv->nstats.rx_bytes += rx_ind_size; priv->nstats.rx_bytes += rx_ind_size;
skb->dev->last_rx = jiffies;
netif_rx(skb); netif_rx(skb);
} else { } else {
priv->nstats.rx_dropped++; priv->nstats.rx_dropped++;

View File

@ -155,7 +155,6 @@ static void xlr_net_fmn_handler(int bkt, int src_stnid, int size, int code,
skb_reserve(skb, BYTE_OFFSET); skb_reserve(skb, BYTE_OFFSET);
skb_put(skb, length); skb_put(skb, length);
skb->protocol = eth_type_trans(skb, skb->dev); skb->protocol = eth_type_trans(skb, skb->dev);
skb->dev->last_rx = jiffies;
netif_rx(skb); netif_rx(skb);
/* Fill rx ring */ /* Fill rx ring */
skb_data = xlr_alloc_skb(); skb_data = xlr_alloc_skb();

View File

@ -1375,7 +1375,6 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb,
ieee->LinkDetectInfo.NumRecvDataInPeriod++; ieee->LinkDetectInfo.NumRecvDataInPeriod++;
ieee->LinkDetectInfo.NumRxOkInPeriod++; ieee->LinkDetectInfo.NumRxOkInPeriod++;
} }
dev->last_rx = jiffies;
/* Data frame - extract src/dst addresses */ /* Data frame - extract src/dst addresses */
rtllib_rx_extract_addr(ieee, hdr, dst, src, bssid); rtllib_rx_extract_addr(ieee, hdr, dst, src, bssid);

View File

@ -1103,11 +1103,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
stats = hostap_get_stats(dev); stats = hostap_get_stats(dev);
from_assoc_ap = 1; from_assoc_ap = 1;
} }
#endif
dev->last_rx = jiffies;
#ifdef NOT_YET
if ((ieee->iw_mode == IW_MODE_MASTER || if ((ieee->iw_mode == IW_MODE_MASTER ||
ieee->iw_mode == IW_MODE_REPEAT) && ieee->iw_mode == IW_MODE_REPEAT) &&
!from_assoc_ap) { !from_assoc_ap) {

View File

@ -3409,7 +3409,6 @@ static void hfa384x_usbin_rx(struct wlandevice *wlandev, struct sk_buff *skb)
&usbin->rxfrm.desc.frame_control, hdrlen); &usbin->rxfrm.desc.frame_control, hdrlen);
skb->dev = wlandev->netdev; skb->dev = wlandev->netdev;
skb->dev->last_rx = jiffies;
/* And set the frame length properly */ /* And set the frame length properly */
skb_trim(skb, data_len + hdrlen); skb_trim(skb, data_len + hdrlen);

View File

@ -252,7 +252,6 @@ static int p80211_convert_to_ether(struct wlandevice *wlandev,
} }
if (skb_p80211_to_ether(wlandev, wlandev->ethconv, skb) == 0) { if (skb_p80211_to_ether(wlandev, wlandev->ethconv, skb) == 0) {
skb->dev->last_rx = jiffies;
wlandev->netdev->stats.rx_packets++; wlandev->netdev->stats.rx_packets++;
wlandev->netdev->stats.rx_bytes += skb->len; wlandev->netdev->stats.rx_bytes += skb->len;
netif_rx_ni(skb); netif_rx_ni(skb);
@ -287,7 +286,6 @@ static void p80211netdev_rx_bh(unsigned long arg)
skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE;
skb->pkt_type = PACKET_OTHERHOST; skb->pkt_type = PACKET_OTHERHOST;
skb->protocol = htons(ETH_P_80211_RAW); skb->protocol = htons(ETH_P_80211_RAW);
dev->last_rx = jiffies;
dev->stats.rx_packets++; dev->stats.rx_packets++;
dev->stats.rx_bytes += skb->len; dev->stats.rx_bytes += skb->len;

View File

@ -1551,7 +1551,6 @@ enum netdev_priv_flags {
* @ax25_ptr: AX.25 specific data * @ax25_ptr: AX.25 specific data
* @ieee80211_ptr: IEEE 802.11 specific data, assign before registering * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering
* *
* @last_rx: Time of last Rx
* @dev_addr: Hw address (before bcast, * @dev_addr: Hw address (before bcast,
* because most packets are unicast) * because most packets are unicast)
* *
@ -1777,8 +1776,6 @@ struct net_device {
/* /*
* Cache lines mostly used on receive path (including eth_type_trans()) * Cache lines mostly used on receive path (including eth_type_trans())
*/ */
unsigned long last_rx;
/* Interface address info used in eth_type_trans() */ /* Interface address info used in eth_type_trans() */
unsigned char *dev_addr; unsigned char *dev_addr;

View File

@ -449,7 +449,6 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, u8 *mac,
batadv_inc_counter(bat_priv, BATADV_CNT_RX); batadv_inc_counter(bat_priv, BATADV_CNT_RX);
batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES, batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES,
skb->len + ETH_HLEN); skb->len + ETH_HLEN);
soft_iface->last_rx = jiffies;
netif_rx(skb); netif_rx(skb);
out: out:

View File

@ -1050,7 +1050,6 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
bat_priv->soft_iface); bat_priv->soft_iface);
bat_priv->stats.rx_packets++; bat_priv->stats.rx_packets++;
bat_priv->stats.rx_bytes += skb->len + ETH_HLEN + hdr_size; bat_priv->stats.rx_bytes += skb->len + ETH_HLEN + hdr_size;
bat_priv->soft_iface->last_rx = jiffies;
netif_rx(skb_new); netif_rx(skb_new);
batadv_dbg(BATADV_DBG_DAT, bat_priv, "ARP request replied locally\n"); batadv_dbg(BATADV_DBG_DAT, bat_priv, "ARP request replied locally\n");

View File

@ -481,8 +481,6 @@ void batadv_interface_rx(struct net_device *soft_iface,
batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES, batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES,
skb->len + ETH_HLEN); skb->len + ETH_HLEN);
soft_iface->last_rx = jiffies;
/* Let the bridge loop avoidance check the packet. If will /* Let the bridge loop avoidance check the packet. If will
* not handle it, we can safely push it up. * not handle it, we can safely push it up.
*/ */