Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1393498 > unrolled thread

[PATCH net-next 0/5] net: remove trans_start from struct net_device

Started byFlorian Westphal <fw@strlen.de>
First post2016-05-03 17:20 +0200
Last post2016-05-04 20:20 +0200
Articles 8 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH net-next 0/5] net: remove trans_start from struct net_device Florian Westphal <fw@strlen.de> - 2016-05-03 17:20 +0200
    [PATCH net-next 1/5] dmfe: kill DEVICE define Florian Westphal <fw@strlen.de> - 2016-05-03 17:20 +0200
    [PATCH net-next 2/5] drivers: replace dev->trans_start accesses with dev_trans_start Florian Westphal <fw@strlen.de> - 2016-05-03 17:20 +0200
      Re: [PATCH net-next 2/5] drivers: replace dev->trans_start accesses  with dev_trans_start Doug Ledford <dledford@redhat.com> - 2016-05-12 21:50 +0200
    [PATCH net-next 5/5] net: remove dev->trans_start Florian Westphal <fw@strlen.de> - 2016-05-03 17:40 +0200
      Re: [PATCH net-next 5/5] net: remove dev->trans_start kbuild test robot <lkp@intel.com> - 2016-05-03 19:30 +0200
        Re: [PATCH net-next 5/5] net: remove dev->trans_start Florian Westphal <fw@strlen.de> - 2016-05-03 19:40 +0200
    Re: [PATCH net-next 0/5] net: remove trans_start from struct  net_device David Miller <davem@davemloft.net> - 2016-05-04 20:20 +0200

#1393498 — [PATCH net-next 0/5] net: remove trans_start from struct net_device

FromFlorian Westphal <fw@strlen.de>
Date2016-05-03 17:20 +0200
Subject[PATCH net-next 0/5] net: remove trans_start from struct net_device
Message-ID<ruKhb-1Y8-5@gated-at.bofh.it>
We currently have two instances for trans_start, once in
net_device and once in netdev_queue.

This series removes trans_start from net_device.
Updates to dev->trans_start are replaced with updates to netdev queue 0.

This series is compile-tested only.
Replacement is done in 3 steps:

1. Replace read-accesses:
  x = dev->trans_start

  gets replaced by
  x = dev_trans_start(dev)

2. Replace write accesses:
  dev->trans_start = jiffies;

  gets replaced with new helper:
  netif_trans_update(dev);

3. This helper is then changed to set
   netdev_get_tx_queue(dev, 0)->trans_start
   instead of dev->trans_start.

After this dev->trans_start can be removed.

It should be noted that after this series several instances
of netif_trans_update() are useless (if they occur in
.ndo_start_xmit and driver doesn't set LLTX flag -- stack already
did an update).

Comments welcome.

[toc] | [next] | [standalone]


#1393501 — [PATCH net-next 1/5] dmfe: kill DEVICE define

FromFlorian Westphal <fw@strlen.de>
Date2016-05-03 17:20 +0200
Subject[PATCH net-next 1/5] dmfe: kill DEVICE define
Message-ID<ruKhc-1Y8-19@gated-at.bofh.it>
In reply to#1393498
use net_device directly. Compile tested, objdiff shows no changes.

Cc: linux-parisc@vger.kernel.org
Signed-off-by: Florian Westphal <fw@strlen.de>
---
 drivers/net/ethernet/dec/tulip/dmfe.c | 39 ++++++++++++++++-------------------
 1 file changed, 18 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/dec/tulip/dmfe.c b/drivers/net/ethernet/dec/tulip/dmfe.c
index afd8e78..dd1c815 100644
--- a/drivers/net/ethernet/dec/tulip/dmfe.c
+++ b/drivers/net/ethernet/dec/tulip/dmfe.c
@@ -192,9 +192,6 @@
 	(__CHK_IO_SIZE(((pci_dev)->device << 16) | (pci_dev)->vendor, \
 	(pci_dev)->revision))
 
-/* Sten Check */
-#define DEVICE net_device
-
 /* Structure/enum declaration ------------------------------- */
 struct tx_desc {
         __le32 tdes0, tdes1, tdes2, tdes3; /* Data for the card */
@@ -313,10 +310,10 @@ static u8 SF_mode;		/* Special Function: 1:VLAN, 2:RX Flow Control
 
 
 /* function declaration ------------------------------------- */
-static int dmfe_open(struct DEVICE *);
-static netdev_tx_t dmfe_start_xmit(struct sk_buff *, struct DEVICE *);
-static int dmfe_stop(struct DEVICE *);
-static void dmfe_set_filter_mode(struct DEVICE *);
+static int dmfe_open(struct net_device *);
+static netdev_tx_t dmfe_start_xmit(struct sk_buff *, struct net_device *);
+static int dmfe_stop(struct net_device *);
+static void dmfe_set_filter_mode(struct net_device *);
 static const struct ethtool_ops netdev_ethtool_ops;
 static u16 read_srom_word(void __iomem *, int);
 static irqreturn_t dmfe_interrupt(int , void *);
@@ -326,8 +323,8 @@ static void poll_dmfe (struct net_device *dev);
 static void dmfe_descriptor_init(struct net_device *);
 static void allocate_rx_buffer(struct net_device *);
 static void update_cr6(u32, void __iomem *);
-static void send_filter_frame(struct DEVICE *);
-static void dm9132_id_table(struct DEVICE *);
+static void send_filter_frame(struct net_device *);
+static void dm9132_id_table(struct net_device *);
 static u16 dmfe_phy_read(void __iomem *, u8, u8, u32);
 static void dmfe_phy_write(void __iomem *, u8, u8, u16, u32);
 static void dmfe_phy_write_1bit(void __iomem *, u32);
@@ -336,12 +333,12 @@ static u8 dmfe_sense_speed(struct dmfe_board_info *);
 static void dmfe_process_mode(struct dmfe_board_info *);
 static void dmfe_timer(unsigned long);
 static inline u32 cal_CRC(unsigned char *, unsigned int, u8);
-static void dmfe_rx_packet(struct DEVICE *, struct dmfe_board_info *);
-static void dmfe_free_tx_pkt(struct DEVICE *, struct dmfe_board_info *);
+static void dmfe_rx_packet(struct net_device *, struct dmfe_board_info *);
+static void dmfe_free_tx_pkt(struct net_device *, struct dmfe_board_info *);
 static void dmfe_reuse_skb(struct dmfe_board_info *, struct sk_buff *);
-static void dmfe_dynamic_reset(struct DEVICE *);
+static void dmfe_dynamic_reset(struct net_device *);
 static void dmfe_free_rxbuffer(struct dmfe_board_info *);
-static void dmfe_init_dm910x(struct DEVICE *);
+static void dmfe_init_dm910x(struct net_device *);
 static void dmfe_parse_srom(struct dmfe_board_info *);
 static void dmfe_program_DM9801(struct dmfe_board_info *, int);
 static void dmfe_program_DM9802(struct dmfe_board_info *);
@@ -558,7 +555,7 @@ static void dmfe_remove_one(struct pci_dev *pdev)
  *	The interface is opened whenever "ifconfig" actives it.
  */
 
-static int dmfe_open(struct DEVICE *dev)
+static int dmfe_open(struct net_device *dev)
 {
 	struct dmfe_board_info *db = netdev_priv(dev);
 	const int irq = db->pdev->irq;
@@ -617,7 +614,7 @@ static int dmfe_open(struct DEVICE *dev)
  *	Enable Tx/Rx machine
  */
 
-static void dmfe_init_dm910x(struct DEVICE *dev)
+static void dmfe_init_dm910x(struct net_device *dev)
 {
 	struct dmfe_board_info *db = netdev_priv(dev);
 	void __iomem *ioaddr = db->ioaddr;
@@ -684,7 +681,7 @@ static void dmfe_init_dm910x(struct DEVICE *dev)
  */
 
 static netdev_tx_t dmfe_start_xmit(struct sk_buff *skb,
-					 struct DEVICE *dev)
+					 struct net_device *dev)
 {
 	struct dmfe_board_info *db = netdev_priv(dev);
 	void __iomem *ioaddr = db->ioaddr;
@@ -754,7 +751,7 @@ static netdev_tx_t dmfe_start_xmit(struct sk_buff *skb,
  *	The interface is stopped when it is brought.
  */
 
-static int dmfe_stop(struct DEVICE *dev)
+static int dmfe_stop(struct net_device *dev)
 {
 	struct dmfe_board_info *db = netdev_priv(dev);
 	void __iomem *ioaddr = db->ioaddr;
@@ -798,7 +795,7 @@ static int dmfe_stop(struct DEVICE *dev)
 
 static irqreturn_t dmfe_interrupt(int irq, void *dev_id)
 {
-	struct DEVICE *dev = dev_id;
+	struct net_device *dev = dev_id;
 	struct dmfe_board_info *db = netdev_priv(dev);
 	void __iomem *ioaddr = db->ioaddr;
 	unsigned long flags;
@@ -879,7 +876,7 @@ static void poll_dmfe (struct net_device *dev)
  *	Free TX resource after TX complete
  */
 
-static void dmfe_free_tx_pkt(struct DEVICE *dev, struct dmfe_board_info * db)
+static void dmfe_free_tx_pkt(struct net_device *dev, struct dmfe_board_info *db)
 {
 	struct tx_desc *txptr;
 	void __iomem *ioaddr = db->ioaddr;
@@ -961,7 +958,7 @@ static inline u32 cal_CRC(unsigned char * Data, unsigned int Len, u8 flag)
  *	Receive the come packet and pass to upper layer
  */
 
-static void dmfe_rx_packet(struct DEVICE *dev, struct dmfe_board_info * db)
+static void dmfe_rx_packet(struct net_device *dev, struct dmfe_board_info *db)
 {
 	struct rx_desc *rxptr;
 	struct sk_buff *skb, *newskb;
@@ -1052,7 +1049,7 @@ static void dmfe_rx_packet(struct DEVICE *dev, struct dmfe_board_info * db)
  * Set DM910X multicast address
  */
 
-static void dmfe_set_filter_mode(struct DEVICE * dev)
+static void dmfe_set_filter_mode(struct net_device *dev)
 {
 	struct dmfe_board_info *db = netdev_priv(dev);
 	unsigned long flags;
-- 
2.7.3

[toc] | [prev] | [next] | [standalone]


#1393504 — [PATCH net-next 2/5] drivers: replace dev->trans_start accesses with dev_trans_start

FromFlorian Westphal <fw@strlen.de>
Date2016-05-03 17:20 +0200
Subject[PATCH net-next 2/5] drivers: replace dev->trans_start accesses with dev_trans_start
Message-ID<ruKhc-1Y8-27@gated-at.bofh.it>
In reply to#1393498
a trans_start struct member exists twice:
- in struct net_device (legacy)
- in struct netdev_queue

Instead of open-coding dev->trans_start usage to obtain the current
trans_start value, use dev_trans_start() instead.

This is not exactly the same, as dev_trans_start also considers
the trans_start values of the netdev queues owned by the device
and provides the most recent one.

For legacy devices this doesn't matter as dev_trans_start can cope
with netdev trans_start values of 0 (they are ignored).

This is a prerequisite to eventual removal of dev->trans_start.

Cc: linux-rdma@vger.kernel.org
Signed-off-by: Florian Westphal <fw@strlen.de>
---
 Checkpatch complains about Lines > 80 but I find line break more ugly.

 drivers/infiniband/ulp/ipoib/ipoib_main.c              | 2 +-
 drivers/net/ethernet/intel/e1000e/netdev.c             | 2 +-
 drivers/net/ethernet/intel/igb/igb_main.c              | 2 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c          | 2 +-
 drivers/net/ethernet/microchip/encx24j600.c            | 2 +-
 drivers/net/ethernet/qualcomm/qca_spi.c                | 2 +-
 drivers/net/fjes/fjes_main.c                           | 2 +-
 drivers/net/hamradio/mkiss.c                           | 2 +-
 drivers/staging/rtl8192e/rtllib_softmac.c              | 2 +-
 drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c | 2 +-
 10 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 80807d6..b940ef1 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -1036,7 +1036,7 @@ static void ipoib_timeout(struct net_device *dev)
 	struct ipoib_dev_priv *priv = netdev_priv(dev);
 
 	ipoib_warn(priv, "transmit timeout: latency %d msecs\n",
-		   jiffies_to_msecs(jiffies - dev->trans_start));
+		   jiffies_to_msecs(jiffies - dev_trans_start(dev)));
 	ipoib_warn(priv, "queue stopped %d, tx_head %u, tx_tail %u\n",
 		   netif_queue_stopped(dev),
 		   priv->tx_head, priv->tx_tail);
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index a7f16c3..269087c 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -242,7 +242,7 @@ static void e1000e_dump(struct e1000_adapter *adapter)
 		dev_info(&adapter->pdev->dev, "Net device Info\n");
 		pr_info("Device Name     state            trans_start      last_rx\n");
 		pr_info("%-15s %016lX %016lX %016lX\n", netdev->name,
-			netdev->state, netdev->trans_start, netdev->last_rx);
+			netdev->state, dev_trans_start(netdev), netdev->last_rx);
 	}
 
 	/* Print Registers */
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 8e96c35..7460bdb 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -383,7 +383,7 @@ static void igb_dump(struct igb_adapter *adapter)
 		dev_info(&adapter->pdev->dev, "Net device Info\n");
 		pr_info("Device Name     state            trans_start      last_rx\n");
 		pr_info("%-15s %016lX %016lX %016lX\n", netdev->name,
-			netdev->state, netdev->trans_start, netdev->last_rx);
+			netdev->state, dev_trans_start(netdev), netdev->last_rx);
 	}
 
 	/* Print Registers */
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 0ef4a15..18dcfc5 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -608,7 +608,7 @@ static void ixgbe_dump(struct ixgbe_adapter *adapter)
 		pr_info("%-15s %016lX %016lX %016lX\n",
 			netdev->name,
 			netdev->state,
-			netdev->trans_start,
+			dev_trans_start(netdev),
 			netdev->last_rx);
 	}
 
diff --git a/drivers/net/ethernet/microchip/encx24j600.c b/drivers/net/ethernet/microchip/encx24j600.c
index 7df3183..707283b 100644
--- a/drivers/net/ethernet/microchip/encx24j600.c
+++ b/drivers/net/ethernet/microchip/encx24j600.c
@@ -890,7 +890,7 @@ static void encx24j600_tx_timeout(struct net_device *dev)
 	struct encx24j600_priv *priv = netdev_priv(dev);
 
 	netif_err(priv, tx_err, dev, "TX timeout at %ld, latency %ld\n",
-		  jiffies, jiffies - dev->trans_start);
+		  jiffies, jiffies - dev_trans_start(dev));
 
 	dev->stats.tx_errors++;
 	netif_wake_queue(dev);
diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
index 1ef0393..82f3c88 100644
--- a/drivers/net/ethernet/qualcomm/qca_spi.c
+++ b/drivers/net/ethernet/qualcomm/qca_spi.c
@@ -734,7 +734,7 @@ qcaspi_netdev_tx_timeout(struct net_device *dev)
 	struct qcaspi *qca = netdev_priv(dev);
 
 	netdev_info(qca->net_dev, "Transmit timeout at %ld, latency %ld\n",
-		    jiffies, jiffies - dev->trans_start);
+		    jiffies, jiffies - dev_trans_start(dev));
 	qca->net_dev->stats.tx_errors++;
 	/* Trigger tx queue flush and QCA7000 reset */
 	qca->sync = QCASPI_SYNC_UNKNOWN;
diff --git a/drivers/net/fjes/fjes_main.c b/drivers/net/fjes/fjes_main.c
index bb7e903..7ad3d04 100644
--- a/drivers/net/fjes/fjes_main.c
+++ b/drivers/net/fjes/fjes_main.c
@@ -471,7 +471,7 @@ static void fjes_tx_stall_task(struct work_struct *work)
 	int i;
 
 	if (((long)jiffies -
-		(long)(netdev->trans_start)) > FJES_TX_TX_STALL_TIMEOUT) {
+		dev_trans_start(netdev)) > FJES_TX_TX_STALL_TIMEOUT) {
 		netif_wake_queue(netdev);
 		return;
 	}
diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
index 85828f1..c685937 100644
--- a/drivers/net/hamradio/mkiss.c
+++ b/drivers/net/hamradio/mkiss.c
@@ -542,7 +542,7 @@ static netdev_tx_t ax_xmit(struct sk_buff *skb, struct net_device *dev)
 		 * May be we must check transmitter timeout here ?
 		 *      14 Oct 1994 Dmitry Gorodchanin.
 		 */
-		if (time_before(jiffies, dev->trans_start + 20 * HZ)) {
+		if (time_before(jiffies, dev_trans_start(dev) + 20 * HZ)) {
 			/* 20 sec timeout not reached */
 			return NETDEV_TX_BUSY;
 		}
diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c
index cfab715..62154e3 100644
--- a/drivers/staging/rtl8192e/rtllib_softmac.c
+++ b/drivers/staging/rtl8192e/rtllib_softmac.c
@@ -1991,7 +1991,7 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time)
 		return 2;
 
 	if (!time_after(jiffies,
-			ieee->dev->trans_start + msecs_to_jiffies(timeout)))
+			dev_trans_start(ieee->dev) + msecs_to_jiffies(timeout)))
 		return 0;
 	if (!time_after(jiffies,
 			ieee->last_rx_ps_time + msecs_to_jiffies(timeout)))
diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
index ae1274c..de71450 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
@@ -1737,7 +1737,7 @@ static short ieee80211_sta_ps_sleep(struct ieee80211_device *ieee, u32 *time_h,
 		return 2;
 
 	if(!time_after(jiffies,
-		       ieee->dev->trans_start + msecs_to_jiffies(timeout)))
+		       dev_trans_start(ieee->dev) + msecs_to_jiffies(timeout)))
 		return 0;
 
 	if(!time_after(jiffies,
-- 
2.7.3

[toc] | [prev] | [next] | [standalone]


#1400311 — Re: [PATCH net-next 2/5] drivers: replace dev->trans_start accesses with dev_trans_start

FromDoug Ledford <dledford@redhat.com>
Date2016-05-12 21:50 +0200
SubjectRe: [PATCH net-next 2/5] drivers: replace dev->trans_start accesses with dev_trans_start
Message-ID<ry4Mp-3PW-3@gated-at.bofh.it>
In reply to#1393504

[Multipart message — attachments visible in raw view] — view raw

On 05/03/2016 10:30 AM, Florian Westphal wrote:
> a trans_start struct member exists twice:
> - in struct net_device (legacy)
> - in struct netdev_queue
> 
> Instead of open-coding dev->trans_start usage to obtain the current
> trans_start value, use dev_trans_start() instead.
> 
> This is not exactly the same, as dev_trans_start also considers
> the trans_start values of the netdev queues owned by the device
> and provides the most recent one.
> 
> For legacy devices this doesn't matter as dev_trans_start can cope
> with netdev trans_start values of 0 (they are ignored).
> 
> This is a prerequisite to eventual removal of dev->trans_start.
> 
> Cc: linux-rdma@vger.kernel.org
> Signed-off-by: Florian Westphal <fw@strlen.de>
> ---
>  Checkpatch complains about Lines > 80 but I find line break more ugly.
> 
>  drivers/infiniband/ulp/ipoib/ipoib_main.c              | 2 +-

For ipoib part,

Acked-by: Doug Ledford <dledford@redhat.com>

>  drivers/net/ethernet/intel/e1000e/netdev.c             | 2 +-
>  drivers/net/ethernet/intel/igb/igb_main.c              | 2 +-
>  drivers/net/ethernet/intel/ixgbe/ixgbe_main.c          | 2 +-
>  drivers/net/ethernet/microchip/encx24j600.c            | 2 +-
>  drivers/net/ethernet/qualcomm/qca_spi.c                | 2 +-
>  drivers/net/fjes/fjes_main.c                           | 2 +-
>  drivers/net/hamradio/mkiss.c                           | 2 +-
>  drivers/staging/rtl8192e/rtllib_softmac.c              | 2 +-
>  drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c | 2 +-
>  10 files changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
> index 80807d6..b940ef1 100644
> --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
> +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
> @@ -1036,7 +1036,7 @@ static void ipoib_timeout(struct net_device *dev)
>  	struct ipoib_dev_priv *priv = netdev_priv(dev);
>  
>  	ipoib_warn(priv, "transmit timeout: latency %d msecs\n",
> -		   jiffies_to_msecs(jiffies - dev->trans_start));
> +		   jiffies_to_msecs(jiffies - dev_trans_start(dev)));
>  	ipoib_warn(priv, "queue stopped %d, tx_head %u, tx_tail %u\n",
>  		   netif_queue_stopped(dev),
>  		   priv->tx_head, priv->tx_tail);
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
> index a7f16c3..269087c 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -242,7 +242,7 @@ static void e1000e_dump(struct e1000_adapter *adapter)
>  		dev_info(&adapter->pdev->dev, "Net device Info\n");
>  		pr_info("Device Name     state            trans_start      last_rx\n");
>  		pr_info("%-15s %016lX %016lX %016lX\n", netdev->name,
> -			netdev->state, netdev->trans_start, netdev->last_rx);
> +			netdev->state, dev_trans_start(netdev), netdev->last_rx);
>  	}
>  
>  	/* Print Registers */
> diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
> index 8e96c35..7460bdb 100644
> --- a/drivers/net/ethernet/intel/igb/igb_main.c
> +++ b/drivers/net/ethernet/intel/igb/igb_main.c
> @@ -383,7 +383,7 @@ static void igb_dump(struct igb_adapter *adapter)
>  		dev_info(&adapter->pdev->dev, "Net device Info\n");
>  		pr_info("Device Name     state            trans_start      last_rx\n");
>  		pr_info("%-15s %016lX %016lX %016lX\n", netdev->name,
> -			netdev->state, netdev->trans_start, netdev->last_rx);
> +			netdev->state, dev_trans_start(netdev), netdev->last_rx);
>  	}
>  
>  	/* Print Registers */
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> index 0ef4a15..18dcfc5 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> @@ -608,7 +608,7 @@ static void ixgbe_dump(struct ixgbe_adapter *adapter)
>  		pr_info("%-15s %016lX %016lX %016lX\n",
>  			netdev->name,
>  			netdev->state,
> -			netdev->trans_start,
> +			dev_trans_start(netdev),
>  			netdev->last_rx);
>  	}
>  
> diff --git a/drivers/net/ethernet/microchip/encx24j600.c b/drivers/net/ethernet/microchip/encx24j600.c
> index 7df3183..707283b 100644
> --- a/drivers/net/ethernet/microchip/encx24j600.c
> +++ b/drivers/net/ethernet/microchip/encx24j600.c
> @@ -890,7 +890,7 @@ static void encx24j600_tx_timeout(struct net_device *dev)
>  	struct encx24j600_priv *priv = netdev_priv(dev);
>  
>  	netif_err(priv, tx_err, dev, "TX timeout at %ld, latency %ld\n",
> -		  jiffies, jiffies - dev->trans_start);
> +		  jiffies, jiffies - dev_trans_start(dev));
>  
>  	dev->stats.tx_errors++;
>  	netif_wake_queue(dev);
> diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
> index 1ef0393..82f3c88 100644
> --- a/drivers/net/ethernet/qualcomm/qca_spi.c
> +++ b/drivers/net/ethernet/qualcomm/qca_spi.c
> @@ -734,7 +734,7 @@ qcaspi_netdev_tx_timeout(struct net_device *dev)
>  	struct qcaspi *qca = netdev_priv(dev);
>  
>  	netdev_info(qca->net_dev, "Transmit timeout at %ld, latency %ld\n",
> -		    jiffies, jiffies - dev->trans_start);
> +		    jiffies, jiffies - dev_trans_start(dev));
>  	qca->net_dev->stats.tx_errors++;
>  	/* Trigger tx queue flush and QCA7000 reset */
>  	qca->sync = QCASPI_SYNC_UNKNOWN;
> diff --git a/drivers/net/fjes/fjes_main.c b/drivers/net/fjes/fjes_main.c
> index bb7e903..7ad3d04 100644
> --- a/drivers/net/fjes/fjes_main.c
> +++ b/drivers/net/fjes/fjes_main.c
> @@ -471,7 +471,7 @@ static void fjes_tx_stall_task(struct work_struct *work)
>  	int i;
>  
>  	if (((long)jiffies -
> -		(long)(netdev->trans_start)) > FJES_TX_TX_STALL_TIMEOUT) {
> +		dev_trans_start(netdev)) > FJES_TX_TX_STALL_TIMEOUT) {
>  		netif_wake_queue(netdev);
>  		return;
>  	}
> diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
> index 85828f1..c685937 100644
> --- a/drivers/net/hamradio/mkiss.c
> +++ b/drivers/net/hamradio/mkiss.c
> @@ -542,7 +542,7 @@ static netdev_tx_t ax_xmit(struct sk_buff *skb, struct net_device *dev)
>  		 * May be we must check transmitter timeout here ?
>  		 *      14 Oct 1994 Dmitry Gorodchanin.
>  		 */
> -		if (time_before(jiffies, dev->trans_start + 20 * HZ)) {
> +		if (time_before(jiffies, dev_trans_start(dev) + 20 * HZ)) {
>  			/* 20 sec timeout not reached */
>  			return NETDEV_TX_BUSY;
>  		}
> diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c
> index cfab715..62154e3 100644
> --- a/drivers/staging/rtl8192e/rtllib_softmac.c
> +++ b/drivers/staging/rtl8192e/rtllib_softmac.c
> @@ -1991,7 +1991,7 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time)
>  		return 2;
>  
>  	if (!time_after(jiffies,
> -			ieee->dev->trans_start + msecs_to_jiffies(timeout)))
> +			dev_trans_start(ieee->dev) + msecs_to_jiffies(timeout)))
>  		return 0;
>  	if (!time_after(jiffies,
>  			ieee->last_rx_ps_time + msecs_to_jiffies(timeout)))
> diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
> index ae1274c..de71450 100644
> --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
> +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
> @@ -1737,7 +1737,7 @@ static short ieee80211_sta_ps_sleep(struct ieee80211_device *ieee, u32 *time_h,
>  		return 2;
>  
>  	if(!time_after(jiffies,
> -		       ieee->dev->trans_start + msecs_to_jiffies(timeout)))
> +		       dev_trans_start(ieee->dev) + msecs_to_jiffies(timeout)))
>  		return 0;
>  
>  	if(!time_after(jiffies,
> 


-- 
Doug Ledford <dledford@redhat.com>
              GPG KeyID: 0E572FDD


[toc] | [prev] | [next] | [standalone]


#1393540 — [PATCH net-next 5/5] net: remove dev->trans_start

FromFlorian Westphal <fw@strlen.de>
Date2016-05-03 17:40 +0200
Subject[PATCH net-next 5/5] net: remove dev->trans_start
Message-ID<ruKAy-29Y-37@gated-at.bofh.it>
In reply to#1393498
previous patches removed all direct accesses to dev->trans_start,
so change the netif_trans_update helper to update trans_start of
netdev queue 0 instead and then remove trans_start from struct net_device.

AFAICS a lot of the netif_trans_update() invocations are now useless
because they occur in ndo_start_xmit and driver doesn't set LLTX
(i.e. stack already took care of the update).

As I can't test any of them it seems better to just leave them alone.

Signed-off-by: Florian Westphal <fw@strlen.de>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c |  2 +-
 include/linux/netdevice.h                   | 15 +++++----------
 net/sched/sch_generic.c                     | 10 +++-------
 3 files changed, 9 insertions(+), 18 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 8e6c0f2..f6da6b7 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -328,7 +328,7 @@ static void i40e_tx_timeout(struct net_device *netdev)
 		unsigned long trans_start;
 
 		q = netdev_get_tx_queue(netdev, i);
-		trans_start = q->trans_start ? : netdev->trans_start;
+		trans_start = q->trans_start;
 		if (netif_xmit_stopped(q) &&
 		    time_after(jiffies,
 			       (trans_start + netdev->watchdog_timeo))) {
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 798f285..fba2faa 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -581,7 +581,7 @@ struct netdev_queue {
 	spinlock_t		_xmit_lock ____cacheline_aligned_in_smp;
 	int			xmit_lock_owner;
 	/*
-	 * please use this field instead of dev->trans_start
+	 * Time (in jiffies) of last Tx
 	 */
 	unsigned long		trans_start;
 
@@ -1545,7 +1545,6 @@ enum netdev_priv_flags {
  *
  *	@offload_fwd_mark:	Offload device fwding mark
  *
- *	@trans_start:		Time (in jiffies) of last Tx
  *	@watchdog_timeo:	Represents the timeout that is used by
  *				the watchdog (see dev_watchdog())
  *	@watchdog_timer:	List of timers
@@ -1794,13 +1793,6 @@ struct net_device {
 #endif
 
 	/* These may be needed for future network-power-down code. */
-
-	/*
-	 * trans_start here is expensive for high speed devices on SMP,
-	 * please use netdev_queue->trans_start instead.
-	 */
-	unsigned long		trans_start;
-
 	struct timer_list	watchdog_timer;
 
 	int __percpu		*pcpu_refcnt;
@@ -3484,7 +3476,10 @@ static inline void txq_trans_update(struct netdev_queue *txq)
 /* legacy drivers only, netdev_start_xmit() sets txq->trans_start */
 static inline void netif_trans_update(struct net_device *dev)
 {
-	dev->trans_start = jiffies;
+	struct netdev_queue *txq = netdev_get_tx_queue(dev, 0);
+
+	if (txq->trans_start != jiffies)
+		txq->trans_start = jiffies;
 }
 
 /**
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 70182cf..269dd71 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -227,13 +227,12 @@ unsigned long dev_trans_start(struct net_device *dev)
 
 	if (is_vlan_dev(dev))
 		dev = vlan_dev_real_dev(dev);
-	res = dev->trans_start;
-	for (i = 0; i < dev->num_tx_queues; i++) {
+	res = netdev_get_tx_queue(dev, 0)->trans_start;
+	for (i = 1; i < dev->num_tx_queues; i++) {
 		val = netdev_get_tx_queue(dev, i)->trans_start;
 		if (val && time_after(val, res))
 			res = val;
 	}
-	dev->trans_start = res;
 
 	return res;
 }
@@ -256,10 +255,7 @@ static void dev_watchdog(unsigned long arg)
 				struct netdev_queue *txq;
 
 				txq = netdev_get_tx_queue(dev, i);
-				/*
-				 * old device drivers set dev->trans_start
-				 */
-				trans_start = txq->trans_start ? : dev->trans_start;
+				trans_start = txq->trans_start;
 				if (netif_xmit_stopped(txq) &&
 				    time_after(jiffies, (trans_start +
 							 dev->watchdog_timeo))) {
-- 
2.7.3

[toc] | [prev] | [next] | [standalone]


#1393635 — Re: [PATCH net-next 5/5] net: remove dev->trans_start

Fromkbuild test robot <lkp@intel.com>
Date2016-05-03 19:30 +0200
SubjectRe: [PATCH net-next 5/5] net: remove dev->trans_start
Message-ID<ruMj0-3Hu-1@gated-at.bofh.it>
In reply to#1393540

[Multipart message — attachments visible in raw view] — view raw

Hi,

[auto build test ERROR on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Florian-Westphal/net-remove-trans_start-from-struct-net_device/20160503-234813
config: s390-default_defconfig (attached as .config)
compiler: s390x-linux-gnu-gcc (Debian 5.3.1-8) 5.3.1 20160205
reproduce:
        wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=s390 

Note: the linux-review/Florian-Westphal/net-remove-trans_start-from-struct-net_device/20160503-234813 HEAD 2f61b7d5d947dad50a74493b21fe750103f74b1c builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   drivers/s390/net/qeth_core_main.c: In function 'qeth_flush_buffers':
>> drivers/s390/net/qeth_core_main.c:3484:18: error: 'struct net_device' has no member named 'trans_start'
     queue->card->dev->trans_start = jiffies;
                     ^

vim +3484 drivers/s390/net/qeth_core_main.c

4a71df500 Frank Blaschka 2008-02-15  3478  				atomic_inc(&queue->set_pci_flags_count);
3ec90878b Jan Glauber    2011-06-06  3479  				buf->buffer->element[0].sflags |= SBAL_SFLAGS0_PCI_REQ;
4a71df500 Frank Blaschka 2008-02-15  3480  			}
4a71df500 Frank Blaschka 2008-02-15  3481  		}
4a71df500 Frank Blaschka 2008-02-15  3482  	}
4a71df500 Frank Blaschka 2008-02-15  3483  
4a71df500 Frank Blaschka 2008-02-15 @3484  	queue->card->dev->trans_start = jiffies;
4a71df500 Frank Blaschka 2008-02-15  3485  	if (queue->card->options.performance_stats) {
4a71df500 Frank Blaschka 2008-02-15  3486  		queue->card->perf_stats.outbound_do_qdio_cnt++;
4a71df500 Frank Blaschka 2008-02-15  3487  		queue->card->perf_stats.outbound_do_qdio_start_time =

:::::: The code at line 3484 was first introduced by commit
:::::: 4a71df50047f0db65ea09b1be155852e81a45eba qeth: new qeth device driver

:::::: TO: Frank Blaschka <frank.blaschka@de.ibm.com>
:::::: CC: Jeff Garzik <jeff@garzik.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[toc] | [prev] | [next] | [standalone]


#1393671 — Re: [PATCH net-next 5/5] net: remove dev->trans_start

FromFlorian Westphal <fw@strlen.de>
Date2016-05-03 19:40 +0200
SubjectRe: [PATCH net-next 5/5] net: remove dev->trans_start
Message-ID<ruMsI-3Sd-67@gated-at.bofh.it>
In reply to#1393635
kbuild test robot <lkp@intel.com> wrote:
> [auto build test ERROR on net-next/master]
> 
> url:    https://github.com/0day-ci/linux/commits/Florian-Westphal/net-remove-trans_start-from-struct-net_device/20160503-234813
> config: s390-default_defconfig (attached as .config)
> compiler: s390x-linux-gnu-gcc (Debian 5.3.1-8) 5.3.1 20160205
> reproduce:
>         wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # save the attached .config to linux build tree
>         make.cross ARCH=s390 
> 
> Note: the linux-review/Florian-Westphal/net-remove-trans_start-from-struct-net_device/20160503-234813 HEAD 2f61b7d5d947dad50a74493b21fe750103f74b1c builds fine.
>       It only hurts bisectibility.
> 
> All errors (new ones prefixed by >>):
> 
>    drivers/s390/net/qeth_core_main.c: In function 'qeth_flush_buffers':
> >> drivers/s390/net/qeth_core_main.c:3484:18: error: 'struct net_device' has no member named 'trans_start'
>      queue->card->dev->trans_start = jiffies;

Indeed, patch #4 missed this when doing the replacement.
There is a similar mistake for a tilera-specific driver.

I'll submit a v2 of this series later.

[toc] | [prev] | [next] | [standalone]


#1394598 — Re: [PATCH net-next 0/5] net: remove trans_start from struct net_device

FromDavid Miller <davem@davemloft.net>
Date2016-05-04 20:20 +0200
SubjectRe: [PATCH net-next 0/5] net: remove trans_start from struct net_device
Message-ID<rv9yW-DZ-9@gated-at.bofh.it>
In reply to#1393498
From: Florian Westphal <fw@strlen.de>
Date: Tue,  3 May 2016 16:30:57 +0200

> We currently have two instances for trans_start, once in
> net_device and once in netdev_queue.
> 
> This series removes trans_start from net_device.
> Updates to dev->trans_start are replaced with updates to netdev queue 0.

Series applied, of course sans patch #1 which you resubmitted separately.

Thanks.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web