From nobody Sun Feb 8 10:46:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01F24C54EBE for ; Fri, 13 Jan 2023 09:35:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241201AbjAMJe6 (ORCPT ); Fri, 13 Jan 2023 04:34:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55070 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241268AbjAMJbr (ORCPT ); Fri, 13 Jan 2023 04:31:47 -0500 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 34CE618E3E for ; Fri, 13 Jan 2023 01:27:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673602042; x=1705138042; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Msf7Ux2UBgkRWznDZIyNsLYT/We1sSSckwpIyVPyhL0=; b=k24CFPF0XV7d/QY7jk9Y7m/SwipZm4ZoGDLF2LWB2V0XA5kxz86fNYT0 NXb7Qxh1ruAOLJrYuAMK8uX/9IeFxb8wcmyyN3qbQclBzqe6EJxEmNMx2 TJf3utOcIOH9GIEdIhPBXO8RCetvyp1Ig/ulnpPLk/koXetjfxOZvRVtI Ovr2PnXjEagTEbajO0jUEnt/JUWlFDba6YMkEQ3Knrw/DCyhUbLV1u+xA qrcgzHInxJx5vydO9kRDF0OSULqwhksyYyN5GhxL+fiL/jzKJxza1EyQH 5BOYeukBWBhWDSZlRu2a54Oiy1/Oe4ap/QJ5kw0v/NmYHIKBPyF0TmIal g==; X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="351189434" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="351189434" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:21 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="608116087" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="608116087" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:20 -0800 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.intel.com, bard.liao@intel.com Subject: [PATCH 1/5] soundwire: stream: uniquify dev_err() logs Date: Fri, 13 Jan 2023 17:35:28 +0800 Message-Id: <20230113093532.3872113-2-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> References: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Pierre-Louis Bossart There are a couple of duplicate logs which makes harder than needed to follow the error flows. Add __func__ or make the log unique. Signed-off-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Signed-off-by: Bard Liao --- drivers/soundwire/stream.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c index df3b36670df4..e0eae0b98267 100644 --- a/drivers/soundwire/stream.c +++ b/drivers/soundwire/stream.c @@ -1389,7 +1389,7 @@ static int _sdw_prepare_stream(struct sdw_stream_runt= ime *stream, =20 ret =3D do_bank_switch(stream); if (ret < 0) { - dev_err(bus->dev, "Bank switch failed: %d\n", ret); + dev_err(bus->dev, "do_bank_switch failed: %d\n", ret); goto restore_params; } =20 @@ -1477,7 +1477,7 @@ static int _sdw_enable_stream(struct sdw_stream_runti= me *stream) /* Program params */ ret =3D sdw_program_params(bus, false); if (ret < 0) { - dev_err(bus->dev, "Program params failed: %d\n", ret); + dev_err(bus->dev, "%s: Program params failed: %d\n", __func__, ret); return ret; } =20 @@ -1567,7 +1567,7 @@ static int _sdw_disable_stream(struct sdw_stream_runt= ime *stream) /* Program params */ ret =3D sdw_program_params(bus, false); if (ret < 0) { - dev_err(bus->dev, "Program params failed: %d\n", ret); + dev_err(bus->dev, "%s: Program params failed: %d\n", __func__, ret); return ret; } } @@ -1664,7 +1664,7 @@ static int _sdw_deprepare_stream(struct sdw_stream_ru= ntime *stream) /* Program params */ ret =3D sdw_program_params(bus, false); if (ret < 0) { - dev_err(bus->dev, "Program params failed: %d\n", ret); + dev_err(bus->dev, "%s: Program params failed: %d\n", __func__, ret); return ret; } } @@ -1893,7 +1893,8 @@ int sdw_stream_add_master(struct sdw_bus *bus, =20 m_rt =3D sdw_master_rt_alloc(bus, stream); if (!m_rt) { - dev_err(bus->dev, "Master runtime alloc failed for stream:%s\n", stream-= >name); + dev_err(bus->dev, "%s: Master runtime alloc failed for stream:%s\n", + __func__, stream->name); ret =3D -ENOMEM; goto unlock; } @@ -2012,7 +2013,8 @@ int sdw_stream_add_slave(struct sdw_slave *slave, */ m_rt =3D sdw_master_rt_alloc(slave->bus, stream); if (!m_rt) { - dev_err(&slave->dev, "Master runtime alloc failed for stream:%s\n", stre= am->name); + dev_err(&slave->dev, "%s: Master runtime alloc failed for stream:%s\n", + __func__, stream->name); ret =3D -ENOMEM; goto unlock; } --=20 2.25.1 From nobody Sun Feb 8 10:46:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 602F8C54EBD for ; Fri, 13 Jan 2023 09:34:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240835AbjAMJeV (ORCPT ); Fri, 13 Jan 2023 04:34:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60372 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241274AbjAMJb6 (ORCPT ); Fri, 13 Jan 2023 04:31:58 -0500 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C87665AEE for ; Fri, 13 Jan 2023 01:27:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673602044; x=1705138044; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=C9eEbKq5usd6ckHzGy5EN+JxgZQpOybLQsyYvmgo4Hg=; b=gyZSANpiOtOXk23IyjUnV455ZzTIC6pixeJbeROaiKKn60e47LitZZ5C LDa7M38ObG1FasYiFZSIGuguZZAn5C54R8K9afQ1G6q2iMsRa1oEapDN1 wEzpESZcrtexSpF2u20F7qC93aP18uhUgDpjxG74pcFDCHxpb/4bdBeiX Kzk4QVm2n4SVmITNInkxxve3Qa1Qdw9tt9UIg5KS7AifZ+wr55xppTA8v y5WOYVy9h50/N+A2QdBmdJIRXoknSexl1Q1hYgj+ool8Dhja4z/jIFxC2 WSVjn1JhFKG3gCBdv9D/02LoDrJEbyo/fhRQgqX/gwPAg/ZCtQC0Wqlzs Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="351189439" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="351189439" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:23 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="608116093" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="608116093" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:22 -0800 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.intel.com, bard.liao@intel.com Subject: [PATCH 2/5] soundwire: stream: use consistent pattern for freeing buffers Date: Fri, 13 Jan 2023 17:35:29 +0800 Message-Id: <20230113093532.3872113-3-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> References: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Pierre-Louis Bossart The code should free the message buffer used for data, the message structure used for control and assign the latter to NULL. The last part is missing for multi-link cases, and the order is inconsistent for single-link cases. Link: https://github.com/thesofproject/linux/issues/4056 Signed-off-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Signed-off-by: Bard Liao --- drivers/soundwire/stream.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c index e0eae0b98267..f27bd37b154d 100644 --- a/drivers/soundwire/stream.c +++ b/drivers/soundwire/stream.c @@ -723,8 +723,8 @@ static int sdw_bank_switch(struct sdw_bus *bus, int m_r= t_count) } =20 if (!multi_link) { - kfree(wr_msg); kfree(wbuf); + kfree(wr_msg); bus->defer_msg.msg =3D NULL; bus->params.curr_bank =3D !bus->params.curr_bank; bus->params.next_bank =3D !bus->params.next_bank; @@ -769,6 +769,7 @@ static int sdw_ml_sync_bank_switch(struct sdw_bus *bus) if (bus->defer_msg.msg) { kfree(bus->defer_msg.msg->buf); kfree(bus->defer_msg.msg); + bus->defer_msg.msg =3D NULL; } =20 return 0; @@ -867,6 +868,7 @@ static int do_bank_switch(struct sdw_stream_runtime *st= ream) if (bus->defer_msg.msg) { kfree(bus->defer_msg.msg->buf); kfree(bus->defer_msg.msg); + bus->defer_msg.msg =3D NULL; } } =20 --=20 2.25.1 From nobody Sun Feb 8 10:46:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4C0BAC54EBD for ; Fri, 13 Jan 2023 09:34:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240832AbjAMJeR (ORCPT ); Fri, 13 Jan 2023 04:34:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55078 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241280AbjAMJcG (ORCPT ); Fri, 13 Jan 2023 04:32:06 -0500 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EBDEE10AC for ; Fri, 13 Jan 2023 01:27:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673602061; x=1705138061; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7vfmYiwRnIv7Am96c9Qj/RTB4F0doxF2OEQMmfScbOc=; b=TfF+qpQqcLbIKZKlahkWop7ICQyduXmyTc0PgWxJMF4CjDKwiBUM13Uz Z6jBnRUfYZWJljfJo0lgk+d0Nrd5vM4X4H1Gf4ved/Irh71MrB+wu405F NCACY7kZ3h+3v4zPqlsNwerOUM1Fpce6ZGx4lx8rw9FrhzVx8ZsdAp14m 3FCusMgkMGjSce0/JyuXccLLCa+ntvtsyFTCxRccVmr60V2eZHjuDd43u rOXtv1WL2o47slBL7w3WG3W4rfkG4peHxaX/oOoM+Dr7ez/Y0po73Wc1F wZGosXMQkJG6i89nJkyrUtPriMBUHeE5xOHZ8Rhnaf4QD9NPX/rYPrIzp g==; X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="351189449" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="351189449" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:25 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="608116104" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="608116104" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:23 -0800 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.intel.com, bard.liao@intel.com Subject: [PATCH 3/5] soundwire: bus: remove sdw_defer argument in sdw_transfer_defer() Date: Fri, 13 Jan 2023 17:35:30 +0800 Message-Id: <20230113093532.3872113-4-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> References: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Pierre-Louis Bossart There's no point in passing an argument that is a pointer to a bus member. We can directly get the member and do an indirection when needed. This is a first step before simplifying the hardware-specific callbacks further. Signed-off-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Signed-off-by: Bard Liao --- drivers/soundwire/bus.c | 10 ++++------ drivers/soundwire/bus.h | 3 +-- drivers/soundwire/stream.c | 4 +--- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index 633d411b64f3..572cc9a9af41 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -225,9 +225,9 @@ static inline int do_transfer(struct sdw_bus *bus, stru= ct sdw_msg *msg) } =20 static inline int do_transfer_defer(struct sdw_bus *bus, - struct sdw_msg *msg, - struct sdw_defer *defer) + struct sdw_msg *msg) { + struct sdw_defer *defer =3D &bus->defer_msg; int retry =3D bus->prop.err_threshold; enum sdw_command_response resp; int ret =3D 0, i; @@ -335,19 +335,17 @@ EXPORT_SYMBOL(sdw_show_ping_status); * sdw_transfer_defer() - Asynchronously transfer message to a SDW Slave d= evice * @bus: SDW bus * @msg: SDW message to be xfered - * @defer: Defer block for signal completion * * Caller needs to hold the msg_lock lock while calling this */ -int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg, - struct sdw_defer *defer) +int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg) { int ret; =20 if (!bus->ops->xfer_msg_defer) return -ENOTSUPP; =20 - ret =3D do_transfer_defer(bus, msg, defer); + ret =3D do_transfer_defer(bus, msg); if (ret !=3D 0 && ret !=3D -ENODATA) dev_err(bus->dev, "Defer trf on Slave %d failed:%d\n", msg->dev_num, ret); diff --git a/drivers/soundwire/bus.h b/drivers/soundwire/bus.h index 7631ef5e71fb..96927a143796 100644 --- a/drivers/soundwire/bus.h +++ b/drivers/soundwire/bus.h @@ -151,8 +151,7 @@ int sdw_configure_dpn_intr(struct sdw_slave *slave, int= port, bool enable, int mask); =20 int sdw_transfer(struct sdw_bus *bus, struct sdw_msg *msg); -int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg, - struct sdw_defer *defer); +int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg); =20 #define SDW_READ_INTR_CLEAR_RETRY 10 =20 diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c index f27bd37b154d..e0b0c63fc55c 100644 --- a/drivers/soundwire/stream.c +++ b/drivers/soundwire/stream.c @@ -684,8 +684,6 @@ static int sdw_bank_switch(struct sdw_bus *bus, int m_r= t_count) if (!wr_msg) return -ENOMEM; =20 - bus->defer_msg.msg =3D wr_msg; - wbuf =3D kzalloc(sizeof(*wbuf), GFP_KERNEL); if (!wbuf) { ret =3D -ENOMEM; @@ -713,7 +711,7 @@ static int sdw_bank_switch(struct sdw_bus *bus, int m_r= t_count) multi_link =3D bus->multi_link && (m_rt_count >=3D bus->hw_sync_min_links= ); =20 if (multi_link) - ret =3D sdw_transfer_defer(bus, wr_msg, &bus->defer_msg); + ret =3D sdw_transfer_defer(bus, wr_msg); else ret =3D sdw_transfer(bus, wr_msg); =20 --=20 2.25.1 From nobody Sun Feb 8 10:46:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 49DB5C54EBE for ; Fri, 13 Jan 2023 09:34:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241106AbjAMJep (ORCPT ); Fri, 13 Jan 2023 04:34:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241284AbjAMJcG (ORCPT ); Fri, 13 Jan 2023 04:32:06 -0500 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 122C413DD0 for ; Fri, 13 Jan 2023 01:27:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673602063; x=1705138063; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9EfKDqwT5iUG/3vSHRo63HrB7tHmjW3+OTAvgNE6xiU=; b=n7G1N+tS+3lXujxLMwvBETmK3jc2vYdAvCqCxbJLKl7yJZ0y4bBL0a2q Z7Kuwng71E5qisgyoJEvHwOtMR4UBxhMRi97Rj74vNTWTLOxmDozZhOlv s8Ar9TrpXoJO6V90SKDnXIZkeOPQ06NAq2yqbD/i1IeUIbcZu6M0TaSsp IxEisixhNXUPfpbW2vxpmVFFHjHGt8wzuTWgQfoirf7B4Ne66hYgvksRL MAFYmYguU3/qU5JvmBeGykOPyRWLp8LbNbGpZhkHESZGYcQOQ58aCEEZ9 nnjg/iMGioSYHPe1pkN664yzQP35TRzTuODp+r7ZGhl6ZvYSXlRiEYTBH A==; X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="351189461" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="351189461" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:27 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="608116112" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="608116112" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:25 -0800 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.intel.com, bard.liao@intel.com Subject: [PATCH 4/5] soundwire: cadence: use directly bus sdw_defer structure Date: Fri, 13 Jan 2023 17:35:31 +0800 Message-Id: <20230113093532.3872113-5-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> References: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Pierre-Louis Bossart Copying the bus sdw_defer structure into the Cadence internals leads to using stale pointers and kernel oopses on errors. It's just simpler and safer to use the bus sdw_defer structure directly. Link: https://github.com/thesofproject/linux/issues/4056 Signed-off-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Signed-off-by: Bard Liao --- drivers/soundwire/bus.c | 2 +- drivers/soundwire/cadence_master.c | 17 ++++++++--------- drivers/soundwire/cadence_master.h | 5 +---- include/linux/soundwire/sdw.h | 3 +-- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index 572cc9a9af41..fc192d0c61e7 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -237,7 +237,7 @@ static inline int do_transfer_defer(struct sdw_bus *bus, init_completion(&defer->complete); =20 for (i =3D 0; i <=3D retry; i++) { - resp =3D bus->ops->xfer_msg_defer(bus, msg, defer); + resp =3D bus->ops->xfer_msg_defer(bus, msg); ret =3D find_response_code(resp); /* if cmd is ok or ignored return */ if (ret =3D=3D 0 || ret =3D=3D -ENODATA) diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence= _master.c index 521387322145..2365395cb181 100644 --- a/drivers/soundwire/cadence_master.c +++ b/drivers/soundwire/cadence_master.c @@ -750,7 +750,7 @@ EXPORT_SYMBOL(cdns_xfer_msg); =20 enum sdw_command_response cdns_xfer_msg_defer(struct sdw_bus *bus, - struct sdw_msg *msg, struct sdw_defer *defer) + struct sdw_msg *msg) { struct sdw_cdns *cdns =3D bus_to_cdns(bus); int cmd =3D 0, ret; @@ -763,9 +763,6 @@ cdns_xfer_msg_defer(struct sdw_bus *bus, if (ret) return SDW_CMD_FAIL_OTHER; =20 - cdns->defer =3D defer; - cdns->defer->length =3D msg->len; - return _cdns_xfer_msg(cdns, msg, cmd, 0, msg->len, true); } EXPORT_SYMBOL(cdns_xfer_msg_defer); @@ -893,13 +890,15 @@ irqreturn_t sdw_cdns_irq(int irq, void *dev_id) return IRQ_NONE; =20 if (int_status & CDNS_MCP_INT_RX_WL) { + struct sdw_bus *bus =3D &cdns->bus; + struct sdw_defer *defer =3D &bus->defer_msg; + cdns_read_response(cdns); =20 - if (cdns->defer) { - cdns_fill_msg_resp(cdns, cdns->defer->msg, - cdns->defer->length, 0); - complete(&cdns->defer->complete); - cdns->defer =3D NULL; + if (defer && defer->msg) { + cdns_fill_msg_resp(cdns, defer->msg, + defer->length, 0); + complete(&defer->complete); } else { complete(&cdns->tx_complete); } diff --git a/drivers/soundwire/cadence_master.h b/drivers/soundwire/cadence= _master.h index fa9dc38264a4..53029d22822d 100644 --- a/drivers/soundwire/cadence_master.h +++ b/drivers/soundwire/cadence_master.h @@ -109,7 +109,6 @@ struct sdw_cdns_dai_runtime { * @instance: instance number * @response_buf: SoundWire response buffer * @tx_complete: Tx completion - * @defer: Defer pointer * @ports: Data ports * @num_ports: Total number of data ports * @pcm: PCM streams @@ -130,7 +129,6 @@ struct sdw_cdns { u32 response_buf[CDNS_MCP_IP_MAX_CMD_LEN + 2]; =20 struct completion tx_complete; - struct sdw_defer *defer; =20 struct sdw_cdns_port *ports; int num_ports; @@ -189,8 +187,7 @@ enum sdw_command_response cdns_xfer_msg(struct sdw_bus *bus, struct sdw_msg *msg); =20 enum sdw_command_response -cdns_xfer_msg_defer(struct sdw_bus *bus, - struct sdw_msg *msg, struct sdw_defer *defer); +cdns_xfer_msg_defer(struct sdw_bus *bus, struct sdw_msg *msg); =20 u32 cdns_read_ping_status(struct sdw_bus *bus); =20 diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h index 3cd2a761911f..fb2bd1524a26 100644 --- a/include/linux/soundwire/sdw.h +++ b/include/linux/soundwire/sdw.h @@ -852,8 +852,7 @@ struct sdw_master_ops { enum sdw_command_response (*xfer_msg) (struct sdw_bus *bus, struct sdw_msg *msg); enum sdw_command_response (*xfer_msg_defer) - (struct sdw_bus *bus, struct sdw_msg *msg, - struct sdw_defer *defer); + (struct sdw_bus *bus, struct sdw_msg *msg); enum sdw_command_response (*reset_page_addr) (struct sdw_bus *bus, unsigned int dev_num); int (*set_bus_conf)(struct sdw_bus *bus, --=20 2.25.1 From nobody Sun Feb 8 10:46:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1A46C677F1 for ; Fri, 13 Jan 2023 09:34:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240902AbjAMJeY (ORCPT ); Fri, 13 Jan 2023 04:34:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241285AbjAMJcG (ORCPT ); Fri, 13 Jan 2023 04:32:06 -0500 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 794C11A805 for ; Fri, 13 Jan 2023 01:27:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673602063; x=1705138063; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vexI4bXkLQNgnzQp46b1BOfBvYLiQ1hk43f3ShONtl8=; b=CbIe5JZc4pCeAGbiD9qWOPmmq3FJ+HjYqcP2YHhCk9D8ZJ/vfIyQLpHf li9J7We9lrwsrSKHoIevR7/jE9bs7auVLl9x/PBnHe8HXT5Bleq41LjPl u1dhD95RWP8oJJYm4wteqNt1gjOl0ghBjpkMh9kFL+Uf8fQPbH83x48Bf A00MM5ikyWj5ktNWHDUvLycwHTZTHGawH0OHfsq3j7/68qwubtkQPqfVc 5EDD9gPobhNkJ15VUK3IdkV+kk/MewGzugrZ52K8xrm8d0LYYNK12JW28 dBUQ+m9u7JCvWJaQ04jVhE2JpChG4SRb7h25i3eM/+517EKTh1MOHfxVG g==; X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="351189473" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="351189473" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:29 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10588"; a="608116119" X-IronPort-AV: E=Sophos;i="5.97,213,1669104000"; d="scan'208";a="608116119" Received: from bard-ubuntu.sh.intel.com ([10.239.185.57]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2023 01:27:27 -0800 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.intel.com, bard.liao@intel.com Subject: [PATCH 5/5] soundwire: cadence: further simplify low-level xfer_msg_defer() callback Date: Fri, 13 Jan 2023 17:35:32 +0800 Message-Id: <20230113093532.3872113-6-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> References: <20230113093532.3872113-1-yung-chuan.liao@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Pierre-Louis Bossart The message pointer is already stored in the bus->defer structure, not need to pass it as an argument. Suggested-by: Ranjani Sridharan Signed-off-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Signed-off-by: Bard Liao --- drivers/soundwire/bus.c | 2 +- drivers/soundwire/cadence_master.c | 5 +++-- drivers/soundwire/cadence_master.h | 2 +- include/linux/soundwire/sdw.h | 5 +++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index fc192d0c61e7..ed94c92bc575 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -237,7 +237,7 @@ static inline int do_transfer_defer(struct sdw_bus *bus, init_completion(&defer->complete); =20 for (i =3D 0; i <=3D retry; i++) { - resp =3D bus->ops->xfer_msg_defer(bus, msg); + resp =3D bus->ops->xfer_msg_defer(bus); ret =3D find_response_code(resp); /* if cmd is ok or ignored return */ if (ret =3D=3D 0 || ret =3D=3D -ENODATA) diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence= _master.c index 2365395cb181..ece0ad89746f 100644 --- a/drivers/soundwire/cadence_master.c +++ b/drivers/soundwire/cadence_master.c @@ -749,10 +749,11 @@ cdns_xfer_msg(struct sdw_bus *bus, struct sdw_msg *ms= g) EXPORT_SYMBOL(cdns_xfer_msg); =20 enum sdw_command_response -cdns_xfer_msg_defer(struct sdw_bus *bus, - struct sdw_msg *msg) +cdns_xfer_msg_defer(struct sdw_bus *bus) { struct sdw_cdns *cdns =3D bus_to_cdns(bus); + struct sdw_defer *defer =3D &bus->defer_msg; + struct sdw_msg *msg =3D defer->msg; int cmd =3D 0, ret; =20 /* for defer only 1 message is supported */ diff --git a/drivers/soundwire/cadence_master.h b/drivers/soundwire/cadence= _master.h index 53029d22822d..63c58b9b1f59 100644 --- a/drivers/soundwire/cadence_master.h +++ b/drivers/soundwire/cadence_master.h @@ -187,7 +187,7 @@ enum sdw_command_response cdns_xfer_msg(struct sdw_bus *bus, struct sdw_msg *msg); =20 enum sdw_command_response -cdns_xfer_msg_defer(struct sdw_bus *bus, struct sdw_msg *msg); +cdns_xfer_msg_defer(struct sdw_bus *bus); =20 u32 cdns_read_ping_status(struct sdw_bus *bus); =20 diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h index fb2bd1524a26..86e320cf27b1 100644 --- a/include/linux/soundwire/sdw.h +++ b/include/linux/soundwire/sdw.h @@ -837,7 +837,8 @@ struct sdw_defer { * @read_prop: Read Master properties * @override_adr: Override value read from firmware (quirk for buggy firmw= are) * @xfer_msg: Transfer message callback - * @xfer_msg_defer: Defer version of transfer message callback + * @xfer_msg_defer: Defer version of transfer message callback. The messag= e is handled with the + * bus struct @sdw_defer * @reset_page_addr: Reset the SCP page address registers * @set_bus_conf: Set the bus configuration * @pre_bank_switch: Callback for pre bank switch @@ -852,7 +853,7 @@ struct sdw_master_ops { enum sdw_command_response (*xfer_msg) (struct sdw_bus *bus, struct sdw_msg *msg); enum sdw_command_response (*xfer_msg_defer) - (struct sdw_bus *bus, struct sdw_msg *msg); + (struct sdw_bus *bus); enum sdw_command_response (*reset_page_addr) (struct sdw_bus *bus, unsigned int dev_num); int (*set_bus_conf)(struct sdw_bus *bus, --=20 2.25.1