From: Arnd Bergmann <arnd@arndb.de> To: David Laight <David.Laight@aculab.com> Cc: Zhangfei Gao <zhangfei.gao@linaro.org>, "davem@davemloft.net" <davem@davemloft.net>, "linux@arm.linux.org.uk" <linux@arm.linux.org.uk>, "f.fainelli@gmail.com" <f.fainelli@gmail.com>, "sergei.shtylyov@cogentembedded.com" <sergei.shtylyov@cogentembedded.com>, "mark.rutland@arm.com" <mark.rutland@arm.com>, "eric.dumazet@gmail.com" <eric.dumazet@gmail.com>, "linux-arm-kernel@lists.infradead.org" <linux-arm-kernel@lists.infradead.org>, "netdev@vger.kernel.org" <netdev@vger.kernel.org>, "devicetree@vger.kernel.org" <devicetree@vger.kernel.org> Subject: Re: [PATCH 3/3] net: hisilicon: new hip04 ethernet driver Date: Wed, 02 Apr 2014 17:49:05 +0200 [thread overview] Message-ID: <4698724.S4F2PxkdOH@wuerfel> (raw) In-Reply-To: <063D6719AE5E284EB5DD2968C1650D6D0F6EE729@AcuExch.aculab.com> On Wednesday 02 April 2014 10:04:34 David Laight wrote: > From: Arnd Bergmann > > On Tuesday 01 April 2014 21:27:12 Zhangfei Gao wrote: > > > + phys = dma_map_single(&ndev->dev, skb->data, skb->len, DMA_TO_DEVICE); > > > + if (dma_mapping_error(&ndev->dev, phys)) { > > > + dev_kfree_skb(skb); > > > + return NETDEV_TX_OK; > > > + } > > > + > > > + priv->tx_skb[tx_head] = skb; > > > + priv->tx_phys[tx_head] = phys; > > > + desc->send_addr = cpu_to_be32(phys); > > > + desc->send_size = cpu_to_be16(skb->len); > > > + desc->cfg = cpu_to_be32(DESC_DEF_CFG); > > > + phys = priv->tx_desc_dma + tx_head * sizeof(struct tx_desc); > > > + desc->wb_addr = cpu_to_be32(phys); > > > > One detail: since you don't have cache-coherent DMA, "desc" will > > reside in uncached memory, so you try to minimize the number of accesses. > > It's probably faster if you build the descriptor on the stack and > > then atomically copy it over, rather than assigning each member at > > a time. > > I'm not sure, the writes to uncached memory will probably be > asynchronous, but you may avoid a stall by separating the > cycles in time. Right. > What you need to avoid is reads from uncached memory. > It may well beneficial for the tx reclaim code to first > check whether all the transmits have completed (likely) > instead of testing each descriptor in turn. Good point, reading from noncached memory is actually the part that matters. For slow networks (e.g. 10mbit), checking if all of the descriptors have finished is not quite as likely to succeed as for fast (gbit), especially if the timeout is set to expire before all descriptors have completed. If it makes a lot of difference to performance, one could use a binary search over the outstanding descriptors rather than looking just at the last one. > > The same would be true for the rx descriptors. > > Actually it is reasonably feasible to put the rx descriptors > in cacheable memory and to flush the cache lines after adding > new entries. > You just need to add the entries one cache line full at a time > (and ensure that the rx processing code doesn't dirty the line). rx descriptors are already using the streaming mapping, so ignore what I said about them. Arnd
WARNING: multiple messages have this Message-ID (diff)
From: arnd@arndb.de (Arnd Bergmann) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 3/3] net: hisilicon: new hip04 ethernet driver Date: Wed, 02 Apr 2014 17:49:05 +0200 [thread overview] Message-ID: <4698724.S4F2PxkdOH@wuerfel> (raw) In-Reply-To: <063D6719AE5E284EB5DD2968C1650D6D0F6EE729@AcuExch.aculab.com> On Wednesday 02 April 2014 10:04:34 David Laight wrote: > From: Arnd Bergmann > > On Tuesday 01 April 2014 21:27:12 Zhangfei Gao wrote: > > > + phys = dma_map_single(&ndev->dev, skb->data, skb->len, DMA_TO_DEVICE); > > > + if (dma_mapping_error(&ndev->dev, phys)) { > > > + dev_kfree_skb(skb); > > > + return NETDEV_TX_OK; > > > + } > > > + > > > + priv->tx_skb[tx_head] = skb; > > > + priv->tx_phys[tx_head] = phys; > > > + desc->send_addr = cpu_to_be32(phys); > > > + desc->send_size = cpu_to_be16(skb->len); > > > + desc->cfg = cpu_to_be32(DESC_DEF_CFG); > > > + phys = priv->tx_desc_dma + tx_head * sizeof(struct tx_desc); > > > + desc->wb_addr = cpu_to_be32(phys); > > > > One detail: since you don't have cache-coherent DMA, "desc" will > > reside in uncached memory, so you try to minimize the number of accesses. > > It's probably faster if you build the descriptor on the stack and > > then atomically copy it over, rather than assigning each member at > > a time. > > I'm not sure, the writes to uncached memory will probably be > asynchronous, but you may avoid a stall by separating the > cycles in time. Right. > What you need to avoid is reads from uncached memory. > It may well beneficial for the tx reclaim code to first > check whether all the transmits have completed (likely) > instead of testing each descriptor in turn. Good point, reading from noncached memory is actually the part that matters. For slow networks (e.g. 10mbit), checking if all of the descriptors have finished is not quite as likely to succeed as for fast (gbit), especially if the timeout is set to expire before all descriptors have completed. If it makes a lot of difference to performance, one could use a binary search over the outstanding descriptors rather than looking just at the last one. > > The same would be true for the rx descriptors. > > Actually it is reasonably feasible to put the rx descriptors > in cacheable memory and to flush the cache lines after adding > new entries. > You just need to add the entries one cache line full at a time > (and ensure that the rx processing code doesn't dirty the line). rx descriptors are already using the streaming mapping, so ignore what I said about them. Arnd
next prev parent reply other threads:[~2014-04-02 15:49 UTC|newest] Thread overview: 130+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-04-01 13:27 [PATCH v5 0/3] add hisilicon hip04 ethernet driver Zhangfei Gao 2014-04-01 13:27 ` Zhangfei Gao 2014-04-01 13:27 ` [PATCH 1/3] Documentation: add Device tree bindings for Hisilicon hip04 ethernet Zhangfei Gao 2014-04-01 13:27 ` Zhangfei Gao [not found] ` <1396358832-15828-1-git-send-email-zhangfei.gao-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-04-01 13:27 ` [PATCH 2/3] net: hisilicon: new hip04 MDIO driver Zhangfei Gao 2014-04-01 13:27 ` Zhangfei Gao 2014-04-04 15:42 ` Zhangfei Gao 2014-04-04 15:42 ` Zhangfei Gao 2014-04-04 17:48 ` David Miller 2014-04-04 17:48 ` David Miller 2014-04-01 13:27 ` [PATCH 3/3] net: hisilicon: new hip04 ethernet driver Zhangfei Gao 2014-04-01 13:27 ` Zhangfei Gao [not found] ` <1396358832-15828-4-git-send-email-zhangfei.gao-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-04-02 9:21 ` Arnd Bergmann 2014-04-02 9:21 ` Arnd Bergmann 2014-04-02 9:51 ` zhangfei 2014-04-02 9:51 ` zhangfei 2014-04-02 15:24 ` Arnd Bergmann 2014-04-02 15:24 ` Arnd Bergmann 2014-04-02 10:04 ` David Laight 2014-04-02 10:04 ` David Laight 2014-04-02 15:49 ` Arnd Bergmann [this message] 2014-04-02 15:49 ` Arnd Bergmann 2014-04-03 6:24 ` Zhangfei Gao 2014-04-03 6:24 ` Zhangfei Gao [not found] ` <CAMj5BkgfwE1hHpVeqH9WRitwCB30x3c4w0qw7sXT3PiOV-QcPQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2014-04-03 8:35 ` Arnd Bergmann 2014-04-03 8:35 ` Arnd Bergmann 2014-04-03 15:22 ` David Miller 2014-04-03 15:22 ` David Miller 2014-04-03 15:38 ` zhangfei 2014-04-03 15:38 ` zhangfei 2014-04-03 15:27 ` Russell King - ARM Linux 2014-04-03 15:27 ` Russell King - ARM Linux 2014-04-03 15:42 ` David Laight 2014-04-03 15:42 ` David Laight 2014-04-03 15:50 ` Russell King - ARM Linux 2014-04-03 15:50 ` Russell King - ARM Linux 2014-04-03 17:57 ` Arnd Bergmann 2014-04-03 17:57 ` Arnd Bergmann 2014-04-04 6:52 ` Zhangfei Gao 2014-04-04 6:52 ` Zhangfei Gao -- strict thread matches above, loose matches on Subject: below -- 2014-04-05 4:35 [PATCH v7 0/3] add hisilicon " Zhangfei Gao 2014-04-05 4:35 ` [PATCH 3/3] net: hisilicon: new " Zhangfei Gao 2014-04-05 4:35 ` Zhangfei Gao 2014-04-07 18:53 ` David Miller 2014-04-07 18:53 ` David Miller 2014-04-08 8:07 ` zhangfei 2014-04-08 8:07 ` zhangfei 2014-04-08 8:30 ` David Laight 2014-04-08 8:30 ` David Laight [not found] ` <063D6719AE5E284EB5DD2968C1650D6D0F6F1434-VkEWCZq2GCInGFn1LkZF6NBPR1lH4CV8@public.gmane.org> 2014-04-08 9:42 ` Arnd Bergmann 2014-04-08 9:42 ` Arnd Bergmann 2014-04-08 14:47 ` zhangfei 2014-04-08 14:47 ` zhangfei 2014-04-18 13:17 ` zhangfei 2014-04-18 13:17 ` zhangfei 2014-04-07 18:56 ` David Miller 2014-04-07 18:56 ` David Miller 2014-04-04 15:16 [PATCH v6 0/3] add hisilicon " Zhangfei Gao [not found] ` <1396624597-390-1-git-send-email-zhangfei.gao-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-04-04 15:16 ` [PATCH 3/3] net: hisilicon: new " Zhangfei Gao 2014-04-04 15:16 ` Zhangfei Gao 2014-03-28 15:35 [PATCH v4 0/3] add hisilicon " Zhangfei Gao 2014-03-28 15:36 ` [PATCH 3/3] net: hisilicon: new " Zhangfei Gao 2014-03-28 15:36 ` Zhangfei Gao 2014-03-24 14:14 [PATCH v3 0/3] add hisilicon " Zhangfei Gao 2014-03-24 14:14 ` [PATCH 3/3] net: hisilicon: new " Zhangfei Gao 2014-03-24 14:14 ` Zhangfei Gao [not found] ` <1395670496-17381-4-git-send-email-zhangfei.gao-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-03-24 15:18 ` Arnd Bergmann 2014-03-24 15:18 ` Arnd Bergmann 2014-03-25 4:06 ` Zhangfei Gao 2014-03-25 4:06 ` Zhangfei Gao 2014-03-25 8:12 ` Arnd Bergmann 2014-03-25 8:12 ` Arnd Bergmann 2014-03-25 17:00 ` Florian Fainelli 2014-03-25 17:00 ` Florian Fainelli 2014-03-25 17:05 ` Arnd Bergmann 2014-03-25 17:05 ` Arnd Bergmann 2014-03-25 17:16 ` Florian Fainelli 2014-03-25 17:16 ` Florian Fainelli 2014-03-25 17:57 ` Arnd Bergmann 2014-03-25 17:57 ` Arnd Bergmann 2014-03-26 9:55 ` David Laight 2014-03-26 9:55 ` David Laight 2014-03-25 17:17 ` David Laight 2014-03-25 17:17 ` David Laight 2014-03-25 17:21 ` Eric Dumazet 2014-03-25 17:21 ` Eric Dumazet 2014-03-25 17:54 ` Arnd Bergmann 2014-03-25 17:54 ` Arnd Bergmann 2014-03-27 12:53 ` zhangfei 2014-03-27 12:53 ` zhangfei 2014-03-24 16:32 ` Florian Fainelli 2014-03-24 16:32 ` Florian Fainelli 2014-03-24 17:23 ` Arnd Bergmann 2014-03-24 17:23 ` Arnd Bergmann 2014-03-24 17:35 ` Florian Fainelli 2014-03-24 17:35 ` Florian Fainelli 2014-03-27 6:27 ` Zhangfei Gao 2014-03-27 6:27 ` Zhangfei Gao 2014-03-21 15:09 [PATCH v2 0/3] add hisilicon " Zhangfei Gao 2014-03-21 15:09 ` [PATCH 3/3] net: hisilicon: new " Zhangfei Gao 2014-03-21 15:09 ` Zhangfei Gao 2014-03-21 15:27 ` Arnd Bergmann 2014-03-21 15:27 ` Arnd Bergmann 2014-03-22 1:18 ` zhangfei 2014-03-22 1:18 ` zhangfei 2014-03-22 8:08 ` Arnd Bergmann 2014-03-22 8:08 ` Arnd Bergmann 2014-03-18 8:40 [PATCH 0/3] add hisilicon " Zhangfei Gao [not found] ` <1395132017-15928-1-git-send-email-zhangfei.gao-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-03-18 8:40 ` [PATCH 3/3] net: hisilicon: new " Zhangfei Gao 2014-03-18 8:40 ` Zhangfei Gao [not found] ` <1395132017-15928-4-git-send-email-zhangfei.gao-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-03-18 10:46 ` Russell King - ARM Linux 2014-03-18 10:46 ` Russell King - ARM Linux 2014-03-20 9:51 ` Zhangfei Gao 2014-03-20 9:51 ` Zhangfei Gao 2014-03-24 14:17 ` Rob Herring 2014-03-24 14:17 ` Rob Herring 2014-03-26 14:22 ` Zhangfei Gao 2014-03-26 14:22 ` Zhangfei Gao 2014-03-18 11:25 ` Arnd Bergmann 2014-03-18 11:25 ` Arnd Bergmann 2014-03-20 14:00 ` Zhangfei Gao 2014-03-20 14:00 ` Zhangfei Gao 2014-03-20 14:31 ` Arnd Bergmann 2014-03-20 14:31 ` Arnd Bergmann [not found] ` <201403201531.20416.arnd-r2nGTMty4D4@public.gmane.org> 2014-03-21 5:19 ` Zhangfei Gao 2014-03-21 5:19 ` Zhangfei Gao 2014-03-21 7:37 ` Arnd Bergmann 2014-03-21 7:37 ` Arnd Bergmann 2014-03-21 7:56 ` Zhangfei Gao 2014-03-21 7:56 ` Zhangfei Gao 2014-03-24 8:17 ` Zhangfei Gao 2014-03-24 8:17 ` Zhangfei Gao 2014-03-24 10:02 ` Arnd Bergmann 2014-03-24 10:02 ` Arnd Bergmann 2014-03-24 13:23 ` Zhangfei Gao 2014-03-24 13:23 ` Zhangfei Gao
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=4698724.S4F2PxkdOH@wuerfel \ --to=arnd@arndb.de \ --cc=David.Laight@aculab.com \ --cc=davem@davemloft.net \ --cc=devicetree@vger.kernel.org \ --cc=eric.dumazet@gmail.com \ --cc=f.fainelli@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux@arm.linux.org.uk \ --cc=mark.rutland@arm.com \ --cc=netdev@vger.kernel.org \ --cc=sergei.shtylyov@cogentembedded.com \ --cc=zhangfei.gao@linaro.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: linkBe 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.