From nobody Mon May 25 01:14:39 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDEDC3AD50E for ; Tue, 19 May 2026 20:48:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223693; cv=none; b=EFlw0ICZwfPoEEe2IqLPUmp7RPoAqZV/EVa2VamyHflyQBFtSFfW7AgLZ/PSNkzQSkGOhWCAsFLijPjTNINNTpuhKfaSEPwAFBBsEGmke6fF9AE73o3q1p9n5Jt1ZVSwlW/g9yJI2HsUI1kocbVM9TNXv6g/+pR62NV6beL9tis= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223693; c=relaxed/simple; bh=lLAXP5B8iQxWueO/YFGp6YJLOvSNEYcvKWK7YpLnyyw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GS/sJI7MGfam2Wz3YhVYW2lE4FE/UXCbxk8iSmwDM0Ds9qsqJ9AhbPnGwDB0+iNoeByjVm//ASLvkNHoBK7gUFJ7VksJ6Cgh0vgaHoFA99usX2edVgcoZvhj/vumYVkuvwzve56e8GWiKzb+r2POP0OCx1TxGfvbVP3G+adB9t4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZPoiAN64; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZPoiAN64" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-45e6c2d9c5cso246590f8f.1 for ; Tue, 19 May 2026 13:48:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223690; x=1779828490; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0c34ELoPJoazDfI83jDiunrFakmVLtTU4AFI7jrtuhM=; b=ZPoiAN64K1TfudKRs+wFJF7l0DxeKRSiZwrOaZNCBhUWwTArl513nWbng9QBHwzCvf Y0xfxOjb5E48eaDraMx0zfMqyrNfvQpW42sZ61wkN8zdIbThSaC/XTyZJKj8cBeQstfe xvItWSpZFUsWLL5cQp4Ypn2mhI/G7V6c2Kjenp1CjxspW7/5ak103HPg9EShSVq5qCD1 svZQf/t3Tu/gefUmterq5RJOyklhaxwcC9mUaZn2gd7pVj0v+cWGmSUF7dIGx48AEhMg SJbbvUvXiuGFkKim+V6aGb/gf+ZKIleFS+tOq2AHykOUTiQIr/eItposdeTuzgTjjTiI WCow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223690; x=1779828490; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0c34ELoPJoazDfI83jDiunrFakmVLtTU4AFI7jrtuhM=; b=QwddZQzEBQtWq1AH29LiTczantHyyoKXM1mP7bqjGE/3yjVrA6Mm2xiakCP65mZJaO fByxCTmC7NSRNEAmazSElyTvSL2S53gDe7+VIxBHSUal4zofF0M50gzr4tZrftaz+uOz b6msIpB4YofjsflbEuQaCnl/UYkye2Z8Y0a9GOOLnkhx/Oa2Y2aytf8h8emMSN5m+kqy C2Iq8WxYwcYBblooMHPDDsKc3M7/saeKxHfqIuisNGlCTYB/e72p/W7PIO9wN79y5djU oCL915VZ+AOM2yqni6ZpBRhRrpm+VOfZLMwB57/tFyeZJOZ9tfm4iZhsMGgLWtVgJ5q5 sw8Q== X-Forwarded-Encrypted: i=1; AFNElJ+L3E17gJjvbkO5+f5Mnr95BHiF1gZGKUf1ptWXXs9i/q7cr9SNTk1C5iiVNmwIGbDdHCOtroxKp5EjwcM=@vger.kernel.org X-Gm-Message-State: AOJu0YyPGo7dzC6SdCzIMTRCMxMfEpTxABkAHTiyjO/bhVbmsxTkR3/c 6cZHz+syvUGHI7hUZjKiNlTRKzj8eVEAePtVjOu+D8wqkyDuqkQIn3IX X-Gm-Gg: Acq92OEkXgt2YZ6Saer5K5vuOcuV/gkyR/sQO4rsGRabZygn0EuAXf1hEb4Vw3LaV9c YRbbZUJT7EeSGfFSYh/njfrtjUPzHreQLkpq1cN2SIePQFU258G/NmbpMwTRnby/AYmwrqKBFWi R1VmN3r9mGIgmtlPQib0Nl/0hjvtUY5a2TiBihdX6JNHY9WEmyp3BbodtmudM3vBXD6lWV8yeG/ N71fP+R9UnTRKA4ybnT42NTGn1CDujm5SNGNlugsA57JL7ArOS1Olgx+TJpwi/afSTzwLV1BBAN DHpmc0pGzISuFYvvci2xHhTBF2alM7twu85urSLC/kpuFNGTwcwTpy+153oql6iOYyHP4LN7q/M 9hGhnFxTPDW/IljOxfNq0hJ3CV68H7xDV8jzPl1G1bT35naYfEkn0EjJXEzfXs3fYUstazxnFxr m39kfkdmykHo91v7/Uz3RN3lH0BR4HTS1S3LTjrpUuqwDy+oeImeiHsj2fguNbRYk= X-Received: by 2002:a05:600c:4455:b0:489:1fa8:b895 with SMTP id 5b1f17b1804b1-48fe5fcb2dfmr159641895e9.2.1779223690355; Tue, 19 May 2026 13:48:10 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:10 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 01/12] crypto: atmel-ecc - rename driver_data before moving it into atmel-i2c Date: Tue, 19 May 2026 20:47:52 +0000 Message-Id: <20260519204803.17034-2-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename the local driver_data instance to atmel_i2c_mgmt in preparation for moving the shared I2C client management infrastructure into the atmel-i2c core driver in a subsequent change. No functional changes intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 9660f6426a84..c9f798ebf44f 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -23,7 +23,7 @@ #include #include "atmel-i2c.h" =20 -static struct atmel_ecc_driver_data driver_data; +static struct atmel_ecc_driver_data atmel_i2c_mgmt; =20 /** * struct atmel_ecdh_ctx - transformation context @@ -209,14 +209,14 @@ static struct i2c_client *atmel_ecc_i2c_client_alloc(= void) int min_tfm_cnt =3D INT_MAX; int tfm_cnt; =20 - spin_lock(&driver_data.i2c_list_lock); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); =20 - if (list_empty(&driver_data.i2c_client_list)) { - spin_unlock(&driver_data.i2c_list_lock); + if (list_empty(&atmel_i2c_mgmt.i2c_client_list)) { + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); return ERR_PTR(-ENODEV); } =20 - list_for_each_entry(i2c_priv, &driver_data.i2c_client_list, + list_for_each_entry(i2c_priv, &atmel_i2c_mgmt.i2c_client_list, i2c_client_list_node) { tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); if (tfm_cnt < min_tfm_cnt) { @@ -232,7 +232,7 @@ static struct i2c_client *atmel_ecc_i2c_client_alloc(vo= id) client =3D min_i2c_priv->client; } =20 - spin_unlock(&driver_data.i2c_list_lock); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 return client; } @@ -323,16 +323,16 @@ static int atmel_ecc_probe(struct i2c_client *client) =20 i2c_priv =3D i2c_get_clientdata(client); =20 - spin_lock(&driver_data.i2c_list_lock); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_add_tail(&i2c_priv->i2c_client_list_node, - &driver_data.i2c_client_list); - spin_unlock(&driver_data.i2c_list_lock); + &atmel_i2c_mgmt.i2c_client_list); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); if (ret) { - spin_lock(&driver_data.i2c_list_lock); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_del(&i2c_priv->i2c_client_list_node); - spin_unlock(&driver_data.i2c_list_lock); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 dev_err(&client->dev, "%s alg registration failed\n", atmel_ecdh_nist_p256.base.cra_driver_name); @@ -363,9 +363,9 @@ static void atmel_ecc_remove(struct i2c_client *client) =20 crypto_unregister_kpp(&atmel_ecdh_nist_p256); =20 - spin_lock(&driver_data.i2c_list_lock); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_del(&i2c_priv->i2c_client_list_node); - spin_unlock(&driver_data.i2c_list_lock); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); } =20 static const struct of_device_id atmel_ecc_dt_ids[] =3D { @@ -394,8 +394,8 @@ static struct i2c_driver atmel_ecc_driver =3D { =20 static int __init atmel_ecc_init(void) { - spin_lock_init(&driver_data.i2c_list_lock); - INIT_LIST_HEAD(&driver_data.i2c_client_list); + spin_lock_init(&atmel_i2c_mgmt.i2c_list_lock); + INIT_LIST_HEAD(&atmel_i2c_mgmt.i2c_client_list); return i2c_add_driver(&atmel_ecc_driver); } =20 --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3B113BB13D for ; Tue, 19 May 2026 20:48:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223694; cv=none; b=FgSrgZO+9FrDicWQKP1hdbBmnvsg8mLgD+9EDl4IslLVLYXnQS1FVa9xaPdUxjJNjTpDo5m+74oo8zBhVUNWp8hGRgEz68QgKZErUJSciGCG7tcfbo02GW24htkIsTiHM4C4UlibipllKwXzZAj4G2CT2B+67gdMS1QxkNFUQBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223694; c=relaxed/simple; bh=wI9dECRvBX2VsI/nKiWlz/4reVpcy4qe9tjGwApazoA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Fy0UmoxXk2VSDlvucvcvzkpAUy8tPGo+2Bx+n0e2/gjs7RH/xZ7G4M5Ja9B8xCWEPmUEO1e+qGAJcDi3oVfJZfoi9ECiJKIfjlevJpVCIlYxnNbPIkb3clQojfQR0EtWyK3NINnLm4afarsWQ4xAr0z+wJt4iX9s78LYDKgkSXg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=k72eRE43; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="k72eRE43" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-43d7828221bso225297f8f.3 for ; Tue, 19 May 2026 13:48:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223691; x=1779828491; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g1DeJFJSEHZep1pJ6wxiVEkdit9Es+ISenMHqnD6wG8=; b=k72eRE43dn/oS2DJAy+FGXgPOp8AsPyFNFjlCI4vfeG6S5hly91tuGr3uHi2P89bAz IQdbs18xMSL+1sZ1C0Bk3xahg9rnrYFD8JPgMBZoaavlB8lyIPq/FLFszfNHWhG0XmOU Gm5xF/SSu/kjL8R05pQdCZDMo8GzYtP9KThD68tX/G5sAmE5SBX9NHEF3OQAIOJ3VUPh oN7Duf3SuCnZqlydfLRcJINrU7FUl6P8qAol5CMOnyAaKDIk03JX3fYZWhCAq11MDCOz +pbnD2HsZc2c5cdRlE++iF2569z05BP8CeTc3YJecHcUz7STnTZ+DohU/fUV2u+xdAF6 yCMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223691; x=1779828491; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=g1DeJFJSEHZep1pJ6wxiVEkdit9Es+ISenMHqnD6wG8=; b=W71h2Nb7jVIcwkTV+Ql6R3g+DuF9ShZxaE2yvqgDOJz+zeelQWcCr7rf9Myo61hvC/ SZZxrRx1wxDi/c+AmghjAP9FCw3H/x19aBfaH1Tl5elCimAuaEF0zXOZY3ClDuOx8m8k 2cuQr0Z5P34K1KpDSC06a2ZQ7894QRU65JeBtaT7ifEIYot4Ej+MWWg8Maru+vXSYazo 9F36DAyVzBAprBdXBN4g5WzbNV5qHMxv4lgwGw58lK+30mK8QkeKIA4XEwKtfHOCTkND RLWP6mSrk6ARyw8tJuTkRXu7NdSQnRvakO43k+EpNzumLnxWy+bgEebtiqFOmvOBiM7+ OfyA== X-Forwarded-Encrypted: i=1; AFNElJ/sn534hqpQXoRhbb+6CvLb2d2JxWKx5Q3HGTdPg1/LFrnMlmRkvL/GcgjQf4YtM9Cd9j/thvhXkn/OCAs=@vger.kernel.org X-Gm-Message-State: AOJu0YzHDqS1HE2geDOrRMhz1HSJjb8lYEPz6gqrQkn9bj1POrDuePxJ f2PgzaL1OTljwuXHPs4zYYQFfTQ90YymCf1ezZAy38CRfoFdbfedr8Ve X-Gm-Gg: Acq92OEqN2bjqAb4ysfEPab/eoxJclQ5ziJj4xh23A8YRszegjTbDKvihEeN3SS/vYW 6MjK+hlOdRhIhD2tNeb4Ja0Blpy1ZNRxt3jhKqSfApSic2A9r8HSRxzNSRvIxmQm1mxDa/BtO+n mWxPTDaApsmALxiVzSdDAOvNoDByZiSqfA2apl7HeRqPPzXP8Fupii8jJ/YsfOt8mc2RxySsj3x SFsUIyuGfbmrc4F79lDHIoqF7iHJYExeZIyErDsglZzXoWHhf2nktAYRX0GJaRAuGowCjGpZfd8 HnbgEzZhwQtrcAsUHrbDBHOb6WfZLMKJjfiua4PP4tJLLbwv2rs1eAszIquCu86tAx+2v2i4l/E VIok6AqJ8/xWa2MSPANTji1LspR/+8MwX3UTJ05x3f+f3dq3B200S8izY+vilVPjsFSxUsgM9OM 2mvia++jPuLF66uEWFaknNPivyuCFvOEHp8cZqAn6mipuJxdih2UYleWM30NxpKBgVguAHRu84d Q== X-Received: by 2002:a05:600c:1f8c:b0:488:abe9:86 with SMTP id 5b1f17b1804b1-48fe631817cmr157538085e9.7.1779223691288; Tue, 19 May 2026 13:48:11 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:10 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 02/12] crypto: atmel-ecc - fix use after free situation Date: Tue, 19 May 2026 20:47:53 +0000 Message-Id: <20260519204803.17034-3-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fixes the very likely race condition, having multiple of such devices attached (identified by sashiko feedback). The Scenario: Thread A (Device 1 Probe): Successfully adds i2c_priv to the global list (Line 324). The lock is released. Thread B (An active crypto request): Concurrently calls atmel_ecc_i2c_client_alloc(). It scans the global list, sees Device 1, and assigns a crypto job to it. Thread A: Moves to line 332. crypto_register_kpp() fails (e.g., out of memory or name clash). Thread A: Enters the error path. It removes Device 1 from the list and frees the i2c_priv memory. Thread B: Is still actively trying to talk to the I2C hardware using the i2c_priv pointer it grabbed in Step 2. The memory is now gone. Result: Kernel crash (Use-After-Free). Fixes: 11105693fa05 ("crypto: atmel-ecc - introduce Microchip / Atmel ECC d= river") Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 12 ++++++++++++ drivers/crypto/atmel-i2c.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index c9f798ebf44f..19d5435aa42b 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -218,6 +218,8 @@ static struct i2c_client *atmel_ecc_i2c_client_alloc(vo= id) =20 list_for_each_entry(i2c_priv, &atmel_i2c_mgmt.i2c_client_list, i2c_client_list_node) { + if (!i2c_priv->ready) + continue; tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); if (tfm_cnt < min_tfm_cnt) { min_tfm_cnt =3D tfm_cnt; @@ -322,6 +324,7 @@ static int atmel_ecc_probe(struct i2c_client *client) return ret; =20 i2c_priv =3D i2c_get_clientdata(client); + i2c_priv->ready =3D false; =20 spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_add_tail(&i2c_priv->i2c_client_list_node, @@ -336,10 +339,15 @@ static int atmel_ecc_probe(struct i2c_client *client) =20 dev_err(&client->dev, "%s alg registration failed\n", atmel_ecdh_nist_p256.base.cra_driver_name); + return ret; } else { dev_info(&client->dev, "atmel ecc algorithms registered in /proc/crypto\= n"); } =20 + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + i2c_priv->ready =3D true; + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + return ret; } =20 @@ -347,6 +355,10 @@ static void atmel_ecc_remove(struct i2c_client *client) { struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); =20 + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + i2c_priv->ready =3D false; + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + /* Return EBUSY if i2c client already allocated. */ if (atomic_read(&i2c_priv->tfm_count)) { /* diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index 72f04c15682f..e3b12030f9c4 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -129,6 +129,7 @@ struct atmel_ecc_driver_data { * @wake_token_sz : size in bytes of the wake_token * @tfm_count : number of active crypto transformations on i2c c= lient * @hwrng : hold the hardware generated rng + * @ready : hw client is ready to use * * Reads and writes from/to the i2c client are sequential. The first byte * transmitted to the device is treated as the byte size. Any attempt to s= end @@ -145,6 +146,7 @@ struct atmel_i2c_client_priv { size_t wake_token_sz; atomic_t tfm_count ____cacheline_aligned; struct hwrng hwrng; + bool ready; }; =20 /** --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 08ED53BFE3A for ; Tue, 19 May 2026 20:48:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223695; cv=none; b=u1vqrKodYGWMFwWgS7MbuwQEWb0jNI87orHnYU2IhdT1kuBM6BHR1GKzJ3TstyuYRvbTpFAr8Qh8kZmzMXUci0BIIUchGx1YIHJ2JAsEukTLpueLPqqixzacJ+qWOWAhrhW+WzOo6e6xcre/QRKMyJGxFo2depBjra/imSMJKjo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223695; c=relaxed/simple; bh=qB+N5sBAU4+OEoQbOXMEFHFAdXvpKcGGTLPscoURS9w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kSq2FJ2oRTW4EETu3sD/RudEpvfJqmuCfT4kt7WIPmqMHTBx1g22M37TNKOUPoeuBT1DUtdFVMJMrcaNH1DibQlG3QE5v36TfP045LZChSYpo2MtSaOOl2XHSrlHXhMNSC5mBGDlG46narXJpL19Sfg/IpsRj92o1bjOns/BtZs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Wfb6pC+G; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Wfb6pC+G" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-43d7828221bso225301f8f.3 for ; Tue, 19 May 2026 13:48:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223692; x=1779828492; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=46bxzW7AWDk4uXlyHvKMVMwj/OyP1y7/MWcuxerPlBc=; b=Wfb6pC+GGEpo96iCWR7/A6fRITHK92G27tcZ4w6/eqxj2e4EfGSbg9GVhdvywCrtCv iPs/ICt3xXPSNfPNGuHXktejgtBRwYBByOCloS/vMmAbfLMygzDXMvSsvueU63TYa5zl rM1TxsyLzTFntSfYLBSpGyTJFqUTX8vl6Xg0CKuVR/JzUon5swW2ZFMzzrfKJqvabNO0 T+z+rX1Artvmc2cUSjqPR7PZ5UoXbrf00mdKqBUGzNc7q/4QtIfMYVC1vn6jVmWf6Zc9 JF5sBEZ/+UYz8q9H8TmkAUVp/wBqtZaUQ1W0CfCHZlAxsiqGfppIPsEtP4QzjyNB4ZAr UntA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223692; x=1779828492; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=46bxzW7AWDk4uXlyHvKMVMwj/OyP1y7/MWcuxerPlBc=; b=P4Ru/9SDAZoqBE0H2CErOghh87yojPoUeD9SL4yEeDpR0wj08vbg/6eNJNXyqYgDxq pEnTznXiBaPWvJuc750Y63dNxpj8IwTzK2vD83Hn7yQGNC6rH808ryUzuEZkFRWkMKr0 nLanPcV8FJrr6jpZtVrAFOKyq2fa+npwgsGFNC67bXQea6EP8Mk0/LyK7k46Fk51MyKW 0nlNRNuzI+4QbBz8jQ7rPVdeezZI6T6rlqvIrUaRVV8P9D0ixjJBnJS3J7Df6uIKtbFK 5B2XdQE3MytgE4SOhtRitOUf9mIZpRLiwcagJCUi4xYF9NLNJbMz2AC3Tv4fYtVkaTLi GEYw== X-Forwarded-Encrypted: i=1; AFNElJ99wxl+Zb5FnQEX9bxFcIbEpPSmwsEnW/QEu5zGIHzyb1uphPZGrr+5lpCoOjsK1ukOTfUHJfnxHkE4jnc=@vger.kernel.org X-Gm-Message-State: AOJu0Yxb8P8JuRVXEiN9ML5RIQAzN3YBfoO8DCXeHXucyFZ4iRsTYBHz yc8ZnWawwtaH4v/vdMHTuir3E0DvEsxOBYno6eJooe05Q7GZp+H0t0dn X-Gm-Gg: Acq92OFmz+V7blEXPv+xGaP2fRcgkHT+2RhRlJJ2qs1rFCBsuNN80QmfMcpzEvW63Q6 tUHvV7ALK4U6wQCgyafNDjRJNwkZB2oKa5GVGexxPSPXE4XJ5UjZJbhLtiy3xxeNJZUFq+W4J8I WLXM5rMPa6CBDklUrPtqHWtDXIjjgPn40rPMmV0v6OvA59Ucf2S4Jp7+XmNWUUSI4esmKXTJiVk l4aqGC/naDMto4rde1PTdEfPY8xKas2dYI/21XcnuHlBZeGbNGIQGm9flUGeFTP+LJMrDryEj36 6RfrijH59q+TbcZ2ztdhbTDQXsw/RnMgmN058f9iRJFryBNBMVPYhBspUbRvTP/3MXid8YBYMwO 8LCZojzI0FVhXwjKtIin3C/iaNl8YaLYtn0qXQ4GCCjEEuQ0b666nkYShs8GkqsxevcJfom8Csx vn7LG2S0IsYSS3JrB2Fi7ErT368N+xXFOdvNf5wH5xdDEMkpaFvSd1ICJpSmeO9nw= X-Received: by 2002:a05:600c:8b25:b0:490:6ab:406a with SMTP id 5b1f17b1804b1-49006ab40f1mr111033255e9.8.1779223692230; Tue, 19 May 2026 13:48:12 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:11 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 03/12] crypto: atmel-ecc - fix multi-device kpp registration Date: Tue, 19 May 2026 20:47:54 +0000 Message-Id: <20260519204803.17034-4-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In a scenario where multiple such devices are attached, the following situation may arise (finding by sashiko): Device 1 Probes: Calls crypto_register_kpp(&atmel_ecdh_nist_p256). The Crypto Core modifies fields inside this global structure to link it into the system-wide algorithm list. Registration succeeds. Device 2 Probes (Minutes later, on a system with two of these I2C chips): It executes the exact same line of code. It passes the exact same global &atmel_ecdh_nist_p256 memory address to crypto_register_kpp(). The Disaster: The Crypto Core tries to register it again. It overwrites the internal fields that Device 1 was already using. This corrupts the Linux crypto subsystem's internal linked lists, usually leading to an immediate kernel panic or silent memory corruption. Introduce a global mutex and reference counter to ensure that the static kpp algorithm is registered only once by the first probing device, and unregistered only when the last matching device is removed. Fixes: 11105693fa05 ("crypto: atmel-ecc - introduce Microchip / Atmel ECC d= river") Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 55 +++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 19d5435aa42b..e5dd166fd785 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -23,6 +23,9 @@ #include #include "atmel-i2c.h" =20 +static DEFINE_MUTEX(atmel_ecc_kpp_lock); +static int atmel_ecc_kpp_refcnt; + static struct atmel_ecc_driver_data atmel_i2c_mgmt; =20 /** @@ -331,23 +334,30 @@ static int atmel_ecc_probe(struct i2c_client *client) &atmel_i2c_mgmt.i2c_client_list); spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 - ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); - if (ret) { - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - list_del(&i2c_priv->i2c_client_list_node); - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + mutex_lock(&atmel_ecc_kpp_lock); + if (atmel_ecc_kpp_refcnt =3D=3D 0) { + ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); + if (ret) { + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + list_del(&i2c_priv->i2c_client_list_node); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 - dev_err(&client->dev, "%s alg registration failed\n", - atmel_ecdh_nist_p256.base.cra_driver_name); - return ret; - } else { - dev_info(&client->dev, "atmel ecc algorithms registered in /proc/crypto\= n"); + dev_err(&client->dev, "%s alg registration failed\n", + atmel_ecdh_nist_p256.base.cra_driver_name); + + mutex_unlock(&atmel_ecc_kpp_lock); + return ret; + } } + atmel_ecc_kpp_refcnt++; + mutex_unlock(&atmel_ecc_kpp_lock); =20 spin_lock(&atmel_i2c_mgmt.i2c_list_lock); i2c_priv->ready =3D true; spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 + dev_info(&client->dev, "atmel ecc algorithms registered in /proc/crypto\n= "); + return ret; } =20 @@ -359,21 +369,16 @@ static void atmel_ecc_remove(struct i2c_client *clien= t) i2c_priv->ready =3D false; spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 - /* Return EBUSY if i2c client already allocated. */ - if (atomic_read(&i2c_priv->tfm_count)) { - /* - * After we return here, the memory backing the device is freed. - * That happens no matter what the return value of this function - * is because in the Linux device model there is no error - * handling for unbinding a driver. - * If there is still some action pending, it probably involves - * accessing the freed memory. - */ - dev_emerg(&client->dev, "Device is busy, expect memory corruption.\n"); - return; - } - - crypto_unregister_kpp(&atmel_ecdh_nist_p256); + /* + * Note, the Linux Crypto Core automatically blocks until all active + * transformations utilizing that specific algorithm structure + * are fully freed and closed. + */ + mutex_lock(&atmel_ecc_kpp_lock); + atmel_ecc_kpp_refcnt--; + if (atmel_ecc_kpp_refcnt =3D=3D 0) + crypto_unregister_kpp(&atmel_ecdh_nist_p256); + mutex_unlock(&atmel_ecc_kpp_lock); =20 spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_del(&i2c_priv->i2c_client_list_node); --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E8663C13F9 for ; Tue, 19 May 2026 20:48:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223696; cv=none; b=MQfHwdPDfBck7fdEw3qzu3Nhfd/GgrOHQEZRDKon//5tZoAkDkCVmmzqwZhKcT2Vi9RfI54oQjclygiPmawtDxVnXSHdHuyaz1xDZ/Cmzml9LS6Hpx76OkWMMX2abhN2W7Qb26jSCvaZFsVNAfVFqt8ssShFOEpReo7DdrG6ZNU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223696; c=relaxed/simple; bh=ph1dfj9cBGflSBFQjBZjJ8ZjvOFSmyP7dZ3NJ2+hUz0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rVzNwxWVmTyLMOipEJIt3OyRZkl9Dv32kujIe5RpBqxJ5EeXwAPo+WIRQ65Qal7Op6kTHlnnhNdDY4WduAkbEwIWVEhBF9IJQXdzWdxuSACYe8gf6OgRPWntz7Ww9T1w7d6ZG3SDRi3HinOkFkCH1UyEI1Nz1jdmwZUx4QMZPj4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=G5T9qZBZ; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G5T9qZBZ" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-45b030a5696so426171f8f.0 for ; Tue, 19 May 2026 13:48:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223693; x=1779828493; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=P2MBEXVQCUICFyYJC+vk71e18yKEtxbyVZMMqmm+Rw4=; b=G5T9qZBZVsEsU7OLfFyd/2MWlxdVXWtfLLgreMiwilUfzPbG8TgbaDngb0fjK0zI55 t/3t5lah8pa2RCnAW01VnBz+3BemhxhIzvHmy9RQGsLNV1BfZMS3gXqEBMTBbCSdv+Vc LQ7w3KOAv/kKhZI+BAtSuzZ6KRduU1MOMF+q94TIISjt3DfzJshLYSyxA9MYQiy7r2kd rIJpY7bnMQvU/xx+cZr5HGsYMYOp4EOjxMhFndzCqHW8sgfPuQN8et/sfB/n+tCqLCpH siWiCYbL8+V2+jnaUykWqOaYcXJ8S28iiTCkODq1VwZBq9Ex0YF2b1wVdmL9YVG162nh igtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223693; x=1779828493; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=P2MBEXVQCUICFyYJC+vk71e18yKEtxbyVZMMqmm+Rw4=; b=MkUQpo9EWs87fV7CQtBk6bzvhqo7vSBiiyFQrKUQHsC0mh/QfAaht9DybBZj4P6lRT asZaefxX+AGmnzi8tsKPxeEEFFtZiAgMUYtM5qxyQVYmLVqz6iNGLf7AkUHONY5cVq5+ pOuDDPIHiLRk8wE2EGDr+FXdViNiqj1VS8iOJgQt3tMT8/D6InNVlnMOgW6/0FS0qwl1 USar3XT5beldSrcJJlv0leD38ShJBEtOu4JgAluLUni3hPwIL+71hsHduZwH60DOJKPN v4BzrZ7zqBePzUgaPTNiGYc5VH9qbpeMs/FVjXJPHKx4JtuLYDP613WHlLPGLo/2HL+Z qCSA== X-Forwarded-Encrypted: i=1; AFNElJ915iexyX2qzQbVtCL/PrVsjjG/wUY2W40XiCWjQLT9YDzeQ9A+qTdGmLG0cKJUT4qQBG6zSWB1R0YPTNs=@vger.kernel.org X-Gm-Message-State: AOJu0YwUQTzmOr8clWlzBq1dsmRKfGuvRvY5LUxUT1Zn0gK/tJ0gTlwx adeI0/trgIJZYgICxWJZs8noPboO38JUaBtWdeyMXylV+qqc/uptyeuy X-Gm-Gg: Acq92OEm+Cxw1Jf9jG2MOlXbOVvUFnGmVsSnSPKwfD0x6GxkhAGN6bUPayPBluUDAur dTaoa/oDFG4BceAB+Mg4zHkAWkJyRqvv/aqtFSK1ZfGeM85dstVkIEY3yaMXTJQaxfmyxld2Kl3 HmneIQgnn6R1i/OqzFV3uBIOhG1XcZEBTcJi3PvbQRWT+0jK2w+VHH1vslmpC5UQs7ipCuQkc3/ b0AhJTSIFw2xVk5lEEmshbCJkz/SVom1qyahH+VObmDEdDMdEMBcbvv6L4XCj9mkguAnI8cDk8c 0UqoW+6kW2dw4XOOLYwcyjphDm3LunPH8jh/cfDjIXtXxYh7WeaKldC4+rwCMoCFs41j7JAJtDS W1cmRLN9g02JDrqWWH+kE0bUq2xD86dFxRITZt4VSb6BwqSm40zIX6K02hQ9GLYqhZYZSbO7VwV emwzThUsq7jUaIZnil4+RbqaaMxZIA5HLnkmtY5c2Zlg9qXH4RzpBLNr8P3gNdzJE= X-Received: by 2002:a05:600c:3594:b0:490:502:8422 with SMTP id 5b1f17b1804b1-4900d55ec74mr79065995e9.6.1779223693208; Tue, 19 May 2026 13:48:13 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:12 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 04/12] crypto: atmel - rename atmel_ecc_driver_data to atmel_i2c_client_mgmt Date: Tue, 19 May 2026 20:47:55 +0000 Message-Id: <20260519204803.17034-5-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename struct atmel_ecc_driver_data to atmel_i2c_client_mgmt to reflect its generic role in shared I2C client tracking and locking. A subsequent change will move the client management infrastructure into the atmel-i2c core driver. No functional changes intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 2 +- drivers/crypto/atmel-i2c.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index e5dd166fd785..aa2dde99b2b1 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -26,7 +26,7 @@ static DEFINE_MUTEX(atmel_ecc_kpp_lock); static int atmel_ecc_kpp_refcnt; =20 -static struct atmel_ecc_driver_data atmel_i2c_mgmt; +static struct atmel_i2c_client_mgmt atmel_i2c_mgmt; =20 /** * struct atmel_ecdh_ctx - transformation context diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index e3b12030f9c4..30ed816814af 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -115,7 +115,7 @@ struct atmel_i2c_cmd { #define ECDH_PREFIX_MODE 0x00 =20 /* Used for binding tfm objects to i2c clients. */ -struct atmel_ecc_driver_data { +struct atmel_i2c_client_mgmt { struct list_head i2c_client_list; spinlock_t i2c_list_lock; } ____cacheline_aligned; --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 006E33BFAD3 for ; Tue, 19 May 2026 20:48:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223698; cv=none; b=TOODqjpu/YmxOWn7FZgl6ZVqb9bUjrmKy+ecwB8e19nw3VMLq6z7uyglj0lrQ95uS9nIOqJiDiMhwRSy0N8P1noPXp3SFyouwDsQJxlLTwEzNTiM3TvrZt7N1wnxajbQvf7B81dxSKqKK4R8ay9EztejUCf5Ffjq3/nVCRSYumE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223698; c=relaxed/simple; bh=n9lDcJ6NRODaUwVmTb44LzgYHr0MCunslO6sOoEdyho=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=DubKfxvWr7xEq6NsorOPuNP74+OACKUQ+D79Ed/y/HcPMkgr35BqO/feziV+8GqK+cTiFUEe5jmNu3fAKLrGWnmV27HkaHjw7LwSaXZo+rjjQa9iZ4E0lxH6rrZkMIxX3pGP5fmxGXYKhnyrOzkmqtdpFXUWrhRaopyB2xOs3os= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CNJvfl6h; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CNJvfl6h" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-48fde2f2d61so7431025e9.3 for ; Tue, 19 May 2026 13:48:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223694; x=1779828494; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dlj4B3tCS1LCg0o2cK8faWQWBMDw4ejqDx0TgeFPOz4=; b=CNJvfl6hTHdvhS6aezn3nTjeyRiDOFimElH/2kS6AqFqi/N9+FbFMhG/B7KntW6fNA Tt8DW/yez08PyGy6HGZTO7Lb0zAvWP82IPgx97TkMo0dCCv4cuEcEBI/ba//5hnm7l0u t4KuJk7Bedw7CAh9tZrPKX8Ktuwmsjdpr5i4sXACFlebt2phaHmGhKVgNqkayIvzy7Zd qQLS8B3wNG7RNGOrq9rqripAeon2tPHXGml49j9IZte5q8jh6sIHk0bysvUA4qQBrK/Y 8kk2Du91GLqA7MGu5dy4UqBA5DRrBEIwPZLipPmwXGl/XXwBfpIV2JbcMz74DxbP6Y3H R4tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223694; x=1779828494; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dlj4B3tCS1LCg0o2cK8faWQWBMDw4ejqDx0TgeFPOz4=; b=Grdtd4HT03p3btbUfTXlRniBwC4VBztItXQWyhmQHH25EVMlbRwb6P3O/BUkTc6du1 b7XACKgG8yvvSUR6YoZJhyCFzPn93Tv0OUOd3AbQWEpirCBB5rfsdgf9MCowkOzfFQjH S0pQ2VOTV9vE/7TED/FseBZZPlTHrqN2VXva1UgxaD/OPAOnknrCLtEEoJ5vnEo0HBh1 bvjTjuaDL4kyy71cR9uIh7QZ3i+RPN0XVPvTG/Fdo3AymOTR4uP3b8m8ir+Ud239MPlX 5A+xYr3nErUf3wSSO6Coi4SXuiLv5ZKGr7Mn69peijIxv42/6c5yW22PU1VYn6d3FlWF SXTw== X-Forwarded-Encrypted: i=1; AFNElJ93iw/BpxM29UdV8il0gqowcqpnGXU+AgMGqBdoQgOfuTf+SuNPrbPXMCPPm7/D/DNjDpCHs4UFR3NzHHI=@vger.kernel.org X-Gm-Message-State: AOJu0YxcO4i85PxGsnus1eXZ2KRI6QERW/Bk5rebAXDsPOO7OdhYyUZf jas2weBfTQW+deSzo81/FF8Ncrv4aO/NBo/q+Qdz+VeGZaamlQpBC41D X-Gm-Gg: Acq92OE+gDMZouxhfVWItDhTn2T4r3E3LwY4QyiG69/7y/sI/m+TRPAHTMq7F4IHI7m AG8Zhwb3PQpcDPqa3qdodc983hiSayvY8tVs+z8BtPGG7fq/C1vML8gX8lffNfNS1f3F8sn6RZc QbfO4NT7ODDEhbrXWoA60rqz4BG23n2lO/z2on0NVguupG380Gx2g8ItX28uQvAgA3b4F5Uu1Fb b3/lutBLCpamiTrfpZyXgEG7f0DtiVT9zxrtM/uov/y/I6bumtCVR60d0pcJrqLGwh8JwwjZAfI CPfUdQt+yTRKZVAB9vYc1gnA9sJF+zQMDMFgLSFT8nPmwOmy7+w5jtNoGerWfj/gAOiqD3R2JNv N+AQZJw9uyIK36TSzhJ2CQsyAUyY2AZVvaxJiCpPCcY3YQvb4YJBlU9wFnlzysd/8bmrKaXMBuZ qWnB8VkaFkAm6qOUHLFEGpcMIZtEqYAzv1FFkJ5HzXqjxKZwHRFsyTE2teM3PGyUM= X-Received: by 2002:a05:600c:3ba5:b0:488:7e7b:dbc2 with SMTP id 5b1f17b1804b1-48fe61f7b16mr195362275e9.3.1779223694200; Tue, 19 May 2026 13:48:14 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:13 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 05/12] crypto: atmel-i2c - move client management instance into core Date: Tue, 19 May 2026 20:47:56 +0000 Message-Id: <20260519204803.17034-6-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the global 'atmel_i2c_mgmt' tracking instance out of the ECC driver and into the atmel-i2c core library. This change consolidates the shared I2C client infrastructure into a central core driver. This centralization allows both the ECC and upcoming SHA204A driver modules to access and reference a unified, common device-management context. As part of this relocation, replace the explicit runtime initialization calls inside the module init block with static, compile-time macros (__SPIN_LOCK_UNLOCKED and LIST_HEAD_INIT). Export the tracking structure via EXPORT_SYMBOL_GPL() to make it available to dependent sub-modules. No functional change intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 4 ---- drivers/crypto/atmel-i2c.c | 6 ++++++ drivers/crypto/atmel-i2c.h | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index aa2dde99b2b1..33b90667c872 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -26,8 +26,6 @@ static DEFINE_MUTEX(atmel_ecc_kpp_lock); static int atmel_ecc_kpp_refcnt; =20 -static struct atmel_i2c_client_mgmt atmel_i2c_mgmt; - /** * struct atmel_ecdh_ctx - transformation context * @client : pointer to i2c client device @@ -411,8 +409,6 @@ static struct i2c_driver atmel_ecc_driver =3D { =20 static int __init atmel_ecc_init(void) { - spin_lock_init(&atmel_i2c_mgmt.i2c_list_lock); - INIT_LIST_HEAD(&atmel_i2c_mgmt.i2c_client_list); return i2c_add_driver(&atmel_ecc_driver); } =20 diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c index 0e275dbdc8c5..db24f65ae90e 100644 --- a/drivers/crypto/atmel-i2c.c +++ b/drivers/crypto/atmel-i2c.c @@ -21,6 +21,12 @@ #include #include "atmel-i2c.h" =20 +struct atmel_i2c_client_mgmt atmel_i2c_mgmt =3D { + .i2c_list_lock =3D __SPIN_LOCK_UNLOCKED(atmel_i2c_mgmt.i2c_list_lock), + .i2c_client_list =3D LIST_HEAD_INIT(atmel_i2c_mgmt.i2c_client_list), +}; +EXPORT_SYMBOL_GPL(atmel_i2c_mgmt); + static const struct { u8 value; const char *error_text; diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index 30ed816814af..d54bd836e0f5 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -119,6 +119,7 @@ struct atmel_i2c_client_mgmt { struct list_head i2c_client_list; spinlock_t i2c_list_lock; } ____cacheline_aligned; +extern struct atmel_i2c_client_mgmt atmel_i2c_mgmt; =20 /** * atmel_i2c_client_priv - i2c_client private data --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBB203C1992 for ; Tue, 19 May 2026 20:48:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223698; cv=none; b=ZEgdKCY5pkJDNDNTqMaCHot0wkkAYdIwmH52KmXKh+XbUmqUlnpcNKBXgZO89p+IMDoZzjglS9HNl22UMi9T4+g6s+qwzqhV0DKpMAGdGpCVTyrFOw/lPL1tiODewxuYwppyYg7wEDSfwgxqiUOrk0XZSX6Jk5UXmHsrsT4RG10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223698; c=relaxed/simple; bh=O3NBvPUeMpkKMsuqGi/aIGTrfqSqyPDWVkpHE4DBwqY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=BXcHR2Jh8oZ6AyMeH406sx+GSgURc+UazPFMoYlOqS5hXGs9CHG3o6Hwhq4GcBIQ1B75M8YIRxzdiApQ7RjqambROuaTSlxBtHYFkLCKkWLAfCCxffzI0aUubL+pduFZm18pa2PHyN/Q0+me589DJRMNtaBeEjtTm4LWcSpbncE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=c6aoOH3k; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="c6aoOH3k" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-44b7e8b65faso207718f8f.1 for ; Tue, 19 May 2026 13:48:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223695; x=1779828495; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QtVvthz/7+lTeRk4aPj5gp54GNbJ7oJJBTGPkd/6zCs=; b=c6aoOH3kh21sVql4+E1+PXdnUuadNOFbX/oMVU4esAupUtam7FLVOf1TmO/BLAuCtR BQKE77VfzeH+EaQtTHPeFCrxFjNrfgNnh6fajIQVttFnkkzeFJyb03U6fUFEZYMRIWjI IaqeW61qofvqRsx09/lup7alZ6xIGSJpVZPDCsjpHL4gxbTQ3WEZVUqYxJQ7GhkDiP+3 s1q/aE573wlSA49TXMYmxOxqZ5RyobH4GWEftUmc6MHOSzpnhQOaC4tDAlbFFmbpe98Q 51FR23nPHr3BYFTvAbgfsFNRnN5NMVw1mGHRkK4oHBiSV/PP3BJT7m1KRqRXoWT/8n5e MyhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223695; x=1779828495; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=QtVvthz/7+lTeRk4aPj5gp54GNbJ7oJJBTGPkd/6zCs=; b=IxE/dbAaDXhr4oWzyRFv1/BlrNCxNIxrIinyFZTFoFhetterTooaOrzcr7YJhtAdbY gwCCkE74CpUumsGa730AtAX/40n7VAweF8K3x2AiRClp2OKu1/MItBFWfg096k0KqeQG PZKZQp6G+Ip7ZIYGak+yE8hSbOi/JnKPUO51KICSkXmt74RCOyDFz109wDQThWIrq0tS jO3DHkgjswFtl6E6o5LTngmDVAR9l+OJ2aJiQuaKEBkju60eLyG7W1QEa1ImUbw9kaTl mrDpxUpnNKzIx1iZ7XPqowg+4RbCsog+Bx9Tpece+gqd2LwIxfhF67REU4/3sn6Ckk68 IENQ== X-Forwarded-Encrypted: i=1; AFNElJ+tEb5zLfsFAGe1R0sLYb4lZxhCFYpJC5yb+0RQuowlYrg139nHn2TvE8oVyJpnKKadci0G1fBO4uVDO0k=@vger.kernel.org X-Gm-Message-State: AOJu0YyAIHMog+C3waipqSvBO8Akb8o2a6s3hGO1IL5/J6OoYD3l5Tp1 A8a97NIlKvMgbEJB42tdpK0iygQYWOXcct0+mN/qw791hVcfY7MU0pFD X-Gm-Gg: Acq92OH2E+qSzelb/cIaKttH6tp5rmqM/tqevUySTQ/Wkoq7htN3zh91ucUogTSsz7h XUwdFRRS+AuTy3J5CB8gZ38+sFhaOOpu5SPShgJ3gxIjqcgDi+q9eHsV1saC9uHfNnhVbWWpJou QRDTpWksqPaXmUpZPqbhFGGFcHQE7qFeMeyHIG3eQ89NJv6B72RJGmfJ0zp//cMuvk0jCxTGmQO xgiwJikE2536/DPg+HIp+MffGODGmG7gbY9gr8AsxE4LlkKTrxxMivivyXyK80xW++puqKfVmbz wXfyEQ4tn7gXfnZZ3hOqSNkumxI1YtTEv3A8u94DRWEN48p9AMad5SwD3qUX6H4vBMQTOKFmKcI f9nLb7N0sY6KmA8PIUEKNLLMiNvmaByyza77fHZ/q4GBVamC5MutNYkO7o5a1rN9jyL4BGJqBRM xuS0/DHQJl+A/wVqvRNN/Ao3o0ovQE+68RCstjjuJ8d85XICg4m0yWI9JlCLXb5BagrRljdjpEA 9LgDN8H0xOU X-Received: by 2002:a05:600c:310f:b0:48e:7a10:1f5e with SMTP id 5b1f17b1804b1-48fe5fd5b3amr150010695e9.2.1779223695175; Tue, 19 May 2026 13:48:15 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:14 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 06/12] crypto: atmel-i2c - introduce shared teardown helpers and fix queue flush Date: Tue, 19 May 2026 20:47:57 +0000 Message-Id: <20260519204803.17034-7-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce atmel_i2c_deactivate_client() and atmel_i2c_unregister_client() helpers in the atmel-i2c core library to modularize client teardown. This encapsulates common client state tracking and list manipulation operations. Convert the ECC driver's error recovery and device removal paths to utilize these new helpers, ensuring consistent execution ordering when modifying device-readiness states and deleting linked-list nodes. Inside the unregistration helper, use list_empty_careful() to safely validate the membership state of the individual node before triggering list_del_init(). Additionally, migrate the atmel_i2c_flush_queue() call out of the module exit path. It now runs inside the core unregistration helper under the protection of the management spinlock. This configuration ensures the shared workqueue is only flushed when the global client list becomes completely empty, enabling proper scaling for multi-driver setups. Export both new tracking symbols via EXPORT_SYMBOL_GPL() to match the existing core driver licensing standard. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 13 +++---------- drivers/crypto/atmel-i2c.c | 22 ++++++++++++++++++++++ drivers/crypto/atmel-i2c.h | 3 +++ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 33b90667c872..29706e4bfa04 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -336,9 +336,7 @@ static int atmel_ecc_probe(struct i2c_client *client) if (atmel_ecc_kpp_refcnt =3D=3D 0) { ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); if (ret) { - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - list_del(&i2c_priv->i2c_client_list_node); - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + atmel_i2c_unregister_client(i2c_priv); =20 dev_err(&client->dev, "%s alg registration failed\n", atmel_ecdh_nist_p256.base.cra_driver_name); @@ -363,9 +361,7 @@ static void atmel_ecc_remove(struct i2c_client *client) { struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); =20 - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - i2c_priv->ready =3D false; - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + atmel_i2c_deactivate_client(i2c_priv); =20 /* * Note, the Linux Crypto Core automatically blocks until all active @@ -378,9 +374,7 @@ static void atmel_ecc_remove(struct i2c_client *client) crypto_unregister_kpp(&atmel_ecdh_nist_p256); mutex_unlock(&atmel_ecc_kpp_lock); =20 - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - list_del(&i2c_priv->i2c_client_list_node); - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + atmel_i2c_unregister_client(i2c_priv); } =20 static const struct of_device_id atmel_ecc_dt_ids[] =3D { @@ -414,7 +408,6 @@ static int __init atmel_ecc_init(void) =20 static void __exit atmel_ecc_exit(void) { - atmel_i2c_flush_queue(); i2c_del_driver(&atmel_ecc_driver); } =20 diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c index db24f65ae90e..c73ef3cadf0e 100644 --- a/drivers/crypto/atmel-i2c.c +++ b/drivers/crypto/atmel-i2c.c @@ -354,6 +354,28 @@ static int device_sanity_check(struct i2c_client *clie= nt) return ret; } =20 +void atmel_i2c_deactivate_client(struct atmel_i2c_client_priv *i2c_priv) +{ + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + i2c_priv->ready =3D false; + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); +} +EXPORT_SYMBOL_GPL(atmel_i2c_deactivate_client); + +void atmel_i2c_unregister_client(struct atmel_i2c_client_priv *i2c_priv) +{ + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + + if (!list_empty_careful(&i2c_priv->i2c_client_list_node)) + list_del_init(&i2c_priv->i2c_client_list_node); + + if (list_empty(&atmel_i2c_mgmt.i2c_client_list)) + atmel_i2c_flush_queue(); + + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); +} +EXPORT_SYMBOL_GPL(atmel_i2c_unregister_client); + int atmel_i2c_probe(struct i2c_client *client) { struct atmel_i2c_client_priv *i2c_priv; diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index d54bd836e0f5..351306c426aa 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -192,4 +192,7 @@ void atmel_i2c_init_genkey_cmd(struct atmel_i2c_cmd *cm= d, u16 keyid); int atmel_i2c_init_ecdh_cmd(struct atmel_i2c_cmd *cmd, struct scatterlist *pubkey); =20 +void atmel_i2c_deactivate_client(struct atmel_i2c_client_priv *i2c_priv); +void atmel_i2c_unregister_client(struct atmel_i2c_client_priv *i2c_priv); + #endif /* __ATMEL_I2C_H__ */ --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8AEC3C1F22 for ; Tue, 19 May 2026 20:48:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223709; cv=none; b=DpMOnafOJsm7BIrS1xHkrGuQZRAuhmNVpiSf1j/bcBysSjE3cNKqzi9uMvNczxy3o7lLw5Z0g4XB5hhQC90vuzgv28oTEnw6LR0NAIG3xJtiFpqW8xs33q237WjOSrfSCdAGf+5igEEThQLO8gDMuYkFX/xBHd8/tbelFe4i50A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223709; c=relaxed/simple; bh=7md/GO2YbdMxhovqDbwh9Ck8m70e0HbBva2h+wz2M+0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=leZLwgG2XmEvd8/JUnIm0Q3faUeI+avN/W9iYd+gF7n8ufnC8wHO5Vj9qc7yfp4GndCDcKU9Gy6SPhd206yEYJEVdz/ib0lBFwNHExv2lY0psigd6UXVwRC0e5NHv+HP6Qy4MOmpAesyl0XHOlIcaj76XALCXdsfTum5NmT+s6Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eT48dX9U; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eT48dX9U" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-4493cf2f982so250120f8f.2 for ; Tue, 19 May 2026 13:48:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223696; x=1779828496; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0iv91Yr/xdaF4aAKWiyJjatlZadYEBC7HnO1idj6/DU=; b=eT48dX9U75guiiMZ5iMHlhkZSqF/EQ+zCaMAjNhG8SGztzQOTOipmUxBIjJ8C/kl38 qnU7R02uhfVVLxFfh/qkhHYDfP4xnEv7Lcw3Zs9MY24oztoOWySgIuoVrtyyjNvoUmmi D5ifzjXOyJbdvUQsXKHeG4LgyBCbwHKGsiisWsGAuSP55pNriOJenkqykDGKwI39b9Bw IqK//slOe/zBNFNg8Dz+Rwp+n6IKhhMZ6vFsLLg2l8qrFGbkeGDaRkTcAjdpT737barc j3+7YsjiL/O+ejdhVuY4+PCfvBBMt9/UYcJPfIavu/QxcSUj9j4kNTEKNVkUs9h6g8xk VsZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223696; x=1779828496; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0iv91Yr/xdaF4aAKWiyJjatlZadYEBC7HnO1idj6/DU=; b=KE/Wc0avrORj8h7Kxxu9ANPxobBdxaArXgwedZDowzh8nCkO5gsJPI3bGEPrkCTvif z1VWH14LmXR2Tx+EN8n22vs7NbkpTREbkdhtNp/frBDuc4Dpmsh4FnVBJOc5lzpNT1KS n8D4Ss71vCTeNBhsERphzPlN/o76n5anwS1+H2kwvdRmS4XtrqNcsez2mewsmF9vfbBe 99MuwhPr6Ob/51F1hYhpKWMPq1sV8GCaL1AEVRLWUrQMy1B2iv52GF03k2M1P8pfaSFS L2yXnyQQ/j1oVrp9YpcCcUfSF8ElUtpb6ijtrLYvAvnJU8dQBxNTSGnTjBGb1v63HZg3 +TGA== X-Forwarded-Encrypted: i=1; AFNElJ9KaSAXJr3cMznXxOVfP9LqZsB+MxF6qh4+ieHhitxvuT4jj/mmPgp3FTIbwUzAGuWX+t7Rpr47b54f9QY=@vger.kernel.org X-Gm-Message-State: AOJu0YxTJEIWkYqyIHyXhbCasgbjzFfvA7pZih3Nc+/s7p8Lm5+lrF/i 1yKwLFijxoHyLGwe8FwQSVWzDPrMMZsZ3XJXMAGM86JkAoNJyZ8ZNoBj X-Gm-Gg: Acq92OGJt3tolVBlXpIaEc6fO6iT5oT8Uj0MqGcGQmIsoIWunk3so7G/7dhLCePrt9d qzQ6e5doyzEae+oXT0im7YD+isIfZd1PMNuYPZHxjFJW1V7/jnfPzGkDLO+XqF1U5v6GCyd6ipq FmM2vS6tUu1NmQst8Hd0W6xtKcht9w58MSjIpQpXIOhX0mtrKjELKIma4ayu9PJQcRStfuHkBbA JolCDGenKw9V+7uSx+Lqm/n1SGRradTsmgnWGFibiIuQZHrM1rwZsXK41cEUyjSVchjkQtho2yG H8dyQpRHD5TdjdYSX5IM5KdckUmNZ9ejBE2HznNh1fOCCuR+gEBK5GYEUxBZCaEX9KUfNvOgAQv L/oCa6FbTyO3cJ5BJrm/6Bd0IA3325olY6YEsrWSnFlyO0/hKEC/H+Pqh7fawO35E2iIOS+0Z7h mNaozZUDh0QVKGB3v8ljQjSaODKfDFCAW8JNufwvfMiVcb1AbrKt1Tq4LeSOhcmt7A5ZOO5k5+Y Q== X-Received: by 2002:a05:600c:4692:b0:48f:d410:6072 with SMTP id 5b1f17b1804b1-48fe6302a9fmr178240165e9.6.1779223696104; Tue, 19 May 2026 13:48:16 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:15 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 07/12] crypto: atmel-ecc - switch to module_i2c_driver Date: Tue, 19 May 2026 20:47:58 +0000 Message-Id: <20260519204803.17034-8-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove custom boilerplate module configuration code and convert the module init/exit paths to use the modern module_i2c_driver() helper macro. This shortens and simplifies driver initialization. Custom structure setup is no longer required here since management tracking context initialization was already safely moved into the atmel-i2c core library module. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 29706e4bfa04..4f27e1caf106 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -401,18 +401,7 @@ static struct i2c_driver atmel_ecc_driver =3D { .id_table =3D atmel_ecc_id, }; =20 -static int __init atmel_ecc_init(void) -{ - return i2c_add_driver(&atmel_ecc_driver); -} - -static void __exit atmel_ecc_exit(void) -{ - i2c_del_driver(&atmel_ecc_driver); -} - -module_init(atmel_ecc_init); -module_exit(atmel_ecc_exit); +module_i2c_driver(atmel_ecc_driver); =20 MODULE_AUTHOR("Tudor Ambarus"); MODULE_DESCRIPTION("Microchip / Atmel ECC (I2C) driver"); --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BD3B33C4178 for ; Tue, 19 May 2026 20:48:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223704; cv=none; b=n3YDDqcRbsZcnRQKbWUK2nZTRYBfPAkpUeg0Shl2upt4/ohSDB9XZaeTM01xFZwpH1p8oeC4favsfpNbR7k33wGmBCBZHN9tvZdS3DZ17poCMiGfkVgOoLGyfJBjX1AUP9gI6GmoV+doDRQKLcA+jUYTGk5J30a/d3S5Gps8Cx0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223704; c=relaxed/simple; bh=2O141NQg4/9uuebb1EfUwG5gECLyMTnC8YQQqB084M4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=V46T3Dmp6VztMCgVHv/hYCJJjKButzJFvPn2D8SiO3KCBrom1k23C3zBvERCk3PjsDSs5JR7ZiwZQ2Ln545mVHg6IvKRJpVCul1133tCelCyLq0WJ/ed9LES/LTJO3k7Ylef1yrMeU7bDef8H6ucn8GfRlLTZFe8ZQN+jC2aHKo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nuLpsSiX; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nuLpsSiX" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4889d0a9df0so3507175e9.3 for ; Tue, 19 May 2026 13:48:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223697; x=1779828497; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gxI7hUf51SF8n1So+Ll4nAd4AxUxL7HVVQ7quL1tTus=; b=nuLpsSiX4ynqAmkHvzy2jUHzjdbjMzD6U0M6rtcIjbMTafsruFYyv+dPN19lvYodR9 2dmXbCXihd9qoac6m7JpIvRoHgQfGVWtiSGscUVFk7Lh/NhY5VO/twJbLUDgZj2FM18k Fi5CFwAlfyiYVUgZK8wYxdV2IN+OVNiBEHQebxxu8TyiEJUkgJfE/pvfHQkZC1eqqYG6 OP+Aj4hRxs3ubkFOK6QhPc1muBddZDw8o+FQXNWVwEa7FCMJsitmx0UC4PePw9hqe6QL o+O1DVFwqhSd3h2gwcLonXBGE56PFbwf5GellsASHu8cJo8mDAvzulWshtFos0Nr15Oo qOpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223697; x=1779828497; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=gxI7hUf51SF8n1So+Ll4nAd4AxUxL7HVVQ7quL1tTus=; b=ZZaXSkwDL0IfjGbHYAgkFbi8YsuEqYIylWEkbILGMsz6qWTvU5gyDSzieq9Nr/m/qh L1dB7vXx+k869iGWZKUnoTkqNwd09OgVKoTtoOYER2MTWQz+rHNtoFSPNTVSyKhI02Fx vE10r3o5xCw8xRO6WsAxvQKI8CSk1Y6MKq4vO1X+DOxLaurvh9ZV0vXKeV5HfU1zsQpQ U+y8jbJOCyjAfC/+uS1m+CRuhvvt1nloHlW5Pq3qGYKA+/GyAFgOtZTd9bPNFNeHYpCL WtggqueTkhfjxYoEtNbnEahinTWr1w6fASQGMIrKBIULunNwn5/fRUsNvzsJUy5IL7E4 cDiw== X-Forwarded-Encrypted: i=1; AFNElJ+OqwaJXjAHrzj4xS6aSBbLeQMzxmpSoscnKK9SXvOVnLM8vWfJxV2c7D9XJPDVuBWMbNxh4qyXJtaBpME=@vger.kernel.org X-Gm-Message-State: AOJu0YzmB6jyaNn3q6nRZAZztikScrNrOWzpOZp3zuBgBuQ0mxE9Khy9 nL2RodeeYA4oT2koJdXaZZ/MCsegJFgHOltoi4s9Akys23HcSoTfwvgN X-Gm-Gg: Acq92OFYxIUBR8jSgD4mHFAdGepVF5uA1mlwDE9moWgZs/uW7b1sk4EpyXl1i5gZmDs HFFoASQs/E+WgRubC/DdvIeoD6JoNC4Ch1btAed6CYtWECK1wIe4akYYgfFJ3rkVa98t6C/xPBj IDZwl62Ma/3puEoEX4O/eb624ycA91xSTsO5H14LptoEZkX2mU1YcUCEgRfoJAX8IDKcqr3uaka fYVISh92RyUE5wVk8lecZQUhmDhg5qsiEk3kLQEpbZZ3UTbC3Gk1f2q6Kxz63HzaGhSLs1a+I5y 2XA4IAttXdGJ2EmEIntTtsVFiUVYHqOAtmJB1+UGdUiWFZQENUExveMJ3p+5mrQewI77FxGZqVj rlyS1e7gHhy4LrfSkbO55vd1RZLt2JMKVGhWct4H5mxQu3MQkLTRAVaSq5AqZ1nt9EzruKjsoUi EFUG0X9YwU6YwtrdfKP6TOB2HWo+TBondg/gT6i5bu97tT5CT9faIMstP5T6Ejhzo= X-Received: by 2002:a05:600c:4588:b0:489:1c1f:35e5 with SMTP id 5b1f17b1804b1-48fe664be2amr148849335e9.6.1779223697098; Tue, 19 May 2026 13:48:17 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:16 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 08/12] crypto: atmel-i2c - move shared client allocation logic to core Date: Tue, 19 May 2026 20:47:59 +0000 Message-Id: <20260519204803.17034-9-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Migrate the I2C client allocation and runtime load-balancing routines out of the ECC driver code and into the central atmel-i2c core library module. Export the symmetric lifecycle helper interfaces atmel_i2c_client_alloc() and atmel_i2c_client_free() using EXPORT_SYMBOL_GPL() to expose a unified client management API. This consolidation enables the dynamic selection subsystem (which chooses the least-loaded client device based on the active transformation count) to be shared by both the ECC driver and upcoming Atmel crypto modules. Refactor the ECC driver's transformation context initialization (init_tfm) and teardown (exit_tfm) paths to use this centralized core API. No functional change is intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 50 +++----------------------------------- drivers/crypto/atmel-i2c.c | 46 +++++++++++++++++++++++++++++++++++ drivers/crypto/atmel-i2c.h | 3 +++ 3 files changed, 52 insertions(+), 47 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 4f27e1caf106..7d090c557330 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -203,50 +203,6 @@ static int atmel_ecdh_compute_shared_secret(struct kpp= _request *req) return ret; } =20 -static struct i2c_client *atmel_ecc_i2c_client_alloc(void) -{ - struct atmel_i2c_client_priv *i2c_priv, *min_i2c_priv =3D NULL; - struct i2c_client *client =3D ERR_PTR(-ENODEV); - int min_tfm_cnt =3D INT_MAX; - int tfm_cnt; - - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - - if (list_empty(&atmel_i2c_mgmt.i2c_client_list)) { - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); - return ERR_PTR(-ENODEV); - } - - list_for_each_entry(i2c_priv, &atmel_i2c_mgmt.i2c_client_list, - i2c_client_list_node) { - if (!i2c_priv->ready) - continue; - tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); - if (tfm_cnt < min_tfm_cnt) { - min_tfm_cnt =3D tfm_cnt; - min_i2c_priv =3D i2c_priv; - } - if (!min_tfm_cnt) - break; - } - - if (min_i2c_priv) { - atomic_inc(&min_i2c_priv->tfm_count); - client =3D min_i2c_priv->client; - } - - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); - - return client; -} - -static void atmel_ecc_i2c_client_free(struct i2c_client *client) -{ - struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); - - atomic_dec(&i2c_priv->tfm_count); -} - static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm) { const char *alg =3D kpp_alg_name(tfm); @@ -254,7 +210,7 @@ static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm) struct atmel_ecdh_ctx *ctx =3D kpp_tfm_ctx(tfm); =20 ctx->curve_id =3D ECC_CURVE_NIST_P256; - ctx->client =3D atmel_ecc_i2c_client_alloc(); + ctx->client =3D atmel_i2c_client_alloc(); if (IS_ERR(ctx->client)) { pr_err("tfm - i2c_client binding failed\n"); return PTR_ERR(ctx->client); @@ -264,7 +220,7 @@ static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm) if (IS_ERR(fallback)) { dev_err(&ctx->client->dev, "Failed to allocate transformation for '%s': = %ld\n", alg, PTR_ERR(fallback)); - atmel_ecc_i2c_client_free(ctx->client); + atmel_i2c_client_free(ctx->client); return PTR_ERR(fallback); } =20 @@ -280,7 +236,7 @@ static void atmel_ecdh_exit_tfm(struct crypto_kpp *tfm) =20 kfree(ctx->public_key); crypto_free_kpp(ctx->fallback); - atmel_ecc_i2c_client_free(ctx->client); + atmel_i2c_client_free(ctx->client); } =20 static unsigned int atmel_ecdh_max_size(struct crypto_kpp *tfm) diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c index c73ef3cadf0e..4621aa57833f 100644 --- a/drivers/crypto/atmel-i2c.c +++ b/drivers/crypto/atmel-i2c.c @@ -57,6 +57,52 @@ static void atmel_i2c_checksum(struct atmel_i2c_cmd *cmd) *__crc16 =3D cpu_to_le16(bitrev16(crc16(0, data, len))); } =20 +struct i2c_client *atmel_i2c_client_alloc(void) +{ + struct atmel_i2c_client_priv *i2c_priv, *min_i2c_priv =3D NULL; + struct i2c_client *client =3D ERR_PTR(-ENODEV); + int min_tfm_cnt =3D INT_MAX; + int tfm_cnt; + + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + + if (list_empty(&atmel_i2c_mgmt.i2c_client_list)) { + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + return ERR_PTR(-ENODEV); + } + + list_for_each_entry(i2c_priv, &atmel_i2c_mgmt.i2c_client_list, + i2c_client_list_node) { + if (!i2c_priv->ready) + continue; + tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); + if (tfm_cnt < min_tfm_cnt) { + min_tfm_cnt =3D tfm_cnt; + min_i2c_priv =3D i2c_priv; + } + if (!min_tfm_cnt) + break; + } + + if (min_i2c_priv) { + atomic_inc(&min_i2c_priv->tfm_count); + client =3D min_i2c_priv->client; + } + + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + + return client; +} +EXPORT_SYMBOL_GPL(atmel_i2c_client_alloc); + +void atmel_i2c_client_free(struct i2c_client *client) +{ + struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); + + atomic_dec(&i2c_priv->tfm_count); +} +EXPORT_SYMBOL_GPL(atmel_i2c_client_free); + void atmel_i2c_init_read_config_cmd(struct atmel_i2c_cmd *cmd) { cmd->word_addr =3D COMMAND; diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index 351306c426aa..6c2d86fd9068 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -192,6 +192,9 @@ void atmel_i2c_init_genkey_cmd(struct atmel_i2c_cmd *cm= d, u16 keyid); int atmel_i2c_init_ecdh_cmd(struct atmel_i2c_cmd *cmd, struct scatterlist *pubkey); =20 +struct i2c_client *atmel_i2c_client_alloc(void); +void atmel_i2c_client_free(struct i2c_client *client); + void atmel_i2c_deactivate_client(struct atmel_i2c_client_priv *i2c_priv); void atmel_i2c_unregister_client(struct atmel_i2c_client_priv *i2c_priv); =20 --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE3CF3C456B for ; Tue, 19 May 2026 20:48:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223704; cv=none; b=CqMCZA1sVHuxjQQbvHWl/zmPr4x8sODahnRp7f/a1G3Xmx2G79OJsbv7SMZEehsJvJiqiuJ1p3JmmoNF9/cY+RV5bfWNIfD1NYVnVX633sZI123pe2ojLdrA1vXKI9bAEh48xkGBNk04kAKAVXDr4tYCjUBeM9m9ayOlmAmpet4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223704; c=relaxed/simple; bh=80omTZr6vSQIfE2wXBax3bJRpWFBu5cr245L8v7TjXI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=i/mTb0cY0XfWO+kpgi/UyyuUl4NOC1KrheiUq6pbiHoi0iZpfoOye5XawbxkuIcO1zAidEYcATsqRgzog6XzTDFlGXNo9V21q9faMZMxCd8U3GCta38KaRvpJ7gEnMfSGEXAvVcbmL9GwkfrsG4n2bzXYUWArePEIGEBabR5cFk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AfGybPnv; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AfGybPnv" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-488a8f97f6bso6976305e9.2 for ; Tue, 19 May 2026 13:48:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223698; x=1779828498; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LjpnSe9r8g1EhPpSrGAgVKmBUmEd4FiP3tGuvmdsN18=; b=AfGybPnvlQv13Ixk7QW/u3YIyaHJZ6eGEDV2e91mTuux7Fon6nHtLlFYAMjaJVoT5V /oXCSQ6e8xJCqkKV1XxgenxO83RvUz7F6GpYK0KaVQpsWXrnHylVPnhKr7EGsDoH1jiN klt3VOI+KEa1xkbUBIzJVxBanPeoQvGh2Qaa1egoUxDu0vFXmszIFzprMD7eXk/4nXAK GOZiBxSVtdKAG9V2jKOrlo0zK/nEORQET2t6DkNi8ppMNIcA4jjn6hDpJzfetedDdrTc wp3iwhaSCmdouwm2UT66PeEvxIxNRoxmk4Dksay/yqKJVn3HJRECpqQfngMylzICz7iP gvpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223698; x=1779828498; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=LjpnSe9r8g1EhPpSrGAgVKmBUmEd4FiP3tGuvmdsN18=; b=DQzeC3B9Dk3vYv3hmdi3Ek4TASqOCtV64hJBivCUzYNtTm654524XNoBBYqu8kXDH8 yIvwLB2KTa4BJutER3BArf54XJDdh+reoa6ly85QVopnYVUqyPCUvpqOGxsIJz2W+4ID P7DtldR34EEWkOjanYEgUdRVHp2u+JvamAPWjzmvFBxwSfJfi/0G3fGStrwvCXrQzdrr jnZceOjGvn2Xxh36HgqRRnnAYoFamEqrlfyXEIA3kZLCDohnQu7kccuIZVLzk2B8K5zy ET+/CRevtf9YmokZuRpNaan3kJb/OMUYKii13gAoZB42n382oV4Iwcxk4QwnwgF3odjl znrg== X-Forwarded-Encrypted: i=1; AFNElJ/eTFV+/l6X+rm7SrBoJqbCXsiOOzmiVWVVgecGX0p8fc7HRmSti/ex+Gvr1sf9LsbMNeUtnyfkuBXVkkg=@vger.kernel.org X-Gm-Message-State: AOJu0YxI4dQgptm08/CL+B7LyGtFurTmW1nh9hMA7MSGUfTHhnYeLTF+ wQ1PMV2KMjsT3C+0g0keQduspbZwuMGu+Fdk9EQpm3Edcudqs0t9WZan X-Gm-Gg: Acq92OGp7GFDdJYTUnHjMwmmAkJjBwc4oGQo5rZFd3aeWICCA7QF9LiIiAKiZB1cKTq bTtE4UjtgzBhoRrLOTJ90HpeQcD4rH1u03z3kUhoLQ4aJd+L98gKgIMPBTPZwLDYJrAdY8lkHDb 7LX6qy82uviipSt3dLEP6TF54VhVpF5YpwClo6NTSyfiUmLZnr2um/fwrSfQ1Ie6sIBSjXlrBie ymaSTs6UgnYuB59HzNdXZAvBEl9u5TLO0ufDRpKK7ZIMsxd0EOvFECHK1Z7qCfjCB1SKNUVhAr9 RlwJbCzwlMLha4kW86uSVQHvWT2R2cIrwO8e0EYNYyA58TYZP+t002K04qiHPNHgGelOSVc2YFa DX/umDj+ZY+tciYgZdaTqsCx58KhohUzrL3dAPYSIEneCIW2lyiSeWF3Bvz2W/uUNJxCQJ9aXwr 0HSkq5DYkmWrYrdPrgyI76zr4Tvgw2sXK9G40ZIIhPaojaL2yEeRr/D/7mdviGjE0= X-Received: by 2002:a05:600c:1914:b0:487:1fbb:5a28 with SMTP id 5b1f17b1804b1-48fe5fcb651mr173127925e9.1.1779223698112; Tue, 19 May 2026 13:48:18 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:17 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 09/12] crypto: atmel-i2c - implement capability-based client selection Date: Tue, 19 May 2026 20:48:00 +0000 Message-Id: <20260519204803.17034-10-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend the shared I2C client allocation interface to support feature-aware hardware selection by introducing capability filtering. Add a 'caps' mask to 'struct atmel_i2c_client_priv' alongside an 'atmel_i2c_capability' enum. The allocator now explicitly filters hardware nodes by a requested capability bit while retaining the least-loaded device load-balancing scheme. Update the ECC driver to advertise ATMEL_CAP_ECDH configuration capability during probe, and adapt the tfm context setup execution path to request this specific capability variant. Initialize the bitmask field to zero inside the SHA204A driver context for now. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 4 +++- drivers/crypto/atmel-i2c.c | 6 +++++- drivers/crypto/atmel-i2c.h | 8 +++++++- drivers/crypto/atmel-sha204a.c | 2 ++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 7d090c557330..11ee8ef71b94 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -210,7 +210,7 @@ static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm) struct atmel_ecdh_ctx *ctx =3D kpp_tfm_ctx(tfm); =20 ctx->curve_id =3D ECC_CURVE_NIST_P256; - ctx->client =3D atmel_i2c_client_alloc(); + ctx->client =3D atmel_i2c_client_alloc(ATMEL_CAP_ECDH); if (IS_ERR(ctx->client)) { pr_err("tfm - i2c_client binding failed\n"); return PTR_ERR(ctx->client); @@ -283,6 +283,8 @@ static int atmel_ecc_probe(struct i2c_client *client) i2c_priv =3D i2c_get_clientdata(client); i2c_priv->ready =3D false; =20 + i2c_priv->caps =3D BIT(ATMEL_CAP_ECDH); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_add_tail(&i2c_priv->i2c_client_list_node, &atmel_i2c_mgmt.i2c_client_list); diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c index 4621aa57833f..e6eeba1f6554 100644 --- a/drivers/crypto/atmel-i2c.c +++ b/drivers/crypto/atmel-i2c.c @@ -57,7 +57,7 @@ static void atmel_i2c_checksum(struct atmel_i2c_cmd *cmd) *__crc16 =3D cpu_to_le16(bitrev16(crc16(0, data, len))); } =20 -struct i2c_client *atmel_i2c_client_alloc(void) +struct i2c_client *atmel_i2c_client_alloc(enum atmel_i2c_capability cap) { struct atmel_i2c_client_priv *i2c_priv, *min_i2c_priv =3D NULL; struct i2c_client *client =3D ERR_PTR(-ENODEV); @@ -75,6 +75,10 @@ struct i2c_client *atmel_i2c_client_alloc(void) i2c_client_list_node) { if (!i2c_priv->ready) continue; + + if (!(i2c_priv->caps & BIT(cap))) + continue; + tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); if (tfm_cnt < min_tfm_cnt) { min_tfm_cnt =3D tfm_cnt; diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index 6c2d86fd9068..636d21bd1348 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -115,6 +115,10 @@ struct atmel_i2c_cmd { #define ECDH_PREFIX_MODE 0x00 =20 /* Used for binding tfm objects to i2c clients. */ +enum atmel_i2c_capability { + ATMEL_CAP_ECDH =3D 0, +}; + struct atmel_i2c_client_mgmt { struct list_head i2c_client_list; spinlock_t i2c_list_lock; @@ -131,6 +135,7 @@ extern struct atmel_i2c_client_mgmt atmel_i2c_mgmt; * @tfm_count : number of active crypto transformations on i2c c= lient * @hwrng : hold the hardware generated rng * @ready : hw client is ready to use + * @caps : feature capability of the particular driver * * Reads and writes from/to the i2c client are sequential. The first byte * transmitted to the device is treated as the byte size. Any attempt to s= end @@ -148,6 +153,7 @@ struct atmel_i2c_client_priv { atomic_t tfm_count ____cacheline_aligned; struct hwrng hwrng; bool ready; + u32 caps; }; =20 /** @@ -192,7 +198,7 @@ void atmel_i2c_init_genkey_cmd(struct atmel_i2c_cmd *cm= d, u16 keyid); int atmel_i2c_init_ecdh_cmd(struct atmel_i2c_cmd *cmd, struct scatterlist *pubkey); =20 -struct i2c_client *atmel_i2c_client_alloc(void); +struct i2c_client *atmel_i2c_client_alloc(enum atmel_i2c_capability cap); void atmel_i2c_client_free(struct i2c_client *client); =20 void atmel_i2c_deactivate_client(struct atmel_i2c_client_priv *i2c_priv); diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index 6e6ac4770416..3853d2b95449 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -173,6 +173,8 @@ static int atmel_sha204a_probe(struct i2c_client *clien= t) =20 i2c_priv =3D i2c_get_clientdata(client); =20 + i2c_priv->caps =3D 0; + memset(&i2c_priv->hwrng, 0, sizeof(i2c_priv->hwrng)); =20 i2c_priv->hwrng.name =3D dev_name(&client->dev); --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBBF73BFE5B for ; Tue, 19 May 2026 20:48:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223704; cv=none; b=r2A/J4105rISNBre4s9h57iwHC+nhKzoFkajbJ1FXIe3jKdE6Eq2d6skLUPhHIKwm0ElKuLkv29R+MLvNL0afXdkip7ZqnxqrwETHJKcibPETiKLDETpEhBsfwT246Ztv08N2z08bn9Ed2gZsI5NqLZu41TFrN/E/V8NU+WV8Ws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223704; c=relaxed/simple; bh=m0BO1BJp7UiRiIUF0q/PMhak4m/3xBhMeT8SNCZ26Ow=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Ko0QmTdZCZKw9umBz3+ru1F91u8c4RO03SIRlGLzoVVBgQ7f4ZAsw3cAv4aoUj42y7L5iJbisjEPPckeI78u9nyHr6jSZww7s62h3cN6JM1Ay5cxpUzvM56uCisbNTDPIHj6H8ssLxao2xMkHG0bgbUOp1mpDbZadol6uiHt3uA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bOV0P4GI; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bOV0P4GI" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-449cdc12a8aso520960f8f.2 for ; Tue, 19 May 2026 13:48:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223699; x=1779828499; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CeQLtV3ZJs9NMCaLxxe8lNWCUSJcJ/X+OKLcCSGP6Uw=; b=bOV0P4GImCXLytP0eBSoMlpSuoSGpGWwPGSeZHXaHRCLSq175q41SaSba54ZS5HeVH 6G/T5O4Ge66ezr20J1G1AyCNeSIysE3oko6PkgTShUIXpxfck7loVSCs/5C/in8hoV41 LNGNaVcfAVq7Ln6a41Di7zmujj8yqB26MBMjkenWj6uQl+XbSiLCoJhzFHd896H8kUwX TRylbwKQHc2mHHHKDA0CeJtSYS/84lW5fzmJD24U9jQpu9pccwjimXFqv0eG2PvYRSHx Xeo8FTWffAqebl8g7DrbflzaKxWhV6Ww/VyuJbcJbhYPFs1mw79Pz7XeDYRNByp6e4+Y Y90A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223699; x=1779828499; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=CeQLtV3ZJs9NMCaLxxe8lNWCUSJcJ/X+OKLcCSGP6Uw=; b=KBvYFgbFnnuQsyGu/WfTDVIcTMeHp8NJreb+XTrQ3q4GAUbkqZGwY/EHvMP4KYZrTb DVxBFSC8/99sRSQdMSHzmXOeIzLeZshCOl02jaQY5PNQFMtRgmQBz0mjaoR2VN/kp1E3 d+OEX71q6mQD/Mo8qsLeHH8TP1o29vIO+eiOExMVHK9B1sq0BknC1hoWTGBBuUm8ZMxE tIk73H26IcPfSrgqqaWMJ4a8rcdIjrXFwAY5rUeIoaLCKADdNiYKlDaIKmowzmU5m19u wu9lWxCvXPc3SbSNEiqp4W+WMA5Q+xt62x/0K45e7cMTPiU17w5JX7XNt1c/JyIx2m36 cNxg== X-Forwarded-Encrypted: i=1; AFNElJ+3tMcFcxpLedg6w4Wm/bh7t82ZjQBz3cH97s6Lcu47JGbDoxvOyfdqgbCRpAbKB+xafDtr896/1M5dBbs=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0mKkhMwLFnLJ3xDH6j6yl+fDWHdtzxU8jGjappEfKbgRJ3cv4 P9mmJp+74QFE87Vd7knhCu0VqjtGjOq+twv6Sb+FRcLuTKCFArUgFq5b X-Gm-Gg: Acq92OGcjo3ZjhoVOLcv+WuNi9/Z4DMlDVIeg2daasizL73jDLqecU+yOqsbLArkkLi FhJW263QSWsQ3xWqg20Yd9djoNAqoDaBftoznV6ApubLS0L3Ia/fm0MFWmBy6zPNV3vJ0wwqHjH 2UQXR01LqYaLS7faJ3jZkZ2yIKBr4kT4zdVBBNHuP7cdAYTaZboKJxNSlD6+F/siVC13MdayYAQ 3EadwoYlfKO3fx4tCxLwj9f91Vlg7IckI+To0LTprauQPZp7WRFsyHnShUOyLhVabZMyDD9pwdH UVoZ+1BQSSZELzYhv91+fygM5gMqIINuNWUy7kJ8B+sXUBAkqVK8/HDjxKEOZ+WyfITATUnbHUW RjG879bwBaQZ03qX4TT7w/PaO1W35W+hmWP+vm/M42kyFBG4KEFvt3ds9B+H3j/VJndO6N7bqqo xC41yIz0uvBc74Ay3yTT/COTdlVES8DqXhDWFlgNlM+Ez1JbJUsyODLDt2x7ecilc= X-Received: by 2002:a05:600c:4fc5:b0:489:1dc6:d6e with SMTP id 5b1f17b1804b1-48fe5fcf406mr148338135e9.1.1779223699130; Tue, 19 May 2026 13:48:19 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:18 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 10/12] crypto: atmel-sha204a - integrate into core management tracking Date: Tue, 19 May 2026 20:48:01 +0000 Message-Id: <20260519204803.17034-11-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Register the SHA204A I2C device instance into the shared atmel_i2c client management tracking list during the probe phase. This allows the driver to participate in the central hardware selection infrastructure. Rework the error-unwind paths inside atmel_sha204a_probe() to prevent stale entries from remaining in the global tracking structures if a partial initialization failure occurs. If sysfs group creation fails, explicitly trigger devm_hwrng_unregister() to preserve the strict lifecycle ordering introduced in previous stability fixes. Convert the removal path to use the core teardown helpers. Ensure the device readiness state is deactivated using atmel_i2c_deactivate_client() before any local hardware cleanup runs, and call atmel_i2c_unregister_client() at the end of the sequence to safely drop the node from global tracking. No functional change intended beyond improved lifecycle handling. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-sha204a.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index 3853d2b95449..38a269186e2a 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -172,9 +172,15 @@ static int atmel_sha204a_probe(struct i2c_client *clie= nt) return ret; =20 i2c_priv =3D i2c_get_clientdata(client); + i2c_priv->ready =3D false; =20 i2c_priv->caps =3D 0; =20 + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + list_add_tail(&i2c_priv->i2c_client_list_node, + &atmel_i2c_mgmt.i2c_client_list); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + memset(&i2c_priv->hwrng, 0, sizeof(i2c_priv->hwrng)); =20 i2c_priv->hwrng.name =3D dev_name(&client->dev); @@ -185,15 +191,28 @@ static int atmel_sha204a_probe(struct i2c_client *cli= ent) i2c_priv->hwrng.quality =3D *quality; =20 ret =3D devm_hwrng_register(&client->dev, &i2c_priv->hwrng); - if (ret) + if (ret) { dev_warn(&client->dev, "failed to register RNG (%d)\n", ret); + goto err_list_del; + } =20 ret =3D sysfs_create_group(&client->dev.kobj, &atmel_sha204a_groups); if (ret) { dev_err(&client->dev, "failed to register sysfs entry\n"); - return ret; + goto err_hwrng_unregister; } =20 + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + i2c_priv->ready =3D true; + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + + return 0; + +err_hwrng_unregister: + devm_hwrng_unregister(&client->dev, &i2c_priv->hwrng); +err_list_del: + atmel_i2c_unregister_client(i2c_priv); + return ret; } =20 @@ -201,12 +220,13 @@ static void atmel_sha204a_remove(struct i2c_client *c= lient) { struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); =20 - devm_hwrng_unregister(&client->dev, &i2c_priv->hwrng); - atmel_i2c_flush_queue(); + atmel_i2c_deactivate_client(i2c_priv); =20 + devm_hwrng_unregister(&client->dev, &i2c_priv->hwrng); sysfs_remove_group(&client->dev.kobj, &atmel_sha204a_groups); - kfree((void *)i2c_priv->hwrng.priv); + + atmel_i2c_unregister_client(i2c_priv); } =20 static const struct of_device_id atmel_sha204a_dt_ids[] =3D { @@ -239,7 +259,6 @@ static int __init atmel_sha204a_init(void) =20 static void __exit atmel_sha204a_exit(void) { - atmel_i2c_flush_queue(); i2c_del_driver(&atmel_sha204a_driver); } =20 --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A55723C0601 for ; Tue, 19 May 2026 20:48:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223703; cv=none; b=RCBkFAHrHynpyuJIfk/NOwvH/A3ZO3MtariQonTzDtWhGAIxz3cTkep2PlmjtsJqvMoPH+SWAcLEmG3SGlPU/GFOWxWF3mb+0M3VZIyZLjKbeHMcajcUtzI1kPwDwWbpKwb41dKxATGvt1xWSLy+Co8XFDmo3jGXUGzRn1sNI1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223703; c=relaxed/simple; bh=HcGNt0IMVlN/ojuZul68gyUXfj92IbH1U64eeoIpt3w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ozzstaX29PFpy/dJqH63aKPgtuEp4vjUc8r1lP0EgHd+Pnb68ojrObf3lZ1bkodsvZFDpU1GJUxEbhUpOOtmbeHx/T+vOfV6tGI7jugLMv9lV8xHfG+9UapdGWEbQx4DYbJEwmjpY4uKnI3UPkbG7PvOkoU12Dc8JQ7ELbl9t1Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Pd8igZkI; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Pd8igZkI" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-452aacde862so298603f8f.0 for ; Tue, 19 May 2026 13:48:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223700; x=1779828500; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+dQdC9oLqGqR6Yemw3ngZxXH5nQjTXJGwmXiYcKTYls=; b=Pd8igZkIw9G8LfKTgHoNZlhYGcxeqABunGWVVA3e9CvynGho4AFCPd1Yxv9zm5Ix3V o8Al9G/QLCWWm6/SM0ffhJonYMoeiwEzHlPnFx/c/AgYlN4soKTd1Pm8btr7dRdH7rcK izsGdwxy+59l7mEsutOFBTLpSstnLFOx6vqjBD+39V+7TGcoSKotrwLcD4U+VIhlV4RM vgjCkjpwgTtyBDosOYXMfU/iSfA82+DNDtX8kILOgJb78xZzKIFajCVAMfwbrZtgI7X/ Alp3aC9RRX8pvXta6XGnGg6bRLzkEFB/5PE9/WSP0P9E5j7gmyIdT4bY6YT8A0gKjsh2 UdEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223700; x=1779828500; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+dQdC9oLqGqR6Yemw3ngZxXH5nQjTXJGwmXiYcKTYls=; b=ZyvKNSoadrEFpKXKRzzWDudnK/XRpe5PlK2fqnWxPzhICwNigDEre6JQFRlbnH/tqC XuUHvJ3uVR0tOTWRdSYyp4DOi7v8KfFbf0DgGZcDCwCLz/RHlc08QdHuLma23bzQDw+a 3I2CRDQi20l+ZRCssYWJ+pDRuiuHTMYPmFTr5YKFS+f7o/MtXUN3lUWW8+kNRQvmrcPt iBRPB7MbnjK44RX7Ldte2Ibi++nBVsf26E0yCcnkVc0k/HFbVEKqmjdr9xyffD0hUJD0 3sZWIdbjwe2FLgu54RC5iBScvgFgEOnIYO773ZRvTxv1+WIa42sklbsDmIqaynj1fNvy oojw== X-Forwarded-Encrypted: i=1; AFNElJ8fPsqWv+3cgVBtvxcEsCIfPuRZ+3YoNOTYvU2BSp72rDQe9sWtJL8h8NbMbBeKgupfKNaObAF2jvg8Yks=@vger.kernel.org X-Gm-Message-State: AOJu0YxsdCviR+y7Wul8cUHR3o/gFYVIGoxYjfmidNDIHTjfLRHPudLP 7U3XFoSwe+INfW5iH4mxYq4cq9UQvveGNFybbRlHOafXD2ClkbqdgxED X-Gm-Gg: Acq92OEo2Qgdz+1EFfk+WEsf/NlVAWqdgdCkd9l91lw5S7Xyl+sa9b04HsuQd20ppil G4Ouz4m3zQ1D9I6vVGmRpeK4etGRz2Hu60fNeOfmdHsrD8pbPH7jTZRxkEoYDEJ0OMIxgrdQOo6 AaVYZQYK+MKQiYE6iim2c6OXoMlL2s+dfFEsAGbiaRNE+ZehkowzYrPybJxjBWVQo8ZdPv66yPn IwiLiSrmjHsVGtWnp5DJgwEP0fwmV/yBYNkSUw0Mnz7n+Fni3HAn4T8WqU+4XgHuOr+8Yw8IIlR z3yL2J0uj31r8Ax7MyWUY5m+UQi7QBsPiI6Kr9zVBMLHyfJ1Clj0KBFEHSScgxuzYzHk2kYLqzp d5PT0RuupuiEir5BTQxMkiUFMFquQTVICsU+EHmMwvLcsdDWZVYwjisEs73qRHyDx69TTZxv07K T7ok7WSqHgTpxLGnPyg3nwmU1SYeDfxLaw+L1Pk6z/xgn7l4WvV/FEZuV/BZUODV4EWv5SLLEr0 A== X-Received: by 2002:a05:600c:198d:b0:487:1826:e138 with SMTP id 5b1f17b1804b1-48fe6309a99mr184655105e9.1.1779223700120; Tue, 19 May 2026 13:48:20 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:19 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 11/12] crypto: atmel-sha204a - fix heap info leak on I2C transfer failure Date: Tue, 19 May 2026 20:48:02 +0000 Message-Id: <20260519204803.17034-12-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When a non-blocking read operation is requested, the driver dynamically allocates memory to track asynchronous transfer status. If the underlying I2C transmission fails, atmel_sha204a_rng_done() logs a rate-limited warning but incorrectly proceeds to cache the pointer to this uninitialized buffer inside the rng->priv data field anyway. On subsequent execution passes, atmel_sha204a_rng_read_nonblocking() detects the stale rng->priv value, skips executing a hardware data read, and copies up to 32 bytes of uninitialized kernel heap data from this garbage memory pool straight back into the system's hwrng data stream. Fix this information disclosure vector by immediately releasing the allocated asynchronous work data buffer and explicitly clearing the tracking pointer context whenever an I2C transaction returns a non-zero error status. Additionally, ensure that tfm counter is decremented within the error path to prevent reference counter stagnation, which would otherwise leave the driver in a permanently busy state. Finding by a sashiko side-review. Fixes: da001fb651b0 ("crypto: atmel-i2c - add support for SHA204A random nu= mber generator") Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-sha204a.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index 38a269186e2a..3d29543032cc 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -31,10 +31,15 @@ static void atmel_sha204a_rng_done(struct atmel_i2c_wor= k_data *work_data, struct atmel_i2c_client_priv *i2c_priv =3D work_data->ctx; struct hwrng *rng =3D areq; =20 - if (status) + if (status) { dev_warn_ratelimited(&i2c_priv->client->dev, "i2c transaction failed (%d)\n", status); + kfree(work_data); + rng->priv =3D 0; + atomic_dec(&i2c_priv->tfm_count); + return; + } =20 rng->priv =3D (unsigned long)work_data; atomic_dec(&i2c_priv->tfm_count); --=20 2.39.5 From nobody Mon May 25 01:14:39 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D91133BED19 for ; Tue, 19 May 2026 20:48:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223711; cv=none; b=FzDAldByx5WtTffUyg74heeYkKaNLn8mGACN3vbcY5ZT0mPzjP++THeBI6ZRoN5RAgGaA65IHaN32jpjnfzwco2pMW9S3jx5U+Sb9HKq7sfD18TrYptaVbT1+JBaGbyBHhLqhDeBv2Dw2Gj5wWfmf96tg8E8WbTcm5OpPi0mBJs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779223711; c=relaxed/simple; bh=XMfcMq6rOzpfpas4yxMb/mzY/1QxzkR88p4GpeyFGgo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=JyCl18UT6AaC0yt0al/gslKAVSEvh2q4ElnWcMYAs2I2VFu2KVcI3L5Lmkx5lALqhBcicvsNz+RzQUybnqp2yJTbr/Wqulov4mDtNksKSqvjKwYo8JCBS/A5o8jXVEXyFvA5FJVImHNpNU2DUyCfStpPlnL8Vpc4ZECgFFkgk44= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=e76ZOV3d; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="e76ZOV3d" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-48fe7a40e51so3635345e9.0 for ; Tue, 19 May 2026 13:48:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779223701; x=1779828501; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/yTt0exYCuTu7jCoMn14Ieq943zuwmtiBW2wGq9ojPY=; b=e76ZOV3dkDe95sVQmOMbnf/TTwTMbEc5F1k7+OjZswwJBvu0NIKc3ofalThlyO8RmD rc5Zs81G2i85OY+bvy0lh4WXhIhBUgnKPr4fvaGMT7wCQHtTGCmvPwpGpEIZCoOJeLUx cWPZIxZPG4ByCoOhEMjcA+zV9OSimLTyu/co07JfAiP5F3ZQknWCw9a7wL2JAhKe/uAZ 1ZsisZPyzJS3ZHWY6E0jYcJkwRJs8MsHkz0STs7wHgldLSsZGtjbMLEdPH8YihNBVim7 4mumjBwevTZdBl0DB+GNsag7M/3ZaPo9DVsSEkCtMmjfus9/IPqJrZdqDzU9cfiuiVmQ jWrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779223701; x=1779828501; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=/yTt0exYCuTu7jCoMn14Ieq943zuwmtiBW2wGq9ojPY=; b=bnoesYPshegwigKBnGPEnqyAWN78B4oayaq9BxjKkAvRJvsJCfPUf9TA9dFHIEjxrP o/ijT2wT8CsRvBXc4CxnFUroOGsEl7ernUf3Qu3Ia1Ccqh34pJZ5LGsb30Wb6/LfI/uV JSuoA0/x9Tm8EHObPY+p9HthJOVIT13gxdRGf1vCSp8kGlOZbqi5eQJ2qn565K6gL5JJ FDZd1JGP7W/eN2HBRLquk6lZfelXiE7xUn0EiA8kFH5+wn+hY/o1t/dbVWaixPb8K4fW qWhrGUu4T/OPzVMXPZcPvuBiKAszBRnbT2OIlSY/xBXXffsqaILwRnTcGBrhRk0axlxq D9mg== X-Forwarded-Encrypted: i=1; AFNElJ9z8Vq9r9gxPvUj+4rvYcav9+BJweLaIY3TEaJz1Ibw5ett0z/Mssfqcghd3h8lZS4IfFChmsH6Qnvrzdc=@vger.kernel.org X-Gm-Message-State: AOJu0YzFa8zuBUQlYDat2CvwA8z2fBCu7v4EKDhFHybxiOMbZQg3UmaY NItDGYYhF0YfLBexBXzFOKqdnRzaoeOsMCCGyGC/FGL+Nj6NcBG/6IHJ X-Gm-Gg: Acq92OF9TMTvGycUjbJ95vxlhm7TdMcyaA3geqsoI4ScmrPjR5biKs1tEH4XEgEzHWi sUx6OEYAnlbrcmi7wjkw/3blpp94nqr2pK7ypFG/eNlyVEFBNfXoy2wyA6GFVZ2RQXamKFnRUoj XYyWCqW49+Rw7I1IqKm23xXsgOUHEuzgI4c707aRscEx68wMJQRfmCKJG6fkPx4LTQtcDvyACVv O1F4avss/qLirbPPiS9or1x3C2GCnPDaedZssGqZVY1n/E5ZMTCjBXTWP9rnpMLaT3YSOvSD3N8 qukLd9XxnkmcPF6Lo2Np1Ekcf/6oenLV59lnc33oOHOJj4hh7eD5X3MILMLvHCva1hSBIMLonBp Je25lQSCr0ptYts/JibqS4AY3GjQI7g0x/7FTbLV+QKdGwBu7s6RRHx7ugMQIwl9HouXvBya6du fGB8psvW2IxNPBv98SOTNWJIviSluz5tV6TqhTWskOQYYgXXHBZsxnuBtL3ixpdFHkuDN7I6F5a A== X-Received: by 2002:a05:600c:4fd4:b0:48d:1021:e5d1 with SMTP id 5b1f17b1804b1-48fe61f717emr143199075e9.3.1779223701114; Tue, 19 May 2026 13:48:21 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe4dac000sm356457755e9.0.2026.05.19.13.48.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 13:48:20 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v2 12/12] crypto: atmel-sha204a - switch to module_i2c_driver Date: Tue, 19 May 2026 20:48:03 +0000 Message-Id: <20260519204803.17034-13-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260519204803.17034-1-l.rubusch@gmail.com> References: <20260519204803.17034-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace custom module init/exit functions with module_i2c_driver() for driver registration. Update remove path to unregister the client from the shared I2C management list before flushing pending work and cleaning up sysfs and hwrng resources. No functional change intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-sha204a.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index 3d29543032cc..c65630a989a5 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -257,18 +257,7 @@ static struct i2c_driver atmel_sha204a_driver =3D { .driver.of_match_table =3D atmel_sha204a_dt_ids, }; =20 -static int __init atmel_sha204a_init(void) -{ - return i2c_add_driver(&atmel_sha204a_driver); -} - -static void __exit atmel_sha204a_exit(void) -{ - i2c_del_driver(&atmel_sha204a_driver); -} - -module_init(atmel_sha204a_init); -module_exit(atmel_sha204a_exit); +module_i2c_driver(atmel_sha204a_driver); =20 MODULE_AUTHOR("Ard Biesheuvel "); MODULE_DESCRIPTION("Microchip / Atmel SHA204A (I2C) driver"); --=20 2.39.5