From patchwork Fri Sep 1 04:34:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 9933429 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B7F4E60309 for ; Fri, 1 Sep 2017 04:34:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9F49B28450 for ; Fri, 1 Sep 2017 04:34:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 90EAB28459; Fri, 1 Sep 2017 04:34:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_NONE, T_DKIM_INVALID autolearn=no version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6986C28450 for ; Fri, 1 Sep 2017 04:34:58 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 197FE267476; Fri, 1 Sep 2017 06:34:57 +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 75196267479; Fri, 1 Sep 2017 06:34:55 +0200 (CEST) Received: from relmlie1.idc.renesas.com (relmlor2.renesas.com [210.160.252.172]) by alsa0.perex.cz (Postfix) with ESMTP id D26BD267460 for ; Fri, 1 Sep 2017 06:34:51 +0200 (CEST) Received: from unknown (HELO relmlir4.idc.renesas.com) ([10.200.68.154]) by relmlie1.idc.renesas.com with ESMTP; 01 Sep 2017 13:34:50 +0900 Received: from relmlii1.idc.renesas.com (relmlii1.idc.renesas.com [10.200.68.65]) by relmlir4.idc.renesas.com (Postfix) with ESMTP id 0450A71D79; Fri, 1 Sep 2017 13:34:50 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.41,456,1498489200"; d="scan'208";a="255501886" Received: from mail-pu1apc01lp0022.outbound.protection.outlook.com (HELO APC01-PU1-obe.outbound.protection.outlook.com) ([65.55.88.22]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 01 Sep 2017 13:34:48 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=2onQxZ6sS2l0e72+kgN4kuYuNum77Yy24m90/7Z/DCw=; b=MvbylZvz1OmSn8GYRbJP8FyhRN6sM+KN0PqjUyox3rtofDKs6vamfcWZwnQDNVFdb3OphZv5YNbeHkymGDqOt69AIIlFX8PsWuDKGSE8he5g6Hfmtisf1NSmFJabB0VfdKDrSkU1xDBQ9ePw1e59HUjU4iFFNDceKKcI2CNTWEM= Received: from morimoto-PC.renesas.com (211.11.155.138) by HK2PR0601MB1873.apcprd06.prod.outlook.com (2603:1096:202:a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10; Fri, 1 Sep 2017 04:34:48 +0000 Message-ID: <874lsnniv3.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 To: Mark Brown MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Fri, 1 Sep 2017 04:34:48 +0000 X-Originating-IP: [211.11.155.138] X-ClientProxiedBy: HK2PR02CA0184.apcprd02.prod.outlook.com (2603:1096:201:21::20) To HK2PR0601MB1873.apcprd06.prod.outlook.com (2603:1096:202:a::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3782471c-051a-4b56-b5be-08d4f0f2c76d X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:HK2PR0601MB1873; X-Microsoft-Exchange-Diagnostics: 1; HK2PR0601MB1873; 3:vdG5mYD9QmXggd1phqkDrtYD56rsoLdeD9SSaTd34NCYZUusuLskwobog9rdWJOwJwCYFZddDa5o1w4UuGZEL7V1deE2PDZcMMJF+cw5ibZ0f4q5rjDmJ3FuS3LV/RjtMPRSEwv+Y8A1JJ+WgZarM+Y5c883+CuT3f4pM4q0lxoiSDljPrwQ4cVXo+vSxNNomBJXq9/m3GWvqzIwqsXroOiJ7pysOy3Xf6gaYhHCzbZyLtgxjx/Hftrtrvols133; 25:DVQpoWHbq0x1BUzd2BRwPpDNmVAEPhqFoMBObdXew8FaVf1xQJ4OylkxX7yrPNcI+H3wQ9ZmzK+FkSST3BGzsDbOVNk6moZaokZ+KR9KyX/dpYySncyQZ/1SbCmG4Q0PYm+l/l6GxMbF64986gRy/6Ki5WLXTLfyvaA0h0/ISIG4vQph+Ws4DvKAu/E56p20EMnbSf4wyYV1AJzGiazKWm6JQZFVkPm35dC4w8LUCZcYznh1EIGthAIGm4xd0EDC/zuz7OdsPb68HRHkBqrq414wXsCHmwMWxZv15X/GOPSP48nptrmc5JVAWYs+1lFrkyhBhUmZ9qA1pMuxVhyPkg==; 31:0D6JCAkMZc+qfkkjskjpSOTmuYfnx7PL+UIrxiQ0M9eOXlGpPORMwSg+2nU0k74jADBZ3hUNZJlcoGxJsi37Hg/mHdTqVHrgTgA3J74dAoDakQr4ehT1r0YAo0KRwlTomEC35xXnFVNfp20hElh6wQLy6/NwUEIMS/U1+aB0ipflzgEWX3cIf/IXpQDiQqJWMGaQEoULqVrBOYhnylK39e9+6qvy8OZGqIbLJUzwPlk= X-MS-TrafficTypeDiagnostic: HK2PR0601MB1873: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; X-Microsoft-Exchange-Diagnostics: 1; HK2PR0601MB1873; 20:tXEkd4Cmgl+qxRs9Y8Vx6gvoeUg2TS5+I0fGNgn7zOkGN2yx2rm7r+tgZzjvbuQ2LXcZuvixChRsXpXyvjSY0Whx/8xC+MO3Fw2rlnuV+ZTDgZ7Oo5mhzwXEYpi4gnAPPgT51fmxg9KzRxxg6681kXBtaY/hf9obKjD6sgm5S30Uq4wJ0neQotxShTsSNVNxSRSnosHc0Z6wIic1MhQBfXRpG2IwA3ZDMYQTE1d9G7AT+jV8Y5ct6sUGU5OMZuGlXKj7UQN1WFITWTNwOmyzqIKAdt9ckSsjuaLKIK8emCexmsPuqPK/jkTG7vSHUvLhSVnxnFoZuIdVccX11TJ9ZuKiCD/D2d0XqEHCm1nx0+HeSO9+gdt72eLylujT/R4RmLFKWKs6hoVfi15UxqSnhE31Nk6SJGvZKBsB+h+GB+ux1C8pJCkZrrwqjI3Fs5j271OApiW0Lt66Np3KiCWrqC3NRsFbCg5Gm+2dU/lLLAUAB6ryNzOAa8RMWCdmKYDQ; 4:fNFEVhFtKpzc8SS9kWgsvs4gJmeHfwA+qozeH0YXTCgw3EfuJo+nfYSqHvUpYJVUJBDToxA3mvA0YkXFgcRmMuqMBiFq4MXEOOZ38gamV/3CWyY+sL5i/yBbsOcqH/gnKRDL/VGHEQSenE6pnYogUt4nw3Y6D2rM2f3Mo5g4iDiYVST/uqTIPPkbyi7r7Mlb76LtscguQyyCCgewHikQxES1GqSmtsJRglC7Vnvem3Ss2nRhsW6eZb9lYyFJmN8x X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6055026)(6041248)(20161123564025)(20161123562025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HK2PR0601MB1873; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HK2PR0601MB1873; X-Forefront-PRVS: 0417A3FFD2 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(7370300001)(6009001)(39860400002)(199003)(189002)(6116002)(105586002)(83506001)(47776003)(66066001)(69596002)(36756003)(97736004)(5660300001)(4001350100001)(54906002)(305945005)(86362001)(7736002)(23726003)(33646002)(50986999)(53936002)(106356001)(68736007)(3846002)(110136004)(8676002)(101416001)(4326008)(54356999)(53416004)(25786009)(42186005)(81166006)(189998001)(7350300001)(2906002)(50466002)(81156014)(478600001)(6916009)(6486002)(142923001)(21314002)(16060500001)(309714004); DIR:OUT; SFP:1102; SCL:1; SRVR:HK2PR0601MB1873; H:morimoto-PC.renesas.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HK2PR0601MB1873; 23:YVcxx8UCFcBgubGlku/q4za89XDtnterISv14Vl?= =?us-ascii?Q?Zy0WfYnUlO3UCdFvfas4XVrcLmxwpSqytZZvf0C9fil7qXLrRC7sX0uK5QjL?= =?us-ascii?Q?Z/CKCa4HY5Z+l6YjuSlgicAJtfMvQnF9zwXA25ScbXimNMRc2iNqSmGCNtxh?= =?us-ascii?Q?5r/rQx0IBMaeHNES1gYtJq+8F4uyQ5rIBGSPZwdt8++PXwql0vBkKx/6LMtt?= =?us-ascii?Q?hRH8dGK9ZS5tED7sLc92AW3YXsArWctOLeMDUGY53MTg2aqCyL4z57iRpeN5?= =?us-ascii?Q?6WeQZT8jQJh56N/8afTi6lf+mFJbQ+4OHAmeds84Pui32+5CZA2KG7Ypn5TU?= =?us-ascii?Q?wTDTpFr/QKw+smy6WqdvXbPSMPklWg3ILHFkHCoJ+OMYWwxdHCQliudsFfu1?= =?us-ascii?Q?MiTksQhuKKBBtpQabcHh8UD1IJsghtLtf7+lNEItU3iMmtpsciLsUCnTmztw?= =?us-ascii?Q?ObBF5+NXxD+LVizQLJVcEo1nRK84QFd1DLwTIGe0Vkk0Io0xBx+6mjNu4/YN?= =?us-ascii?Q?B3hgdI5/ph5vYqDUOgSApQpIDiK84UDhqW5RuJvxgIw3tfaSGIwWXwjNgHxo?= =?us-ascii?Q?YOp9rfJNUPXoCIjrkATfpz2UWa+Uclto1gRVh2qjbv7QceAq+Ta6hhBMIhpu?= =?us-ascii?Q?D+Fa5vQyJH5Ka7+l5eh3yYGBf9XOZHkQr5DcitgRwAphNGwYAXSTrNn7l9bE?= =?us-ascii?Q?G1Z0zzsXYJA3LvTAd5tXYss2AwBPVOA4+6EWCm8XtX8kly+NJFBUqq+4zi1v?= =?us-ascii?Q?OqYaBI6vagUXvo1BOCIF4OmLKJbW+xGCNijQmnjuGuhSpn/pqq8T2SNOhdtY?= =?us-ascii?Q?3ExJe1bJXlFXNN5m1OFO1Pf4VO/iKe3xWvYb5HLRsy22qAicuk9w4uqEoLd5?= =?us-ascii?Q?fI0BlY387SokNJLUJJw7kLxPZ1uW72ItHIrU6ug1cv1upkQ6p1aHb/3C6G+h?= =?us-ascii?Q?thct6QgChotLLzXp6Z8SY1p6DRdKD9yYp0i5l2jqikFuIk18QR+fSXaqCRyR?= =?us-ascii?Q?HzkpsFwUp0Hx14gCl20ui45VqojPk27goMouv18eyAX/Y7foDQ6xXD68JpmO?= =?us-ascii?Q?436Dl4eLPOfwRP3FzVWHyhHPyi3ySF1BxohGKRyh+p0h6wpmJr0W7TuaauH9?= =?us-ascii?Q?g7kAbbhHjAEYUOehjhFzNIcNg8mbyp0IPcMHLLPdh6qXo6PhvwU2rY9c/XeG?= =?us-ascii?Q?8RW4baHn3Fzik3/w=3D?= X-Microsoft-Exchange-Diagnostics: 1; HK2PR0601MB1873; 6:szIZAPuGWfw3cL3MymUUsJgsrkpBAslJjE1PVSWsjmQvGYZDa+BJEP0sq0LATco+jorBlCdqP7MPs07Imr1aL6gH7s4JSOhCniG1PLGl+XcTF/Pk9FYoSKHeqo8D+aIJHDuAdvuhZPQvG2fXv9cosSNsIH+IJsUSXK3ODKlAuw9AQglUrqLQIuoA/z/f1nyD35iui0hBkuNFzNub8aKqeYZCFvo9rV2Tx9P+uOgD0+VxXWzoKpdlsJzMDRsv4qIKRIj7kYYmkRFgc2blPTvEQS+8SS8ZUmFopUOIQxNbuSk4woU0ttr38QUpoCBpRc8JELONC6dyIqvUj/7hYJyUyA==; 5:PEh8yz82VMFtIFWDI7nyFEKoS6tx8Why+l9P6/HBjjpUnnG6VcLIUJ/u0XQjrydzBrM8G+AJkQa1Rvtq18rEoARxggDseRarM5GpxQwXudj8U+18B81wgrfewsj0IYvzRGo2DmZsI3WaWg/WMjSWfg==; 24:6DYMq9LnReMdO+Myzd92HEQ/hbuk/ji2yWG2RGHnn2tnkH5ZWYyasGA1NtsevFtSItm6TQK8dZtz1n1yEfPMuQJxb0AxiS6WSDPsPNGdDag=; 7:cMajP2f/t5HU6BO/1ws6W4whaAhDSZxVUOG9t/BnLV/66h7rq8KtKWGClyDz4zco2/oqSuWxI0HvepbGbvPmdmGN19eddPLBTRiQeFIdAVWOjvj/eb8/KIFfnoHow5RazFotLJENBg9KhuVfFhno73xNbQx8FZBVAdIGVi1fwh3ijQjOKcP/i3l0h0lJszyPPluJI1ynLO5cHOvOAvQLsLKbRjMmmj6gHy0pCjGI5Ws= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HK2PR0601MB1873; 20:hc7bNsLYUBgo/1dVmKVRmtV9k/b9mhAR/+lCC2gOjmCi6WNkEN1oBvNhDjhubrkVDrCMTphuw8BXWq1gj2H6W11FHPNp4J921mGQ7T541I19WYyVuV97Zr1sTnYq7SkHYTzXWkE25mcASI4gtMQ2tMqGbTwsrgx4dusIacvCrDU= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2017 04:34:48.1096 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2PR0601MB1873 Cc: Linux-ALSA , Simon Subject: [alsa-devel] [PATCH] ASoC: rsnd: stop all working stream when .remove 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 From: Kuninori Morimoto Driver should stop all working stream when .remove timing. Current Renesas sound driver is assuming that all stream was stopped when .remove but it was wrong. This patch stops all working stream when .remove, otherwise kernel will get damage for example in below case. Special thanks to Truong, Hiep > cd /sys/bus/platform/drivers/rcar_sound > aplay xxx.wav & > echo ec500000.sound > unbind Reported-by: Hiep Cao Minh Signed-off-by: Kuninori Morimoto --- sound/soc/sh/rcar/core.c | 68 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c index 1071332..1bf472f 100644 --- a/sound/soc/sh/rcar/core.c +++ b/sound/soc/sh/rcar/core.c @@ -197,12 +197,6 @@ void rsnd_mod_interrupt(struct rsnd_mod *mod, } } -int rsnd_io_is_working(struct rsnd_dai_stream *io) -{ - /* see rsnd_dai_stream_init/quit() */ - return !!io->substream; -} - int rsnd_runtime_channel_original(struct rsnd_dai_stream *io) { struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); @@ -610,20 +604,24 @@ struct rsnd_dai_stream *rsnd_rdai_to_io(struct rsnd_dai *rdai, return &rdai->capture; } -static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd, - struct snd_soc_dai *dai) +int rsnd_io_is_working(struct rsnd_dai_stream *io) +{ + /* see rsnd_dai_stream_init/quit() */ + return !!io->substream; +} + +#define rsnd_io_start(priv, io, sub) rsnd_io_operation(priv, io, sub) +#define rsnd_io_stop(priv, io) rsnd_io_operation(priv, io, NULL) +static int rsnd_io_operation(struct rsnd_priv *priv, + struct rsnd_dai_stream *io, + struct snd_pcm_substream *substream) { - struct rsnd_priv *priv = rsnd_dai_to_priv(dai); - struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai); - struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); int ret; unsigned long flags; spin_lock_irqsave(&priv->lock, flags); - switch (cmd) { - case SNDRV_PCM_TRIGGER_START: - case SNDRV_PCM_TRIGGER_RESUME: + if (substream) { rsnd_dai_stream_init(io, substream); ret = rsnd_dai_call(init, io, priv); @@ -638,9 +636,7 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd, if (ret < 0) goto dai_trigger_end; - break; - case SNDRV_PCM_TRIGGER_STOP: - case SNDRV_PCM_TRIGGER_SUSPEND: + } else { ret = rsnd_dai_call(irq, io, priv, 0); ret |= rsnd_dai_call(stop, io, priv); @@ -648,9 +644,6 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd, ret |= rsnd_dai_call(quit, io, priv); rsnd_dai_stream_quit(io); - break; - default: - ret = -EINVAL; } dai_trigger_end: @@ -659,6 +652,30 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd, return ret; } +static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd, + struct snd_soc_dai *dai) +{ + struct rsnd_priv *priv = rsnd_dai_to_priv(dai); + struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai); + struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); + int ret; + + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + case SNDRV_PCM_TRIGGER_RESUME: + ret = rsnd_io_start(priv, io, substream); + break; + case SNDRV_PCM_TRIGGER_STOP: + case SNDRV_PCM_TRIGGER_SUSPEND: + ret = rsnd_io_stop(priv, io); + break; + default: + ret = -EINVAL; + } + + return ret; +} + static int rsnd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) { struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai); @@ -1477,6 +1494,17 @@ static int rsnd_remove(struct platform_device *pdev) }; int ret = 0, i; + /* + * Stop all working io + */ + for_each_rsnd_dai(rdai, priv, i) { + if (rsnd_io_is_working(&rdai->playback)) + rsnd_io_stop(priv, &rdai->playback); + + if (rsnd_io_is_working(&rdai->capture)) + rsnd_io_stop(priv, &rdai->capture); + } + pm_runtime_disable(&pdev->dev); for_each_rsnd_dai(rdai, priv, i) {