From: Jeff Garzik <jeff@garzik.org>
To: Michael Chan <mchan@broadcom.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org
Subject: Re: [PATCH 3/20][BNX2]: Add 40-bit DMA workaround for 5708.
Date: Wed, 02 May 2007 03:06:43 -0400 [thread overview]
Message-ID: <46383883.8070209@garzik.org> (raw)
In-Reply-To: <1178068414.4820.39.camel@dell>
Michael Chan wrote:
> [BNX2]: Add 40-bit DMA workaround for 5708.
>
> The internal PCIE-to-PCIX bridge of the 5708 has the same 40-bit DMA
> limitation as some of the tg3 chips. Use the same workaround used in
> tg3. On 64-bit systems without IOMMU, linearize the SKB if any
> address is > 40-bit.
>
> Signed-off-by: Michael Chan <mchan@broadcom.com>
>
> diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> index 6d05397..dba4088 100644
> --- a/drivers/net/bnx2.c
> +++ b/drivers/net/bnx2.c
> @@ -4495,6 +4495,93 @@ bnx2_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid)
> }
> #endif
>
> +/* Test for DMA addresses > 40-bit.
> + * Only 64-bit systems without IOMMU require DMA address checking.
> + */
> +static inline int bnx2_40bit_overflow_test(struct bnx2 *bp, dma_addr_t mapping,
> + int len)
> +{
> +#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
> + if (CHIP_NUM(bp) == CHIP_NUM_5708)
> + return (((u64) mapping + len) > DMA_40BIT_MASK);
If the mapping is at a very high address, adding len might overflow, yes?
> +#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
> + if (unlikely(would_hit_hwbug)) {
> + /* If the workaround fails due to memory/mapping
> + * failure, silently drop this packet.
> + */
> + if (bnx2_dma_hwbug_workaround(bp, &skb, &prod,
> + vlan_tag_flags, mss))
> + return NETDEV_TX_OK;
> +
> + }
> +#endif
You need to at least account for the drop, in packets-dropped stat.
/Completely/ silent intentional packet drops are something to be
avoided. The user should be given /some/ indication of what is going on.
Second, CONFIG_HIGHMEM is a bad test for IOMMU presence. I don't think
you /can/ test for IOMMU presence. Maybe DaveM knows a way that I do not?
> + /* 5708 cannot support DMA addresses > 40-bit.
> + * On 64-bit systems with IOMMU, use 40-bit dma_mask.
> + * On 64-bit systems without IOMMU, use 64-bit dma_mask and
> + * do DMA address check in bnx2_start_xmit().
> + */
> + if (CHIP_NUM(bp) == CHIP_NUM_5708) {
> + persist_dma_mask = dma_mask = DMA_40BIT_MASK;
> +#ifdef CONFIG_HIGHMEM
> + dma_mask = DMA_64BIT_MASK;
> +#endif
> + } else
> + persist_dma_mask = dma_mask = DMA_64BIT_MASK;
> +
> + /* Configure DMA attributes. */
> + if (pci_set_dma_mask(pdev, dma_mask) == 0) {
> + dev->features |= NETIF_F_HIGHDMA;
> + rc = pci_set_consistent_dma_mask(pdev, persist_dma_mask);
> + if (rc) {
> + dev_err(&pdev->dev,
> + "pci_set_consistent_dma_mask failed, aborting.\n");
> + goto err_out_unmap;
> + }
> + } else if ((rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) != 0) {
> + dev_err(&pdev->dev, "System does not support DMA, aborting.\n");
> + goto err_out_unmap;
> + }
> +
Ditto. CONFIG_HIGHMEM is not an effective test.
NAK.
next prev parent reply other threads:[~2007-05-02 7:07 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-02 1:13 [PATCH 3/20][BNX2]: Add 40-bit DMA workaround for 5708 Michael Chan
2007-05-02 7:06 ` Jeff Garzik [this message]
2007-05-02 7:12 ` David Miller
2007-05-02 15:23 ` Michael Chan
2007-05-02 15:28 ` Christoph Hellwig
2007-05-02 15:29 ` Jeff Garzik
2007-05-02 18:23 ` Michael Chan
2007-05-02 18:24 ` Jeff Garzik
2007-05-02 20:02 ` Michael Chan
2007-05-02 20:30 ` Jeff Garzik
2007-05-02 22:48 ` Christoph Hellwig
2007-05-02 22:50 ` David Miller
2007-05-02 19:40 ` David Miller
2007-05-02 21:27 ` Michael Chan
2007-05-02 21:45 ` David Miller
2007-05-02 23:28 ` Michael Chan
2007-05-02 22:48 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46383883.8070209@garzik.org \
--to=jeff@garzik.org \
--cc=davem@davemloft.net \
--cc=mchan@broadcom.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.