From patchwork Thu Feb 8 23:14:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 198671 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:50ea:b0:106:860b:bbdd with SMTP id r10csp517878dyd; Thu, 8 Feb 2024 15:34:35 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVRstTu5pbWkKhrY4pshU97O3V0eWrRsQp3iTFAxxQ1olwEPW9ZdlU17pJK/VpjNWYyUJycUmjAuyj0xAIDZ414xFtc8w== X-Google-Smtp-Source: AGHT+IF6iifF1ZWMPkSWPV42LvQ7BEXtK4MQ59/eIEQhsuJrRYQHwG4ZAprBR9C5NkOwWvROR89+ X-Received: by 2002:a05:6a20:9c8b:b0:19c:b1f0:9848 with SMTP id mj11-20020a056a209c8b00b0019cb1f09848mr178175pzb.7.1707435275285; Thu, 08 Feb 2024 15:34:35 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707435275; cv=pass; d=google.com; s=arc-20160816; b=PwV4UMVpFdMX0BwIq/4Qy1hx0QRClfJkFdlkCTTqtChE3BGY2x4qXWCPu5uwSITiiR vR53cBALpzTemlDcM8amBVL8sq4AhXL/o+EAdqtjJCmXxNLPxZvRNnOYIV6cJ2AR5M4Z iqBU9ISdjNvFW1khSBILElwyN+i2E4AKePmZz+OTus6TaMkbT+PfB28yDM89GstriXyC jiNpwPwAUYXY9LrhDC62EyyAel2T7PdItiC2vG+TePsIDd6XOUQ1tSVhKT9YmuHOOnTi fnbeH+VlEoWu1lxK1OYw56+oWAZ2Gh92c6KcZR+pVj8FEDrb0QdEzHol3EluEQ3cpnuL MQOw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1gKa8uPfE60yWjTTUplQLsTc6cS2VTs4IFAWikb6MkA=; fh=A2cejPMO12NxPXXAaxqALMtJAD/RfzJwxipbd++qiRg=; b=BUCLEIir1Kxwa0Y1aCiqTNAWvw7Hz17VK3ZLPkp6v7fORBXiZak5rQKpD97E3Gl+l3 xQEJyld7MOXw16qUjGIvJ5eSfQbseTroxG70vSBO1VD6wfQ4L8YXUGRtVlNqaYPeevge DIouuOp9A7hgJRKktL3qexX1WUHJGxpJjnFFVnT3V0ZOB+/7qwhzLRV3uU5nVq39B52x Zfjvlb5a6hdeZLIpRjAG546OKkEpPfWNtrI4kl67n3OciQjiG5XhAEobUa2T9jw4sosc cbMfUpsyqXX+HzfKTXhgyl5KMholrR54gAOQqZrMSXFfkatE6lcAvUowiUohscW+1HXs FbrQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=mwfLJ32a; arc=pass (i=1 spf=pass spfdomain=quicinc.com dkim=pass dkdomain=quicinc.com dmarc=pass fromdomain=quicinc.com); spf=pass (google.com: domain of linux-kernel+bounces-58846-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-58846-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com X-Forwarded-Encrypted: i=2; AJvYcCWotAhzNCMtu4HM1sqVe5lTWgvC+pQKayzW64FuqMb6NOcadZmUrLiXKdh+oCLBp6ajw5s5zEebGmrTyDJPThOz7dH2UQ== Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id ch9-20020a056a0208c900b005dc4f8a376asi666941pgb.884.2024.02.08.15.34.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Feb 2024 15:34:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-58846-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=mwfLJ32a; arc=pass (i=1 spf=pass spfdomain=quicinc.com dkim=pass dkdomain=quicinc.com dmarc=pass fromdomain=quicinc.com); spf=pass (google.com: domain of linux-kernel+bounces-58846-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-58846-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 86BEE284F91 for ; Thu, 8 Feb 2024 23:34:18 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3643A5026F; Thu, 8 Feb 2024 23:15:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="mwfLJ32a" Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9318554FAE; Thu, 8 Feb 2024 23:14:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707434091; cv=none; b=UjQ/4cigmoxALhEgphFDLbTcE4SsWeKp1HW7/jA+jleuWC3VCE4jl2JUSED/eFhrZu0vU8e+pUSCeTIalRkCeaThKyjDHdRJOT6kvo8CU24s2SgmMMdBbcIhMk5H2Ekh1UKOys1NOaJqKXDEEZTLfIRHgBtfDdxBwOYDWKKN2VI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707434091; c=relaxed/simple; bh=GgnICuH7GHv7SDlK6A+NlCN2HhLTGdZZc+5NwsH4lPE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jEfqeenfXpr+BDKKy1XKcawmAO0EqHn0iGOTKPkR9sKGYTTZTFP3geXtgkulutrMBJYROudA0p9T9yev9Y+cbPL/mg4T38Qu8l3eICd3U4lN6SldUMNTmra3wlRhKd31AChAJnjUUIEsBg6y1sk0eVN42JpZkjAxNIZo3mh/YJU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=quicinc.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=mwfLJ32a; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=quicinc.com Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 418Mm7mG001429; Thu, 8 Feb 2024 23:14:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=qcppdkim1; bh=1gKa8uPfE60yWjTTUplQ LsTc6cS2VTs4IFAWikb6MkA=; b=mwfLJ32a4WxDD8ch1RYJpsy4UMZ4f+PZ9CA6 z8NvoUbW75E1ZuaJDoECFUrq5jjXTfm0HLbjGR0sVyczbOjdjlJdPMpK9mwjRFNG hOfbjn0wg17yYu//58hJTj9btCimJClWaA7yZlWdiiyMwBxrXM0sgniN/yKfN2wu k8yUcQMgdYMYwKMs2MrJLF+WoKmhuhNQrnW0KWDdur+6qhpeEwsGKWml3T+h6PZj rbKANA8cD/itgRdfdLzxdxAdZDE6ig6gCSauCq3cNTsDKxIVpiELsyO5ryS2Gyrz fKyuYO0bMtr/FSl2wceiAy5VtVhFsWu5b8aY3/jYzqzO+J2RtA== Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3w4frwujuc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 Feb 2024 23:14:31 +0000 (GMT) Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 418NEUwB005652 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 8 Feb 2024 23:14:30 GMT Received: from hu-wcheng-lv.qualcomm.com (10.49.16.6) by nalasex01b.na.qualcomm.com (10.47.209.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Thu, 8 Feb 2024 15:14:29 -0800 From: Wesley Cheng To: , , , , , , , , , , , , , , CC: , , , , , , , Wesley Cheng Subject: [PATCH v14 51/53] ASoC: usb: Rediscover USB SND devices on USB port add Date: Thu, 8 Feb 2024 15:14:04 -0800 Message-ID: <20240208231406.27397-52-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240208231406.27397-1-quic_wcheng@quicinc.com> References: <20240208231406.27397-1-quic_wcheng@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: nalasex01c.na.qualcomm.com (10.47.97.35) To nalasex01b.na.qualcomm.com (10.47.209.197) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: L9tl1Hi6qOSqUvYvy-6cEpxSLUX6F09w X-Proofpoint-GUID: L9tl1Hi6qOSqUvYvy-6cEpxSLUX6F09w X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-08_11,2024-02-08_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 spamscore=0 suspectscore=0 bulkscore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 mlxlogscore=999 adultscore=0 priorityscore=1501 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2401310000 definitions=main-2402080131 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790375651283685473 X-GMAIL-MSGID: 1790375651283685473 In case the USB backend device has not been initialized/probed, USB SND device connections can still occur. When the USB backend is eventually made available, previous USB SND device connections are not communicated to the USB backend. Call snd_usb_rediscover_devices() to generate the connect callbacks for all USB SND devices connected. This will allow for the USB backend to be updated with the current set of devices available. The chip array entries are all populated and removed while under the register_mutex, so going over potential race conditions: Thread#1: q6usb_component_probe() --> snd_soc_usb_add_port() --> snd_usb_rediscover_devices() --> mutex_lock(register_mutex) Thread#2 --> usb_audio_disconnect() --> mutex_lock(register_mutex) So either thread#1 or thread#2 will complete first. If Thread#1 completes before thread#2: SOC USB will notify DPCM backend of the device connection. Shortly after, once thread#2 runs, we will get a disconnect event for the connected device. Thread#2 completes before thread#1: Then during snd_usb_rediscover_devices() it won't notify of any connection for that particular chip index. Signed-off-by: Wesley Cheng --- sound/soc/soc-usb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sound/soc/soc-usb.c b/sound/soc/soc-usb.c index dfd6f53898c5..4d6d6ab0601f 100644 --- a/sound/soc/soc-usb.c +++ b/sound/soc/soc-usb.c @@ -437,6 +437,8 @@ int snd_soc_usb_add_port(struct snd_soc_usb *usb) list_add_tail(&usb->list, &usb_ctx_list); mutex_unlock(&ctx_mutex); + snd_usb_rediscover_devices(); + return 0; } EXPORT_SYMBOL_GPL(snd_soc_usb_add_port);