From patchwork Wed Apr 6 11:02:12 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shengjiu Wang X-Patchwork-Id: 8760881 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id B96E1C0553 for ; Wed, 6 Apr 2016 11:02:49 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BFBCC201EF for ; Wed, 6 Apr 2016 11:02:48 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 243612017D for ; Wed, 6 Apr 2016 11:02:47 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 80C8B2651C7; Wed, 6 Apr 2016 13:02:44 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, NO_DNS_FOR_FROM,RCVD_IN_DNSWL_NONE,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=no version=3.3.1 Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id B471926070F; Wed, 6 Apr 2016 13:02:40 +0200 (CEST) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id CB96326070F; Wed, 6 Apr 2016 13:02:39 +0200 (CEST) Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0102.outbound.protection.outlook.com [65.55.169.102]) by alsa0.perex.cz (Postfix) with ESMTP id 1EC9F260870 for ; Wed, 6 Apr 2016 13:02:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freescale.onmicrosoft.com; s=selector1-freescale-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=MVI40Hi1RNRBHCVnfZGrX8VD+m4P9kOC/hA55I3DvZE=; b=w6Ba15t5iuxOWsVT7pwTR+hs/U3BieT8ubiUHmG0GCoReN/sjkIuB9cXDURyIO7ue+jaoUvhZgreBj19kOX3ma/Hoqkd50wgeHGNbzBMWOnT15Ordfk8N3olYgR5CiGx0MZfPFoLCsw/ckjel2u7DsozqNfCM5tJpqXxJDlHN0k= Received: from BY2PR03CA049.namprd03.prod.outlook.com (10.141.249.22) by CY1PR0301MB0874.namprd03.prod.outlook.com (10.160.164.17) with Microsoft SMTP Server (TLS) id 15.1.447.15; Wed, 6 Apr 2016 11:02:26 +0000 Received: from BN1BFFO11FD036.protection.gbl (2a01:111:f400:7c10::1:124) by BY2PR03CA049.outlook.office365.com (2a01:111:e400:2c5d::22) with Microsoft SMTP Server (TLS) id 15.1.453.26 via Frontend Transport; Wed, 6 Apr 2016 11:02:25 +0000 Authentication-Results: spf=neutral (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; alsa-project.org; dkim=none (message not signed) header.d=none;alsa-project.org; dmarc=none action=none header.from=freescale.com; Received-SPF: Neutral (protection.outlook.com: 192.88.168.50 is neither permitted nor denied by domain of freescale.com) Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD036.mail.protection.outlook.com (10.58.144.99) with Microsoft SMTP Server (TLS) id 15.1.453.6 via Frontend Transport; Wed, 6 Apr 2016 11:02:24 +0000 Received: from audiosh1.ap.freescale.net (audiosh1.ap.freescale.net [10.192.241.229]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u36B2KC7008487; Wed, 6 Apr 2016 04:02:22 -0700 From: Shengjiu Wang To: , Date: Wed, 6 Apr 2016 19:02:12 +0800 Message-ID: <1459940532-15614-1-git-send-email-shengjiu.wang@freescale.com> X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(1060300003)(596005)(189002)(199003)(1220700001)(606003)(2906002)(5008740100001)(50226001)(1096002)(5001770100001)(50466002)(33646002)(5003940100001)(4326007)(86362001)(19580395003)(81166005)(48376002)(19580405001)(104016004)(6806005)(110436001)(229853001)(92566002)(50986999)(47776003)(4290100001)(106466001)(87936001)(105586002)(77096005)(36756003); DIR:OUT; SFP:1102; SCL:1; SRVR:CY1PR0301MB0874; H:tx30smr01.am.freescale.net; FPR:; SPF:Neutral; MLV:sfv; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD036; 1:dfmwBQdCUdNBgbC9UK4rW6fZX8sKDMGlEFkjyNDjTzIxrr7n8X0SptLLO/0J2h+PnuXcN2+bO/gaCbMkR4pvKOZzlB/41XL7wsiT/cz6eES3oESXV9MtGPUur4QrxnOQEtHZPlrToCzfjm+BS7QvDFEqpEfByopdQywOeYnsH5nkYYP7TTRIVR60fDYadB/QeVMNiOAwzIT9S8QKArYaDDmRs9YN6FruObcNQmW1YHxXLj0MzD/oX6fJLSuHzoP/bBzwlc+OAz8V7ciuLq7wrJ+enXzURfI+JhP5zSp5Aof+uPMU8p4GWOzEJfdovU5gdr5E1glB9t9DbFPYU79pXhy9eZR+KFChxa4CCK/rCWdIT1py/rtNBWj1A4Ks2KShFjxeaXLos31b1MkJBV6/0eXffN7LbrcBBc+sWPYUGiTVGJyUGVUdPX6XRFlZCjIwhlk2Bt/b4n+aOIXuLR2BiJ7XJ5yJSyoga/c4lqBzv7Hg4HSH4sUwZDkQ2MFh6/k+VAQelEhNgcn9s4dWmkpG90yUOace1xrPILa6elG1DQ7e4IRStLGwR8oEKg359T0r MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 9a3fe7a0-de65-4fdb-b3df-08d35e0aef86 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0874; 2:TFp7TQj1qh1ei09AKNQBFx/uL5tBB6nmFPXeZU66u6ll5Qv/KrTk6o99I4YC9q671cXoaIbSJwmNU9iZvcGEv4siWMh7KIEJ3Mms2LEb9nT/Q7aem4VX8K7NEzmradjSSKpxDKQ3dnlcVsqK56CrM8OneBD92nYaQgMnUM1ADcIJB9EKlN+f35ScEHVGkJEt; 3:/8h748lfukUM4V6rwNDxXJNEo4DK8+y4p1y4ujpM8pP6U+N0v3RDZ6Rhc+4GKsay07ESw0EPM7ioCbYtjtFadzGrazInnBCQ4FagQQuYMG84pyHWv0MkxbaxhrdL6Gw/CXQ5s2VWXkblpPcSca7W7NpXPFU+4WRLLNFbnCfOt+WR8q6/dM1hEM5i8iBSqMFUY/Rgj/nakuT38tFoX7H6CF9f1mDfoG/kccx9Ta2cBmU=; 25:oYqv1nYch+FoV8OHl89paKTMOdSM/J+6jZon9lHwG3KNSL1+qX9r7khzuuqoPJJjXI6neDzJ6tVs94bFQe4TAJpmv4XMVvcphrQzjBrPhRajggWs/wVWV9kbOYrSa9UMLAlIua7t0pVwZ9jEVLrG6JMlFyY73YmQBFEsGqCf6A1R3GOYwH0hGf3twrqh6BnpnNcnDRhsbUNf/Dd0dAhjLvSk7OwRQ500l5Co0FgVBNuxtNRpX8k1kfYb6D861rDu3yW5MbmOEZHeG4Ko8SNdaPHnCJNKsbROCBeeFLi5CzQr2yju6p+AADif7YUe3J0aPJxQxOhTspT5M4SWVXUAug== X-Microsoft-Antispam: UriScan:;BCL:1;PCL:0;RULEID:;SRVR:CY1PR0301MB0874; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0874; 20:m4eIf9Eq4veHUZecLnJVhcDwjIZFH7cEa0QvjEaxT3+8x6fpZCpSgonRoW03U8F9c+3xgMuodneBo8CR6MB0dQVAgeoYVD/SOW4c2gui7PDa5kbrxF2ZjjKvQB8kNpuDmM0H7f7auIgT0HQ2l/CqyQiI8hRBeTpnEnUiXyciFF9qBGfYEktVEUU4HBvO44lBedJucF69HAwZEPwiv1UoaT1L4kyKHN2y/InIYWkLt0SFpWCV+CQNy/GvG6mWmxzq6q7QLah2VFICxhBwvoSOzgZF0lpmeiDDw5MhdykYC6gth8bcMf61Geg7pBul+ENq8YyY5D9sZoNsylx3xiAxu5FD7PFFBUiOUCqPFipxReHv12F8TbYQT9N5T76R7LDQ5QCFg/QYzfE96m1s8lNzfos1pI6hgekz6Sf7AgSrz3RT3OLqZ7DvVTLKdS1B+Hgt; 4:xcfrV08nNopxvtI1Ge46vWKNzGroAI3/gnTmc7mFVyr0PrtF/dWxjIOkj0TZ43wSx/3dvE61AdOJIXwujAL5cSzN4FxBR8keOCYfOF7vKfSMbMGeFIKuzYmpB5HYwGRp4XUiwLurjsDrj8c0UcewgSZj/Ucl2ppL/do1lsXngFS22Tl7IjiXjKr8tKWXvr/cXEAcUUZ/0Z/SAmIc6dmc6GulJ3+AsGUMlylspbfKFKDvmpIVN01692StLvgRd9CzJ8s+84EmuvP/tOFDbv3LFj+CTKU5HrZXqTOJHyqi7xA9EOu2Ehog8MC0dsA03cTotUwC3wP3LCN7jgVlGmxJ8TRXI/drRdcMi/PQwz1SGuP2q1pmJeJbwZDIXR31GSXC9czUEK1pEv3TB31aCZHBLkLsypM9ceccDOmMcozb8/Hq8DXCHtKelX9jBmYaAtyHepmcv2GlF3jo5es3mCRV5VoGckmXJDf0EhqA8iabSaDdi2WaX2iEqQQebkjjPm9Y X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:1; PCL:0; RULEID:(601004)(2401047)(13024025)(13017025)(13015025)(1201001)(13023025)(8121501046)(5005006)(13018025)(3002001)(10201501046)(6055026); SRVR:CY1PR0301MB0874; BCL:1; PCL:0; RULEID:; SRVR:CY1PR0301MB0874; X-Forefront-PRVS: 0904004ECB X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0874; 23:H5Ucz6GqgQEDhb77gXC6DqVU/2w7eWTPZDHRXVTfq3XVLIIsDjw31j1YKUEUC7qwjaGUuI/mZc0j93DP7iYiJEMVFsbW5/zc2FcpJF/0o98KkYOdJkAvfH/sxNH6B7xXBaEiTv0fUPvoEsat1uBTUnOlAWAvqrtmoUCgo+KLfDR+0cTbKtuHTxfzbRa9cLrfynFLVn/KxkaFTTi8QwNVlYyg9dfwLyIEc+Ixf+l3NKS1qm2+q6qgTbwdvPl8yb1nosTW7NYPtI+g+Nz8kcFUcM2mrifucZXKqJgfAAB4FmK2GRAX6XWrvj6HntMgMg08x1YyqKTyV3PujdjnWMhjX78ln97zg4XICUJgHrA053LOz38H2I5O+MplqjTt8J2yndFEttX7j//mOILEkQaRxCzt7AP37jtqfE5rEGvoGTqRuZVn4Jkefu3btJPg9oV/enp5rA1Bz6hhbLqb7CgtR50CQdgQf7G1Sckm1bmyyDqzbNrqEu+1o7aNeeaDJ3fwBHTX48mHaZUx/UYuZVYXQmHRFzpaduii3g05On3jZNAMbnxkGcB5gZhkcMTmdvWTfkQa53H5QFzvLCsmrKvkp623QQ4uUfbMksnOby06nt2/ji028gZjheYalx0ItVdn1ILTkCpwHndN1IJ8N9TcHCDV/107UnSGUQY/iWNQfTlJRvedY5RR0vElphBAOGmmcYP0wemw2XImeM0HGdIQ4v0VShwNMqsvtJvKATk4SmgbvBhlKi9e4Tc9+5hQF7DUtAb/2IOwuXljv4mqjz6H6gx4rmhfO/P4pxVA2tm5xy9RjJm7iI+mg3UG0AwXC0OGnyks86/KkuPYY4LvrshWMpEHr01R4ShHQpVMFjEqhH4mRaKZV+LlUjDJzxXvH0ALZ9XdyDxW+z3LYilwIrWlszZq9iq9lQeUMtxLQ1lNSrdXpqzP7OYO9VE4exJY/cbv X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0874; 5:LeEePDWnNihBVkbUwSec0Kz9GP9YgN0xYHET/NmgpbCId8E4EsGJun+xeUZPqUKMTwLXFTlJFcIWrnCpjkbw66cgl/B3lc+X6PDU3ZjTvCQl4VNKXVATqPueVdovu7/4yG1ufoMkzwL3/WG9Fb+Zwg==; 24:QSuVWmbJJDx4xQBL/0gmHA+7yuPdF9/4e4pysIJwWbzegkLdxd6vAHfoNLs1Inyp7ucScOhaVpNJp+aMLWM8DOhJWMRCPf/Qll7NPSBJ3cY= SpamDiagnosticOutput: 1:5 SpamDiagnosticMetadata: 00000000%2D0000%2D0000%2D0000%2D000000000000 SpamDiagnosticMetadata: 1 X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2016 11:02:24.8454 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB0874 Cc: alsa-devel@alsa-project.org Subject: [alsa-devel] [PATCH] pcm_plugin: fix appl pointer not correct when mmap_commit() return error X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP When snd_pcm_mmap_commit() return error, the appl pointer is also updated. which cause the avail_update()'s result wrong. This patch move the snd_pcm_mmap_appl_forward() to the place when snd_pcm_mmap_commit() is successfully returned. Signed-off-by: Shengjiu Wang --- src/pcm/pcm_plugin.c | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c index d007e8c..940491d 100644 --- a/src/pcm/pcm_plugin.c +++ b/src/pcm/pcm_plugin.c @@ -279,18 +279,22 @@ static snd_pcm_sframes_t snd_pcm_plugin_write_areas(snd_pcm_t *pcm, return -EPIPE; } snd_atomic_write_begin(&plugin->watom); - snd_pcm_mmap_appl_forward(pcm, frames); result = snd_pcm_mmap_commit(slave, slave_offset, slave_frames); if (result > 0 && (snd_pcm_uframes_t)result != slave_frames) { snd_pcm_sframes_t res; res = plugin->undo_write(pcm, slave_areas, slave_offset + result, slave_frames, slave_frames - result); - if (res < 0) + if (res < 0) { + snd_atomic_write_end(&plugin->watom); return xfer > 0 ? (snd_pcm_sframes_t)xfer : res; + } frames -= res; } - snd_atomic_write_end(&plugin->watom); - if (result <= 0) + if (result <= 0) { + snd_atomic_write_end(&plugin->watom); return xfer > 0 ? (snd_pcm_sframes_t)xfer : result; + } + snd_pcm_mmap_appl_forward(pcm, frames); + snd_atomic_write_end(&plugin->watom); offset += frames; xfer += frames; size -= frames; @@ -325,19 +329,23 @@ static snd_pcm_sframes_t snd_pcm_plugin_read_areas(snd_pcm_t *pcm, return -EPIPE; } snd_atomic_write_begin(&plugin->watom); - snd_pcm_mmap_appl_forward(pcm, frames); result = snd_pcm_mmap_commit(slave, slave_offset, slave_frames); if (result > 0 && (snd_pcm_uframes_t)result != slave_frames) { snd_pcm_sframes_t res; res = plugin->undo_read(slave, areas, offset, frames, slave_frames - result); - if (res < 0) + if (res < 0) { + snd_atomic_write_end(&plugin->watom); return xfer > 0 ? (snd_pcm_sframes_t)xfer : res; + } frames -= res; } - snd_atomic_write_end(&plugin->watom); - if (result <= 0) + if (result <= 0) { + snd_atomic_write_end(&plugin->watom); return xfer > 0 ? (snd_pcm_sframes_t)xfer : result; + } + snd_pcm_mmap_appl_forward(pcm, frames); + snd_atomic_write_end(&plugin->watom); offset += frames; xfer += frames; size -= frames; @@ -423,19 +431,23 @@ snd_pcm_plugin_mmap_commit(snd_pcm_t *pcm, frames = plugin->write(pcm, areas, appl_offset, frames, slave_areas, slave_offset, &slave_frames); snd_atomic_write_begin(&plugin->watom); - snd_pcm_mmap_appl_forward(pcm, frames); result = snd_pcm_mmap_commit(slave, slave_offset, slave_frames); - snd_atomic_write_end(&plugin->watom); if (result > 0 && (snd_pcm_uframes_t)result != slave_frames) { snd_pcm_sframes_t res; res = plugin->undo_write(pcm, slave_areas, slave_offset + result, slave_frames, slave_frames - result); - if (res < 0) + if (res < 0) { + snd_atomic_write_end(&plugin->watom); return xfer > 0 ? xfer : res; + } frames -= res; } - if (result <= 0) + if (result <= 0) { + snd_atomic_write_end(&plugin->watom); return xfer > 0 ? xfer : result; + } + snd_pcm_mmap_appl_forward(pcm, frames); + snd_atomic_write_end(&plugin->watom); if (frames == cont) appl_offset = 0; else @@ -490,19 +502,23 @@ static snd_pcm_sframes_t snd_pcm_plugin_avail_update(snd_pcm_t *pcm) frames = (plugin->read)(pcm, areas, hw_offset, frames, slave_areas, slave_offset, &slave_frames); snd_atomic_write_begin(&plugin->watom); - snd_pcm_mmap_hw_forward(pcm, frames); result = snd_pcm_mmap_commit(slave, slave_offset, slave_frames); - snd_atomic_write_end(&plugin->watom); if (result > 0 && (snd_pcm_uframes_t)result != slave_frames) { snd_pcm_sframes_t res; res = plugin->undo_read(slave, areas, hw_offset, frames, slave_frames - result); - if (res < 0) + if (res < 0) { + snd_atomic_write_end(&plugin->watom); return xfer > 0 ? (snd_pcm_sframes_t)xfer : res; + } frames -= res; } - if (result <= 0) + if (result <= 0) { + snd_atomic_write_end(&plugin->watom); return xfer > 0 ? (snd_pcm_sframes_t)xfer : result; + } + snd_pcm_mmap_hw_forward(pcm, frames); + snd_atomic_write_end(&plugin->watom); if (frames == cont) hw_offset = 0; else