From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932556AbdABLqm (ORCPT ); Mon, 2 Jan 2017 06:46:42 -0500 Received: from mail-cys01nam02on0069.outbound.protection.outlook.com ([104.47.37.69]:54240 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932140AbdABLqj (ORCPT ); Mon, 2 Jan 2017 06:46:39 -0500 Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; synopsys.com; dkim=none (message not signed) header.d=none;synopsys.com; dmarc=bestguesspass action=none header.from=xilinx.com; From: Appana Durga Kedareswara Rao To: Jose Abreu , "dan.j.williams@intel.com" , "vinod.koul@intel.com" , "michal.simek@xilinx.com" , Soren Brinkmann , "moritz.fischer@ettus.com" , "laurent.pinchart@ideasonboard.com" , "luis@debethencourt.com" CC: "dmaengine@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH v2 2/3] dmaeninge: xilinx_dma: Fix bug in multiple frame stores scenario in vdma Thread-Topic: [PATCH v2 2/3] dmaeninge: xilinx_dma: Fix bug in multiple frame stores scenario in vdma Thread-Index: AQHSXPnlQHj1my3L0UObATPWT2qziqEVJKuAgA+SJ8A= Date: Mon, 2 Jan 2017 11:46:30 +0000 Message-ID: References: <1482483135-14767-1-git-send-email-appanad@xilinx.com> <1482483135-14767-3-git-send-email-appanad@xilinx.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.23.95.44] Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-22798.006 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.83;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(39840400002)(39450400003)(39850400002)(39410400002)(2980300002)(438002)(199003)(51914003)(189002)(102836003)(6116002)(5250100002)(2900100001)(92566002)(50986999)(626004)(2501003)(54906002)(305945005)(106116001)(97756001)(4326007)(54356999)(76176999)(356003)(106466001)(7736002)(189998001)(2920100001)(33656002)(63266004)(229853002)(38730400001)(55846006)(8746002)(47776003)(5001770100001)(5660300001)(8936002)(50466002)(46406003)(55016002)(81156014)(81166006)(8676002)(7696004)(23726003)(3846002)(2201001)(2906002)(2950100002)(107986001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR02MB2780;H:xsj-pvapsmtpgw01;FPR:;SPF:Pass;PTR:unknown-60-83.xilinx.com;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02FT008;1:i55hnhT1298I/UJhCqRFzH7Y0/KME/+ppzfXmZ7W2iXAinyYP30XthTV4/xl3uuD3axCvNokoe+zN2BkASeoVnMUQjeOgzPy6jhgKAklULWJpK7MiKYg9Gy95kyI7+ebHkcBFv6/wFp9kXtqsQIJRiwEZn0t2AO+JWcIegF9dGW/ope4088l6Aex9L1187JC9wL1gwmu62EeAOq7vSnC2aMuLkwRjwrAL/LbtWUKQuK+sSu/YiKFjde0RYfr1sesLq/WQh7uA48+jcgdsu45/qMJCsoUJB/JPjTPcBorXSsdhDlP7pRzZwJLO7+bgQHXkeXYNo8CI1tFKMEMJnqC3KfwOjHxYOpzithux0dSMzv+5w7aOaXZuTulye46NCBLxOFElJLbJnR3GJ3DYUZeT5PpG6WseNGaZOtozvLzu1llvtA49qmZFpWgEbNelmolMaqQWXCvTPviAMCcVPiU4JayIGx9kfXo8xOKA8SxbjVHUGiZnwDQVc3V+4+G3Q9u2qrcVTVRHYTD4XNF8FEnxFpOGQkJNFY9MX8ZHfktxyDfCL2anWPxncLKbITcsK6HJyFtGEt/N9426nDS1/DOQxbSv8W60qdYd4xRMzZISs/D3en82A7lhvUAOq0vv40k X-MS-Office365-Filtering-Correlation-Id: 3eec6470-d603-42d8-f36a-08d4330500d5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002);SRVR:DM5PR02MB2780; X-Microsoft-Exchange-Diagnostics: 1;DM5PR02MB2780;3:o7skBEkAdEYDBs1JZgZDp1i6Bsz+NenxP4I82qtqxHfdr/fFuZMC0yoR8L/gGHBmf0X8fAQT41LJC+gGQ4yjP+a8xL+tXbFgkyxXoeHSl6rZOmdoM7bPgGujiIFXEqdQgkkPZPXGeoChTO1KBLOpwF444m1TnMGK19l+TCGdpX4egemC8OKNLobnQetar2TvVKcLZDtcXYZYO09j75HLygM6kzby7od7DIcWZJAo3kCjqjRzIzIg6OCjuVJB7JM3UK9cX3MN9onYki+fMyUOjbGFqfbNjLbecaBRnhFPesnFD05zNylSfoWOXlAXeagHU/UZ71jHBqpzRC9eRxEy7mposlLjr1Xb8EMMm8UDUsK1/IrQbwjdeRmV8Zod+123VX5g38BPTUli6kQNy+Zs3w==;25:jhofQNrUb5pY5syBOfSJ66iSglrp9hP/ABVsbgEnG3SrhGabGjtzvwmr1aD/ZdZLK1GzdaI19ieNvVUbq40Mje6DKgAoV6TrNDiOuSIuVuYB+DHG1Ph4ceXdVIcB1YNs6MXcC7rt0Az+atTvU69mkeiZsWpl3hr3mu5c19AM1sdpzttwjTuzBSfBPbv8OEFOUabt2+0Vr4JssgzlW36XYwACQ89Q0QLMzQZpCxaS6xUZgAyQhzDW2P2M3XzwNE+lifhQF9/di/vMwonZAxgP1nMz7YOnk1aNuHPsHlBmkayc1y2kyEF9CuFBCGThwOBiVWPxdDj/u3edKjN39ZO9u35Vef/kHsDzepxJzRPjd7c+/t2mnztEtBuZkWiGUuVga7yj0KVOcnTcUlWj9d32b3vN5zj71JeCCke1IhFEH1U8i0a1wS83bmLI0by4UdYeX1ecgxt6yIIZr6IUNapryw== X-Microsoft-Exchange-Diagnostics: 1;DM5PR02MB2780;31:vA+5pZFuZWomkRHeO8wpBUc5LbDHfaA8EUMdZo9N8Wvc/Ge5D0O0ZM4uRdk42xDfzRcDhoSmLSwgn133yVbUOXSObf++bXxeo3do1Aunc3+2gB2lAQQ1NdKltgoQgNLKGe5sA0T3Zh/Xb3/FH8+LAOVs2lEdI2fVllFcQde4l/XfRupLSdES106BfsEIjxnCFfsgzYsPe84ukAt1yDfvZYp4mbvz3md8D4sKyteQWkYBU9pmheJo8GCd5M4JimUeLo5XR8/ckOEgBuYEb3lAoA==;20:VsrH7jjqte4f4vBdk5osSCxRf3vizS037nscFURBIM7/w8+EC9Xb+bqyDkENKjmX4KAJjn8VaGZwpEA73OGrDyi3HNPdW+gJDudIh22UKaycUqcHTiFlstBiZr6my3ayuV2CgZ3LzdOylpOCFl0uDiHxukPLZphPXk1FCq5FlgEE20l0NQInvEyvFPXxF2CbFgvjIV5XQLSiW7KHySxTYfrwTjlx25KPjbu9NeobxIuR7LHOc4A0PZelyagzFIbkdDhHnOAUnIPB8N8KQ/viyWCRyvGY5nb+2Tqj5AHK5tF/0uwvzidqTSR7x/658FIJ1IgBSK2SnRh36p3DkJzjzPKLa20tXyXnbP8mUS3inQK1NN5vB3sWFhf4vM/oJ9i8wELP0BGg0I7t5aWJZuIlGB/XRqrJw2yMupzemb96hgZkPy0jGHvJSPPNBYz6YFb4TucF2fzhJPK1lbZIHmmMSdDvrFMXKNklSoQpBj+taFhS0mt5Hz8Cuvd2T9eddweE X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(13024025)(13023025)(13015025)(13017025)(13018025)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123564025)(20161123562025)(20161123555025)(20161123560025)(6072148);SRVR:DM5PR02MB2780;BCL:0;PCL:0;RULEID:;SRVR:DM5PR02MB2780; X-Microsoft-Exchange-Diagnostics: 1;DM5PR02MB2780;4:pld5nwfGjwdW3bDU/WmsNQhx+2tvmoUgifYk4MVYHIAcv9l/nMaEen3vFB9CMLJ4Q5CTWa5QX5p6UVR3uN4WuAuPYjgMfEOvjU9Q3NPvLbj83592/PElz03ZQbeylw22HdHek1y5sZXy3Xf2ZyLxPbiQ3C4zxDjV7lAZFpnB5sEps17quuanwYiuvDxiUe+6FOwje/Uhjm4EDWJGdEnGBOFgLYYF6ruiQ62xQMG33lSMvJcmwemrLkcCcWXLyC8h8MDSNAC0d4ursmB2h+3nKwQfGF+W2oDO4vALhjndBVkHyWqS8RoAHyTFWl8wOesUla4r9V9UOhtIGDc8Zh2xugL350+84pzZqopF0pYKdyC2lKrd/BOF/ypi/8RLy2C5uotILn4BFsXmlkzMoKCEItLBn2TurevBUoVJ9xt1h7Sm0JRVh4WfklbnSXnuDgii2X3hEfuRsy7oEF4238BqWOzBPTc15mlC6nqm11DDbO0DmI45fz92rkbCoeUKaEoF1CL1cl84Vc5BeGruMiLl8Em2frJvWTG4WVPiu6wPp1+hBJcQIekADQWmM76XWZGDhfcY8lp1E/RGJBgm/pAcHuKplls2n4Bu8h/GCgwFgGuSnqB503qMu/Y4FlnzFZrsvQPQsubQNi5zfsQU3CTNm5PRYgLoEDG1bvkpm9Fj8sVQCzOdw9CiGt3tLfX8xaOe X-Forefront-PRVS: 017589626D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM5PR02MB2780;23:z3fJYpWDmoEdwnZGHOijEL3sQlnmFUkwYyOI1eemS?= =?us-ascii?Q?75y5a9WfMK77sSZJaGsYGCKJVIPJaQI38UR2LwxC6+hH341VgEp6DcmfRgrA?= =?us-ascii?Q?WQe78fSlJaoYmh1+OjwTOTOiyt4rcrZiAoXJmSL6Yhg/k8EeZc6oxQe+JISG?= =?us-ascii?Q?y0XBEPQ0BXePCvRFdN6I6j/sCavYi6cxOHqyduOasHAZrr/HrOKKNcOi67lX?= =?us-ascii?Q?DmaocvPRcc/Co4bnvICz3Iaoaj/Ws0osYDY1fIgRgmmWSXvbOLriCTpo4UkF?= =?us-ascii?Q?NB0Iq8PXds50BoUARMLz2zgEFUelcpzsAGM1cB7G2TrcGDxrk5RQn6g/neuI?= =?us-ascii?Q?5ENPHCOvajdn5NJNYRy06SYJLdgcANS3GYCl//REWZkFpUOQ+w9whA2PJJrY?= =?us-ascii?Q?JaF53a8TSV+0wL8XSXwXLw5i7dX5Wu0up6e2yqI22O6+3vf4pn7o67KugvEy?= =?us-ascii?Q?BDabCEtdZhHfBfsjWeCO12sPNSmc1h+9+RTIY8wijvRbSukyPsZjD8qyHGnK?= =?us-ascii?Q?0TDwO5laSTUJ1nZV4OtYD1rLu7kB9SELZP8ajkJOos+9ICOogQR2uOxCnjfY?= =?us-ascii?Q?SI04PiPyzKpJ4vt2wbe4p0iyoyLh/hn/hTvQt2BsZ8fKWWLfEUXzkWdpaWZe?= =?us-ascii?Q?Svl/0t1vMQF7x+Qi2V1Qi2f/3oZ9JtIpvOaURT6iuf2gKABzuFO/gb9iKUVk?= =?us-ascii?Q?tNQ5n1nQQZmuyGbDUzk0SrbK/PirdmzoTqssIj+6VYI0bmTtSlRnUfQTe7/J?= =?us-ascii?Q?kyGL0mK2/+e2fgYwjMAW4EOfh4kv6aEB4yDX/dF5WkhxbFgeyi5X9Wy4CMbV?= =?us-ascii?Q?spwAT6GJs3SpGGSPRKBpahPhL88TxjlomDla7ehdGpxL+BeFVeeSwF29zJZ4?= =?us-ascii?Q?ULjRygygqmjSbGi+rOfgo9pUmqniyV6Q3wWli/IjkHW8+tFehTl9JvHQbhb+?= =?us-ascii?Q?U9DjCHdTSgsglrG0TXwWLoaUSGXw9Kt+l5uP+mdY5Yq5C9vN/6PhxOM7H5kb?= =?us-ascii?Q?Qu3avmmCQv2/CDrzFjYonDdrHbRXRf6qikbuuANYrXu25xvqO7ant/r5MNYm?= =?us-ascii?Q?owL+h29qzMwvRx/xfMytK2c04eplgn3tCGHjntKHsR86lgbpgRR0SRi+qL+v?= =?us-ascii?Q?GE96RhPxbCvUchomL+nPJheAZmUhBduWMfyzuKYaufgUWGKjMh79waonMB+o?= =?us-ascii?Q?bdM6kuj5Ak+UjNG05aDDXRyugbXyxRUuBAzLGrpDMmZrGh7cq9/O44p2tjYJ?= =?us-ascii?Q?9vf0e/9xGuDh1faPgw1dLejGeeqm961JGDdwz5+IYeVbwOwOOFuYz4XC/Dgr?= =?us-ascii?B?Zz09?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR02MB2780;6:aunb6X7QwbCZ9bfRMOfsmehFEALOcrowLIHLOi1ZqXBBx3jLx1ompvHZ1lhfABFqC5QQG2bjaEiMa1JFEJiZ18jfbgGf1RoCFT9vACOmAvQ91PtchxgqGX7npnLZcnSzB6Dh85KdZ4bbUwH9K6Vtt6pG5v2Lrx8vzRMJsM1TpD9tCQXWAwIB3a84CGchWg9Yh2Wbr+0cfZ44G32Wpq7zpLcclZdkzTI/DOztIVAIVfkmi2oFMdihpfcWI9NOC4QpRWtsYNai/J67FeNLGBJVGVz9gRrQ58/sqQG061r3ejnED/81tDX5BQHAgbpg4ld/Sxzrs5Sj5dK4cefsJ1pxfj9W3zYgUaUoUDcnYJbz0cN+pbPbap483V3VH0B4BRHc3BSz3hh+DGUA/1QahKuV0QwlVhFeqXbJ48dFYE2/+A4EH9an4jFw3oADsuXB02zBN/kLFZWtgdWYTSFZzOKTyw==;5:oNfVNSAWapya8MIbTl1O32r9GK5QWf8q3SiddNZB7BEJqonkbnJTYR5ehv/IgW/pfpPwx9LHcIoWecsqzsaENDr1oQQv0TwJMD6LCg8kP4oFd589UQZkvY+bTVw08i8UQTZxs83Bo7M6c7eClWV2Cw==;24:RgVDVYOlDEhjiLU3TYpqYtDUwQC7KAJz+D/OifuUqvBVdFsydnZE8ImnAGnxkMT1wMPlu6IlgC8/oItFbJnsOiYUiMnnri3DOz6IwzkvprE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM5PR02MB2780;7:R2/N7Ta967UkGW/ZzGV+KQipCJWCTPsuIi3yL1Sv1+rjG2lD57IO8kUmLOkI5p5yYAGB7D1No8Ufsc3nyuRFRDMHJgzpPacMsRiXm6q9CGeaDxf2PTOGQi1LL79o6B6CvtHmxeypjtgis7UKmt+WrI2IZwho7UqDotZm1Xn9JhJmisO4t12xevBIi2Qsg3slkK9RelbW5wGr+4fBFOiZxSsh4DTe+DPqWDlyPTRYeLbUJBx94b350QCPz1HgNEgPY27aNfIVbheW8chZEU6AzAjCou/1NsHXJ2gFGeuo+cfEK577z7oQ2fL6DSSZLLCMoGJZNHPWqtHTuVwPQvLnOLnUXZD/Yq/SuJYWHrfKucbILdvwP8wTWQF7/vr5g/n8xNtfu/HH9UFNQJClgfNgpwlJkcLMD5/q6KQGQm1QB/be0eQ3y9oZkwkkCbstA0v535rh17MN8Jm+yF5ykmnQPQ== X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jan 2017 11:46:34.5144 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.83];Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR02MB2780 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id v02BklWG014190 Hi Jose Miguel Abreu, Thanks for the review.... Sorry for the delay in the reply please see comments inline... > > if (chan->has_sg) { > > dma_ctrl_write(chan, XILINX_DMA_REG_TAILDESC, > > tail_segment->phys); > > + list_splice_tail_init(&chan->pending_list, &chan->active_list); > > + chan->desc_pendingcount = 0; > > } else { > > struct xilinx_vdma_tx_segment *segment, *last = NULL; > > - int i = 0; > > + int i = 0, j = 0; > > > > if (chan->desc_submitcount < chan->num_frms) > > i = chan->desc_submitcount; > > > > - list_for_each_entry(segment, &desc->segments, node) { > > - if (chan->ext_addr) > > - vdma_desc_write_64(chan, > > - > XILINX_VDMA_REG_START_ADDRESS_64(i++), > > - segment->hw.buf_addr, > > - segment->hw.buf_addr_msb); > > - else > > - vdma_desc_write(chan, > > - > XILINX_VDMA_REG_START_ADDRESS(i++), > > - segment->hw.buf_addr); > > - > > - last = segment; > > + for (j = 0; j < chan->num_frms; ) { > > + list_for_each_entry(segment, &desc->segments, node) > { > > + if (chan->ext_addr) > > + vdma_desc_write_64(chan, > > + > XILINX_VDMA_REG_START_ADDRESS_64(i++), > > + segment->hw.buf_addr, > > + segment->hw.buf_addr_msb); > > + else > > + vdma_desc_write(chan, > > + > XILINX_VDMA_REG_START_ADDRESS(i++), > > + segment->hw.buf_addr); > > + > > + last = segment; > > + } > > + list_del(&desc->node); > > + list_add_tail(&desc->node, &chan->active_list); > > + j++; > > + if (list_empty(&chan->pending_list) || > > + (i == chan->num_frms)) > > + break; > > + desc = list_first_entry(&chan->pending_list, > > + struct > xilinx_dma_tx_descriptor, > > + node); > > } > > > > if (!last) > > @@ -1081,20 +1094,14 @@ static void xilinx_vdma_start_transfer(struct > xilinx_dma_chan *chan) > > vdma_desc_write(chan, XILINX_DMA_REG_FRMDLY_STRIDE, > > last->hw.stride); > > vdma_desc_write(chan, XILINX_DMA_REG_VSIZE, last- > >hw.vsize); > > What if we reach here and j < num_frms? It can happen because if > the pending list is empty the loop breaks. Then VDMA will start > with framebuffers having address 0x0. You should only program > vsize when j > num_frms or when we have already previously set > the framebuffers (i.e. when submitcount has already been > incremented num_frms at least once). In case of j < num_frms VDMA won't start the frame buffer having address 0 As we are programming the VDMA buffer address based on the desc_submitcount value only i.e. i. Code snippet in the driver doing this: list_for_each_entry(segment, &desc->segments, node) { if (chan->ext_addr) vdma_desc_write_64(chan, XILINX_VDMA_REG_START_ADDRESS_64(i++), segment->hw.buf_addr, segment->hw.buf_addr_msb); else vdma_desc_write(chan, XILINX_VDMA_REG_START_ADDRESS(i++), segment->hw.buf_addr); last = segment; } Initially desc_submitcount will be zero. Let's assume h/w is configured for 10 frames and user submitted only 5 frames. And triggered the VDMA h/w using issue_pending in this case desc_submitcount will be 5. desc_submitcount will become zero again only when User submits more frames than h/w capable or user submit frames up to h/w capable. If my understanding is wrong could you please elaborate the race condition that you are talking above? Regards, Kedar. > > Best regards, > Jose Miguel Abreu >