From patchwork Sun Dec 8 08:35:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: George Spelvin X-Patchwork-Id: 1205602 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sdf.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47W0Fb07mFz9sPK for ; Sun, 8 Dec 2019 19:42:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726418AbfLHImc (ORCPT ); Sun, 8 Dec 2019 03:42:32 -0500 Received: from mx.sdf.org ([205.166.94.20]:61901 "EHLO mx.sdf.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725815AbfLHIm3 (ORCPT ); Sun, 8 Dec 2019 03:42:29 -0500 X-Greylist: delayed 417 seconds by postgrey-1.27 at vger.kernel.org; Sun, 08 Dec 2019 03:42:29 EST Received: from sdf.org (IDENT:lkml@sdf.lonestar.org [205.166.94.16]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id xB88Z7e1023442 (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256 bits) verified NO); Sun, 8 Dec 2019 08:35:07 GMT Received: (from lkml@localhost) by sdf.org (8.15.2/8.12.8/Submit) id xB88Z74s014619; Sun, 8 Dec 2019 08:35:07 GMT Date: Sun, 8 Dec 2019 08:35:07 GMT From: George Spelvin Message-Id: <201912080835.xB88Z74s014619@sdf.org> To: michael.chan@broadcom.com, netdev@vger.kernel.org Subject: [RFC PATCH 1/4] b44: Add DMA_ATTR_NO_WARN to dma_map_single attempts Cc: hauke@hauke-m.de, lkml@sdf.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The b44 family of fast ethernet chips have a hardware bug limiting DMA to the low 30 bits of address space. The driver implements its own bouncing through ZONE_DMA if buffers are outside this range, but not before the DMA layer tries the SWIOTLB driver for help. The latter is designed only for helping devices with a 32-bit DMA restriction, is not even initialized on machines with < 4GB of RAM, and proceeds to spam the log with: b44 0000:02:00.0: swiotlb buffer is full (sz: 66 bytes), total 0 (slots), used 0 (slots) b44 0000:02:00.0: swiotlb buffer is full (sz: 72 bytes), total 0 (slots), used 0 (slots) b44 0000:02:00.0: swiotlb buffer is full (sz: 401 bytes), total 0 (slots), used 0 (slots) swiotlb_tbl_map_single: 7 callbacks suppressed b44 0000:02:00.0: swiotlb buffer is full (sz: 90 bytes), total 0 (slots), used 0 (slots) b44 0000:02:00.0: swiotlb buffer is full (sz: 74 bytes), total 0 (slots), used 0 (slots) b44 0000:02:00.0: swiotlb buffer is full (sz: 74 bytes), total 0 (slots), used 0 (slots) b44 0000:02:00.0: swiotlb buffer is full (sz: 74 bytes), total 0 (slots), used 0 (slots) b44 0000:02:00.0: swiotlb buffer is full (sz: 66 bytes), total 0 (slots), used 0 (slots) b44 0000:02:00.0: swiotlb buffer is full (sz: 426 bytes), total 0 (slots), used 0 (slots) DMA_ATTR_NO_WARN on the first (non-ZONE_DMA) attempt turns off this repeated complaint. There still is a remaining bug: kernel/dma/direct.c:report_addr() throws a WARN_ON_ONCE the first time this happens. I'm less certain how to fix that, but it's less annoying. Signed-off-by: George Spelvin --- drivers/net/ethernet/broadcom/b44.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) This is the only substantive patch in the series. The other three are relatively minor issues that I ran into while studying the surrounding code. (Although #3/4 actually fixes a resource leak.) diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index 97ab0dd25552..394671230c1c 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -674,9 +674,9 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) if (skb == NULL) return -ENOMEM; - mapping = dma_map_single(bp->sdev->dma_dev, skb->data, - RX_PKT_BUF_SZ, - DMA_FROM_DEVICE); + mapping = dma_map_single_attrs(bp->sdev->dma_dev, skb->data, + RX_PKT_BUF_SZ, DMA_FROM_DEVICE, + DMA_ATTR_NO_WARN); /* Hardware bug work-around, the chip is unable to do PCI DMA to/from anything above 1GB :-( */ @@ -988,7 +988,8 @@ static netdev_tx_t b44_start_xmit(struct sk_buff *skb, struct net_device *dev) goto err_out; } - mapping = dma_map_single(bp->sdev->dma_dev, skb->data, len, DMA_TO_DEVICE); + mapping = dma_map_single_attrs(bp->sdev->dma_dev, skb->data, len, + DMA_TO_DEVICE, DMA_ATTR_NO_WARN); if (dma_mapping_error(bp->sdev->dma_dev, mapping) || mapping + len > DMA_BIT_MASK(30)) { struct sk_buff *bounce_skb; From patchwork Sun Dec 8 08:36:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: George Spelvin X-Patchwork-Id: 1205601 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sdf.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47W0FZ38fhz9sPJ for ; Sun, 8 Dec 2019 19:42:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726442AbfLHImc (ORCPT ); Sun, 8 Dec 2019 03:42:32 -0500 Received: from mx.sdf.org ([205.166.94.20]:61901 "EHLO mx.sdf.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725832AbfLHIma (ORCPT ); Sun, 8 Dec 2019 03:42:30 -0500 X-Greylist: delayed 417 seconds by postgrey-1.27 at vger.kernel.org; Sun, 08 Dec 2019 03:42:29 EST Received: from sdf.org (IDENT:lkml@sdf.lonestar.org [205.166.94.16]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id xB88amFK021882 (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256 bits) verified NO); Sun, 8 Dec 2019 08:36:48 GMT Received: (from lkml@localhost) by sdf.org (8.15.2/8.12.8/Submit) id xB88amHd015549; Sun, 8 Dec 2019 08:36:48 GMT Date: Sun, 8 Dec 2019 08:36:48 GMT From: George Spelvin Message-Id: <201912080836.xB88amHd015549@sdf.org> To: michael.chan@broadcom.com, netdev@vger.kernel.org Subject: [RFC PATCH 2/4] b44: Fix off-by-one error in acceptable address range Cc: hauke@hauke-m.de, lkml@sdf.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The requirement is dma_addr + size <= 0x40000000, not 0x3fffffff. In a logically separate but overlapping change, this patch also rearranges the logic for detecting failures to use a goto rather than testing dma_mapping_error() twice. The latter is expensive if CONFIG_DMA_API_DEBUG is set, but also for bug-proofing reasons I try to avoid having the same condition in two places that must be kept in sync. Signed-off-by: George Spelvin --- drivers/net/ethernet/broadcom/b44.c | 42 ++++++++++++++++------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index 394671230c1c..e540d5646aef 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -680,12 +680,13 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) /* Hardware bug work-around, the chip is unable to do PCI DMA to/from anything above 1GB :-( */ - if (dma_mapping_error(bp->sdev->dma_dev, mapping) || - mapping + RX_PKT_BUF_SZ > DMA_BIT_MASK(30)) { + if (dma_mapping_error(bp->sdev->dma_dev, mapping)) + goto workaround; + if (mapping + RX_PKT_BUF_SZ > DMA_BIT_MASK(30)+1) { /* Sigh... */ - if (!dma_mapping_error(bp->sdev->dma_dev, mapping)) - dma_unmap_single(bp->sdev->dma_dev, mapping, - RX_PKT_BUF_SZ, DMA_FROM_DEVICE); + dma_unmap_single(bp->sdev->dma_dev, mapping, + RX_PKT_BUF_SZ, DMA_FROM_DEVICE); +workaround: dev_kfree_skb_any(skb); skb = alloc_skb(RX_PKT_BUF_SZ, GFP_ATOMIC | GFP_DMA); if (skb == NULL) @@ -693,10 +694,12 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) mapping = dma_map_single(bp->sdev->dma_dev, skb->data, RX_PKT_BUF_SZ, DMA_FROM_DEVICE); - if (dma_mapping_error(bp->sdev->dma_dev, mapping) || - mapping + RX_PKT_BUF_SZ > DMA_BIT_MASK(30)) { - if (!dma_mapping_error(bp->sdev->dma_dev, mapping)) - dma_unmap_single(bp->sdev->dma_dev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE); + if (dma_mapping_error(bp->sdev->dma_dev, mapping)) + goto failed; + if (mapping + RX_PKT_BUF_SZ > DMA_BIT_MASK(30)+1) { + dma_unmap_single(bp->sdev->dma_dev, mapping, + RX_PKT_BUF_SZ, DMA_FROM_DEVICE); +failed: dev_kfree_skb_any(skb); return -ENOMEM; } @@ -990,24 +993,27 @@ static netdev_tx_t b44_start_xmit(struct sk_buff *skb, struct net_device *dev) mapping = dma_map_single_attrs(bp->sdev->dma_dev, skb->data, len, DMA_TO_DEVICE, DMA_ATTR_NO_WARN); - if (dma_mapping_error(bp->sdev->dma_dev, mapping) || mapping + len > DMA_BIT_MASK(30)) { + if (dma_mapping_error(bp->sdev->dma_dev, mapping)) + goto workaround; + if (mapping + len > DMA_BIT_MASK(30)+1) { struct sk_buff *bounce_skb; /* Chip can't handle DMA to/from >1GB, use bounce buffer */ - if (!dma_mapping_error(bp->sdev->dma_dev, mapping)) - dma_unmap_single(bp->sdev->dma_dev, mapping, len, - DMA_TO_DEVICE); - + dma_unmap_single(bp->sdev->dma_dev, mapping, len, + DMA_TO_DEVICE); +workaround: bounce_skb = alloc_skb(len, GFP_ATOMIC | GFP_DMA); if (!bounce_skb) goto err_out; mapping = dma_map_single(bp->sdev->dma_dev, bounce_skb->data, len, DMA_TO_DEVICE); - if (dma_mapping_error(bp->sdev->dma_dev, mapping) || mapping + len > DMA_BIT_MASK(30)) { - if (!dma_mapping_error(bp->sdev->dma_dev, mapping)) - dma_unmap_single(bp->sdev->dma_dev, mapping, - len, DMA_TO_DEVICE); + if (dma_mapping_error(bp->sdev->dma_dev, mapping)) + goto failed; + if (mapping + len > DMA_BIT_MASK(30)+1) { + dma_unmap_single(bp->sdev->dma_dev, mapping, len, + DMA_TO_DEVICE); +failed: dev_kfree_skb_any(bounce_skb); goto err_out; } From patchwork Sun Dec 8 08:38:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: George Spelvin X-Patchwork-Id: 1205599 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sdf.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47W0FY2jwJz9sPJ for ; Sun, 8 Dec 2019 19:42:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726044AbfLHIm3 (ORCPT ); Sun, 8 Dec 2019 03:42:29 -0500 Received: from mx.sdf.org ([205.166.94.20]:61901 "EHLO mx.sdf.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725815AbfLHIm3 (ORCPT ); Sun, 8 Dec 2019 03:42:29 -0500 X-Greylist: delayed 417 seconds by postgrey-1.27 at vger.kernel.org; Sun, 08 Dec 2019 03:42:29 EST Received: from sdf.org (IDENT:lkml@sdf.lonestar.org [205.166.94.16]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id xB88cS5H025057 (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256 bits) verified NO); Sun, 8 Dec 2019 08:38:28 GMT Received: (from lkml@localhost) by sdf.org (8.15.2/8.12.8/Submit) id xB88cSTa015147; Sun, 8 Dec 2019 08:38:28 GMT Date: Sun, 8 Dec 2019 08:38:28 GMT From: George Spelvin Message-Id: <201912080838.xB88cSTa015147@sdf.org> To: michael.chan@broadcom.com, netdev@vger.kernel.org Subject: [RFC PATCH 3/4] b44: Unmap DMA ring buffers before kfree Cc: hauke@hauke-m.de, lkml@sdf.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org It's an unlikely error path during initialization, but let's not leak DMA mappings. Also the condition for an unacceptable mapping is corrected from dma_addr + len > 0x3fffffff to dma_addr + len > 0x40000000, as in the previous patch. Signed-off-by: George Spelvin --- drivers/net/ethernet/broadcom/b44.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index e540d5646aef..90e25a1f284f 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -1226,8 +1226,12 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp) DMA_TABLE_BYTES, DMA_BIDIRECTIONAL); - if (dma_mapping_error(bp->sdev->dma_dev, rx_ring_dma) || - rx_ring_dma + size > DMA_BIT_MASK(30)) { + if (dma_mapping_error(bp->sdev->dma_dev, rx_ring_dma)) + goto rx_failed; + if (rx_ring_dma + size > DMA_BIT_MASK(30)+1) { + dma_unmap_single(bp->sdev->dma_dev, rx_ring_dma, + DMA_TABLE_BYTES, DMA_BIDIRECTIONAL); +rx_failed: kfree(rx_ring); goto out_err; } @@ -1254,8 +1258,12 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp) DMA_TABLE_BYTES, DMA_TO_DEVICE); - if (dma_mapping_error(bp->sdev->dma_dev, tx_ring_dma) || - tx_ring_dma + size > DMA_BIT_MASK(30)) { + if (dma_mapping_error(bp->sdev->dma_dev, tx_ring_dma)) + goto tx_failed; + if (tx_ring_dma + size > DMA_BIT_MASK(30)+1) { + dma_unmap_single(bp->sdev->dma_dev, tx_ring_dma, + DMA_TABLE_BYTES, DMA_TO_DEVICE); +tx_failed: kfree(tx_ring); goto out_err; } From patchwork Sun Dec 8 08:39:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: George Spelvin X-Patchwork-Id: 1205600 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sdf.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47W0FY60fVz9sPK for ; Sun, 8 Dec 2019 19:42:41 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726236AbfLHIm3 (ORCPT ); Sun, 8 Dec 2019 03:42:29 -0500 Received: from mx.sdf.org ([205.166.94.20]:61901 "EHLO mx.sdf.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725832AbfLHIm3 (ORCPT ); Sun, 8 Dec 2019 03:42:29 -0500 X-Greylist: delayed 417 seconds by postgrey-1.27 at vger.kernel.org; Sun, 08 Dec 2019 03:42:29 EST Received: from sdf.org (IDENT:lkml@sdf.lonestar.org [205.166.94.16]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id xB88doVu023749 (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256 bits) verified NO); Sun, 8 Dec 2019 08:39:50 GMT Received: (from lkml@localhost) by sdf.org (8.15.2/8.12.8/Submit) id xB88do1u024931; Sun, 8 Dec 2019 08:39:50 GMT Date: Sun, 8 Dec 2019 08:39:50 GMT From: George Spelvin Message-Id: <201912080839.xB88do1u024931@sdf.org> To: michael.chan@broadcom.com, netdev@vger.kernel.org Subject: [RFC PATCH 4/4] b44: Spacing cleanups Cc: hauke@hauke-m.de, lkml@sdf.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Minor stuff (space before tab) noticed during preceding work. Signed-off-by: George Spelvin --- drivers/net/ethernet/broadcom/b44.c | 34 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index 90e25a1f284f..103afc2e2957 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -727,8 +727,8 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) if (bp->flags & B44_FLAG_RX_RING_HACK) b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma, - dest_idx * sizeof(*dp), - DMA_BIDIRECTIONAL); + dest_idx * sizeof(*dp), + DMA_BIDIRECTIONAL); return RX_PKT_BUF_SZ; } @@ -755,8 +755,8 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) if (bp->flags & B44_FLAG_RX_RING_HACK) b44_sync_dma_desc_for_cpu(bp->sdev, bp->rx_ring_dma, - src_idx * sizeof(*src_desc), - DMA_BIDIRECTIONAL); + src_idx * sizeof(*src_desc), + DMA_BIDIRECTIONAL); ctrl = src_desc->ctrl; if (dest_idx == (B44_RX_RING_SIZE - 1)) @@ -1037,8 +1037,8 @@ static netdev_tx_t b44_start_xmit(struct sk_buff *skb, struct net_device *dev) if (bp->flags & B44_FLAG_TX_RING_HACK) b44_sync_dma_desc_for_device(bp->sdev, bp->tx_ring_dma, - entry * sizeof(bp->tx_ring[0]), - DMA_TO_DEVICE); + entry * sizeof(bp->tx_ring[0]), + DMA_TO_DEVICE); entry = NEXT_TX(entry); @@ -1573,8 +1573,8 @@ static void b44_setup_pseudo_magicp(struct b44 *bp) plen0 = b44_magic_pattern(bp->dev->dev_addr, pwol_pattern, pwol_mask, B44_ETHIPV4UDP_HLEN); - bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE, B44_PATTERN_BASE); - bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE, B44_PMASK_BASE); + bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE, B44_PATTERN_BASE); + bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE, B44_PMASK_BASE); /* Raw ethernet II magic packet pattern - pattern 1 */ memset(pwol_pattern, 0, B44_PATTERN_SIZE); @@ -1582,9 +1582,9 @@ static void b44_setup_pseudo_magicp(struct b44 *bp) plen1 = b44_magic_pattern(bp->dev->dev_addr, pwol_pattern, pwol_mask, ETH_HLEN); - bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE, + bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE, B44_PATTERN_BASE + B44_PATTERN_SIZE); - bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE, + bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE, B44_PMASK_BASE + B44_PMASK_SIZE); /* Ipv6 magic packet pattern - pattern 2 */ @@ -1593,9 +1593,9 @@ static void b44_setup_pseudo_magicp(struct b44 *bp) plen2 = b44_magic_pattern(bp->dev->dev_addr, pwol_pattern, pwol_mask, B44_ETHIPV6UDP_HLEN); - bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE, + bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE, B44_PATTERN_BASE + B44_PATTERN_SIZE + B44_PATTERN_SIZE); - bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE, + bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE, B44_PMASK_BASE + B44_PMASK_SIZE + B44_PMASK_SIZE); kfree(pwol_pattern); @@ -1648,9 +1648,9 @@ static void b44_setup_wol(struct b44 *bp) val = br32(bp, B44_DEVCTRL); bw32(bp, B44_DEVCTRL, val | DEVCTRL_MPM | DEVCTRL_PFE); - } else { - b44_setup_pseudo_magicp(bp); - } + } else { + b44_setup_pseudo_magicp(bp); + } b44_setup_wol_pci(bp); } @@ -1774,8 +1774,8 @@ static void __b44_set_rx_mode(struct net_device *dev) __b44_cam_write(bp, zero, i); bw32(bp, B44_RXCONFIG, val); - val = br32(bp, B44_CAM_CTRL); - bw32(bp, B44_CAM_CTRL, val | CAM_CTRL_ENABLE); + val = br32(bp, B44_CAM_CTRL); + bw32(bp, B44_CAM_CTRL, val | CAM_CTRL_ENABLE); } }