From patchwork Mon Jan 8 12:34:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Marussi X-Patchwork-Id: 185961 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:37c1:b0:101:2151:f287 with SMTP id y1csp991477dyq; Mon, 8 Jan 2024 04:43:47 -0800 (PST) X-Google-Smtp-Source: AGHT+IGMlJOU7idzcT5IIhYbXt8zfVKJ0iioSD5aCuXpTdH2FgnpuXTVvrU+7OTUdhb6AmGv6NM2 X-Received: by 2002:a05:622a:388:b0:428:1eda:c4fa with SMTP id j8-20020a05622a038800b004281edac4famr4713212qtx.104.1704717827727; Mon, 08 Jan 2024 04:43:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704717827; cv=none; d=google.com; s=arc-20160816; b=mM4tiEU0RCAlu8jA2x0tY/yEpLXDb6j/MSEQAXAFKYsHHclPOJDh4uo2jrSMxCnN4e 9st+Kj43Onl9WjS+DFwd1PUbL9t9JTDynj3P94mgI752SqVvOFKA22hLDXEA1ZF24+sU stJW8LDkEvc11/TtWd8EQbGPl9H5Yvd5SfXTD1TSLlRttp01hDE4GWXsCUrsX6U+kbQg rx1XxyH6X1x4b8GqIYSTBS0BJjikvsh8zarPq22vZrUkO2iCu6hWXISYssCkzVnKnOgF 8INgwyFRPfIfos5cGQA+ZZRI22K6+sSIn+nUo4Rtd+SKztYOQw/5osYNTpiPTni4m8nA u3sQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from; bh=dPwmR5RxCoVsRenHBy+VyN4AV1HA5zeVlmn0liWwxOA=; fh=yC+rbCZNfEFN2DLpTF2BdyYiHEbBGXmYn79WNneL20w=; b=oX7L3a7dLW70Q5WN2aV1oUTkchil8+Kzmqbicfwtq2n3VThgjIfjSaLLEK60SaZHIn +6P3PY7xxYRfSWO2podMoQ+lJIAvWBykNvk4cLzU81uMaTg18QniA1RUS5Iz9NbaUziH YNPy55P3KSYgiAZdo0T96i3DRltvNOkE2O0IlXlByu2lZLMYISmVJonCztWUJF9HBotY cisOKmli+P/oIJeH4H6sA8S4MudNdj3YBus5Pgr31FQLOwQ+5GfOdjcpzfSX61s+f6ms xtLVMhuBpQQK2Cr5RRksMwjCQdU4NU/qgqyU7p/c2NcHJREAR7ZUDntmi8XqGbCclVhX N3yQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19542-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19542-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id u15-20020a05622a010f00b004297d0709e2si6255451qtw.103.2024.01.08.04.43.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 04:43:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-19542-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19542-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19542-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 86D6A1C224CB for ; Mon, 8 Jan 2024 12:43:47 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5234145BE8; Mon, 8 Jan 2024 12:34:51 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 25C2740C0C for ; Mon, 8 Jan 2024 12:34:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0F46CFEC; Mon, 8 Jan 2024 04:35:33 -0800 (PST) Received: from [127.0.1.1] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 725F13F64C; Mon, 8 Jan 2024 04:34:46 -0800 (PST) From: Cristian Marussi Date: Mon, 08 Jan 2024 12:34:11 +0000 Subject: [PATCH 1/6] firmware: arm_ffa: Add missing rwlock_init() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240108-ffa_fixes_6-8-v1-1-75bf7035bc50@arm.com> References: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> In-Reply-To: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> To: Sudeep Holla Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Cristian Marussi X-Mailer: b4 0.12.4 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787526200924275086 X-GMAIL-MSGID: 1787526200924275086 Add missing rwlock initialization. Fixes: 0184450b8b1e ("firmware: arm_ffa: Add schedule receiver callback mechanism") Signed-off-by: Cristian Marussi --- drivers/firmware/arm_ffa/driver.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c index 6146b2927d5c..ed1d6a24934e 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -1226,6 +1226,7 @@ static void ffa_setup_partitions(void) ffa_device_unregister(ffa_dev); continue; } + rwlock_init(&info->rw_lock); xa_store(&drv_info->partition_info, tpbuf->id, info, GFP_KERNEL); } drv_info->partition_count = count; From patchwork Mon Jan 8 12:34:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Marussi X-Patchwork-Id: 185962 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:37c1:b0:101:2151:f287 with SMTP id y1csp991667dyq; Mon, 8 Jan 2024 04:44:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IHl6v/J4xp5LTKk4jwQ4Wjrv+rOswegBu//o3KiwN6OZVoQqv2BJ//sOtkTsSuAGT9129Sd X-Received: by 2002:a50:d481:0:b0:557:4227:e2bf with SMTP id s1-20020a50d481000000b005574227e2bfmr2349057edi.35.1704717850230; Mon, 08 Jan 2024 04:44:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704717850; cv=none; d=google.com; s=arc-20160816; b=qFJIOgPYJ/Pp1FH5sfAZ9irbBUBonTJQ6dDw3fICsrA9meN4A2s8K050aAPejtJpR9 GRfPOCFS9EMlO+yTM1baZXh26BTTk3b7MgHCt6enDPSA0O2Sb54auOy8Jnv1x2i6zvK1 A3HgHrrCFcaQJ7+kf8yNpgSLT48XE/SSCg2TiDtvTjGYumGV5AMmOWF/TpvzzLZSVxiw 3+PDBsQPIE+/HU+PTynze75XjfCbY38oFfA8hjyWJbwQf7GVh3p4gNWHJ4OXfT1mMPXs xyE9VA4apfo9NDKG1f40z+8adGerA+INYajb89k3FD1mttHd6m/hihPP5G0wXdEWoIiZ FIHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from; bh=Mlu4ctkJ4qmDYk0U52J18Z0eimrYnryc9lcBnNFTVXo=; fh=yC+rbCZNfEFN2DLpTF2BdyYiHEbBGXmYn79WNneL20w=; b=umxxP2x+i6FWGld8PJ4HyXv+icuRer6d2q7TRb5jtJGGle1hv9PmRW5Exzb0JoCWYJ 6a5C2zwPUhWdoiN8kjzRkttM+k7sKA/JZ25SKJOb8enQyJ03qY8ggM7E4KOe1jaG1r4x UcE54Jisv8xWxPz80jJJwUcQQb4UpmuZ8ccKoxnrNEoW6lzXkUelknvRFkfBNlfUVRsi NzLA68lY3H7MagZPi3f6kNeJbVRTsQ5wBwX4teCelNJjLOeOHEuJxgOPtiycAuonTQTO zHorAaClQxWulyT6DhxODsDpcDGOdaGeRtBw/cc/q0YMqBCvGIo/OEljXQMxr6euoRTe zegg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19543-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19543-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id w9-20020a05640234c900b00553522e101dsi3222083edc.313.2024.01.08.04.44.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 04:44:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-19543-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19543-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19543-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.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 am.mirrors.kernel.org (Postfix) with ESMTPS id D35F21F22DD2 for ; Mon, 8 Jan 2024 12:44:09 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0172645C16; Mon, 8 Jan 2024 12:34:52 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 72D8541210 for ; Mon, 8 Jan 2024 12:34:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DD8D21477; Mon, 8 Jan 2024 04:35:33 -0800 (PST) Received: from [127.0.1.1] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4E5773F64C; Mon, 8 Jan 2024 04:34:47 -0800 (PST) From: Cristian Marussi Date: Mon, 08 Jan 2024 12:34:12 +0000 Subject: [PATCH 2/6] firmware: arm_ffa: Add missing host rwlock_init() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240108-ffa_fixes_6-8-v1-2-75bf7035bc50@arm.com> References: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> In-Reply-To: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> To: Sudeep Holla Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Cristian Marussi X-Mailer: b4 0.12.4 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787526224797447497 X-GMAIL-MSGID: 1787526224797447497 Add missing rwlock initialization for host partition setup. Fixes: 1b6bf41b7a65 ("firmware: arm_ffa: Add notification handling mechanism") Signed-off-by: Cristian Marussi --- drivers/firmware/arm_ffa/driver.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c index ed1d6a24934e..8df92c9521f4 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -1237,6 +1237,7 @@ static void ffa_setup_partitions(void) info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) return; + rwlock_init(&info->rw_lock); xa_store(&drv_info->partition_info, drv_info->vm_id, info, GFP_KERNEL); drv_info->partition_count++; } From patchwork Mon Jan 8 12:34:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Marussi X-Patchwork-Id: 185968 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:37c1:b0:101:2151:f287 with SMTP id y1csp993307dyq; Mon, 8 Jan 2024 04:47:20 -0800 (PST) X-Google-Smtp-Source: AGHT+IHZhzUh7t6ykFgIFjyp0jquaJF5qc0ATYW+YajnX96bp1nH5r4By8FiaiEKyrES2935iWLR X-Received: by 2002:a17:903:2345:b0:1d4:c7d5:3587 with SMTP id c5-20020a170903234500b001d4c7d53587mr1584336plh.9.1704718039863; Mon, 08 Jan 2024 04:47:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704718039; cv=none; d=google.com; s=arc-20160816; b=j56cyzntIgDlwksZiQ2L9kJ1maFQyODAFVaQMTy3OSb7cZVdIvBOAUNMqJXeh7PsXI S58Rf7scveLdpzJfkat3xPfaI5wgmMR5zGAK+bfImTvaBPr0EsA4GJKi1UZG3WzAGbQA pUA81/Lh2Px7UUl1tPBVeghpwFfC8AdlamQdYLVFFqVaktB2dEhDEGbCJFzk6Nr1ap+t sAMePWfr5wCPGslt/67a/mK8eKsJn25VzHxAZHIYcC46SbrGRR9a44Mqb+Oc0C0N/nFu KvfgWhQR2lJqDV9VHCs0BS02Pd0UEOgQ2FY5cLsDybcCh+zGYrx+guX2ByIas8rCzHWG B4jQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from; bh=RFlh8ohF6AoX6LJZqwN9ADcEcRo21qT+Z+egWNTMZyc=; fh=yC+rbCZNfEFN2DLpTF2BdyYiHEbBGXmYn79WNneL20w=; b=xWWAaWNC7Z378FZ+Ew4gUfhCfPzWkIHBc5Ug14NwS5Gys23wOXiHsyOKk93gwkbN8Y NEuVbIsm9unn01GfPU+CDs2AIl+jIYNphfZfI+shrHNqqt/JQmTM6g+mpXQ3V2zhNrs7 h4p+Q1KWO/oBJ/aBkb6jNg8SCxPDPX1wex56veUv05FgiX/mGRfg7O3pyb/IsLT8JfrW gOyGX4jkDWb1ZJ05gnzi6oFSDaJ0FcbHCy5w/Gjv9bwrHn+9nEoDNkqtTVMJmTllUy2v qKZLLp+jDCJSWMXf+EfytNMK6rZFLczuRjP+QOw2AAaKPmmAIxJTKLjNjJ0d7htnKBaK K+Ew== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19545-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19545-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id c3-20020a170902848300b001d3db70d148si5957241plo.38.2024.01.08.04.47.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 04:47:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-19545-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19545-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19545-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.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 sy.mirrors.kernel.org (Postfix) with ESMTPS id C55E4B2240B for ; Mon, 8 Jan 2024 12:44:27 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BE9DD46444; Mon, 8 Jan 2024 12:34:52 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 959C344C9D for ; Mon, 8 Jan 2024 12:34:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C60051480; Mon, 8 Jan 2024 04:35:34 -0800 (PST) Received: from [127.0.1.1] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 28D113F64C; Mon, 8 Jan 2024 04:34:48 -0800 (PST) From: Cristian Marussi Date: Mon, 08 Jan 2024 12:34:13 +0000 Subject: [PATCH 3/6] firmware: arm_ffa: Check xa_load() return value Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240108-ffa_fixes_6-8-v1-3-75bf7035bc50@arm.com> References: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> In-Reply-To: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> To: Sudeep Holla Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Cristian Marussi X-Mailer: b4 0.12.4 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787526423255276490 X-GMAIL-MSGID: 1787526423255276490 Add a check to verify the result of xa_load() during partition lookups. Fixes: 0184450b8b1e ("firmware: arm_ffa: Add schedule receiver callback mechanism") Signed-off-by: Cristian Marussi --- drivers/firmware/arm_ffa/driver.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c index 8df92c9521f4..0ea1dd6e55c4 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -733,6 +733,11 @@ static void __do_sched_recv_cb(u16 part_id, u16 vcpu, bool is_per_vcpu) void *cb_data; partition = xa_load(&drv_info->partition_info, part_id); + if (!partition) { + pr_err("%s: Invalid partition ID 0x%x\n", __func__, part_id); + return; + } + read_lock(&partition->rw_lock); callback = partition->callback; cb_data = partition->cb_data; @@ -915,6 +920,11 @@ static int ffa_sched_recv_cb_update(u16 part_id, ffa_sched_recv_cb callback, return -EOPNOTSUPP; partition = xa_load(&drv_info->partition_info, part_id); + if (!partition) { + pr_err("%s: Invalid partition ID 0x%x\n", __func__, part_id); + return -EINVAL; + } + write_lock(&partition->rw_lock); cb_valid = !!partition->callback; From patchwork Mon Jan 8 12:34:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Marussi X-Patchwork-Id: 185963 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:37c1:b0:101:2151:f287 with SMTP id y1csp991912dyq; Mon, 8 Jan 2024 04:44:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IFPi2ZScGRQLjS8FjTnx/6TBYxDe6mVqMkcJCLZP6MHlAZE1mj78355adQVMFvFMcyw5bt9 X-Received: by 2002:a17:906:2745:b0:a27:941e:8d18 with SMTP id a5-20020a170906274500b00a27941e8d18mr1498811ejd.145.1704717878317; Mon, 08 Jan 2024 04:44:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704717878; cv=none; d=google.com; s=arc-20160816; b=SY6aIYZJbzd/RDsccs7+lUXFr8uJDMUbGoGfOt6rPXOtPHdyfULsLgI+fSsag7GeYp T1TeDUh/ewVsWSjxjfd43d6dRSra9UrV+aqfMUFezfkxPLedMjBifHvvoOCzHc92IURI uXxHp+ZebYtg4g8ubdamB4gSgQ0lhkZlPDuhs1HUy4OMdd9qhovAoM2ZJLtxhfxXwuW5 9E/2Tk/uOZ0u+eYlkhbMRLgLOOGVvSTdQEYvdnDrPKLiblw+hwFTr+IJd8c1SeaVDPrH aCfjJuSY1zPXk9L7AH6er6PtDbbF7GBlgTrurABaB1vShbQqkHAyy2a1MJU33Ianvfco B4bA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from; bh=yoiKWEQr4bJRaiiIVrIHBV/Qg2hVIGB+s7gWHplUwcs=; fh=yC+rbCZNfEFN2DLpTF2BdyYiHEbBGXmYn79WNneL20w=; b=QsKr4WS61fFSe0vhTr1L2t1zvofahpFh4WZ/IM9QMqSs6DTb8y1LqyqkSpeWWymelh PTeSkIfKYEYwhQQK0lTOuQw9Y1+bpnABnsTNIz9gr8cOtPpLtzoPne95YofDAOYpqemo Rl+tExLIRzRz64cIS4CFKvmU0zm+ijXav+k0sKGQv4GC+9kaqW6BWY5duunIaF1veQeb xveAAJj3FC5NHe9mNw+wEdQgPDgJj632oAEH1WLFLamSBXoz6UPFw8rYv31Mq4Di6AcO InDrlqobF9PQ7+NCPEYxM0kEwb21AaDzmh8lsBCbcP4ypw4cq1MdNg0/C/U2Wzld8a2A /hzA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19546-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19546-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id gi9-20020a1709070c8900b00a27dc6f2477si692447ejc.203.2024.01.08.04.44.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 04:44:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-19546-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19546-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19546-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.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 am.mirrors.kernel.org (Postfix) with ESMTPS id E0C011F22D4C for ; Mon, 8 Jan 2024 12:44:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 31A8755E4B; Mon, 8 Jan 2024 12:34:53 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1CBBB45954 for ; Mon, 8 Jan 2024 12:34:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A22A6150C; Mon, 8 Jan 2024 04:35:35 -0800 (PST) Received: from [127.0.1.1] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 114313F64C; Mon, 8 Jan 2024 04:34:48 -0800 (PST) From: Cristian Marussi Date: Mon, 08 Jan 2024 12:34:14 +0000 Subject: [PATCH 4/6] firmware: arm_ffa: Simplify ffa_partitions_cleanup() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240108-ffa_fixes_6-8-v1-4-75bf7035bc50@arm.com> References: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> In-Reply-To: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> To: Sudeep Holla Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Cristian Marussi X-Mailer: b4 0.12.4 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787526254127935151 X-GMAIL-MSGID: 1787526254127935151 On cleanup iterate the XArrays with xa_for_each() and remove the existent entries with xa_erase(), finally destroy the XArray itself. Remove partition_count field from drv_info since no more used anywhwere. Signed-off-by: Cristian Marussi --- drivers/firmware/arm_ffa/driver.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c index 0ea1dd6e55c4..2426021dbb58 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -107,7 +107,6 @@ struct ffa_drv_info { struct work_struct notif_pcpu_work; struct work_struct irq_work; struct xarray partition_info; - unsigned int partition_count; DECLARE_HASHTABLE(notifier_hash, ilog2(FFA_MAX_NOTIFICATIONS)); struct mutex notify_lock; /* lock to protect notifier hashtable */ }; @@ -1239,7 +1238,6 @@ static void ffa_setup_partitions(void) rwlock_init(&info->rw_lock); xa_store(&drv_info->partition_info, tpbuf->id, info, GFP_KERNEL); } - drv_info->partition_count = count; kfree(pbuf); @@ -1249,29 +1247,18 @@ static void ffa_setup_partitions(void) return; rwlock_init(&info->rw_lock); xa_store(&drv_info->partition_info, drv_info->vm_id, info, GFP_KERNEL); - drv_info->partition_count++; } static void ffa_partitions_cleanup(void) { - struct ffa_dev_part_info **info; - int idx, count = drv_info->partition_count; - - if (!count) - return; - - info = kcalloc(count, sizeof(*info), GFP_KERNEL); - if (!info) - return; - - xa_extract(&drv_info->partition_info, (void **)info, 0, VM_ID_MASK, - count, XA_PRESENT); + struct ffa_dev_part_info *info; + unsigned long idx; - for (idx = 0; idx < count; idx++) - kfree(info[idx]); - kfree(info); + xa_for_each(&drv_info->partition_info, idx, info) { + xa_erase(&drv_info->partition_info, idx); + kfree(info); + } - drv_info->partition_count = 0; xa_destroy(&drv_info->partition_info); } @@ -1547,7 +1534,6 @@ static void __exit ffa_exit(void) ffa_rxtx_unmap(drv_info->vm_id); free_pages_exact(drv_info->tx_buffer, RXTX_BUFFER_SIZE); free_pages_exact(drv_info->rx_buffer, RXTX_BUFFER_SIZE); - xa_destroy(&drv_info->partition_info); kfree(drv_info); arm_ffa_bus_exit(); } From patchwork Mon Jan 8 12:34:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Marussi X-Patchwork-Id: 185964 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:37c1:b0:101:2151:f287 with SMTP id y1csp992061dyq; Mon, 8 Jan 2024 04:44:56 -0800 (PST) X-Google-Smtp-Source: AGHT+IHE4EtdPTBRzw86u8bpXEdCCNYzZUbcineFFTtPPhaxpKK1FB+WDugicyGjfDJOKVn4A97F X-Received: by 2002:a17:907:747:b0:a19:a19b:788b with SMTP id xc7-20020a170907074700b00a19a19b788bmr1862561ejb.78.1704717896604; Mon, 08 Jan 2024 04:44:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704717896; cv=none; d=google.com; s=arc-20160816; b=c0n+QrgZXnd4cRJ/+EsswHo6bGiZFQDTxaz4vmDmh/h1Ol7kYtrvRkP3CmiAODBd7a 0dnPwrUpvzA1fz1QGZvQnnBpnfMFYd/gIzjZT+BqdN11ef6OkD6kFuP3gYjekbOqj8Pp tTpGkkVYpFwRhXWG5q0hn+7lLpZUMDYQKnSTG0bnkQTwQh+K25TY7hVd5EzGYB9407Ny iFJYZVwpsRnKYJ9HshnWxVMbwPgktFc8JMexlM6bv5+CsnQ05djEgWy9Grb8EGH5EyMx 6BEn6P/GJ9Dy3WAqDgelXNoGHlbfOekpfGvruH/GXUNHAFKLrAETOeSSY1xZeEwdk8Iq l80Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from; bh=ANbteUQBhExyoSug+rq+Hl3mfqOmQ1zr3Y+qTmR5r4I=; fh=yC+rbCZNfEFN2DLpTF2BdyYiHEbBGXmYn79WNneL20w=; b=XZ8/518JWPfVZ5vnE22E62ExhnkmjhvHNkWKpq4SpGS8zXzcUZSMB2kVJGUfqCqy/Q HqBy3RZvCcfO760kSEpWiX1+PmttXACj3ReQdz/nYIty5Xfj/XRZq8Xdetl+4bVItk9U Ql/aI79E3SRv2+gq1+HuwaX27LHsOoQluQebxrf7Q/qTKiqUtgJKNxZOxtneQhNUOLcZ zGPucbi8sNjnhfRiKhba7YbVPHLrTajFcyollno8YjxeUAF/4FZ4erSNfBhoqbRQk+pm KReK1wYKk1y9qp92grYsTP+6RmKqe6QHYere0sByEYRMtMzT7rwyJHkdXgUlH71TRiau xjpw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19547-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19547-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id y18-20020a170906471200b00a289be27578si3189423ejq.136.2024.01.08.04.44.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 04:44:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-19547-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19547-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19547-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.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 am.mirrors.kernel.org (Postfix) with ESMTPS id 344451F22E46 for ; Mon, 8 Jan 2024 12:44:56 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3630D55E7B; Mon, 8 Jan 2024 12:34:54 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2F9FC4597F for ; Mon, 8 Jan 2024 12:34:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 95B3AC15; Mon, 8 Jan 2024 04:35:36 -0800 (PST) Received: from [127.0.1.1] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E13CE3F64C; Mon, 8 Jan 2024 04:34:49 -0800 (PST) From: Cristian Marussi Date: Mon, 08 Jan 2024 12:34:15 +0000 Subject: [PATCH 5/6] firmware: arm_ffa: Use xa_insert() and check for result Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240108-ffa_fixes_6-8-v1-5-75bf7035bc50@arm.com> References: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> In-Reply-To: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> To: Sudeep Holla Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Cristian Marussi X-Mailer: b4 0.12.4 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787526272762239820 X-GMAIL-MSGID: 1787526272762239820 While adding new partitions descriptors to the XArray the outcome of the stores should be checked and, in particular, it has also to be ensured that an existing entry with the same index was not already present, since partitions IDs are expected to be unique. Use xa_insert() instead of xa_store() since it returns -EBUSY when the index is already in use and log an error when that happens. Signed-off-by: Cristian Marussi --- drivers/firmware/arm_ffa/driver.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c index 2426021dbb58..c613b57747cf 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -1197,7 +1197,7 @@ void ffa_device_match_uuid(struct ffa_device *ffa_dev, const uuid_t *uuid) static void ffa_setup_partitions(void) { - int count, idx; + int count, idx, ret; uuid_t uuid; struct ffa_device *ffa_dev; struct ffa_dev_part_info *info; @@ -1236,7 +1236,14 @@ static void ffa_setup_partitions(void) continue; } rwlock_init(&info->rw_lock); - xa_store(&drv_info->partition_info, tpbuf->id, info, GFP_KERNEL); + ret = xa_insert(&drv_info->partition_info, tpbuf->id, + info, GFP_KERNEL); + if (ret) { + pr_err("%s: failed to save partition ID 0x%x - ret:%d\n", + __func__, tpbuf->id, ret); + ffa_device_unregister(ffa_dev); + kfree(info); + } } kfree(pbuf); @@ -1246,7 +1253,13 @@ static void ffa_setup_partitions(void) if (!info) return; rwlock_init(&info->rw_lock); - xa_store(&drv_info->partition_info, drv_info->vm_id, info, GFP_KERNEL); + ret = xa_insert(&drv_info->partition_info, drv_info->vm_id, + info, GFP_KERNEL); + if (ret) { + pr_err("%s: failed to save Host partition ID 0x%x - ret:%d. Abort.\n", + __func__, drv_info->vm_id, ret); + kfree(info); + } } static void ffa_partitions_cleanup(void) From patchwork Mon Jan 8 12:34:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Marussi X-Patchwork-Id: 185965 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:37c1:b0:101:2151:f287 with SMTP id y1csp992213dyq; Mon, 8 Jan 2024 04:45:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IFbsjK1DMJYuPMFCBIrt/EMLtxRE6mWsucgZZKHB6z+V6YSsMj3s3O6/3S/CfoGsZklOHnW X-Received: by 2002:a05:6e02:1748:b0:35f:ec66:154e with SMTP id y8-20020a056e02174800b0035fec66154emr4366107ill.64.1704717912017; Mon, 08 Jan 2024 04:45:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704717911; cv=none; d=google.com; s=arc-20160816; b=IwbcWqrTDtRq4VT+1HgPwieUCa/+AV2suqvpv5b+7rcfkd0KzUCLeGKvQXwBQm94vW IhF8TsB5LnfZ9Vj/HjHEpLYmKqgDTmEZ5CT261kHBvt7RcZGy7UEaPYpbpFN0ST7R7l3 BVPiv782NRY2UpE7CXCbRqSfT74mhZSAJtT15boKYKs4FjsjqqKakAt+F65hdPtVB5Kb nZutP5/tHR53Gz4ZOR7q6m36/mpnaCKAEu9qpLwKbkafmFLAiTTkR83CXj7vC+7PZUjq +ajhGRkMgSrQJB+cEaLW06KtGB7sJgWYxh6Fs0hjExje1cd0Q8DrMOXBnLlQQxxoGYeD iGaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from; bh=gjilvIZC5jLJtGLn1OGIXr09e2TXl2yMn1lrsM0Mr44=; fh=yC+rbCZNfEFN2DLpTF2BdyYiHEbBGXmYn79WNneL20w=; b=kFKuc9OKLsweRIjvzbGSXNBJGsNVBg6nNX6oAQclkpZ3mYVJT/40IlgJHKjwDWyj+1 87eiMPQEhn/8nxtpTWpsEo+YgBQn2Suob/DFejnXTSF6mc3F+NMP5Jg0Vrmz+J6z4vwd Rvqnzj5KTUyCtqp9b9+Um2VrMDeDBz4BhDEkFV+W91HMns17zRaZNoC9qHhxZN1p9ijB deluI1QPq0rHkvptfPnCN5iPQVBlQpH66YLBNyJDTI6mqYJnuGP48Yp1SfE5ZgD+FgoM yFXaim/X5sHu2M553978gLUenWXGCScYJDvEvebpS56YE1Ibn7kQLRueCoDHvWKHesup C1bg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-19548-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19548-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id w186-20020a6362c3000000b005ce0474353csi5976663pgb.238.2024.01.08.04.45.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 04:45:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-19548-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; spf=pass (google.com: domain of linux-kernel+bounces-19548-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19548-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.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 DB003280F33 for ; Mon, 8 Jan 2024 12:45:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E4C565644F; Mon, 8 Jan 2024 12:34:54 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9D69945BFC for ; Mon, 8 Jan 2024 12:34:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 703E6FEC; Mon, 8 Jan 2024 04:35:37 -0800 (PST) Received: from [127.0.1.1] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D55CD3F64C; Mon, 8 Jan 2024 04:34:50 -0800 (PST) From: Cristian Marussi Date: Mon, 08 Jan 2024 12:34:16 +0000 Subject: [PATCH 6/6] firmware: arm_ffa: Handle partitions setup failures Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240108-ffa_fixes_6-8-v1-6-75bf7035bc50@arm.com> References: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> In-Reply-To: <20240108-ffa_fixes_6-8-v1-0-75bf7035bc50@arm.com> To: Sudeep Holla Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Cristian Marussi X-Mailer: b4 0.12.4 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787526288901958409 X-GMAIL-MSGID: 1787526288901958409 Make ffa_setup_partitions() fail, cleanup and return an error when the Host partition setup fails: in such a case ffa_init() itself will fail. Signed-off-by: Cristian Marussi --- drivers/firmware/arm_ffa/driver.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c index c613b57747cf..f2556a8e9401 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -112,6 +112,7 @@ struct ffa_drv_info { }; static struct ffa_drv_info *drv_info; +static void ffa_partitions_cleanup(void); /* * The driver must be able to support all the versions from the earliest @@ -1195,7 +1196,7 @@ void ffa_device_match_uuid(struct ffa_device *ffa_dev, const uuid_t *uuid) kfree(pbuf); } -static void ffa_setup_partitions(void) +static int ffa_setup_partitions(void) { int count, idx, ret; uuid_t uuid; @@ -1206,7 +1207,7 @@ static void ffa_setup_partitions(void) count = ffa_partition_probe(&uuid_null, &pbuf); if (count <= 0) { pr_info("%s: No partitions found, error %d\n", __func__, count); - return; + return -EINVAL; } xa_init(&drv_info->partition_info); @@ -1250,8 +1251,14 @@ static void ffa_setup_partitions(void) /* Allocate for the host */ info = kzalloc(sizeof(*info), GFP_KERNEL); - if (!info) - return; + if (!info) { + pr_err("%s: failed to alloc Host partition ID 0x%x. Abort.\n", + __func__, drv_info->vm_id); + /* Already registered devices are freed on bus_exit */ + ffa_partitions_cleanup(); + return -ENOMEM; + } + rwlock_init(&info->rw_lock); ret = xa_insert(&drv_info->partition_info, drv_info->vm_id, info, GFP_KERNEL); @@ -1259,7 +1266,11 @@ static void ffa_setup_partitions(void) pr_err("%s: failed to save Host partition ID 0x%x - ret:%d. Abort.\n", __func__, drv_info->vm_id, ret); kfree(info); + /* Already registered devices are freed on bus_exit */ + ffa_partitions_cleanup(); } + + return ret; } static void ffa_partitions_cleanup(void) @@ -1520,7 +1531,11 @@ static int __init ffa_init(void) ffa_notifications_setup(); - ffa_setup_partitions(); + ret = ffa_setup_partitions(); + if (ret) { + pr_err("failed to setup partitions\n"); + goto cleanup_notifs; + } ret = ffa_sched_recv_cb_update(drv_info->vm_id, ffa_self_notif_handle, drv_info, true); @@ -1528,6 +1543,9 @@ static int __init ffa_init(void) pr_info("Failed to register driver sched callback %d\n", ret); return 0; + +cleanup_notifs: + ffa_notifications_cleanup(); free_pages: if (drv_info->tx_buffer) free_pages_exact(drv_info->tx_buffer, RXTX_BUFFER_SIZE);