From fe8998c5e3b173f3d5c450bbde6173e7fbe5158d Mon Sep 17 00:00:00 2001 From: Tejun Heo <tj@kernel.org> Date: Sun, 12 Dec 2010 16:45:14 +0100 Subject: sungem: update gp->reset_task flushing gp->reset_task_pending is always set right before reset_task is scheduled and as there is no synchronization between the setting and scheduling, busy looping on reset_task_pending before flushing reset_task doesn't really buy anything. Directly flush gp->reset_task on suspend and cancel on detach. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: netdev@vger.kernel.org --- drivers/net/sungem.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'drivers/net/sungem.c') diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index 4ceb3cf6a9a9..9e992ca4f543 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c @@ -2380,10 +2380,8 @@ static int gem_suspend(struct pci_dev *pdev, pm_message_t state) */ mutex_unlock(&gp->pm_mutex); - /* Wait for a pending reset task to complete */ - while (gp->reset_task_pending) - yield(); - flush_scheduled_work(); + /* Wait for the pending reset task to complete */ + flush_work_sync(&gp->reset_task); /* Shut the PHY down eventually and setup WOL */ gem_stop_phy(gp, gp->asleep_wol); @@ -2928,10 +2926,8 @@ static void gem_remove_one(struct pci_dev *pdev) /* We shouldn't need any locking here */ gem_get_cell(gp); - /* Wait for a pending reset task to complete */ - while (gp->reset_task_pending) - yield(); - flush_scheduled_work(); + /* Cancel reset task */ + cancel_work_sync(&gp->reset_task); /* Shut the PHY down */ gem_stop_phy(gp, 0); -- cgit v1.2.1 From 0d0b16727f24f8258eeb33818347ca0f4557f982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= <mirq-linux@rere.qmqm.pl> Date: Tue, 14 Dec 2010 15:24:08 +0000 Subject: net: Fix drivers advertising HW_CSUM feature to use csum_start MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some drivers are using skb_transport_offset(skb) instead of skb->csum_start for NETIF_F_HW_CSUM offload. This does not matter now, but if someone implements checksumming of encapsulated packets then this will break silently. TSO output paths are left as they are, since they are for IP+TCP only (might be worth converting though). Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net> --- drivers/net/sungem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/net/sungem.c') diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index 9e992ca4f543..1c5408f83937 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c @@ -1004,7 +1004,7 @@ static netdev_tx_t gem_start_xmit(struct sk_buff *skb, ctrl = 0; if (skb->ip_summed == CHECKSUM_PARTIAL) { - const u64 csum_start_off = skb_transport_offset(skb); + const u64 csum_start_off = skb_checksum_start_offset(skb); const u64 csum_stuff_off = csum_start_off + skb->csum_offset; ctrl = (TXDCTRL_CENAB | -- cgit v1.2.1