From patchwork Fri Apr 19 16:44:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Schrock X-Patchwork-Id: 13636613 Received: from mx0b-003ede02.pphosted.com (mx0b-003ede02.pphosted.com [205.220.181.153]) (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 823201350EC for ; Fri, 19 Apr 2024 16:46:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.181.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545179; cv=none; b=oIYba81UjybSo/+QiwwbrpGO39OZr4il5B6Tm01FnDsKruynjUUFbzMC91ae2nIZ1/sNVApTsd/+v2vpibeNCvXrByHi2n7YFpD+gGy6VGURghQel/v4PfO0W2CYdZ/tX/wTl2F6B4Z+1IWSTD9f1NmI5wNDjMzF1GCi9iL1NM4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545179; c=relaxed/simple; bh=wlVkHWGLEtxqZzBPmqg44lC5wAPkE0Tt7i/3XZ6Jb7k=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Content-Type; b=uJ7KvNq/mR86y+anGIokSn7fbYVQ8dMWfslAoDSazHqvJKlEGk8lIokx+Yyj/urUeehvu0b4QOg0r+jZF8+4e6Oi4g40Wj3vK8McQ7TcLv235oxcxNa3mr9QpL6BGi/Wnn1LHtAftW3QV4LVO7f4LCmSz36ACOs9IBz3d3G6VXE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com; spf=pass smtp.mailfrom=getcruise.com; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=ji8Zdcbg; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=jtwWBuTS; arc=none smtp.client-ip=205.220.181.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=getcruise.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="ji8Zdcbg"; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="jtwWBuTS" Received: from pps.filterd (m0286620.ppops.net [127.0.0.1]) by mx0b-003ede02.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 43JDTFiI025477 for ; Fri, 19 Apr 2024 09:46:16 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; h=from:to:cc:subject:date:message-id:mime-version:content-type; s=ppemail; bh=4opvaRce2wLYJ2GoG9XQDF4S4f8hRIBeW9vC5rJABCo=; b=j i8ZdcbgOSnH+qCvCUybMcBA6AD8qpWtErCM1YtqBVcaCTG1L4T/6BSTiAHdA1ZMA XN1FPpBUWy5q70LK7u8Lg/OXIHbO0GxdfjrOwLO5DV/lRD74PO1ZBw/782XWTwFf q0ypRuzGmV5JQO9MEbR+j7akV7BPNhe3dsQuacJzuoPkeNA0FCnjjYf2D//9THSd CGguS3VXB2DAJGetSf8Laz1zwOjHki8AeW5nthIUjsTXTSl0Ee3vGWDXXsbUjs7G DF9uVQ0xpLtoAmEpnLtGajYEOWQBrN9tfjdN9GiZi2l413joG9mP2SlZL5Wf8456 BVTngjZ+66bz3ECDRCPnA== Received: from mail-ot1-f71.google.com (mail-ot1-f71.google.com [209.85.210.71]) by mx0b-003ede02.pphosted.com (PPS) with ESMTPS id 3xhyq9twn1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Apr 2024 09:46:15 -0700 (PDT) Received: by mail-ot1-f71.google.com with SMTP id 46e09a7af769-6eb7f9e9482so2893049a34.1 for ; Fri, 19 Apr 2024 09:46:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; s=google; t=1713545174; x=1714149974; darn=lists.linux.dev; h=mime-version:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=4opvaRce2wLYJ2GoG9XQDF4S4f8hRIBeW9vC5rJABCo=; b=jtwWBuTS80rXPvgttr7Xei7Xw6A7uP9ZOoRBdXNgAFUFIHZKJ9Cq6lLXxOvdbUtiSE lVpycDdxmj805Z/mFEBcBVtBLdLpdWb5OfEE/MCU/w9OW812babuzFBUXHF6FLjGDgJ8 nspEmFuNpq1ZiHiUONJMDEadWeeTRstAzpIkdrXxcUeZ+WN+Zd0Q5YSc18m9XaH1dEkm RrhotCacjDzP0rFHKiFyTFFXvfcbM5p0J230t9+wD0M1t92v7JK06QFIVnuaeT0pLVBe 1N8SDmo6ehlvWikR6WKYbroVUgDTMBIV2Wuktn49PHWmioUPFpU/oXKg+Vf7irihD//0 PNfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713545174; x=1714149974; h=mime-version:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=4opvaRce2wLYJ2GoG9XQDF4S4f8hRIBeW9vC5rJABCo=; b=pFSfUvStI8GRctwrDVuZiaThTpDp6l/9cFjKhz9/tcpjWMROmXjP1w0tOJmy1otUsJ g7YyvgyvJFERCpyQhtz9WdDSMyEX8uOPcxp0QY81NJ26NXRq1IoNCs9hPthO7BBrVGED W/2v+7dldG3TOnFEY05fquV0+3BC5SSCC2mL8LU4dkcf7oqhPlDIykvtTKbkQ3DvHMTH rLLHhoY9lEsP8cBaWBv8XpJxU9P2QzUwPZXE+qo1T2cpOPWycQBONCM8hwQGEgOELpGO oEXTEzugMtZHW7FPvwNK8jbs7Dx2l0trEpFi/z+a3WvL1/kufV+lylv4p+4JzgA5MRyn KGhQ== X-Gm-Message-State: AOJu0Yyovq5g3v7n9F28w0Q5aVXzjnuMUl4wXLva6Dupq/Ve3/zKqfdV GO5p4E9dCeiHYG115G6t832m+uPUwrskzJcArEKzWYWg2f/QGAomiI2Tin6LeV/452hbvXSwTDA I0Xs5pmGg8VTNiPkj8EjSdvwy9kgm7pRmN63P/0HSUk7ihtAiIWYYP/4MJiJRaYEiZdew1IBIJH CrP4QkMnDvtQTCCzPuMb5XpNx3qTiA6nVbwdniLWkb4zx5WRE= X-Received: by 2002:a05:6808:6297:b0:3c7:4876:b527 with SMTP id du23-20020a056808629700b003c74876b527mr2611669oib.45.1713545174770; Fri, 19 Apr 2024 09:46:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGDXC5ZSCEDnI2ba+0ecDWFWcZdRyKrDXOzR43w4+MnNtpUonxnLTzAX7J64gOOUFLrRVcNGA== X-Received: by 2002:a05:6808:6297:b0:3c7:4876:b527 with SMTP id du23-20020a056808629700b003c74876b527mr2611650oib.45.1713545174472; Fri, 19 Apr 2024 09:46:14 -0700 (PDT) Received: from localhost.localdomain ([140.141.181.78]) by smtp.gmail.com with ESMTPSA id n9-20020a05622a11c900b00437a0c8e662sm1577295qtk.20.2024.04.19.09.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 09:46:14 -0700 (PDT) From: Steve Schrock To: ofono@lists.linux.dev Cc: Steve Schrock Subject: [PATCH 1/8] qmi unit: Link to dl Date: Fri, 19 Apr 2024 16:44:51 +0000 Message-Id: <20240419164458.36078-1-steve.schrock@getcruise.com> X-Mailer: git-send-email 2.40.1 Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-GUID: vRncCoFJC7FeIAGOVwQwSw2cP-3GwvjX X-Proofpoint-ORIG-GUID: vRncCoFJC7FeIAGOVwQwSw2cP-3GwvjX X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-19_11,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 spamscore=0 impostorscore=0 malwarescore=0 mlxscore=0 suspectscore=0 priorityscore=1501 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2404190127 One of my VMs was getting a linker error when building test-qmimodem-qmi in maintainer mode: undefined reference to `dladdr' Add -ldl to fix this. --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 9a6f82c39552..a4880036eaf5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -932,7 +932,7 @@ unit_objects += $(unit_test_mbim_OBJECTS) unit_test_qmimodem_qmi_SOURCES = unit/test-qmimodem-qmi.c src/common.c \ src/util.c src/log.c \ drivers/qmimodem/qmi.c -unit_test_qmimodem_qmi_LDADD = @GLIB_LIBS@ $(ell_ldadd) +unit_test_qmimodem_qmi_LDADD = @GLIB_LIBS@ $(ell_ldadd) -ldl unit_objects += $(unit_test_qmimodem_qmi_OBJECTS) unit/test-provision.db: unit/test-provision.json From patchwork Fri Apr 19 16:44:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Schrock X-Patchwork-Id: 13636614 Received: from mx0b-003ede02.pphosted.com (mx0b-003ede02.pphosted.com [205.220.181.153]) (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 5B259135A53 for ; Fri, 19 Apr 2024 16:46:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.181.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545179; cv=none; b=SdFc3YWECAWPItJzoAP4k5Kqn5bcqFF0eX8APj02j38KCQqiZaKjKKNyZBeHPW1oybfi7SCaEPBSYqWBwXb04c9gmSmX1nKuY8BNQR26+c/Jv6RA4FkqLM+T98iF4RzLlpyxdSeEukI44bpp9NPl/LOkJhYCSzJ4xtWwIKP66x8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545179; c=relaxed/simple; bh=Tgxj/4Usc6H0avH62H2FqIWVk3jK2SC/brrbG2BFAr0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=JfRjnxitE91iLdWYXyS596ufQyxuebvf+Z2wrcaudZExMEuie0jZOgBGSg87MZJ7ZpezeUjCb7bFXO84bjrVMg4gSBHVYIEmQa9p4P7fhFmHCee7p6y19tXZcwHqb2L40ogp+zTC/CaQhaOa8LwSfANJfoTtNDwtPofv10r4QsU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com; spf=pass smtp.mailfrom=getcruise.com; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=INKh3WXT; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=GD8rAacE; arc=none smtp.client-ip=205.220.181.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=getcruise.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="INKh3WXT"; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="GD8rAacE" Received: from pps.filterd (m0286620.ppops.net [127.0.0.1]) by mx0b-003ede02.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 43JDTFiJ025477 for ; Fri, 19 Apr 2024 09:46:17 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=ppemail; bh=Z5BTw2gx8qU4K88HwRtl8k 13pVkmO2Y7LDnQzhHOS8s=; b=INKh3WXT8q3TK+82/6dPq69oHb41w3BrpNZWmi eArYET6N0xJRp5sx/+s6A5XYgvfzDbqbVBadaFIQl8A2s/vR1lNASsCIhzvXejuF DcWvdclh6o8UvLPJNRRxy+FFruF3v/9O25oLXb38S9wC3xouFRIne+vcKuVCq5Tw c8xjDurKSjzXpSQ1QR9cyTab36R5Wx6gXCukGyT7T/vl+VJijZF/iO3fV5xdZO0b 8K5T1IPhSi5XK6oj9AhIpwFstwJYbfgDlhGZ7Z21/SScfPogZdND3AYElK35UxWk bCPvAX3STxQiLQ+9BIvxZyQ1hWjXnhtTFW8jmVF6AWJsiBQw== Received: from mail-oo1-f70.google.com (mail-oo1-f70.google.com [209.85.161.70]) by mx0b-003ede02.pphosted.com (PPS) with ESMTPS id 3xhyq9twn3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Apr 2024 09:46:17 -0700 (PDT) Received: by mail-oo1-f70.google.com with SMTP id 006d021491bc7-5acd9a8a58fso3126142eaf.2 for ; Fri, 19 Apr 2024 09:46:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; s=google; t=1713545176; x=1714149976; darn=lists.linux.dev; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=Z5BTw2gx8qU4K88HwRtl8k13pVkmO2Y7LDnQzhHOS8s=; b=GD8rAacEstJQ2ETrw//bAkBp3wISoAzYoOf+VANckIq8iZ2vYnlSh3hm/Bv2rE4l2C xjePrzMl/9zTnjrEi9aM8Kbo6Kp9gaxkKpQkpfqLuz9PTj+ONpv7tKSIOZI4+ajs9fnE ltH0PWK1P6NOwKB4PnYMxFXZ9hCrOcIdUc9faEjWoRTuRxTL/0XfMX3GYvySXduwi4AZ 3LaDgXOuWTrAtoSott+ZXCCt1sdKsIqNuVjo4wQ7qfD9u0r/vr56Hnap0Vi5H5GSC3sJ MDn1Wp1yljSFRutcqB5AdLIt/Qiui8o5jMUYQBpK3+H2DS7DMHdQr52hnO3BHUbwHnt8 5M+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713545176; x=1714149976; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Z5BTw2gx8qU4K88HwRtl8k13pVkmO2Y7LDnQzhHOS8s=; b=B4CKmWiXmTUG71tWzLJEX7iqN678//0ZWl1yzLikJSsnzPjKYs82k6Ep25yveP+5dV Vvn8mHVlz04QYrUR4moPuPI0Zmn1bBZdOvp/3McR9Q+en7vrwRfJ7Vw7soCbFKqNqcaa 1DsVuTGgT3UOSiRGzzDT8lpZDfFHipmf5Yru7pmVFTOU332l8gqXwYM5E5oep4yfEkzT K/uHM2FwWsGjyPDhgAQoAvPefp6tFm5lVm127ay5hHKLnvMmDqSxU33zwa/kinTsNICF g+6toWL0O5l01cLy+4bKBgpkjHKengQl2ZyzUC7R46q9eqzTfZdQpImRH1Q45ElAsWb3 QkzA== X-Gm-Message-State: AOJu0YyPsrAJAYDsiOMSbyWbBI5/P0px8ZOUhm8SpSgKapyICM3iNg8x xrAqqt3U3Zal8/fXr6zuwB+stVU8VX0GMrT40wTW78Kc2D8RCt44XX0Ph0Y0qnpFHIsmZx7foCX N0GMHJH/PFgryCbZp3gnwy4vD6jWh6AihCohgJajqF7X1KRtSv2AFe4pe5w0jBP8AoRrpvAnw14 i0TIkteDmOrOdS6+g+bLULbwTmli26ty0oH6ov/tKzckzA4+w= X-Received: by 2002:a4a:5892:0:b0:5a4:aea7:8066 with SMTP id f140-20020a4a5892000000b005a4aea78066mr3262993oob.5.1713545175962; Fri, 19 Apr 2024 09:46:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGb+/yW+L6mMyHKe6SpcpwNIBqxi0zdoWnX8BzTMmi1vi+t2yjhqvxn5wtGzNBI21X+v8DLrw== X-Received: by 2002:a4a:5892:0:b0:5a4:aea7:8066 with SMTP id f140-20020a4a5892000000b005a4aea78066mr3262968oob.5.1713545175564; Fri, 19 Apr 2024 09:46:15 -0700 (PDT) Received: from localhost.localdomain ([140.141.181.78]) by smtp.gmail.com with ESMTPSA id n9-20020a05622a11c900b00437a0c8e662sm1577295qtk.20.2024.04.19.09.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 09:46:14 -0700 (PDT) From: Steve Schrock To: ofono@lists.linux.dev Cc: Steve Schrock Subject: [PATCH 2/8] qmi: Eliminate atomic ref counting Date: Fri, 19 Apr 2024 16:44:52 +0000 Message-Id: <20240419164458.36078-2-steve.schrock@getcruise.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240419164458.36078-1-steve.schrock@getcruise.com> References: <20240419164458.36078-1-steve.schrock@getcruise.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-GUID: UCWmw8wPOs1fnB6XFnLi7DZKgrsNP5mE X-Proofpoint-ORIG-GUID: UCWmw8wPOs1fnB6XFnLi7DZKgrsNP5mE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-19_11,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 spamscore=0 impostorscore=0 malwarescore=0 mlxscore=0 suspectscore=0 priorityscore=1501 mlxlogscore=833 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2404190127 This code is single-threaded so there is no need to use atomics. While here simplify qmi_service_ref. --- drivers/qmimodem/qmi.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 7f91b57d15be..0811eaf2faec 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -2660,10 +2660,8 @@ bool qmi_service_create(struct qmi_device *device, struct qmi_service *qmi_service_ref(struct qmi_service *service) { - if (!service) - return NULL; - - __sync_fetch_and_add(&service->ref_count, 1); + if (service) + service->ref_count++; return service; } @@ -2676,7 +2674,7 @@ void qmi_service_unref(struct qmi_service *service) if (!service) return; - if (__sync_sub_and_fetch(&service->ref_count, 1)) + if (--service->ref_count) return; device = service->device; From patchwork Fri Apr 19 16:44:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Schrock X-Patchwork-Id: 13636616 Received: from mx0b-003ede02.pphosted.com (mx0b-003ede02.pphosted.com [205.220.181.153]) (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 62C6713667D for ; Fri, 19 Apr 2024 16:46:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.181.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545181; cv=none; b=OWPxqpQk1IadzUliOeLWs6U0G98gnQz4KAQgRyo5abdfDNJrc3snfWzf3AjRnWd/kQMBmIHD9P0NdGXVmCzP8Cjom3AeYM2wTmSTy50O8fsNjXVLkum1hN72lkLFw8tK9PRUgHPKv6djzb3kleuHHLVrz4Lrp6wiSbjmxytyb1Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545181; c=relaxed/simple; bh=UF2m1UVNrt/5w7mm8CVS4FJS8nAFec28kBYJglsmZjE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=XneFcQ68Z+S9xC1+echVzuzmkKt18NfNbdtE1zXVGIZZHNHvgP6EAMW+hLSQ6B2FoUE4+Kbp+tO9SCg2+r0cIFzCF/msZIUAnSeyYrx5tW2SkCEnKj099XvzEXBxr/7ZtR07reb2z+hYE3T7O2ChizcVDXkujrIHckT/UH1oyCY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com; spf=pass smtp.mailfrom=getcruise.com; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=SUGwBD7D; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=OtcNTSTv; arc=none smtp.client-ip=205.220.181.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=getcruise.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="SUGwBD7D"; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="OtcNTSTv" Received: from pps.filterd (m0286618.ppops.net [127.0.0.1]) by mx0b-003ede02.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 43JDSFkf017160 for ; Fri, 19 Apr 2024 09:46:18 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=ppemail; bh=MnGAY95XNUICm5Kn+ZTERd oeOlQFewaIMLYO1O0VljI=; b=SUGwBD7DrRwxBQjGKcdlRLP9pPdZOMd9ufv6e9 8SIA1Ka35UJtWk3zt9d/lCU3RG1Mf0r0UpJOkyLxUm1xS2SIUMYSfCpThjLfSca3 wi9QMIJr9aaGgBVTpfRn3waPNNf4kNh+hv/UzhYSEMm56W+qWFfoec89TKBXaSj/ aMSRkHxoTP/rO2ujaA79IhLAjoT3gplSKg8RwLyj8i4xDx4mymNhNCnFL5DNXqiL 0pM260K6wFPz8rDoJeE2JVSFEIToUrTrXzhU3zjs9tx1vxi4r/LxV2uE2dn8cnMl eb6aA9zLDEQpBmBcyxHfoK4QfOR2kJ/zpEdG7fNrFPBdbo1g== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0b-003ede02.pphosted.com (PPS) with ESMTPS id 3xk8m70wk2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Apr 2024 09:46:18 -0700 (PDT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-78ed20d9423so308570585a.3 for ; Fri, 19 Apr 2024 09:46:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; s=google; t=1713545177; x=1714149977; darn=lists.linux.dev; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=MnGAY95XNUICm5Kn+ZTERdoeOlQFewaIMLYO1O0VljI=; b=OtcNTSTvzK+kbyEqcvVos/9dwSnePoaEz5TxqbOtHh5ceD7sOdqcfCRyqFDkLABUH8 VLAqYNlIXAFSHAhR6ixdPLpfKxOhe8s6CorlAVNUrK08wH9oZPTNFcg66LVIqLgK1hLc iB0a43a0dzb9A5WIZmz7GuUYNxB40XIPmyPsa1Y0lyNAIXpIqkXftxmoMQrXAqkEh/Xc aN5unVcvIbfdKAOcvepou1Si5udNxDviFiOJXNm5jr4VStoSEgOfpX1qJBBM/YTvx7ul lAvHBAHNrrgRiFwGFkseY5UD/zm0E/5gQ1K3c4VZB1JsMJv2Stddn8DekNjq66QM7ld+ uqpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713545177; x=1714149977; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=MnGAY95XNUICm5Kn+ZTERdoeOlQFewaIMLYO1O0VljI=; b=eRauWc17d4kWff6dH8Xr0IV1Ly5NFGHBb3UPYY8urDb9eyoZzSbJKG7Y8KEcPdl5zn O0XwMuAlLRIz/Ozn1SxRPwXYLIz7HcPlbHovxzxRFhvngj/nI33o1RbsdskZ5WnOup/R Hv2hSFbeVC0bOGEQeahQGqmPNvbdHsK7AeZC20N7vqQ0JTy9nB8MtiwMhwiX4qnvKhrJ c4s/puNY8MEIZDNK6WCFhO/DYJCUzQli37G3JZnK3vj7StDXBFR3zuTjwYO1WR0iwZIU FR5v1WqmX+bzDckek10tz9HpDGMrQzfB2QTrumfz/3BGcLHZrqjR3jwlnelSy3m9dqQ4 bjQw== X-Gm-Message-State: AOJu0YyZdxNNhGbHcBmKLPJVoN1jlmXe/S70CPsoAxEdvxzad8oxhWdZ ovupVLteQLm1xCktCQdlfkew7X7VoObBr1F6MJLWQUHBeTyr4OyL/CIN5ahccBpuqQJNEKSukwh yqz8DKHsFAtlA/oRryzCYQNAQD3akvD4ohJ4pC1ZE0AVJt2RCmw17qJt4tXaqN/JNynepzU8PJM KxLs613S+nWLTZz/Fz6hm6N18kowShhHIN4dFW21ybhvRIPIg= X-Received: by 2002:a05:622a:46:b0:437:97a5:e89a with SMTP id y6-20020a05622a004600b0043797a5e89amr3140102qtw.58.1713545176735; Fri, 19 Apr 2024 09:46:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGr4c8JBxrqk/icmDcYnjz4umwTWkZzK23OT+nBNnamxiHlZQBlFK2bnpNg6+qyh748iRCOrQ== X-Received: by 2002:a05:622a:46:b0:437:97a5:e89a with SMTP id y6-20020a05622a004600b0043797a5e89amr3140067qtw.58.1713545176149; Fri, 19 Apr 2024 09:46:16 -0700 (PDT) Received: from localhost.localdomain ([140.141.181.78]) by smtp.gmail.com with ESMTPSA id n9-20020a05622a11c900b00437a0c8e662sm1577295qtk.20.2024.04.19.09.46.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 09:46:15 -0700 (PDT) From: Steve Schrock To: ofono@lists.linux.dev Cc: Steve Schrock Subject: [PATCH 3/8] qmi: Create a better client service abstraction Date: Fri, 19 Apr 2024 16:44:53 +0000 Message-Id: <20240419164458.36078-3-steve.schrock@getcruise.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240419164458.36078-1-steve.schrock@getcruise.com> References: <20240419164458.36078-1-steve.schrock@getcruise.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: x41DDHpfWC63K_R-Jhln1mZTZsaiGGf_ X-Proofpoint-GUID: x41DDHpfWC63K_R-Jhln1mZTZsaiGGf_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-19_11,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 impostorscore=0 mlxlogscore=999 phishscore=0 spamscore=0 adultscore=0 priorityscore=1501 mlxscore=0 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2404190127 Currently any client can cancel any other client's requests and notifications. This change separates out the service "family" which is shared among clients that create services for the same qmi service type. The qmi_service gets its own unique handle so that clients are more independent and cannot interfere with other clients as easily. --- drivers/qmimodem/qmi.c | 290 ++++++++++++++++++++++++++--------------- 1 file changed, 185 insertions(+), 105 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 0811eaf2faec..e1091b872f23 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -64,6 +64,7 @@ struct qmi_service_info { struct qmi_request { uint16_t tid; unsigned int group_id; /* Always 0 for control */ + unsigned int service_handle; /* Always 0 for control */ uint8_t client; /* Always 0 for control and qrtr */ struct qmi_service_info info; /* Not used for control requests */ qmi_message_func_t callback; @@ -95,11 +96,12 @@ struct qmi_device { struct l_queue *service_queue; struct l_queue *discovery_queue; unsigned int next_group_id; /* Matches requests with services */ + unsigned int next_service_handle; uint16_t next_service_tid; qmi_debug_func_t debug_func; void *debug_data; struct l_queue *service_infos; - struct l_hashmap *service_list; + struct l_hashmap *family_list; const struct qmi_device_ops *ops; bool writer_active : 1; bool shutting_down : 1; @@ -120,7 +122,7 @@ struct qmi_device_qmux { struct l_queue *control_queue; }; -struct qmi_service { +struct service_family { int ref_count; struct qmi_device *device; struct qmi_service_info info; @@ -130,6 +132,12 @@ struct qmi_service { struct l_queue *notify_list; }; +struct qmi_service { + int ref_count; + unsigned int handle; /* Uniquely identifies this client's reqs */ + struct service_family *family; +}; + struct qmi_param { void *data; uint16_t length; @@ -146,6 +154,7 @@ struct qmi_result { struct qmi_notify { uint16_t id; uint16_t message; + unsigned int service_handle; qmi_result_func_t callback; void *user_data; qmi_destroy_func_t destroy; @@ -239,6 +248,7 @@ static struct qmi_request *__request_alloc(uint32_t service_type, req = l_malloc(sizeof(struct qmi_request) + msglen); req->tid = 0; req->group_id = 0; + req->service_handle = 0; req->len = msglen; req->client = client; @@ -330,21 +340,21 @@ static bool __notify_compare(const void *data, const void *user_data) struct service_find_by_type_data { unsigned int type; - struct qmi_service *found_service; + struct service_family *found_family; }; -static void __service_find_by_type(const void *key, void *value, +static void __family_find_by_type(const void *key, void *value, void *user_data) { - struct qmi_service *service = value; + struct service_family *family = value; struct service_find_by_type_data *data = user_data; /* ignore those that are in process of creation */ if (L_PTR_TO_UINT(key) & 0x80000000) return; - if (service->info.service_type == data->type) - data->found_service = service; + if (family->info.service_type == data->type) + data->found_family = family; } static const char *__service_type_to_string(uint8_t type) @@ -744,7 +754,8 @@ static uint16_t __service_request_submit(struct qmi_device *device, if (device->next_service_tid < 256) device->next_service_tid = 256; - req->group_id = service->group_id; + req->group_id = service->family->group_id; + req->service_handle = service->handle; hdr->type = 0x00; hdr->transaction = L_CPU_TO_LE16(req->tid); @@ -766,18 +777,18 @@ static void service_notify_if_message_matches(void *data, void *user_data) static void service_notify(const void *key, void *value, void *user_data) { - struct qmi_service *service = value; + struct service_family *family = value; struct qmi_result *result = user_data; /* ignore those that are in process of creation */ if (L_PTR_TO_UINT(key) & 0x80000000) return; - l_queue_foreach(service->notify_list, service_notify_if_message_matches, + l_queue_foreach(family->notify_list, service_notify_if_message_matches, result); } -static unsigned int service_list_create_hash(uint16_t service_type, +static unsigned int family_list_create_hash(uint16_t service_type, uint8_t client_id) { return (service_type | (client_id << 16)); @@ -787,7 +798,7 @@ static void handle_indication(struct qmi_device *device, uint32_t service_type, uint8_t client_id, uint16_t message, uint16_t length, const void *data) { - struct qmi_service *service; + struct service_family *family; struct qmi_result result; unsigned int hash_id; @@ -801,19 +812,19 @@ static void handle_indication(struct qmi_device *device, result.length = length; if (client_id == 0xff) { - l_hashmap_foreach(device->service_list, service_notify, + l_hashmap_foreach(device->family_list, service_notify, &result); return; } - hash_id = service_list_create_hash(service_type, client_id); - service = l_hashmap_lookup(device->service_list, + hash_id = family_list_create_hash(service_type, client_id); + family = l_hashmap_lookup(device->family_list, L_UINT_TO_PTR(hash_id)); - if (!service) + if (!family) return; - service_notify(NULL, service, &result); + service_notify(NULL, family, &result); } static void __rx_message(struct qmi_device *device, @@ -876,14 +887,14 @@ do {\ __discovery_free(&data->super);\ } while (0) -static void service_destroy(void *data) +static void family_destroy(void *data) { - struct qmi_service *service = data; + struct service_family *family = data; - if (!service->device) + if (!family->device) return; - service->device = NULL; + family->device = NULL; } static int qmi_device_init(struct qmi_device *device, int fd, @@ -911,7 +922,7 @@ static int qmi_device_init(struct qmi_device *device, int fd, device->service_queue = l_queue_new(); device->discovery_queue = l_queue_new(); device->service_infos = l_queue_new(); - device->service_list = l_hashmap_new(); + device->family_list = l_hashmap_new(); device->next_service_tid = 256; @@ -939,7 +950,7 @@ void qmi_device_free(struct qmi_device *device) l_io_destroy(device->io); - l_hashmap_destroy(device->service_list, service_destroy); + l_hashmap_destroy(device->family_list, family_destroy); l_queue_destroy(device->service_infos, l_free); @@ -1400,9 +1411,41 @@ static bool received_qmux_data(struct l_io *io, void *user_data) return true; } +static struct service_family *service_family_ref(struct service_family *family) +{ + family->ref_count++; + + return family; +} + +static void service_family_unref(struct service_family *family) +{ + struct qmi_device *device; + unsigned int hash_id; + + if (--family->ref_count) + return; + + device = family->device; + if (!device) + goto done; + + hash_id = family_list_create_hash(family->info.service_type, + family->client_id); + l_hashmap_remove(device->family_list, L_UINT_TO_PTR(hash_id)); + + if (device->ops->client_release) + device->ops->client_release(device, family->info.service_type, + family->client_id); + +done: + l_queue_destroy(family->notify_list, NULL); + l_free(family); +} + struct service_create_shared_data { struct discovery super; - struct qmi_service *service; + struct service_family *family; struct qmi_device *device; qmi_create_func_t func; void *user_data; @@ -1430,26 +1473,46 @@ static uint8_t __ctl_request_submit(struct qmi_device_qmux *qmux, return req->tid; } -static struct qmi_service *service_create(struct qmi_device *device, +static struct service_family *service_family_create(struct qmi_device *device, const struct qmi_service_info *info, uint8_t client_id) { - struct qmi_service *service = l_new(struct qmi_service, 1); + struct service_family *family = l_new(struct service_family, 1); - service->ref_count = 1; - service->device = device; - service->client_id = client_id; - service->notify_list = l_queue_new(); + family->ref_count = 0; + family->device = device; + family->client_id = client_id; + family->notify_list = l_queue_new(); if (device->next_group_id == 0) /* 0 is reserved for control */ device->next_group_id = 1; - service->group_id = device->next_group_id++; + family->group_id = device->next_group_id++; + + memcpy(&family->info, info, sizeof(family->info)); + + __debug_device(device, "service family created [client=%d,type=%d]", + family->client_id, + family->info.service_type); + + return family; +} + +static struct qmi_service *service_create(struct service_family *family) +{ + struct qmi_device *device = family->device; + struct qmi_service *service; - memcpy(&service->info, info, sizeof(service->info)); + if (device->next_service_handle == 0) /* 0 is reserved for control */ + device->next_service_handle = 1; + + service = l_new(struct qmi_service, 1); + service->ref_count = 1; + service->handle = device->next_service_handle++; + service->family = service_family_ref(family); __debug_device(device, "service created [client=%d,type=%d]", - service->client_id, - service->info.service_type); + family->client_id, + family->info.service_type); return service; } @@ -1457,25 +1520,28 @@ static struct qmi_service *service_create(struct qmi_device *device, static void service_create_shared_reply(struct l_idle *idle, void *user_data) { struct service_create_shared_data *data = user_data; + struct qmi_service *service; l_idle_remove(data->idle); data->idle = NULL; - DISCOVERY_DONE(data, data->service, data->user_data); + service = service_create(data->family); + DISCOVERY_DONE(data, service, data->user_data); + qmi_service_unref(service); } static void service_create_shared_pending_reply(struct qmi_device *device, unsigned int type, - struct qmi_service *service) + struct service_family *family) { void *key = L_UINT_TO_PTR(type | 0x80000000); - struct l_queue *shared = l_hashmap_remove(device->service_list, key); + struct l_queue *shared = l_hashmap_remove(device->family_list, key); const struct l_queue_entry *entry; for (entry = l_queue_get_entries(shared); entry; entry = entry->next) { struct service_create_shared_data *shared_data = entry->data; - shared_data->service = qmi_service_ref(service); + shared_data->family = service_family_ref(family); shared_data->idle = l_idle_create(service_create_shared_reply, shared_data, NULL); } @@ -1490,7 +1556,7 @@ static void service_create_shared_data_free(void *user_data) if (data->idle) l_idle_remove(data->idle); - qmi_service_unref(data->service); + service_family_unref(data->family); if (data->destroy) data->destroy(data->user_data); @@ -1727,8 +1793,9 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length, { struct qmux_client_create_data *data = user_data; struct qmi_device *device = data->device; + struct service_family *family = NULL; + struct service_family *old_family = NULL; struct qmi_service *service = NULL; - struct qmi_service *old_service = NULL; struct qmi_service_info info; const struct qmi_result_code *result_code; const struct qmi_client_id *client_id; @@ -1752,23 +1819,25 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length, if (client_id->service != data->type) goto done; - memset(&info, 0, sizeof(service->info)); + memset(&info, 0, sizeof(family->info)); info.service_type = data->type; info.major = data->major; info.minor = data->minor; - service = service_create(device, &info, client_id->client); + family = service_family_create(device, &info, client_id->client); - hash_id = service_list_create_hash(service->info.service_type, - service->client_id); - l_hashmap_replace(device->service_list, L_UINT_TO_PTR(hash_id), - service, (void **) &old_service); + hash_id = family_list_create_hash(family->info.service_type, + family->client_id); + l_hashmap_replace(device->family_list, L_UINT_TO_PTR(hash_id), + family, (void **) &old_family); - if (old_service) - service_destroy(old_service); + if (old_family) + family_destroy(old_family); + + service = service_create(family); done: - service_create_shared_pending_reply(device, data->type, service); + service_create_shared_pending_reply(device, data->type, family); DISCOVERY_DONE(data, service, data->user_data); qmi_service_unref(service); @@ -1816,7 +1885,7 @@ static int qmi_device_qmux_client_create(struct qmi_device *device, __qmi_device_discovery_started(device, &data->super); /* Mark service creation as pending */ - l_hashmap_insert(device->service_list, + l_hashmap_insert(device->family_list, L_UINT_TO_PTR(type_val | 0x80000000), shared); return 0; @@ -2553,7 +2622,7 @@ bool qmi_service_create_shared(struct qmi_device *device, uint16_t type, qmi_destroy_func_t destroy) { struct l_queue *shared; - struct qmi_service *service = NULL; + struct service_family *family = NULL; unsigned int type_val = type; int r; @@ -2570,20 +2639,19 @@ bool qmi_service_create_shared(struct qmi_device *device, uint16_t type, * The hash id is simply the service type in this case. There * is no "pending" state for discovery and no client id. */ - service = l_hashmap_lookup(device->service_list, + family = l_hashmap_lookup(device->family_list, L_UINT_TO_PTR(type_val)); - if (!service) { + if (!family) { const struct qmi_service_info *info; info = __find_service_info_by_type(device, type); if (!info) return false; - service = service_create(device, info, 0); - l_hashmap_insert(device->service_list, - L_UINT_TO_PTR(type_val), service); - } else - service = qmi_service_ref(service); + family = service_family_create(device, info, 0); + l_hashmap_insert(device->family_list, + L_UINT_TO_PTR(type_val), family); + } data = l_new(struct service_create_shared_data, 1); @@ -2592,7 +2660,7 @@ bool qmi_service_create_shared(struct qmi_device *device, uint16_t type, data->func = func; data->user_data = user_data; data->destroy = destroy; - data->service = service; + data->family = service_family_ref(family); data->idle = l_idle_create(service_create_shared_reply, data, NULL); @@ -2603,7 +2671,7 @@ bool qmi_service_create_shared(struct qmi_device *device, uint16_t type, return true; } - shared = l_hashmap_lookup(device->service_list, + shared = l_hashmap_lookup(device->family_list, L_UINT_TO_PTR(type_val | 0x80000000)); if (!shared) { @@ -2616,14 +2684,14 @@ bool qmi_service_create_shared(struct qmi_device *device, uint16_t type, struct service_find_by_type_data data; data.type = type_val; - data.found_service = NULL; - l_hashmap_foreach(device->service_list, __service_find_by_type, + data.found_family = NULL; + l_hashmap_foreach(device->family_list, __family_find_by_type, &data); - service = data.found_service; + family = data.found_family; } else type_val |= 0x80000000; - if (shared || service) { + if (shared || family) { struct service_create_shared_data *data; data = l_new(struct service_create_shared_data, 1); @@ -2635,7 +2703,7 @@ bool qmi_service_create_shared(struct qmi_device *device, uint16_t type, data->destroy = destroy; if (!(type_val & 0x80000000)) { - data->service = qmi_service_ref(service); + data->family = service_family_ref(family); data->idle = l_idle_create(service_create_shared_reply, data, NULL); } else @@ -2668,31 +2736,16 @@ struct qmi_service *qmi_service_ref(struct qmi_service *service) void qmi_service_unref(struct qmi_service *service) { - struct qmi_device *device; - unsigned int hash_id; - if (!service) return; if (--service->ref_count) return; - device = service->device; - if (!device) { - l_free(service); - return; - } - qmi_service_cancel_all(service); qmi_service_unregister_all(service); - hash_id = service_list_create_hash(service->info.service_type, - service->client_id); - l_hashmap_remove(device->service_list, L_UINT_TO_PTR(hash_id)); - - if (device->ops->client_release) - device->ops->client_release(device, service->info.service_type, - service->client_id); + service_family_unref(service->family); l_free(service); } @@ -2702,7 +2755,7 @@ const char *qmi_service_get_identifier(struct qmi_service *service) if (!service) return NULL; - return __service_type_to_string(service->info.service_type); + return __service_type_to_string(service->family->info.service_type); } bool qmi_service_get_version(struct qmi_service *service, @@ -2712,10 +2765,10 @@ bool qmi_service_get_version(struct qmi_service *service, return false; if (major) - *major = service->info.major; + *major = service->family->info.major; if (minor) - *minor = service->info.minor; + *minor = service->family->info.minor; return true; } @@ -2769,6 +2822,7 @@ uint16_t qmi_service_send(struct qmi_service *service, void *user_data, qmi_destroy_func_t destroy) { struct qmi_device *device; + struct service_family *family; struct service_send_data *data; struct qmi_request *req; uint16_t tid; @@ -2776,10 +2830,12 @@ uint16_t qmi_service_send(struct qmi_service *service, if (!service) return 0; - if (!service->group_id) + family = service->family; + + if (!family->group_id) return 0; - device = service->device; + device = family->device; if (!device) return 0; @@ -2789,8 +2845,8 @@ uint16_t qmi_service_send(struct qmi_service *service, data->user_data = user_data; data->destroy = destroy; - req = __service_request_alloc(&service->info, - service->client_id, message, + req = __service_request_alloc(&family->info, + family->client_id, message, param ? param->data : NULL, param ? param->length : 0, service_send_callback, data); @@ -2807,14 +2863,17 @@ bool qmi_service_cancel(struct qmi_service *service, uint16_t id) unsigned int tid = id; struct qmi_device *device; struct qmi_request *req; + struct service_family *family; if (!service || !tid) return false; - if (!service->client_id) + family = service->family; + + if (!family->client_id) return false; - device = service->device; + device = family->device; if (!device) return false; @@ -2838,9 +2897,9 @@ bool qmi_service_cancel(struct qmi_service *service, uint16_t id) static bool remove_req_if_match(void *data, void *user_data) { struct qmi_request *req = data; - unsigned int group_id = L_PTR_TO_UINT(user_data); + unsigned int service_handle = L_PTR_TO_UINT(user_data); - if (req->group_id != group_id) + if (req->service_handle != service_handle) return false; service_send_free(req->user_data); @@ -2849,10 +2908,10 @@ static bool remove_req_if_match(void *data, void *user_data) return true; } -static void remove_client(struct l_queue *queue, unsigned int group_id) +static void remove_client(struct l_queue *queue, unsigned int service_handle) { l_queue_foreach_remove(queue, remove_req_if_match, - L_UINT_TO_PTR(group_id)); + L_UINT_TO_PTR(service_handle)); } bool qmi_service_cancel_all(struct qmi_service *service) @@ -2862,15 +2921,15 @@ bool qmi_service_cancel_all(struct qmi_service *service) if (!service) return false; - if (!service->group_id) + if (!service->family->group_id) return false; - device = service->device; + device = service->family->device; if (!device) return false; - remove_client(device->req_queue, service->group_id); - remove_client(device->service_queue, service->group_id); + remove_client(device->req_queue, service->handle); + remove_client(device->service_queue, service->handle); return true; } @@ -2880,22 +2939,26 @@ uint16_t qmi_service_register(struct qmi_service *service, void *user_data, qmi_destroy_func_t destroy) { struct qmi_notify *notify; + struct service_family *family; if (!service || !func) return 0; + family = service->family; + notify = l_new(struct qmi_notify, 1); - if (service->next_notify_id < 1) - service->next_notify_id = 1; + if (family->next_notify_id < 1) + family->next_notify_id = 1; - notify->id = service->next_notify_id++; + notify->id = family->next_notify_id++; notify->message = message; + notify->service_handle = service->handle; notify->callback = func; notify->user_data = user_data; notify->destroy = destroy; - l_queue_push_tail(service->notify_list, notify); + l_queue_push_tail(family->notify_list, notify); return notify->id; } @@ -2903,12 +2966,15 @@ uint16_t qmi_service_register(struct qmi_service *service, bool qmi_service_unregister(struct qmi_service *service, uint16_t id) { unsigned int nid = id; + struct service_family *family; struct qmi_notify *notify; if (!service || !id) return false; - notify = l_queue_remove_if(service->notify_list, __notify_compare, + family = service->family; + + notify = l_queue_remove_if(family->notify_list, __notify_compare, L_UINT_TO_PTR(nid)); if (!notify) @@ -2919,13 +2985,27 @@ bool qmi_service_unregister(struct qmi_service *service, uint16_t id) return true; } +static bool remove_notify_if_handle_match(void *data, void *user_data) +{ + struct qmi_notify *notify = data; + unsigned int handle = L_PTR_TO_UINT(user_data); + + if (notify->service_handle != handle) + return false; + + __notify_free(notify); + + return true; +} + bool qmi_service_unregister_all(struct qmi_service *service) { if (!service) return false; - l_queue_destroy(service->notify_list, __notify_free); - service->notify_list = NULL; + l_queue_foreach_remove(service->family->notify_list, + remove_notify_if_handle_match, + L_UINT_TO_PTR(service->handle)); return true; } From patchwork Fri Apr 19 16:44:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Schrock X-Patchwork-Id: 13636615 Received: from mx0b-003ede02.pphosted.com (mx0b-003ede02.pphosted.com [205.220.181.153]) (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 B0A321350EC for ; Fri, 19 Apr 2024 16:46:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.181.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545181; cv=none; b=pttYGo45kc1fTzY3OnNVP+572FV33vFqqSA0RS0vw0dzZk2dD6LPMwOu9Qem86XtK57MEP1esEhpwAtl/PV9tyyYoOnjWCkddjuKS0VxY9mJsb75t880OePQdFZxMwx+UTRRpS9rwfBcibg33Tpq6xZgCqzb5tsGhzHTtokvlKk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545181; c=relaxed/simple; bh=WTJz1WTzOJbuxskxqKmHdjjOHQd7HJQHAFA4KY1j02M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=YYOAO1rvr7m7mgX6JQm+OjIO0/WUaJaLCtBjhLGjP4XJ58GO7TeFbNtyaXJxs27FeNgKOfWwM8lgRqiTJOZ1RXwsafm5nshSjukxwE+VTie2kU3X9y1HNqk+Q/R6xhdkQr6UWVeAWPmQCY5N51tMs2PdUsyCBei6H9nH4x3RpgQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com; spf=pass smtp.mailfrom=getcruise.com; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=eGDVFdi3; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=lAmV/MCx; arc=none smtp.client-ip=205.220.181.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=getcruise.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="eGDVFdi3"; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="lAmV/MCx" Received: from pps.filterd (m0286618.ppops.net [127.0.0.1]) by mx0b-003ede02.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 43JFCepp029692 for ; Fri, 19 Apr 2024 09:46:18 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=ppemail; bh=hVlhSepVLn4/Vdgim3iwMr W2j3tsdB8sU+KBpR2barA=; b=eGDVFdi3xVctxOIxzOHFNa29Dbjt8miOmOTfLP OrtaejWl8RWBKRDAUIVEuVM1Wd6jCPVeeI46E6WyKJiii1B66J2q529HV/+l0RV0 VazszgWjr/yq1NBsfhjYLnuwj/V1jf3RxNXijrJMYJC1/4j0O/bZJBFmgP9UtcJt pu7cJbtzvz64EkN2ULbDDudLpxoE1w3KlWBZ6aG7idb6UGmsvfP+K8U+QMPSpB2+ z4T/I+tExtNDWAXaj2r2+bj6Sx75B1MXoBzBEzlpp4IkQTNcAr1xhV44Jj6crh2M Ya6xsKgcxdoVl0CzRTukHl2iDgoK6CZRpnb3fla8htHMJK+A== Received: from mail-oi1-f199.google.com (mail-oi1-f199.google.com [209.85.167.199]) by mx0b-003ede02.pphosted.com (PPS) with ESMTPS id 3xk8m70wk3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Apr 2024 09:46:18 -0700 (PDT) Received: by mail-oi1-f199.google.com with SMTP id 5614622812f47-3c5ffab3db3so2835337b6e.3 for ; Fri, 19 Apr 2024 09:46:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; s=google; t=1713545177; x=1714149977; darn=lists.linux.dev; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=hVlhSepVLn4/Vdgim3iwMrW2j3tsdB8sU+KBpR2barA=; b=lAmV/MCxvA8K3UX5xBfwljuCF77v7aBb/uqLAciXH4gxsc43B4ef9xH85/jgmaJBJX E0d38QN7utgXMOSI8+iZwtm6a3O3GETUuHaClNIurkeiy5kNWFtEIyyRLZmTE6hPSywn s5Nh7KhC0GwT0mmcGG+XQuVPC3kBJOy0cNl1LN2gqTzfPhcpjesSzJslqgkV8eeejt1k o1KUYZTJvV2ckoGa5lcFTPFJp1f5GANOxUJYn9MYto6kgnr6LHF5YGUk0LalZmxg1H+a jJZ34lFyQ1JB10L3RrqJaURhuU+tMVvb4jHBEgbtaAw7flpc7JHM68uVFKHY/D8kiRJU 9kXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713545177; x=1714149977; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=hVlhSepVLn4/Vdgim3iwMrW2j3tsdB8sU+KBpR2barA=; b=jcmZ1tuoN87I/x+MieXLaIXgUqQQ1uRMJEFVnX1wIhZreR83YpG2/8opVEKf81Jrnb MB7W5iLUSYOuLQNIT+VLmZ8mCkXwl4vA0QhICrGFiOU6+8fl4p5+zhBIrAxfSrjStCjj CK5vp8a9TeJ9qIX+p1G4GrWVMsgRQANlw0zu8fC6lNeDDodah4UNivNYTM0IIFrMw89B RpDjqWdkrz4JAzhAhkHG6F0MBdzgEH7AKfybHRNaahr/R2UZf/MJG6WgKbyE9T4ThHDR NT6+rpEewaS0Zs82Jo48O0THWQijLlbgBhUVILAfXv3P8WJ8wq9r3r1F3jXa04zbuz0U oEqA== X-Gm-Message-State: AOJu0YxS9u0QTjGNmypNgtoiEQyIJ47YkK+96JlxWD9M4uwkaF2v31bW 0BIHMdKQgRc539K1YW9vlUsKFJwdx9x53vvuKXGiSPScPWXKmXZZY4cXlxupvUoLGRjBtTm2jXr oNXXz6C2wfHXRBvX00XP1RUMQNfXaLyFcBFG0b9U8Xg5yt9lZ8Hs/WC7MvsJL8iR1sTg738lPrF khOiv98RUSqmJD4KS4s4CuqYa5y9gDKarI0MDx0C2MMNsig4c= X-Received: by 2002:a05:6808:ab8:b0:3c7:39f5:d3b5 with SMTP id r24-20020a0568080ab800b003c739f5d3b5mr2892510oij.58.1713545177218; Fri, 19 Apr 2024 09:46:17 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE09Y59vS3T3/VyniTzWx6K/b/ZBV2a2JWxTxZ0AheM0Bv8bjJsVLvKoikwe57PkfOOyzV1xg== X-Received: by 2002:a05:6808:ab8:b0:3c7:39f5:d3b5 with SMTP id r24-20020a0568080ab800b003c739f5d3b5mr2892477oij.58.1713545176773; Fri, 19 Apr 2024 09:46:16 -0700 (PDT) Received: from localhost.localdomain ([140.141.181.78]) by smtp.gmail.com with ESMTPSA id n9-20020a05622a11c900b00437a0c8e662sm1577295qtk.20.2024.04.19.09.46.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 09:46:16 -0700 (PDT) From: Steve Schrock To: ofono@lists.linux.dev Cc: Steve Schrock Subject: [PATCH 4/8] qmi: Eliminate unnecessary casting to unsigned int Date: Fri, 19 Apr 2024 16:44:54 +0000 Message-Id: <20240419164458.36078-4-steve.schrock@getcruise.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240419164458.36078-1-steve.schrock@getcruise.com> References: <20240419164458.36078-1-steve.schrock@getcruise.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: RskWDl3c96MeSMWUtD3Q_cxPIle2bR1g X-Proofpoint-GUID: RskWDl3c96MeSMWUtD3Q_cxPIle2bR1g X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-19_11,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 impostorscore=0 mlxlogscore=999 phishscore=0 spamscore=0 adultscore=0 priorityscore=1501 mlxscore=0 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2404190127 uint16_t values were copied into unsigned ints before being passed to L_UINT_TO_PTR. Perhaps this was necessary when the glib macro GUINT_TO_POINTER was used, but it is not necessary now with the ell macro. --- drivers/qmimodem/qmi.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index e1091b872f23..f406d01a8df6 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -1330,7 +1330,6 @@ static void __rx_ctl_message(struct qmi_device_qmux *qmux, struct qmi_request *req; uint16_t message; uint16_t length; - unsigned int tid; /* Ignore control messages with client identifier */ if (client_id != 0x00) @@ -1338,7 +1337,6 @@ static void __rx_ctl_message(struct qmi_device_qmux *qmux, message = L_LE16_TO_CPU(msg->message); length = L_LE16_TO_CPU(msg->length); - tid = control->transaction; if (control->type == 0x02 && control->transaction == 0x00) { handle_indication(&qmux->super, service_type, client_id, @@ -1347,7 +1345,7 @@ static void __rx_ctl_message(struct qmi_device_qmux *qmux, } req = l_queue_remove_if(qmux->control_queue, __request_compare, - L_UINT_TO_PTR(tid)); + L_UINT_TO_PTR(control->transaction)); if (!req) return; @@ -2860,12 +2858,11 @@ uint16_t qmi_service_send(struct qmi_service *service, bool qmi_service_cancel(struct qmi_service *service, uint16_t id) { - unsigned int tid = id; struct qmi_device *device; struct qmi_request *req; struct service_family *family; - if (!service || !tid) + if (!service || !id) return false; family = service->family; @@ -2878,11 +2875,11 @@ bool qmi_service_cancel(struct qmi_service *service, uint16_t id) return false; req = l_queue_remove_if(device->req_queue, __request_compare, - L_UINT_TO_PTR(tid)); + L_UINT_TO_PTR(id)); if (!req) { req = l_queue_remove_if(device->service_queue, __request_compare, - L_UINT_TO_PTR(tid)); + L_UINT_TO_PTR(id)); if (!req) return false; } @@ -2965,7 +2962,6 @@ uint16_t qmi_service_register(struct qmi_service *service, bool qmi_service_unregister(struct qmi_service *service, uint16_t id) { - unsigned int nid = id; struct service_family *family; struct qmi_notify *notify; @@ -2975,7 +2971,7 @@ bool qmi_service_unregister(struct qmi_service *service, uint16_t id) family = service->family; notify = l_queue_remove_if(family->notify_list, __notify_compare, - L_UINT_TO_PTR(nid)); + L_UINT_TO_PTR(id)); if (!notify) return false; From patchwork Fri Apr 19 16:44:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Schrock X-Patchwork-Id: 13636617 Received: from mx0b-003ede02.pphosted.com (mx0b-003ede02.pphosted.com [205.220.181.153]) (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 CCAB0135A53 for ; Fri, 19 Apr 2024 16:46:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.181.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545182; cv=none; b=H0xPBj2bvnb3bIIP+pD/O4x2P9R+onzpA5UjoLEbWuDR8/kd8TKdbFeYeRwSodCfiCc4ki5/GOkjLCuLaRDm43a+hli74f5jEa25SvjqKQWm9Vx8NnovApWd5OUTvhF8nPaM4p7zibMt+46FJV9MJMZH18dhN7y2k9PUJNOH+io= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545182; c=relaxed/simple; bh=oOzKEu8v/dbN3erXUWCSo4kTIG/KoxtjlVkCe/qTOKw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=atLGgG+vx2wkNuiaxPZWatayTMnz0zEFqpFOhwCbX3ZlsgCYKCUKWIJI59uvk0K+jb0HcfeUzHjBRVeXg56U60wQ3e//YDlvalD+w6JLD7kzkgxRGxpRYy4aiWy3sGI6IP48i5K8UU5k/Jik3rOpoQ7pdW1LFkH+XEYS/giHSYE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com; spf=pass smtp.mailfrom=getcruise.com; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=L8hgnYCq; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=FiV3qdpJ; arc=none smtp.client-ip=205.220.181.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=getcruise.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="L8hgnYCq"; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="FiV3qdpJ" Received: from pps.filterd (m0286619.ppops.net [127.0.0.1]) by mx0b-003ede02.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 43JEQnBk002949 for ; Fri, 19 Apr 2024 09:46:19 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=ppemail; bh=cupkaHrkFB8Zd95O0Nz/JN FpMJjNzDMV/8Tznzi9+B4=; b=L8hgnYCq7JxgIc9nr/plM58FR9gjO2t57d7V5w MWecRB4dmSSjd5HJBQGGOUP1BgWH6Zs5Xu4QBNJgyGNB6mbcteGaVHjaV6VRR5/M F5ElOMxJsT30HXqqwPMeSbSkQ4CS23GKpkBonfjsH8uj/QMKVooRbAj47yBorwxa QwusuaYqyT9DBd/2Kbat7Oq4u3vFtMPdP8zYRbBJaqzMoufQg1GhNwwvc3pTxCLi CMRhtXwNRMn2l4Pv8vX7C8IWB5qX/9pk1JjKc01RMIUBH9Hbt884WgamSx+dghem Qkmk3xzZ9q2sFHiaVhG5hY754RCWJsyG80e7LXPmh3jD6HNQ== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0b-003ede02.pphosted.com (PPS) with ESMTPS id 3xks4w8584-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Apr 2024 09:46:19 -0700 (PDT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-43689467973so30401731cf.1 for ; Fri, 19 Apr 2024 09:46:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; s=google; t=1713545178; x=1714149978; darn=lists.linux.dev; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=cupkaHrkFB8Zd95O0Nz/JNFpMJjNzDMV/8Tznzi9+B4=; b=FiV3qdpJN65pf8CEoIo9Apr2ie5btzsmue+1l8WVxhnjhjYQub9dfgFZknWGyb+omW UwycdsDgYA2yzyOKx9gU6+yy1ZyLgW/uotLiBxo66YXQyxvvYoAfHMkEtLrxY7cYFyG4 AVuwMHdwUNQVcT8g3CmSf+gDsv2OcsxLP8Lg6IgTWPfmcmR47aFAeTBO7VWc4CWbZhOz LQ0qwu3Ov9fQH2p4xU+ZmeX8JZoncMe5zh9AYzAgFMIQyHwNsYfoHxPICF0DRUaa6M0U waE1EBYAlmEYfxPw4GA1n7wD3Q/rjZEI+Gc+DG0Fe4buMm9ob47F4j7pp09y2Figy1bk Q4/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713545178; x=1714149978; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cupkaHrkFB8Zd95O0Nz/JNFpMJjNzDMV/8Tznzi9+B4=; b=keFTj2DoDUFV3J606nDDaGHhu9oktQTktgR51qv+rUOrspV4AgKbdVDEW0Ar8e/ZHq x5A+vXy+90mGv1yeuncavx+VHsGygAKCHUkz7tPJPKfsxJyyvGCcA/wRcXxSTuY2K1gl BSvzNXUVf7sRklMLMeJ08kc0baVoXIBC36KtmJ48VQv+CFLn5kr+ydZuZHSHadEkrkCv +lQgTahljUhkgcFJKC06LDRSHtVsLipQVgelHX0pRky8WJ4sJJp9NCaHvuKPFhHYDib7 jb5HtrvNqld9uyoB0L7k2LSLUI4oeFFz+mS8i9w1Gv7VCbwK7VvPXE2QoOmKg3MNBaoC eMHg== X-Gm-Message-State: AOJu0YwQdiq0Xf0xWRG3XZpZMwwbhQMShdzYlF3l04Zf1LDMWBvbcNpv JislvnQL4rMOsCj81G3J4srpJdyd7QdCeDvP44cXDa5uTKqJgApS9GLf9XxYT6BKYEtfn1OPMCm bkfVdiTcljwEH0Nmi+r5kkaxXRcigjt8bfjeHgUFkIPbiDDYOajJUBThbIK0+rDaGnEMqxV/KrH dJuivwlFrSN4zF1Gbg0DeL+TtKfHsiuR33SzEoc1Bk4wwGT5g= X-Received: by 2002:ac8:7f14:0:b0:437:b9fb:dcff with SMTP id f20-20020ac87f14000000b00437b9fbdcffmr3145577qtk.7.1713545178561; Fri, 19 Apr 2024 09:46:18 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFEBHLgeK6IV+erma2VoWx/f9ldviqSqPxMgVE+v7mYSgrtEJJp2d7xR7wFLOiI2mQb9iqihw== X-Received: by 2002:ac8:7f14:0:b0:437:b9fb:dcff with SMTP id f20-20020ac87f14000000b00437b9fbdcffmr3145552qtk.7.1713545178172; Fri, 19 Apr 2024 09:46:18 -0700 (PDT) Received: from localhost.localdomain ([140.141.181.78]) by smtp.gmail.com with ESMTPSA id n9-20020a05622a11c900b00437a0c8e662sm1577295qtk.20.2024.04.19.09.46.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 09:46:17 -0700 (PDT) From: Steve Schrock To: ofono@lists.linux.dev Cc: Steve Schrock Subject: [PATCH 5/8] qmi: Prevent clients from unregistering for others Date: Fri, 19 Apr 2024 16:44:55 +0000 Message-Id: <20240419164458.36078-5-steve.schrock@getcruise.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240419164458.36078-1-steve.schrock@getcruise.com> References: <20240419164458.36078-1-steve.schrock@getcruise.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: aYZmILNG4Mz1w9KLJiPMD7sIMbQNKZGr X-Proofpoint-GUID: aYZmILNG4Mz1w9KLJiPMD7sIMbQNKZGr 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-04-19_11,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=920 suspectscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 mlxscore=0 spamscore=0 clxscore=1015 malwarescore=0 phishscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2404190127 qmi_service_unregister was removing the registration that matched an integer ID. This would allow a client to unregister a different client's notification. While this is unlikely it could lead to very confusing bugs. This is easy to prevent by checking both the ID and the service handle. --- drivers/qmimodem/qmi.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index f406d01a8df6..5032233ec1ec 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -330,12 +330,18 @@ static void __notify_free(void *data) l_free(notify); } +struct notify_compare_details { + uint16_t id; + unsigned int service_handle; +}; + static bool __notify_compare(const void *data, const void *user_data) { const struct qmi_notify *notify = data; - uint16_t id = L_PTR_TO_UINT(user_data); + const struct notify_compare_details *details = user_data; - return notify->id == id; + return notify->id == details->id && + notify->service_handle == details->service_handle; } struct service_find_by_type_data { @@ -2962,16 +2968,17 @@ uint16_t qmi_service_register(struct qmi_service *service, bool qmi_service_unregister(struct qmi_service *service, uint16_t id) { - struct service_family *family; struct qmi_notify *notify; + struct notify_compare_details details; if (!service || !id) return false; - family = service->family; + details.id = id; + details.service_handle = service->handle; - notify = l_queue_remove_if(family->notify_list, __notify_compare, - L_UINT_TO_PTR(id)); + notify = l_queue_remove_if(service->family->notify_list, + __notify_compare, &details); if (!notify) return false; From patchwork Fri Apr 19 16:44:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Schrock X-Patchwork-Id: 13636618 Received: from mx0b-003ede02.pphosted.com (mx0b-003ede02.pphosted.com [205.220.181.153]) (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 61A7F1350EC for ; Fri, 19 Apr 2024 16:46:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.181.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545182; cv=none; b=tZGfF3RjlQxOEejvPLy/GqLk1ftmvM8/yWY1Gntnp5bvLrftoUTXDHUrE4AZlbAgpHTJyjtEMMgKp3IQVV8JkvXI+R5rmoWVwVVjIeiARx6R0HJOQKYsbRqOGbcU+Sgy4EbshB3Y29W4ayDNG/avNi6/K+ns7NU+ncs9+4/CWbE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545182; c=relaxed/simple; bh=76YmmnsCUQiQWksFWddTRNyjM2s2Ve1a9NpcAvRe3UU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=F/Kpj7Tqr+wNyA2MkZ7sQ1QbEr6OloiWnDhpg1l5cFD18tuunYi2rf3lBVqOSI5U3Qk8YEMPVi0nNMoXwPlmYTpRyQy0YZdnCV0Rb4f1vknkanUFkQvgr9+SGeP/w/XsjHCwUSIMNb+UBDCgHnXxjpPGofcfK/ktzqSXc2GEBII= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com; spf=pass smtp.mailfrom=getcruise.com; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=KHGFtzqt; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=NDa9OfSA; arc=none smtp.client-ip=205.220.181.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=getcruise.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="KHGFtzqt"; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="NDa9OfSA" Received: from pps.filterd (m0286620.ppops.net [127.0.0.1]) by mx0b-003ede02.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 43JDroco009445 for ; Fri, 19 Apr 2024 09:46:20 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=ppemail; bh=bICY7zvH1uo1MuqT8Dj3zN LD46bL+0GDxMy++ORIzWE=; b=KHGFtzqtdquZAQ1+mmz7Vca1vbMIVr2TDnzZ/J emzLROLuj1bbl+Rh+0arIu0k38b+hvEGAz7FNuqmj6vZ8GVOjAdtqv+ZOuoZDVvV J8pdsmjINQZemnJ7Jkzo5PF4zdTyZl17mYzrtl5OEx5jd+4y6KZ77YT5Q0l+GcoX 0C5SR1G0RWGytA7w4A8gtbVN2z669qzHLOzoYyuH/mYYotBl2cqSX/+3Iv8yX2Fb QKsuvMWsKhpbYvbeL5BFh6Ykg/PRQS/0kM3sDunqPQT1UuODe+PNB1bn19KV5a+2 CFiAFBqGXNltBIArnBc+kB1mDiBBVSk/kR1xO9WxWLZI1HeA== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0b-003ede02.pphosted.com (PPS) with ESMTPS id 3xhyq9twn9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Apr 2024 09:46:20 -0700 (PDT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-4377949a027so42224961cf.0 for ; Fri, 19 Apr 2024 09:46:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; s=google; t=1713545179; x=1714149979; darn=lists.linux.dev; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=bICY7zvH1uo1MuqT8Dj3zNLD46bL+0GDxMy++ORIzWE=; b=NDa9OfSABSr0Wt4HWA2MXsKYrUyMrabjLcCVtv304KIxRWq2mvfHbbBsWXBZJ/Oyy5 XWUXBYcPSeSc8WateaBjiM+x4t/MtdkxoG8U0mJejedMqiFuU1fNYoviTRhpscIb8xqG NJ4C3odaqm/g3avXaU2mQm2imP7+smd59cUGrD3HPgJMGHb0YH/fakT0yFjJC01HpI/3 JHCzT8PpSVRH9wgZm/TA7V/JJ6yZa4K4oI0hg+Lz0Seb33eiviYaYBt/byJHJy7rMyrO Ju0b0DzRtG+Ea9by2hy/vjy5ce9s4C5G8IlL+CQdKdw66bFzXgU33kUPubWyjoSFTPW5 isQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713545179; x=1714149979; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bICY7zvH1uo1MuqT8Dj3zNLD46bL+0GDxMy++ORIzWE=; b=tX5OxB8lqmvMz2eFw/twS4ANA7pb0IapHj3xYsO+10dntWekmUtAY+oSIayGeltfFB 4oj1hgNrHxJAEurik88mZdhtkiTYXTiz4coKZHwZK5+opSLpYmXqx65EvfKm5WoScY7q MB0v5X5tGqn1nCjdLs0KqaFruS3QfrBIyhWb/ICwSQ5tuSBxWC+mwB9rCQs89CNc737X /+kqtcEGJ6wvXrHNrtA2uMpDcbTxzAgnMBU+5R7UjWPQD2Hditk8b8HkWKN5d3aCPbya k/szaZBeQf47Lgn1UbbGHE//GR8yuIQc6fc9DRldhUauZTGQoT1tbAMOVJ2D3jY+dT/w kMMA== X-Gm-Message-State: AOJu0YyJRz/8PWH5+ZEBwZP6EcJ65sAQwfKdw9MC6BQNtX8xnnxlV/yX F9BY54Q5PztKgPCKwxpVIImyfVqvS6Gz/Pq81cMT+LwNqzyAoKkmHd9Ap3sPkpZAAGI1PqAeCSY R8FSPgdujOw9UPsm586xAmkmJKV5uuqDw2UPeVvAoQFw+xkIdxKKgtgkXVv6dZXo6qBbvV8MK/6 pTV4Yk7fl6Ws/77wPMzxUwSgmYnQ4o2TTSNnTEhOXOtNO4TB4= X-Received: by 2002:ac8:7d05:0:b0:436:5a64:5a48 with SMTP id g5-20020ac87d05000000b004365a645a48mr5008398qtb.1.1713545179072; Fri, 19 Apr 2024 09:46:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGWmStAgR1Q33q7ZfifwSz2/ojZIqxonHlHBHIjr9f/I1r2wAiFeHU3oXj8ui2L6nJaN1mZvA== X-Received: by 2002:ac8:7d05:0:b0:436:5a64:5a48 with SMTP id g5-20020ac87d05000000b004365a645a48mr5008367qtb.1.1713545178704; Fri, 19 Apr 2024 09:46:18 -0700 (PDT) Received: from localhost.localdomain ([140.141.181.78]) by smtp.gmail.com with ESMTPSA id n9-20020a05622a11c900b00437a0c8e662sm1577295qtk.20.2024.04.19.09.46.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 09:46:18 -0700 (PDT) From: Steve Schrock To: ofono@lists.linux.dev Cc: Steve Schrock Subject: [PATCH 6/8] qmi unit: Validate creation of services of the same type Date: Fri, 19 Apr 2024 16:44:56 +0000 Message-Id: <20240419164458.36078-6-steve.schrock@getcruise.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240419164458.36078-1-steve.schrock@getcruise.com> References: <20240419164458.36078-1-steve.schrock@getcruise.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-GUID: u0pFUBwXIFsDOC0hzTnWhW-92QHak8Dp X-Proofpoint-ORIG-GUID: u0pFUBwXIFsDOC0hzTnWhW-92QHak8Dp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-19_11,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 spamscore=0 impostorscore=0 malwarescore=0 mlxscore=0 suspectscore=0 priorityscore=1501 mlxlogscore=970 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2404190127 Confirm that there are no problems when clients create services for the same qmi type. --- unit/test-qmimodem-qmi.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 0e15f898f845..8df8b56a79eb 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -221,8 +221,9 @@ static void perform_all_pending_work(void) static void test_create_services(const void *data) { struct test_info *info = test_setup(); + struct qmi_service *services[3]; uint32_t service_type; - int i; + size_t i; perform_discovery(info); @@ -256,6 +257,22 @@ static void test_create_services(const void *data) perform_all_pending_work(); assert(l_queue_isempty(info->services)); + /* Confirm that multiple services may be created for the same type */ + service_type = unique_service_type(0); + + for (i = 0; i < L_ARRAY_SIZE(services); i++) { + assert(qmi_service_create(info->device, service_type, + create_service_cb, info, NULL)); + perform_all_pending_work(); + + assert(l_queue_length(info->services) == 1); + services[i] = l_queue_pop_head(info->services); + assert(services[i]); + } + + for (i = 0; i < L_ARRAY_SIZE(services); i++) + qmi_service_unref(services[i]); + test_cleanup(info); } From patchwork Fri Apr 19 16:44:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Schrock X-Patchwork-Id: 13636619 Received: from mx0b-003ede02.pphosted.com (mx0b-003ede02.pphosted.com [205.220.181.153]) (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 B2F27136678 for ; Fri, 19 Apr 2024 16:46:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.181.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545183; cv=none; b=Qq61PpRhRZIK8MH0ZqW1SiSYQ4SdGEcW9yuLfPUArfnFfdh1gInsqzONnC2WPPVH1AN5FUh2mfmYDNUbroqqJmGz1jo/uBLegqQJVsSoU5pnBZYCzKlU52OjY+LIgJ5fMM1pRd2KrsZJNvR5S1zV/maHgKlP7Pa8QvC9uA4l0tE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545183; c=relaxed/simple; bh=pY2RHgEAYStuKYj5SYMptpDmo6H9GaMi25zFw+RI2ng=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=nvlAboTDI1pvGy/qCv1pUnnoFDm/yg6rVlAcwSGNgmRjLsOTdvniDReaxxu3ezOdxp6Nkid0YLfjKQHuyeh0xOq6CaTGdK6ITkoRbCabi0bcQn7xuDQhTlprONGaxVXWtkaTS/JaIm2LVmCt/eBNQmQUWfS3CTDPSuREkNbCKew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com; spf=pass smtp.mailfrom=getcruise.com; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=Qig+Qjsl; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=hVjEYZUk; arc=none smtp.client-ip=205.220.181.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=getcruise.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="Qig+Qjsl"; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="hVjEYZUk" Received: from pps.filterd (m0286618.ppops.net [127.0.0.1]) by mx0b-003ede02.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 43JERU8J006646 for ; Fri, 19 Apr 2024 09:46:20 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=ppemail; bh=RerN13Hqk/0T7Bajp7gm2t sqmFn4jSI4JXvtwhlDpAQ=; b=Qig+QjslE5a8p9e3Rg/dzc04v6aIv6s1VvgyCI fhGDneXYkBOCQ0zhafyoqaw08YGYHRIyK6ixsSd2T2YvYXL7v8eELnaFYiz/PBMG LgCcF5Iwfd9KoUHY205EoTehwJG4pjqkHSfEvA+ArEcynnWfMlRmZvHWWN2/uelV xI3cpv4eSOx9tSYWfDnDk7kgsmsop0nIScG0X/+wDG4wQdk5a/o5k7Mjxq/TYxsZ avcYvGruDN9fRAnRP8kfGRphtmF3yInVmP8GwMhgy2Oh1T7nXL377FaGilYIe1QR LnxqRkf+mK8MJZVsGYhtnpG0f3XECxIpBjQoI7R0xxciwgzQ== Received: from mail-oi1-f199.google.com (mail-oi1-f199.google.com [209.85.167.199]) by mx0b-003ede02.pphosted.com (PPS) with ESMTPS id 3xk8m70wk5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Apr 2024 09:46:20 -0700 (PDT) Received: by mail-oi1-f199.google.com with SMTP id 5614622812f47-3c613c1c51eso2566992b6e.3 for ; Fri, 19 Apr 2024 09:46:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; s=google; t=1713545179; x=1714149979; darn=lists.linux.dev; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=RerN13Hqk/0T7Bajp7gm2tsqmFn4jSI4JXvtwhlDpAQ=; b=hVjEYZUkEE7nPml9Yhx1+SgaDFwJu7FhY0G5K0UfE7Zjn3nA04ZLbgVQvz8g3bXI5X eI69pNUC69nwL9D4QCxFyKmZVgR7ZmeNS3CUISrUmvKWWzNdDx6ZzLLCQsNY8hfy7QQr Z4qABMRdg3tDzAik/d64zVCUif/13g5GUGdBixR51JdZyJaqLiYHnTJiJvZy8R+3HFkQ tOg19JWt0/D6GlCzW2fbEgYQiF80ppQIluwVfAdlY8G8yxBrxtdEvY/GCexnvugr0Lj3 XPZzuDuYdzfytGi+fKVqe3JinPz/qHHcI2gP3qth23j94MjMAuhmfYrHiy2CBfy0hO4e Viog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713545179; x=1714149979; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RerN13Hqk/0T7Bajp7gm2tsqmFn4jSI4JXvtwhlDpAQ=; b=F1hh9hSCcx2lUfNjfJt8UZm77tTMj38+z46xxN2XWAvrgYvj5asynvwyC7Ak06v4ho tGn2Hxm9mpz7q0rVtKJS67pok3Pofrp0pptQs09h8g/olSLH3iz0XokybqWvPsOTBjwM GcMz5IwgnOORZoNX1rOXJFWQaYEAV5cNKcz0we4oAqTFgq0LU+wlz8AOJGgNZzRGnz8o HUYyENLnbXWOnIl+dRJxO5MUhXSBfXFi6KqxJ0gOLkKeMOUdhP/RicE/GrOm6EuvgPK1 20pAhGooA/gxg1RwB0wwQv9YHykqToxWiYRX0yhAROasS6ZjkMNjKbR8VNXW+qL9WOJr cNeQ== X-Gm-Message-State: AOJu0YzFzC43jSLUxjRdF+zaPtzRze+SvupRd6s1ORgZDG3HNEo/RJ7r Nzh2IGgnxjULWZKCKzobls3BarVKWO1EKun+SHS8w53ZAM/GIauaFthDLZph0XkKMx6yIj264Da TLRF1H3nQsW0eB6MbXmqOZYzCrgZLBTSPuMGoXN6/ryPmSRiTvC1dgorfnZHCrFUrsNPL1ovRtP y24Q+PVlLPm3mZXHVNWOI0lv8ZG4d7mPvUvQctWigcZyGg/8U= X-Received: by 2002:aca:f12:0:b0:3c7:4e3c:8dcc with SMTP id 18-20020aca0f12000000b003c74e3c8dccmr1186398oip.9.1713545179571; Fri, 19 Apr 2024 09:46:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEHEwklmOUjTrRMSf3Yn0VIUIsJBePB1xj76gm8zzvbx3MgIds73t8TV9VZCLWXjH9DT/j+ZQ== X-Received: by 2002:aca:f12:0:b0:3c7:4e3c:8dcc with SMTP id 18-20020aca0f12000000b003c74e3c8dccmr1186381oip.9.1713545179240; Fri, 19 Apr 2024 09:46:19 -0700 (PDT) Received: from localhost.localdomain ([140.141.181.78]) by smtp.gmail.com with ESMTPSA id n9-20020a05622a11c900b00437a0c8e662sm1577295qtk.20.2024.04.19.09.46.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 09:46:19 -0700 (PDT) From: Steve Schrock To: ofono@lists.linux.dev Cc: Steve Schrock Subject: [PATCH 7/8] qmi unit: Validate destroyed services do not notify Date: Fri, 19 Apr 2024 16:44:57 +0000 Message-Id: <20240419164458.36078-7-steve.schrock@getcruise.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240419164458.36078-1-steve.schrock@getcruise.com> References: <20240419164458.36078-1-steve.schrock@getcruise.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: wCxNd5EjSYOmEIeBlV6C4Rze9KAAuP_a X-Proofpoint-GUID: wCxNd5EjSYOmEIeBlV6C4Rze9KAAuP_a X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-19_11,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 impostorscore=0 mlxlogscore=999 phishscore=0 spamscore=0 adultscore=0 priorityscore=1501 mlxscore=0 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2404190127 Confirm that client notifications do occur after unref'ing (destroying) the service. --- unit/test-qmimodem-qmi.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 8df8b56a79eb..43e1bad082ba 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -23,6 +23,13 @@ #define TEST_SERVICE_COUNT 2 #define TEST_TIMEOUT 5 +/* + * The amount of time to wait to validate that something did NOT occur. The + * value is fairly arbitrary -- the longer it is, the longer the tests will take + * to complete. + */ +#define ALLOWED_QRTR_TRANSFER_TIME 100 /* ms */ + struct test_info { int service_fds[TEST_SERVICE_COUNT]; struct qmi_device *device; @@ -36,6 +43,7 @@ struct test_info { bool discovery_callback_called : 1; bool service_send_callback_called : 1; + bool internal_timeout_callback_called : 1; bool notify_callback_called : 1; }; @@ -473,12 +481,20 @@ static void notify_cb(struct qmi_result *result, void *user_data) info->notify_callback_called = true; } +static void internal_timeout_cb(struct l_timeout *timeout, void *user_data) +{ + struct test_info *info = user_data; + + info->internal_timeout_callback_called = true; +} + static void test_notifications(const void *data) { struct test_info *info = test_setup(); struct l_io *io; uint32_t service_type; struct qmi_service *service; + struct l_timeout *receive_timeout; perform_discovery(info); @@ -505,9 +521,26 @@ static void test_notifications(const void *data) while (!info->notify_callback_called) l_main_iterate(-1); - l_io_destroy(io); qmi_service_unref(service); + /* Confirm no notifications received after the service is destroyed */ + info->notify_callback_called = false; + send_message_to_client(&info->sender, io, QMI_MESSAGE_TYPE_IND, 0, + TEST_IND_MESSAGE_ID, + TEST_IND_DATA_VALUE); + + receive_timeout = l_timeout_create_ms(ALLOWED_QRTR_TRANSFER_TIME, + internal_timeout_cb, info, + NULL); + + while (!info->internal_timeout_callback_called) + perform_all_pending_work(); + + assert(!info->notify_callback_called); + + l_timeout_remove(receive_timeout); + + l_io_destroy(io); test_cleanup(info); } From patchwork Fri Apr 19 16:44:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Schrock X-Patchwork-Id: 13636620 Received: from mx0a-003ede02.pphosted.com (mx0a-003ede02.pphosted.com [205.220.169.153]) (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 832A9136678 for ; Fri, 19 Apr 2024 16:46:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.169.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545190; cv=none; b=sbT1XGrtnas/49/yVrH3LYHQ6o6Gpn5s8eIfSj6pb2Z5mmqN/xJ8xaM1rKmrk8DI/iC3gOJO4xiMKwGNbud+JBZxsQ7dVmL9Hj6xVfAN75lH7x3i2lYlDpdgi5BgeLjZaDXjHyRJl3jbkUOvtQ/s1HOIU4sHxvZ/C1doSwVNsH0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713545190; c=relaxed/simple; bh=WUsRo7TKjX3unJBXvFxbJnDH7geQIiVJ6pQjqpgKObM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=m9Y67dn+xCtLVcv1W8LBIuXB34qrqPCzwI5GnpBbSqYntYcHKF6Kw1V8MdMMbjmpmLRmbW1sQXd1Lfe3FjxhDzIqFkjCozHymAXIsQLV25G2L/dcOJvBIIT+DTfS17zosQ8bG6s7941XcGTSKYf7sAXAxtps6Coq152KPIdVQak= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com; spf=pass smtp.mailfrom=getcruise.com; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=ce5r4D81; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b=JB8drhcA; arc=none smtp.client-ip=205.220.169.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=getcruise.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=getcruise.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="ce5r4D81"; dkim=pass (2048-bit key) header.d=getcruise.com header.i=@getcruise.com header.b="JB8drhcA" Received: from pps.filterd (m0286615.ppops.net [127.0.0.1]) by mx0b-003ede02.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 43JEUBju021794 for ; Fri, 19 Apr 2024 09:46:23 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=ppemail; bh=howRC92sCqO08f25FZfFhZ Hwei9MHEfCCe9Ol9r1MoI=; b=ce5r4D81KsQeoyokIrLVmQ5e4NOwZuLqcxvjeD ku0/AWgD/qlZSa24Jd6HY3fbLRN1TV+p0l0qTMKuKUS5AVqfdyhppv6261QWBesh XhmsvFCU8bFfyu2uMg9fbeWGyYEz1O4ntHmUbuS8fN4cgHz4u+9itGn/JIJKqOK1 zCnsjB8rLTVKbZixrQcuNCXUI7kS8AOgsz9gwQgbeaMgcOcqRa7alEK2Rt49dz+L V7egsufu0HlrIY2XbxklLNL9asKbeD6S1hDfEE26IpsvOcs+AICAhZs8wYdMdhn+ T5gZ1Os9B6O3NEK1a0G/+opNGvleCz3pFelcoey5gh+KVXAQ== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0b-003ede02.pphosted.com (PPS) with ESMTPS id 3xfp8hnep2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Apr 2024 09:46:23 -0700 (PDT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-4347271f444so24528791cf.2 for ; Fri, 19 Apr 2024 09:46:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=getcruise.com; s=google; t=1713545182; x=1714149982; darn=lists.linux.dev; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=howRC92sCqO08f25FZfFhZHwei9MHEfCCe9Ol9r1MoI=; b=JB8drhcA08LYBcc32vzI4PYtp9maw9eLTWFmmyzaa3lRbgqgT+ahqJpvwIysQ5AKCJ eKJpvYHYLlK/dMKCO/VJr1EMIgf87tDuFvvXSkBEUdBiLxxyp1EDP1Et8zBAh/H8boR+ 0YltyrMIlBSxlInZr84kPTZ8fgqzWjDMcvSYDBr9kYy5lM1KP1yNHdoCrFg03epCgFJ1 jaZ+PG2FgWKdvS0Cz1z814YAq8W58MDRr87xiPqOUEVqYdKl8OYuxgsgB9/b8qKDMfSW rrCnw92N5z8Hyejsi3P8Yr/TjoenipTwMEL+wjGbekTjegK6A8wAKrLdnRF+B1yUtWUH AHFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713545182; x=1714149982; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=howRC92sCqO08f25FZfFhZHwei9MHEfCCe9Ol9r1MoI=; b=MaQy/RpQvJBqnFBmzo2qTY96XuMf273m75FvkQ+TxRDdUWafUSvQg2P1qUX6bFyPzE AzX4BvVfwDkbwuOrsaHHK0pXm0R2leSk+HwEWrqIlPNyevY+XSs9w8Uu5kuHvW4XDoHO SxmmJGkA+/uhrvtO5PYofVzwz2kC0qTs/lOk+iUPQQXi4IBUDjELRH76ZM8XUZBGxpnC W7ONncLpbpk1QkcRhkLGec8EKsiXzavBXJnK7rnzJFxlgx0MODpihivFRPfhVgJpN1vM N3MO+fMYqc8K1iogIYLLzeBFCyKUb5HF3WYsLO1mMG+TTow9S2VGjwZAo1IdUlGoSzR/ xLZQ== X-Gm-Message-State: AOJu0YyommkEU59SsF+1YfS2aK0UmDKQIaVo3X557thvxfDTMLaqwEMn m2XKGNRRJ0WqHGx0rU+8vw1aH1+Y0oX+nrdlSGVUmduMCb1Rwnt1J4+63PLIOEwVh4m7aBVFwBY AXBcvLPiCPxDsQtYuhPCeuJg+0u0O1rZEyKPu8TWXTS37hE5dPtbZA7zsw2hiEpMZFjh4WJiXcg XRzbkF/afJ6J0wN1Yn1YPfo4cAwsiyyo/LWtSWHP8IgxZfIs0= X-Received: by 2002:a05:622a:4b17:b0:437:cc6a:87f4 with SMTP id et23-20020a05622a4b1700b00437cc6a87f4mr2667333qtb.31.1713545181711; Fri, 19 Apr 2024 09:46:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE72TVws2GnPZqhCzQM1IRR657dHrk1pfccdF70Lgtdh2ueARKNbumuqZSShoJT5Ha1qo9Vfg== X-Received: by 2002:a05:622a:4b17:b0:437:cc6a:87f4 with SMTP id et23-20020a05622a4b1700b00437cc6a87f4mr2667306qtb.31.1713545181342; Fri, 19 Apr 2024 09:46:21 -0700 (PDT) Received: from localhost.localdomain ([140.141.181.78]) by smtp.gmail.com with ESMTPSA id n9-20020a05622a11c900b00437a0c8e662sm1577295qtk.20.2024.04.19.09.46.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 09:46:19 -0700 (PDT) From: Steve Schrock To: ofono@lists.linux.dev Cc: Steve Schrock Subject: [PATCH 8/8] qmi unit: Validate notifications are independent Date: Fri, 19 Apr 2024 16:44:58 +0000 Message-Id: <20240419164458.36078-8-steve.schrock@getcruise.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240419164458.36078-1-steve.schrock@getcruise.com> References: <20240419164458.36078-1-steve.schrock@getcruise.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: 2F5KAZ8A70Lngg7a2iGUJF6AXWgtrxdV X-Proofpoint-GUID: 2F5KAZ8A70Lngg7a2iGUJF6AXWgtrxdV 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-04-19_11,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 mlxlogscore=780 lowpriorityscore=0 adultscore=0 clxscore=1015 spamscore=0 malwarescore=0 impostorscore=0 suspectscore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2404190127 Destroying one service should not affect notifications for different services of the same type. --- unit/test-qmimodem-qmi.c | 57 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 43e1bad082ba..7d1a33eff9b1 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -47,6 +47,13 @@ struct test_info { bool notify_callback_called : 1; }; +static void info_clear_received(struct test_info *info) +{ + l_free(info->received); + info->received = NULL; + info->received_len = 0; +} + static uint32_t unique_service_type(uint32_t index) { /* Try to use a value that will not conflict with any real services. */ @@ -544,6 +551,54 @@ static void test_notifications(const void *data) test_cleanup(info); } +static void test_service_notification_independence(const void *data) +{ + struct test_info *info = test_setup(); + struct l_io *io; + uint32_t service_type; + struct qmi_service *services[2]; + size_t i; + + perform_discovery(info); + + service_type = unique_service_type(0); /* Use the first service */ + + io = l_io_new(info->service_fds[0]); + assert(io); + l_io_set_read_handler(io, received_data, info, NULL); + + for (i = 0; i < L_ARRAY_SIZE(services); i++) { + assert(qmi_service_create(info->device, service_type, + create_service_cb, info, NULL)); + perform_all_pending_work(); + services[i] = l_queue_pop_head(info->services); + assert(services[i]); + + send_request_via_qmi(info, services[i]); + send_response_to_client(info, io); + + qmi_service_register(services[i], TEST_IND_MESSAGE_ID, + notify_cb, info, NULL); + + info_clear_received(info); + } + + qmi_service_unref(services[0]); + + send_message_to_client(&info->sender, io, QMI_MESSAGE_TYPE_IND, 0, + TEST_IND_MESSAGE_ID, + TEST_IND_DATA_VALUE); + + while (!info->notify_callback_called) + l_main_iterate(-1); + + for (i = 1; i < L_ARRAY_SIZE(services); i++) + qmi_service_unref(services[i]); + + l_io_destroy(io); + test_cleanup(info); +} + static void exit_if_qrtr_not_supported(void) { int fd; @@ -574,6 +629,8 @@ int main(int argc, char **argv) l_test_add("QRTR services may be created", test_create_services, NULL); l_test_add("QRTR service sends/responses", test_send_data, NULL); l_test_add("QRTR notifications", test_notifications, NULL); + l_test_add("QRTR service notifications are independent", + test_service_notification_independence, NULL); result = l_test_run(); __ofono_log_cleanup();