All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/6] r8169: again few improvements
@ 2020-05-30 21:52 Heiner Kallweit
  2020-05-30 21:54 ` [PATCH net-next 1/6] r8169: change driver data type Heiner Kallweit
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Heiner Kallweit @ 2020-05-30 21:52 UTC (permalink / raw)
  To: Realtek linux nic maintainers, David Miller, Jakub Kicinski; +Cc: netdev

Again a series with few r8169 improvements.

Heiner Kallweit (6):
  r8169: change driver data type
  r8169: enable WAKE_PHY as only WoL source when runtime-suspending
  r8169: don't reset tx ring indexes in rtl8169_tx_clear
  r8169: move some calls to rtl8169_hw_reset
  r8169: make rtl8169_down central chip quiesce function
  r8169: improve handling power management ops

 drivers/net/ethernet/realtek/r8169_main.c | 199 +++++++++-------------
 1 file changed, 82 insertions(+), 117 deletions(-)

-- 
2.26.2


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH net-next 1/6] r8169: change driver data type
  2020-05-30 21:52 [PATCH net-next 0/6] r8169: again few improvements Heiner Kallweit
@ 2020-05-30 21:54 ` Heiner Kallweit
  2020-05-31  5:17   ` Stephen Hemminger
  2020-05-30 21:55 ` [PATCH net-next 2/6] r8169: enable WAKE_PHY as only WoL source when runtime-suspending Heiner Kallweit
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 10+ messages in thread
From: Heiner Kallweit @ 2020-05-30 21:54 UTC (permalink / raw)
  To: Realtek linux nic maintainers, David Miller, Jakub Kicinski; +Cc: netdev

Change driver private data type to struct rtl8169_private * to avoid
some overhead.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/ethernet/realtek/r8169_main.c | 60 ++++++++++-------------
 1 file changed, 25 insertions(+), 35 deletions(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index d672ae77c..810398ef7 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -4816,15 +4816,13 @@ rtl8169_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
 	pm_runtime_put_noidle(&pdev->dev);
 }
 
-static void rtl8169_net_suspend(struct net_device *dev)
+static void rtl8169_net_suspend(struct rtl8169_private *tp)
 {
-	struct rtl8169_private *tp = netdev_priv(dev);
-
-	if (!netif_running(dev))
+	if (!netif_running(tp->dev))
 		return;
 
 	phy_stop(tp->phydev);
-	netif_device_detach(dev);
+	netif_device_detach(tp->dev);
 
 	rtl_lock_work(tp);
 	napi_disable(&tp->napi);
@@ -4840,20 +4838,17 @@ static void rtl8169_net_suspend(struct net_device *dev)
 
 static int rtl8169_suspend(struct device *device)
 {
-	struct net_device *dev = dev_get_drvdata(device);
-	struct rtl8169_private *tp = netdev_priv(dev);
+	struct rtl8169_private *tp = dev_get_drvdata(device);
 
-	rtl8169_net_suspend(dev);
+	rtl8169_net_suspend(tp);
 	clk_disable_unprepare(tp->clk);
 
 	return 0;
 }
 
-static void __rtl8169_resume(struct net_device *dev)
+static void __rtl8169_resume(struct rtl8169_private *tp)
 {
-	struct rtl8169_private *tp = netdev_priv(dev);
-
-	netif_device_attach(dev);
+	netif_device_attach(tp->dev);
 
 	rtl_pll_power_up(tp);
 	rtl8169_init_phy(tp);
@@ -4869,23 +4864,21 @@ static void __rtl8169_resume(struct net_device *dev)
 
 static int rtl8169_resume(struct device *device)
 {
-	struct net_device *dev = dev_get_drvdata(device);
-	struct rtl8169_private *tp = netdev_priv(dev);
+	struct rtl8169_private *tp = dev_get_drvdata(device);
 
-	rtl_rar_set(tp, dev->dev_addr);
+	rtl_rar_set(tp, tp->dev->dev_addr);
 
 	clk_prepare_enable(tp->clk);
 
-	if (netif_running(dev))
-		__rtl8169_resume(dev);
+	if (netif_running(tp->dev))
+		__rtl8169_resume(tp);
 
 	return 0;
 }
 
 static int rtl8169_runtime_suspend(struct device *device)
 {
-	struct net_device *dev = dev_get_drvdata(device);
-	struct rtl8169_private *tp = netdev_priv(dev);
+	struct rtl8169_private *tp = dev_get_drvdata(device);
 
 	if (!tp->TxDescArray)
 		return 0;
@@ -4894,7 +4887,7 @@ static int rtl8169_runtime_suspend(struct device *device)
 	__rtl8169_set_wol(tp, WAKE_ANY);
 	rtl_unlock_work(tp);
 
-	rtl8169_net_suspend(dev);
+	rtl8169_net_suspend(tp);
 
 	/* Update counters before going runtime suspend */
 	rtl8169_update_counters(tp);
@@ -4904,10 +4897,9 @@ static int rtl8169_runtime_suspend(struct device *device)
 
 static int rtl8169_runtime_resume(struct device *device)
 {
-	struct net_device *dev = dev_get_drvdata(device);
-	struct rtl8169_private *tp = netdev_priv(dev);
+	struct rtl8169_private *tp = dev_get_drvdata(device);
 
-	rtl_rar_set(tp, dev->dev_addr);
+	rtl_rar_set(tp, tp->dev->dev_addr);
 
 	if (!tp->TxDescArray)
 		return 0;
@@ -4916,16 +4908,16 @@ static int rtl8169_runtime_resume(struct device *device)
 	__rtl8169_set_wol(tp, tp->saved_wolopts);
 	rtl_unlock_work(tp);
 
-	__rtl8169_resume(dev);
+	__rtl8169_resume(tp);
 
 	return 0;
 }
 
 static int rtl8169_runtime_idle(struct device *device)
 {
-	struct net_device *dev = dev_get_drvdata(device);
+	struct rtl8169_private *tp = dev_get_drvdata(device);
 
-	if (!netif_running(dev) || !netif_carrier_ok(dev))
+	if (!netif_running(tp->dev) || !netif_carrier_ok(tp->dev))
 		pm_schedule_suspend(device, 10000);
 
 	return -EBUSY;
@@ -4970,13 +4962,12 @@ static void rtl_wol_shutdown_quirk(struct rtl8169_private *tp)
 
 static void rtl_shutdown(struct pci_dev *pdev)
 {
-	struct net_device *dev = pci_get_drvdata(pdev);
-	struct rtl8169_private *tp = netdev_priv(dev);
+	struct rtl8169_private *tp = pci_get_drvdata(pdev);
 
-	rtl8169_net_suspend(dev);
+	rtl8169_net_suspend(tp);
 
 	/* Restore original MAC address */
-	rtl_rar_set(tp, dev->perm_addr);
+	rtl_rar_set(tp, tp->dev->perm_addr);
 
 	rtl8169_hw_reset(tp);
 
@@ -4993,13 +4984,12 @@ static void rtl_shutdown(struct pci_dev *pdev)
 
 static void rtl_remove_one(struct pci_dev *pdev)
 {
-	struct net_device *dev = pci_get_drvdata(pdev);
-	struct rtl8169_private *tp = netdev_priv(dev);
+	struct rtl8169_private *tp = pci_get_drvdata(pdev);
 
 	if (pci_dev_run_wake(pdev))
 		pm_runtime_get_noresume(&pdev->dev);
 
-	unregister_netdev(dev);
+	unregister_netdev(tp->dev);
 
 	if (r8168_check_dash(tp))
 		rtl8168_driver_stop(tp);
@@ -5007,7 +4997,7 @@ static void rtl_remove_one(struct pci_dev *pdev)
 	rtl_release_firmware(tp);
 
 	/* restore original MAC address */
-	rtl_rar_set(tp, dev->perm_addr);
+	rtl_rar_set(tp, tp->dev->perm_addr);
 }
 
 static const struct net_device_ops rtl_netdev_ops = {
@@ -5446,7 +5436,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	if (!tp->counters)
 		return -ENOMEM;
 
-	pci_set_drvdata(pdev, dev);
+	pci_set_drvdata(pdev, tp);
 
 	rc = r8169_mdio_register(tp);
 	if (rc)
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next 2/6] r8169: enable WAKE_PHY as only WoL source when runtime-suspending
  2020-05-30 21:52 [PATCH net-next 0/6] r8169: again few improvements Heiner Kallweit
  2020-05-30 21:54 ` [PATCH net-next 1/6] r8169: change driver data type Heiner Kallweit
@ 2020-05-30 21:55 ` Heiner Kallweit
  2020-05-30 21:56 ` [PATCH net-next 3/6] r8169: don't reset tx ring indexes in rtl8169_tx_clear Heiner Kallweit
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Heiner Kallweit @ 2020-05-30 21:55 UTC (permalink / raw)
  To: Realtek linux nic maintainers, David Miller, Jakub Kicinski; +Cc: netdev

We go to runtime-suspend few secs after cable removal. As cable is
removed "physical link up" is the only meaningful WoL source.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/ethernet/realtek/r8169_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 810398ef7..6fcd35ac8 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -4884,7 +4884,7 @@ static int rtl8169_runtime_suspend(struct device *device)
 		return 0;
 
 	rtl_lock_work(tp);
-	__rtl8169_set_wol(tp, WAKE_ANY);
+	__rtl8169_set_wol(tp, WAKE_PHY);
 	rtl_unlock_work(tp);
 
 	rtl8169_net_suspend(tp);
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next 3/6] r8169: don't reset tx ring indexes in rtl8169_tx_clear
  2020-05-30 21:52 [PATCH net-next 0/6] r8169: again few improvements Heiner Kallweit
  2020-05-30 21:54 ` [PATCH net-next 1/6] r8169: change driver data type Heiner Kallweit
  2020-05-30 21:55 ` [PATCH net-next 2/6] r8169: enable WAKE_PHY as only WoL source when runtime-suspending Heiner Kallweit
@ 2020-05-30 21:56 ` Heiner Kallweit
  2020-05-30 21:57 ` [PATCH net-next 4/6] r8169: move some calls to rtl8169_hw_reset Heiner Kallweit
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Heiner Kallweit @ 2020-05-30 21:56 UTC (permalink / raw)
  To: Realtek linux nic maintainers, David Miller, Jakub Kicinski; +Cc: netdev

In places where the indexes have to be reset, we call
rtl8169_init_ring_indexes() anyway after rtl8169_tx_clear().

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/ethernet/realtek/r8169_main.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 6fcd35ac8..43652c450 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -3955,7 +3955,6 @@ static void rtl8169_tx_clear_range(struct rtl8169_private *tp, u32 start,
 static void rtl8169_tx_clear(struct rtl8169_private *tp)
 {
 	rtl8169_tx_clear_range(tp, tp->dirty_tx, NUM_TX_DESC);
-	tp->cur_tx = tp->dirty_tx = 0;
 	netdev_reset_queue(tp->dev);
 }
 
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next 4/6] r8169: move some calls to rtl8169_hw_reset
  2020-05-30 21:52 [PATCH net-next 0/6] r8169: again few improvements Heiner Kallweit
                   ` (2 preceding siblings ...)
  2020-05-30 21:56 ` [PATCH net-next 3/6] r8169: don't reset tx ring indexes in rtl8169_tx_clear Heiner Kallweit
@ 2020-05-30 21:57 ` Heiner Kallweit
  2020-05-30 21:58 ` [PATCH net-next 5/6] r8169: make rtl8169_down central chip quiesce function Heiner Kallweit
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Heiner Kallweit @ 2020-05-30 21:57 UTC (permalink / raw)
  To: Realtek linux nic maintainers, David Miller, Jakub Kicinski; +Cc: netdev

Move calls that are needed before and after calling rtl8169_hw_reset()
into this function. This requires to move the function in the code.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/ethernet/realtek/r8169_main.c | 75 +++++++++++------------
 1 file changed, 36 insertions(+), 39 deletions(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 43652c450..5f3c50fb0 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -2530,36 +2530,6 @@ static void rtl_enable_rxdvgate(struct rtl8169_private *tp)
 	rtl_wait_txrx_fifo_empty(tp);
 }
 
-static void rtl8169_hw_reset(struct rtl8169_private *tp)
-{
-	/* Disable interrupts */
-	rtl8169_irq_mask_and_ack(tp);
-
-	rtl_rx_close(tp);
-
-	switch (tp->mac_version) {
-	case RTL_GIGA_MAC_VER_27:
-	case RTL_GIGA_MAC_VER_28:
-	case RTL_GIGA_MAC_VER_31:
-		rtl_loop_wait_low(tp, &rtl_npq_cond, 20, 2000);
-		break;
-	case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38:
-		RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
-		rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666);
-		break;
-	case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_61:
-		rtl_enable_rxdvgate(tp);
-		fsleep(2000);
-		break;
-	default:
-		RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
-		udelay(100);
-		break;
-	}
-
-	rtl_hw_reset(tp);
-}
-
 static void rtl_set_tx_config_registers(struct rtl8169_private *tp)
 {
 	u32 val = TX_DMA_BURST << TxDMAShift |
@@ -3958,6 +3928,42 @@ static void rtl8169_tx_clear(struct rtl8169_private *tp)
 	netdev_reset_queue(tp->dev);
 }
 
+static void rtl8169_hw_reset(struct rtl8169_private *tp)
+{
+	/* Give a racing hard_start_xmit a few cycles to complete. */
+	synchronize_rcu();
+
+	/* Disable interrupts */
+	rtl8169_irq_mask_and_ack(tp);
+
+	rtl_rx_close(tp);
+
+	switch (tp->mac_version) {
+	case RTL_GIGA_MAC_VER_27:
+	case RTL_GIGA_MAC_VER_28:
+	case RTL_GIGA_MAC_VER_31:
+		rtl_loop_wait_low(tp, &rtl_npq_cond, 20, 2000);
+		break;
+	case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38:
+		RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
+		rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666);
+		break;
+	case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_61:
+		rtl_enable_rxdvgate(tp);
+		fsleep(2000);
+		break;
+	default:
+		RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
+		fsleep(100);
+		break;
+	}
+
+	rtl_hw_reset(tp);
+
+	rtl8169_tx_clear(tp);
+	rtl8169_init_ring_indexes(tp);
+}
+
 static void rtl_reset_work(struct rtl8169_private *tp)
 {
 	struct net_device *dev = tp->dev;
@@ -3965,16 +3971,12 @@ static void rtl_reset_work(struct rtl8169_private *tp)
 
 	napi_disable(&tp->napi);
 	netif_stop_queue(dev);
-	synchronize_rcu();
 
 	rtl8169_hw_reset(tp);
 
 	for (i = 0; i < NUM_RX_DESC; i++)
 		rtl8169_mark_to_asic(tp->RxDescArray + i);
 
-	rtl8169_tx_clear(tp);
-	rtl8169_init_ring_indexes(tp);
-
 	napi_enable(&tp->napi);
 	rtl_hw_start(tp);
 	netif_wake_queue(dev);
@@ -4636,11 +4638,6 @@ static void rtl8169_down(struct net_device *dev)
 
 	rtl8169_hw_reset(tp);
 
-	/* Give a racing hard_start_xmit a few cycles to complete. */
-	synchronize_rcu();
-
-	rtl8169_tx_clear(tp);
-
 	rtl8169_rx_clear(tp);
 
 	rtl_pll_power_down(tp);
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next 5/6] r8169: make rtl8169_down central chip quiesce function
  2020-05-30 21:52 [PATCH net-next 0/6] r8169: again few improvements Heiner Kallweit
                   ` (3 preceding siblings ...)
  2020-05-30 21:57 ` [PATCH net-next 4/6] r8169: move some calls to rtl8169_hw_reset Heiner Kallweit
@ 2020-05-30 21:58 ` Heiner Kallweit
  2020-05-30 21:59 ` [PATCH net-next 6/6] r8169: improve handling power management ops Heiner Kallweit
  2020-05-31  4:37 ` [PATCH net-next 0/6] r8169: again few improvements David Miller
  6 siblings, 0 replies; 10+ messages in thread
From: Heiner Kallweit @ 2020-05-30 21:58 UTC (permalink / raw)
  To: Realtek linux nic maintainers, David Miller, Jakub Kicinski; +Cc: netdev

Functionality for quiescing the chip is spread across different
functions currently. Move it to rtl8169_down().

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/ethernet/realtek/r8169_main.c | 33 ++++++++---------------
 1 file changed, 11 insertions(+), 22 deletions(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 5f3c50fb0..fd93377f9 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -4627,20 +4627,21 @@ static int r8169_phy_connect(struct rtl8169_private *tp)
 	return 0;
 }
 
-static void rtl8169_down(struct net_device *dev)
+static void rtl8169_down(struct rtl8169_private *tp)
 {
-	struct rtl8169_private *tp = netdev_priv(dev);
+	rtl_lock_work(tp);
 
-	phy_stop(tp->phydev);
+	/* Clear all task flags */
+	bitmap_zero(tp->wk.flags, RTL_FLAG_MAX);
 
+	phy_stop(tp->phydev);
 	napi_disable(&tp->napi);
-	netif_stop_queue(dev);
 
 	rtl8169_hw_reset(tp);
 
-	rtl8169_rx_clear(tp);
-
 	rtl_pll_power_down(tp);
+
+	rtl_unlock_work(tp);
 }
 
 static int rtl8169_close(struct net_device *dev)
@@ -4653,12 +4654,9 @@ static int rtl8169_close(struct net_device *dev)
 	/* Update counters before going down */
 	rtl8169_update_counters(tp);
 
-	rtl_lock_work(tp);
-	/* Clear all task flags */
-	bitmap_zero(tp->wk.flags, RTL_FLAG_MAX);
-
-	rtl8169_down(dev);
-	rtl_unlock_work(tp);
+	netif_stop_queue(dev);
+	rtl8169_down(tp);
+	rtl8169_rx_clear(tp);
 
 	cancel_work_sync(&tp->wk.work);
 
@@ -4817,17 +4815,8 @@ static void rtl8169_net_suspend(struct rtl8169_private *tp)
 	if (!netif_running(tp->dev))
 		return;
 
-	phy_stop(tp->phydev);
 	netif_device_detach(tp->dev);
-
-	rtl_lock_work(tp);
-	napi_disable(&tp->napi);
-	/* Clear all task flags */
-	bitmap_zero(tp->wk.flags, RTL_FLAG_MAX);
-
-	rtl_unlock_work(tp);
-
-	rtl_pll_power_down(tp);
+	rtl8169_down(tp);
 }
 
 #ifdef CONFIG_PM
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next 6/6] r8169: improve handling power management ops
  2020-05-30 21:52 [PATCH net-next 0/6] r8169: again few improvements Heiner Kallweit
                   ` (4 preceding siblings ...)
  2020-05-30 21:58 ` [PATCH net-next 5/6] r8169: make rtl8169_down central chip quiesce function Heiner Kallweit
@ 2020-05-30 21:59 ` Heiner Kallweit
  2020-05-31  4:37 ` [PATCH net-next 0/6] r8169: again few improvements David Miller
  6 siblings, 0 replies; 10+ messages in thread
From: Heiner Kallweit @ 2020-05-30 21:59 UTC (permalink / raw)
  To: Realtek linux nic maintainers, David Miller, Jakub Kicinski; +Cc: netdev

Simplify handling the power management callbacks.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/ethernet/realtek/r8169_main.c | 28 ++++++++---------------
 1 file changed, 9 insertions(+), 19 deletions(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index fd93377f9..4d2ec9742 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -4821,7 +4821,7 @@ static void rtl8169_net_suspend(struct rtl8169_private *tp)
 
 #ifdef CONFIG_PM
 
-static int rtl8169_suspend(struct device *device)
+static int __maybe_unused rtl8169_suspend(struct device *device)
 {
 	struct rtl8169_private *tp = dev_get_drvdata(device);
 
@@ -4847,7 +4847,7 @@ static void __rtl8169_resume(struct rtl8169_private *tp)
 	rtl_unlock_work(tp);
 }
 
-static int rtl8169_resume(struct device *device)
+static int __maybe_unused rtl8169_resume(struct device *device)
 {
 	struct rtl8169_private *tp = dev_get_drvdata(device);
 
@@ -4909,24 +4909,12 @@ static int rtl8169_runtime_idle(struct device *device)
 }
 
 static const struct dev_pm_ops rtl8169_pm_ops = {
-	.suspend		= rtl8169_suspend,
-	.resume			= rtl8169_resume,
-	.freeze			= rtl8169_suspend,
-	.thaw			= rtl8169_resume,
-	.poweroff		= rtl8169_suspend,
-	.restore		= rtl8169_resume,
-	.runtime_suspend	= rtl8169_runtime_suspend,
-	.runtime_resume		= rtl8169_runtime_resume,
-	.runtime_idle		= rtl8169_runtime_idle,
+	SET_SYSTEM_SLEEP_PM_OPS(rtl8169_suspend, rtl8169_resume)
+	SET_RUNTIME_PM_OPS(rtl8169_runtime_suspend, rtl8169_runtime_resume,
+			   rtl8169_runtime_idle)
 };
 
-#define RTL8169_PM_OPS	(&rtl8169_pm_ops)
-
-#else /* !CONFIG_PM */
-
-#define RTL8169_PM_OPS	NULL
-
-#endif /* !CONFIG_PM */
+#endif /* CONFIG_PM */
 
 static void rtl_wol_shutdown_quirk(struct rtl8169_private *tp)
 {
@@ -5458,7 +5446,9 @@ static struct pci_driver rtl8169_pci_driver = {
 	.probe		= rtl_init_one,
 	.remove		= rtl_remove_one,
 	.shutdown	= rtl_shutdown,
-	.driver.pm	= RTL8169_PM_OPS,
+#ifdef CONFIG_PM
+	.driver.pm	= &rtl8169_pm_ops,
+#endif
 };
 
 module_pci_driver(rtl8169_pci_driver);
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 0/6] r8169: again few improvements
  2020-05-30 21:52 [PATCH net-next 0/6] r8169: again few improvements Heiner Kallweit
                   ` (5 preceding siblings ...)
  2020-05-30 21:59 ` [PATCH net-next 6/6] r8169: improve handling power management ops Heiner Kallweit
@ 2020-05-31  4:37 ` David Miller
  6 siblings, 0 replies; 10+ messages in thread
From: David Miller @ 2020-05-31  4:37 UTC (permalink / raw)
  To: hkallweit1; +Cc: nic_swsd, kuba, netdev

From: Heiner Kallweit <hkallweit1@gmail.com>
Date: Sat, 30 May 2020 23:52:26 +0200

> Again a series with few r8169 improvements.

Series applied, thanks Heiner.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 1/6] r8169: change driver data type
  2020-05-30 21:54 ` [PATCH net-next 1/6] r8169: change driver data type Heiner Kallweit
@ 2020-05-31  5:17   ` Stephen Hemminger
  2020-05-31  7:57     ` Heiner Kallweit
  0 siblings, 1 reply; 10+ messages in thread
From: Stephen Hemminger @ 2020-05-31  5:17 UTC (permalink / raw)
  To: Heiner Kallweit
  Cc: Realtek linux nic maintainers, David Miller, Jakub Kicinski, netdev

On Sat, 30 May 2020 23:54:36 +0200
Heiner Kallweit <hkallweit1@gmail.com> wrote:

> Change driver private data type to struct rtl8169_private * to avoid
> some overhead.
> 
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---

Are you sure about this. Using netdev_priv() is actually at a fixed
offset from netdev, and almost always the compiler can optimize and
use one register.  Look at the assembly code difference of what you
did.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 1/6] r8169: change driver data type
  2020-05-31  5:17   ` Stephen Hemminger
@ 2020-05-31  7:57     ` Heiner Kallweit
  0 siblings, 0 replies; 10+ messages in thread
From: Heiner Kallweit @ 2020-05-31  7:57 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: Realtek linux nic maintainers, David Miller, Jakub Kicinski, netdev

On 31.05.2020 07:17, Stephen Hemminger wrote:
> On Sat, 30 May 2020 23:54:36 +0200
> Heiner Kallweit <hkallweit1@gmail.com> wrote:
> 
>> Change driver private data type to struct rtl8169_private * to avoid
>> some overhead.
>>
>> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
>> ---
> 
> Are you sure about this. Using netdev_priv() is actually at a fixed
> offset from netdev, and almost always the compiler can optimize and
> use one register.  Look at the assembly code difference of what you
> did.
> 
When saying overhead I had the source code in mind. With regard to
the generated code you're right, however no hot path is touched here.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-05-31  7:58 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-30 21:52 [PATCH net-next 0/6] r8169: again few improvements Heiner Kallweit
2020-05-30 21:54 ` [PATCH net-next 1/6] r8169: change driver data type Heiner Kallweit
2020-05-31  5:17   ` Stephen Hemminger
2020-05-31  7:57     ` Heiner Kallweit
2020-05-30 21:55 ` [PATCH net-next 2/6] r8169: enable WAKE_PHY as only WoL source when runtime-suspending Heiner Kallweit
2020-05-30 21:56 ` [PATCH net-next 3/6] r8169: don't reset tx ring indexes in rtl8169_tx_clear Heiner Kallweit
2020-05-30 21:57 ` [PATCH net-next 4/6] r8169: move some calls to rtl8169_hw_reset Heiner Kallweit
2020-05-30 21:58 ` [PATCH net-next 5/6] r8169: make rtl8169_down central chip quiesce function Heiner Kallweit
2020-05-30 21:59 ` [PATCH net-next 6/6] r8169: improve handling power management ops Heiner Kallweit
2020-05-31  4:37 ` [PATCH net-next 0/6] r8169: again few improvements David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.