/[packages]/backports/8/kernel/current/SOURCES/net-moxa-get-rid-of-asymmetry-in-dma-mapping-unmappi.patch
ViewVC logotype

Contents of /backports/8/kernel/current/SOURCES/net-moxa-get-rid-of-asymmetry-in-dma-mapping-unmappi.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1881590 - (show annotations) (download)
Mon Aug 29 03:49:40 2022 UTC (19 months, 3 weeks ago) by tmb
File size: 4019 byte(s)
- add current -stable queue
- io_uring: fix issue with io_write() not always undoing sb_start_write()
- HID: input: fix uclogic tablets


1 From 1707ea46020f07a9226c3e1485a74a3f5a25eae2 Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Fri, 19 Aug 2022 14:05:19 +0300
4 Subject: net: moxa: get rid of asymmetry in DMA mapping/unmapping
5
6 From: Sergei Antonov <saproj@gmail.com>
7
8 [ Upstream commit 0ee7828dfc56e97d71e51e6374dc7b4eb2b6e081 ]
9
10 Since priv->rx_mapping[i] is maped in moxart_mac_open(), we
11 should unmap it from moxart_mac_stop(). Fixes 2 warnings.
12
13 1. During error unwinding in moxart_mac_probe(): "goto init_fail;",
14 then moxart_mac_free_memory() calls dma_unmap_single() with
15 priv->rx_mapping[i] pointers zeroed.
16
17 WARNING: CPU: 0 PID: 1 at kernel/dma/debug.c:963 check_unmap+0x704/0x980
18 DMA-API: moxart-ethernet 92000000.mac: device driver tries to free DMA memory it has not allocated [device address=0x0000000000000000] [size=1600 bytes]
19 CPU: 0 PID: 1 Comm: swapper Not tainted 5.19.0+ #60
20 Hardware name: Generic DT based system
21 unwind_backtrace from show_stack+0x10/0x14
22 show_stack from dump_stack_lvl+0x34/0x44
23 dump_stack_lvl from __warn+0xbc/0x1f0
24 __warn from warn_slowpath_fmt+0x94/0xc8
25 warn_slowpath_fmt from check_unmap+0x704/0x980
26 check_unmap from debug_dma_unmap_page+0x8c/0x9c
27 debug_dma_unmap_page from moxart_mac_free_memory+0x3c/0xa8
28 moxart_mac_free_memory from moxart_mac_probe+0x190/0x218
29 moxart_mac_probe from platform_probe+0x48/0x88
30 platform_probe from really_probe+0xc0/0x2e4
31
32 2. After commands:
33 ip link set dev eth0 down
34 ip link set dev eth0 up
35
36 WARNING: CPU: 0 PID: 55 at kernel/dma/debug.c:570 add_dma_entry+0x204/0x2ec
37 DMA-API: moxart-ethernet 92000000.mac: cacheline tracking EEXIST, overlapping mappings aren't supported
38 CPU: 0 PID: 55 Comm: ip Not tainted 5.19.0+ #57
39 Hardware name: Generic DT based system
40 unwind_backtrace from show_stack+0x10/0x14
41 show_stack from dump_stack_lvl+0x34/0x44
42 dump_stack_lvl from __warn+0xbc/0x1f0
43 __warn from warn_slowpath_fmt+0x94/0xc8
44 warn_slowpath_fmt from add_dma_entry+0x204/0x2ec
45 add_dma_entry from dma_map_page_attrs+0x110/0x328
46 dma_map_page_attrs from moxart_mac_open+0x134/0x320
47 moxart_mac_open from __dev_open+0x11c/0x1ec
48 __dev_open from __dev_change_flags+0x194/0x22c
49 __dev_change_flags from dev_change_flags+0x14/0x44
50 dev_change_flags from devinet_ioctl+0x6d4/0x93c
51 devinet_ioctl from inet_ioctl+0x1ac/0x25c
52
53 v1 -> v2:
54 Extraneous change removed.
55
56 Fixes: 6c821bd9edc9 ("net: Add MOXA ART SoCs ethernet driver")
57 Signed-off-by: Sergei Antonov <saproj@gmail.com>
58 Reviewed-by: Andrew Lunn <andrew@lunn.ch>
59 Link: https://lore.kernel.org/r/20220819110519.1230877-1-saproj@gmail.com
60 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
61 Signed-off-by: Sasha Levin <sashal@kernel.org>
62 ---
63 drivers/net/ethernet/moxa/moxart_ether.c | 11 ++++++-----
64 1 file changed, 6 insertions(+), 5 deletions(-)
65
66 diff --git a/drivers/net/ethernet/moxa/moxart_ether.c b/drivers/net/ethernet/moxa/moxart_ether.c
67 index f11f1cb92025f..3b6beb96ca856 100644
68 --- a/drivers/net/ethernet/moxa/moxart_ether.c
69 +++ b/drivers/net/ethernet/moxa/moxart_ether.c
70 @@ -74,11 +74,6 @@ static int moxart_set_mac_address(struct net_device *ndev, void *addr)
71 static void moxart_mac_free_memory(struct net_device *ndev)
72 {
73 struct moxart_mac_priv_t *priv = netdev_priv(ndev);
74 - int i;
75 -
76 - for (i = 0; i < RX_DESC_NUM; i++)
77 - dma_unmap_single(&priv->pdev->dev, priv->rx_mapping[i],
78 - priv->rx_buf_size, DMA_FROM_DEVICE);
79
80 if (priv->tx_desc_base)
81 dma_free_coherent(&priv->pdev->dev,
82 @@ -193,6 +188,7 @@ static int moxart_mac_open(struct net_device *ndev)
83 static int moxart_mac_stop(struct net_device *ndev)
84 {
85 struct moxart_mac_priv_t *priv = netdev_priv(ndev);
86 + int i;
87
88 napi_disable(&priv->napi);
89
90 @@ -204,6 +200,11 @@ static int moxart_mac_stop(struct net_device *ndev)
91 /* disable all functions */
92 writel(0, priv->base + REG_MAC_CTRL);
93
94 + /* unmap areas mapped in moxart_mac_setup_desc_ring() */
95 + for (i = 0; i < RX_DESC_NUM; i++)
96 + dma_unmap_single(&priv->pdev->dev, priv->rx_mapping[i],
97 + priv->rx_buf_size, DMA_FROM_DEVICE);
98 +
99 return 0;
100 }
101
102 --
103 2.35.1
104

  ViewVC Help
Powered by ViewVC 1.1.30