From nobody Wed Apr 1 08:16:42 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 276E93B47F0 for ; Tue, 31 Mar 2026 21:46:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774993573; cv=none; b=ezfCpIlTzh70MoIi2zqVFlx6fRITrqi1CpBUGY8hMQHPS/fN9n/NT0PmvacloRCQyg9ZcUs8rdZptrxfGW6XZB6W583mWDgQHswCwsXIPC3bzlAfiURrqx975bXebwQVfZA10NEmEP3iVCQLgDOcu/xt7TSJSWQhVsmDI+v26ls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774993573; c=relaxed/simple; bh=gowBNd4qTiC2ofhSRWjD/B5uht4noy52ERGZ4+EpXmM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=axG2vvBv+dSA79Nq2gDEewXdcCZDuJkPT8+pW9+uhQyR6OpNC1RyaIwgj/cxRS/RPQQwb2nicOPdLqCx0YYjMnrarZGr0UaMNtYSAJislmKa7P7fuk2qsDXEWQmyCUxdzeVNd0b/K1RC/WJn8YnBQ5wLxQH0/7HrRAOE2Jaf+eI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=MzBCJId1; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="MzBCJId1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1774993572; x=1806529572; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=gowBNd4qTiC2ofhSRWjD/B5uht4noy52ERGZ4+EpXmM=; b=MzBCJId19nGSOmKbLGf1JjvuzAcFGQF7SW1jAw5NHk8rO3ZuPURjNZTM /ayppRVkpIo9VE5gsPmnMpurXcMFkNeks9V2USVdEWTQ65XZePyJQEpvz 4SsiIyGEV58asMrJE8xQZSiUX8t7xYFOMLPt9VnTvf4y8djP7lbH2NREc NghK4L+r9DFgIPLsnGAvtT26RP3YHFXOX8Jw2eC/QTwEuKtVIOBvwo7s4 dAcQlwRiocwd4/aR3RwB4zSvK8WXBehGkp8pOohTp1Du4j/gDqqWmYzHd Ky1R0z0v/Bzf44HtT0JhjZxL0ps727J5exGekt8sugjs2j/s7xwf/2/f6 g==; X-CSE-ConnectionGUID: /YSiE2oNTNWp7NLgpsDV9w== X-CSE-MsgGUID: Z38HbWd5SkSuoAVfd91+6w== X-IronPort-AV: E=McAfee;i="6800,10657,11745"; a="79627245" X-IronPort-AV: E=Sophos;i="6.23,152,1770624000"; d="scan'208";a="79627245" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2026 14:46:11 -0700 X-CSE-ConnectionGUID: jDOlQ0vhQCK2m1eqqTQB1g== X-CSE-MsgGUID: bDjpSupjTu6aI5FZQus6CQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,152,1770624000"; d="scan'208";a="249701122" Received: from dwillia2-desk.jf.intel.com ([10.88.27.145]) by fmviesa001.fm.intel.com with ESMTP; 31 Mar 2026 14:46:10 -0700 From: Dan Williams To: mcgrof@kernel.org, russ.weight@linux.dev, dakr@kernel.org Cc: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "Rafael J. Wysocki" , Chao Gao Subject: [PATCH 1/3] firmware_loader: Stop pinning modules on registration Date: Tue, 31 Mar 2026 14:47:24 -0700 Message-ID: <20260331214726.903274-2-dan.j.williams@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260331214726.903274-1-dan.j.williams@intel.com> References: <20260331214726.903274-1-dan.j.williams@intel.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" The module reference counting can result in callers pinning themselves in a circular loop. The module reference counting is unnecessary. firmware_upload_unregister() must be able to guarantee that all ops are idle at return. All ops are either called from sysfs or the workqueue, so unregister sysfs to stop submissions, cancel any started transfers, flush cancelled transfers, and then release the device. This also solves a theoretical race of new submissions starting between flush_work() and device_unregister(). The module reference was not protecting against that race. Cc: Luis Chamberlain Cc: Russ Weight Cc: Danilo Krummrich Cc: Greg Kroah-Hartman Cc: "Rafael J. Wysocki" Reported-by: Chao Gao Tested-by: Chao Gao Closes: https://sashiko.dev/#/patchset/20260326084448.29947-1-chao.gao%40in= tel.com?patch=3D10705 Fixes: 97730bbb242c ("firmware_loader: Add firmware-upload support") Signed-off-by: Dan Williams --- drivers/base/firmware_loader/sysfs_upload.c | 31 ++++++++++----------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/drivers/base/firmware_loader/sysfs_upload.c b/drivers/base/fir= mware_loader/sysfs_upload.c index f59a7856934c..87c4f2a9a21b 100644 --- a/drivers/base/firmware_loader/sysfs_upload.c +++ b/drivers/base/firmware_loader/sysfs_upload.c @@ -312,14 +312,9 @@ firmware_upload_register(struct module *module, struct= device *parent, return ERR_PTR(-EINVAL); } =20 - if (!try_module_get(module)) - return ERR_PTR(-EFAULT); - fw_upload =3D kzalloc_obj(*fw_upload); - if (!fw_upload) { - ret =3D -ENOMEM; - goto exit_module_put; - } + if (!fw_upload) + return ERR_PTR(-ENOMEM); =20 fw_upload_priv =3D kzalloc_obj(*fw_upload_priv); if (!fw_upload_priv) { @@ -360,7 +355,7 @@ firmware_upload_register(struct module *module, struct = device *parent, if (ret) { dev_err(fw_dev, "%s: device_register failed\n", __func__); put_device(fw_dev); - goto exit_module_put; + return ERR_PTR(ret); } =20 return fw_upload; @@ -374,9 +369,6 @@ firmware_upload_register(struct module *module, struct = device *parent, free_fw_upload: kfree(fw_upload); =20 -exit_module_put: - module_put(module); - return ERR_PTR(ret); } EXPORT_SYMBOL_GPL(firmware_upload_register); @@ -388,23 +380,28 @@ EXPORT_SYMBOL_GPL(firmware_upload_register); void firmware_upload_unregister(struct fw_upload *fw_upload) { struct fw_sysfs *fw_sysfs =3D fw_upload->priv; + struct device *parent =3D fw_sysfs->dev.parent; struct fw_upload_priv *fw_upload_priv =3D fw_sysfs->fw_upload_priv; - struct module *module =3D fw_upload_priv->module; + + /* hold a parent reference while child is unregistered */ + get_device(parent); + + /* shutdown the sysfs interface to block new requests */ + device_del(&fw_sysfs->dev); =20 mutex_lock(&fw_upload_priv->lock); if (fw_upload_priv->progress =3D=3D FW_UPLOAD_PROG_IDLE) { mutex_unlock(&fw_upload_priv->lock); - goto unregister; + goto release; } =20 fw_upload_priv->ops->cancel(fw_upload); mutex_unlock(&fw_upload_priv->lock); =20 +release: /* Ensure lower-level device-driver is finished */ flush_work(&fw_upload_priv->work); - -unregister: - device_unregister(&fw_sysfs->dev); - module_put(module); + put_device(&fw_sysfs->dev); + put_device(parent); } EXPORT_SYMBOL_GPL(firmware_upload_unregister); --=20 2.53.0 From nobody Wed Apr 1 08:16:42 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E3DF4534AC for ; Tue, 31 Mar 2026 21:46:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774993574; cv=none; b=YQOtZnBYQjBFXdjS5Rc6Dz3sUgengNvPE6qfgk0djwA2Zje3TR5S7E3h9w4moI/zOaOI0T2A4gOBCmA1geEQk+3CNeq4TcXVFZxgffIYuycGuAvgdxhRjRPC1A+utm6fD9pBTX9Ihtvy81EbS03nKJAJ6z0rBRtNFYa+CzJeLRM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774993574; c=relaxed/simple; bh=9BSSL+KAudQ3AGmPfh5Xthg06x5txVoPZreNnfyXHtU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z8/+I2SUHBxvHizAYRFzZmuZYa3FMBtYYA/Q58FqLzYA0fmSR5vdm+42RkymjWEEW76RjHy9tNYVc5bAO8mOwZ2FEtJaGNaBNtrZfIer7c3GhlBCeXrVXsk7aWh479Hp1+7fkjyAZnF4D6hGerptbHyHgYrjQZsncJBtv7upXPc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=YWpP8siK; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="YWpP8siK" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1774993573; x=1806529573; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9BSSL+KAudQ3AGmPfh5Xthg06x5txVoPZreNnfyXHtU=; b=YWpP8siKxW379VZFtZ5Pkr88dh8EZ7DVIdoH9TJICtFCcctL8nMm/1ep lixRUPMhWclZ5JhcfP5YJjrv9qoYlMOhahghK9WUEM1qbOlg3RsHwYeSU qV60WmLGEFeAgiFaqtSs565K27xXH3snBXnRALqXR3fnssxfvuYuKIGCl snptS6kpcVfuYoQpTAJamOuPeaY+oQxxevhuM9jpa5cagrmyROLLdHDq7 NgfucO5gA1aekQDFOVOdPWBULMw6ql88a+OPyXFh45tr/h0BuUjW1Yqj6 RGOzHqexHXMgie+/FAgkFB/orCWQgZ+izykuZV3b4wgzKsyiIzCiU5aZv Q==; X-CSE-ConnectionGUID: FgcAxH+qTdu4oibzg2ETNg== X-CSE-MsgGUID: YQFRWX5jS3mhxLGT4Bhiww== X-IronPort-AV: E=McAfee;i="6800,10657,11745"; a="79627247" X-IronPort-AV: E=Sophos;i="6.23,152,1770624000"; d="scan'208";a="79627247" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2026 14:46:11 -0700 X-CSE-ConnectionGUID: qUt5AdalQ9e0uGmJweMTKA== X-CSE-MsgGUID: P+R1D3UsRAGaaSzwJn6+EQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,152,1770624000"; d="scan'208";a="249701127" Received: from dwillia2-desk.jf.intel.com ([10.88.27.145]) by fmviesa001.fm.intel.com with ESMTP; 31 Mar 2026 14:46:10 -0700 From: Dan Williams To: mcgrof@kernel.org, russ.weight@linux.dev, dakr@kernel.org Cc: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "Rafael J. Wysocki" , Chao Gao Subject: [PATCH 2/3] firmware_loader: Stop pinning parent device per workqueue invocation Date: Tue, 31 Mar 2026 14:47:25 -0700 Message-ID: <20260331214726.903274-3-dan.j.williams@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260331214726.903274-1-dan.j.williams@intel.com> References: <20260331214726.903274-1-dan.j.williams@intel.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" The device core pins parent devices while children are registered. As long as all usage of the parent device by the firmware_loader ends at firmware_upload_unregister(), no per queue_work() reference is needed. Now that firmware_upload_unregister() holds its own parent device reference over the child device_del() and flush_work() events, the per queue_work() reference can be deleted. Cc: Luis Chamberlain Cc: Russ Weight Cc: Danilo Krummrich Cc: Greg Kroah-Hartman Cc: "Rafael J. Wysocki" Cc: Chao Gao Signed-off-by: Dan Williams --- drivers/base/firmware_loader/sysfs_upload.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/base/firmware_loader/sysfs_upload.c b/drivers/base/fir= mware_loader/sysfs_upload.c index 87c4f2a9a21b..23f6cdaf29c5 100644 --- a/drivers/base/firmware_loader/sysfs_upload.c +++ b/drivers/base/firmware_loader/sysfs_upload.c @@ -176,7 +176,7 @@ static void fw_upload_main(struct work_struct *work) ret =3D fwlp->ops->prepare(fwl, fwlp->data, fwlp->remaining_size); if (ret !=3D FW_UPLOAD_ERR_NONE) { fw_upload_set_error(fwlp, ret); - goto putdev_exit; + goto out; } =20 fw_upload_update_progress(fwlp, FW_UPLOAD_PROG_TRANSFERRING); @@ -204,9 +204,7 @@ static void fw_upload_main(struct work_struct *work) done: if (fwlp->ops->cleanup) fwlp->ops->cleanup(fwl); - -putdev_exit: - put_device(fw_dev->parent); +out: =20 /* * Note: fwlp->remaining_size is left unmodified here to provide @@ -249,8 +247,6 @@ int fw_upload_start(struct fw_sysfs *fw_sysfs) return -EBUSY; } =20 - get_device(fw_dev->parent); /* released in fw_upload_main */ - fwlp->progress =3D FW_UPLOAD_PROG_RECEIVING; fwlp->err_code =3D 0; fwlp->remaining_size =3D fw_priv->size; --=20 2.53.0 From nobody Wed Apr 1 08:16:42 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B68C4657C6 for ; Tue, 31 Mar 2026 21:46:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774993574; cv=none; b=k2U8e7mu0/d0RLF3uVSYQjQgnPwNQyiF18kD4Z45B9M+dlMHdEa7P6MBCWbjphoSu+sijDcpJukwxothkqb86JmKcDsagF1my9XFuC9hIOkVZWoWExbgNLHlBSD3yf1iP7DhLfP0esOR3SBS9WyLdPnvhRTO5P5S7YATfwtg+Iw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774993574; c=relaxed/simple; bh=16wmPREBQ84nmeeJc2vWUBbbYJnZeU+0lHRvac1Sjw8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QM0xtiiKd/l/1Up+c0kp8SBRXF4NPdGGhLLnAPnGZHEj9aSKYJprLGweceEPSE/OHawF/h2RHu3jCjAybwzdQY6NDg/Kc8fhBdPJrG1b5UGzjaG+IukIxgtAudvck9PI+sSo86hVSCf73HCbPXwcbWzPya7BoENZRSDCmmpRliQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Z3PS4M6G; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Z3PS4M6G" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1774993574; x=1806529574; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=16wmPREBQ84nmeeJc2vWUBbbYJnZeU+0lHRvac1Sjw8=; b=Z3PS4M6GtElIsOCg6eAgAT82Kfa8kS12zcSn+aZkrHAj/R9OzkA/7guu ukvkOhwDVIf2AmTHKu73aAwZ7iQ/fhHn0Ok3MlOkklv6b91d/wPitDgXK TheAxnllZaTjcp1qqhd0SP3RVETlaxaXbGQ5b+oF/pe75nOEiTRKBg07k 4kMX4PJfu43DA8Eh8dnLJGwU5cfihv7JAoN7k/gjgPvuPath58AQQ6fpG DQ1OdEDlIkXlsAOdNJXpIcB4lzRaKUK3fH0yJCWkGN3ZCW9CF9vWBGBJ6 r/wXBgXUffPBC5WtSvW53cS92qIsjHxOUxjdP/ekyrKE4346Zq3fFAW6+ w==; X-CSE-ConnectionGUID: 18CUsKk9TeedHUNYeII6Bg== X-CSE-MsgGUID: p4AeG12YTWG0uvEq29LH1g== X-IronPort-AV: E=McAfee;i="6800,10657,11745"; a="79627251" X-IronPort-AV: E=Sophos;i="6.23,152,1770624000"; d="scan'208";a="79627251" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2026 14:46:11 -0700 X-CSE-ConnectionGUID: EsOMvd2XR5SAXJ2h4rcmNA== X-CSE-MsgGUID: IMxz5XZ5QU2dBmtOKPTULg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,152,1770624000"; d="scan'208";a="249701133" Received: from dwillia2-desk.jf.intel.com ([10.88.27.145]) by fmviesa001.fm.intel.com with ESMTP; 31 Mar 2026 14:46:10 -0700 From: Dan Williams To: mcgrof@kernel.org, russ.weight@linux.dev, dakr@kernel.org Cc: linux-kernel@vger.kernel.org, Chao Gao , Greg Kroah-Hartman , "Rafael J. Wysocki" Subject: [PATCH 3/3] treewide: firmware_loader: Drop the unused @module argument Date: Tue, 31 Mar 2026 14:47:26 -0700 Message-ID: <20260331214726.903274-4-dan.j.williams@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260331214726.903274-1-dan.j.williams@intel.com> References: <20260331214726.903274-1-dan.j.williams@intel.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" Now that the firmware loader properly ceases all operations at firmware_upload_unregister() and no longer takes module references, clean up the unused parameter. Cc: Chao Gao Cc: Luis Chamberlain Cc: Russ Weight Cc: Danilo Krummrich Cc: Greg Kroah-Hartman Cc: "Rafael J. Wysocki" Signed-off-by: Dan Williams --- Documentation/driver-api/firmware/fw_upload.rst | 2 +- include/linux/firmware.h | 15 +++++++-------- drivers/base/firmware_loader/sysfs_upload.c | 9 ++++----- drivers/cxl/core/memdev.c | 4 ++-- drivers/firmware/microchip/mpfs-auto-update.c | 2 +- drivers/fpga/intel-m10-bmc-sec-update.c | 4 ++-- drivers/greybus/gb-beagleplay.c | 2 +- drivers/media/i2c/thp7312.c | 2 +- drivers/net/pse-pd/pd692x0.c | 4 ++-- lib/test_firmware.c | 3 +-- 10 files changed, 22 insertions(+), 25 deletions(-) diff --git a/Documentation/driver-api/firmware/fw_upload.rst b/Documentatio= n/driver-api/firmware/fw_upload.rst index edf1d0c5e7c3..702b1ed77551 100644 --- a/Documentation/driver-api/firmware/fw_upload.rst +++ b/Documentation/driver-api/firmware/fw_upload.rst @@ -57,7 +57,7 @@ function calls firmware_upload_unregister() such as:: len =3D (truncate) ? truncate - fw_name : strlen(fw_name); sec->fw_name =3D kmemdup_nul(fw_name, len, GFP_KERNEL); =20 - fwl =3D firmware_upload_register(THIS_MODULE, sec->dev, sec->fw_name, + fwl =3D firmware_upload_register(sec->dev, sec->fw_name, &m10bmc_ops, sec); if (IS_ERR(fwl)) { dev_err(sec->dev, "Firmware Upload driver failed to start\n"); diff --git a/include/linux/firmware.h b/include/linux/firmware.h index aae1b85ffc10..1cda26ef2d8d 100644 --- a/include/linux/firmware.h +++ b/include/linux/firmware.h @@ -187,20 +187,19 @@ static inline int request_partial_firmware_into_buf =20 #ifdef CONFIG_FW_UPLOAD =20 -struct fw_upload * -firmware_upload_register(struct module *module, struct device *parent, - const char *name, const struct fw_upload_ops *ops, - void *dd_handle); +struct fw_upload *firmware_upload_register(struct device *parent, + const char *name, + const struct fw_upload_ops *ops, + void *dd_handle); void firmware_upload_unregister(struct fw_upload *fw_upload); =20 #else =20 static inline struct fw_upload * -firmware_upload_register(struct module *module, struct device *parent, - const char *name, const struct fw_upload_ops *ops, - void *dd_handle) +firmware_upload_register(struct device *parent, const char *name, + const struct fw_upload_ops *ops, void *dd_handle) { - return ERR_PTR(-EINVAL); + return ERR_PTR(-EINVAL); } =20 static inline void firmware_upload_unregister(struct fw_upload *fw_upload) diff --git a/drivers/base/firmware_loader/sysfs_upload.c b/drivers/base/fir= mware_loader/sysfs_upload.c index 23f6cdaf29c5..e0cf4c55b520 100644 --- a/drivers/base/firmware_loader/sysfs_upload.c +++ b/drivers/base/firmware_loader/sysfs_upload.c @@ -274,7 +274,6 @@ void fw_upload_free(struct fw_sysfs *fw_sysfs) =20 /** * firmware_upload_register() - register for the firmware upload sysfs API - * @module: kernel module of this device * @parent: parent device instantiating firmware upload * @name: firmware name to be associated with this device * @ops: pointer to structure of firmware upload ops @@ -286,10 +285,10 @@ void fw_upload_free(struct fw_sysfs *fw_sysfs) * Return: struct fw_upload pointer or ERR_PTR() * **/ -struct fw_upload * -firmware_upload_register(struct module *module, struct device *parent, - const char *name, const struct fw_upload_ops *ops, - void *dd_handle) +struct fw_upload *firmware_upload_register(struct device *parent, + const char *name, + const struct fw_upload_ops *ops, + void *dd_handle) { u32 opt_flags =3D FW_OPT_NOCACHE; struct fw_upload *fw_upload; diff --git a/drivers/cxl/core/memdev.c b/drivers/cxl/core/memdev.c index 273c22118d3d..79c2ca393cbc 100644 --- a/drivers/cxl/core/memdev.c +++ b/drivers/cxl/core/memdev.c @@ -1045,8 +1045,8 @@ int devm_cxl_setup_fw_upload(struct device *host, str= uct cxl_memdev_state *mds) if (!test_bit(CXL_MEM_COMMAND_ID_GET_FW_INFO, cxl_mbox->enabled_cmds)) return 0; =20 - fwl =3D firmware_upload_register(THIS_MODULE, dev, dev_name(dev), - &cxl_memdev_fw_ops, mds); + fwl =3D firmware_upload_register(dev, dev_name(dev), &cxl_memdev_fw_ops, + mds); if (IS_ERR(fwl)) return PTR_ERR(fwl); return devm_add_action_or_reset(host, cxl_remove_fw_upload, fwl); diff --git a/drivers/firmware/microchip/mpfs-auto-update.c b/drivers/firmwa= re/microchip/mpfs-auto-update.c index 46b19d803446..9b25787467f0 100644 --- a/drivers/firmware/microchip/mpfs-auto-update.c +++ b/drivers/firmware/microchip/mpfs-auto-update.c @@ -435,7 +435,7 @@ static int mpfs_auto_update_probe(struct platform_devic= e *pdev) return dev_err_probe(dev, ret, "The current bitstream does not support auto-update\n"); =20 - fw_uploader =3D firmware_upload_register(THIS_MODULE, dev, "mpfs-auto-upd= ate", + fw_uploader =3D firmware_upload_register(dev, "mpfs-auto-update", &mpfs_auto_update_ops, priv); if (IS_ERR(fw_uploader)) return dev_err_probe(dev, PTR_ERR(fw_uploader), diff --git a/drivers/fpga/intel-m10-bmc-sec-update.c b/drivers/fpga/intel-m= 10-bmc-sec-update.c index 10f678b9ed36..1dfa0b7019b0 100644 --- a/drivers/fpga/intel-m10-bmc-sec-update.c +++ b/drivers/fpga/intel-m10-bmc-sec-update.c @@ -713,8 +713,8 @@ static int m10bmc_sec_probe(struct platform_device *pde= v) goto fw_name_fail; } =20 - fwl =3D firmware_upload_register(THIS_MODULE, sec->dev, sec->fw_name, - &m10bmc_ops, sec); + fwl =3D firmware_upload_register(sec->dev, sec->fw_name, &m10bmc_ops, + sec); if (IS_ERR(fwl)) { dev_err(sec->dev, "Firmware Upload driver failed to start\n"); ret =3D PTR_ERR(fwl); diff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beaglepla= y.c index 87186f891a6a..eceffffea829 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -1067,7 +1067,7 @@ static int gb_fw_init(struct gb_beagleplay *bg) return PTR_ERR(desc); bg->rst_gpio =3D desc; =20 - fwl =3D firmware_upload_register(THIS_MODULE, &bg->sd->dev, "cc1352p7", + fwl =3D firmware_upload_register(&bg->sd->dev, "cc1352p7", &cc1352_bootloader_ops, bg); if (IS_ERR(fwl)) return PTR_ERR(fwl); diff --git a/drivers/media/i2c/thp7312.c b/drivers/media/i2c/thp7312.c index 775cfba188d8..ebbe14393c9f 100644 --- a/drivers/media/i2c/thp7312.c +++ b/drivers/media/i2c/thp7312.c @@ -1909,7 +1909,7 @@ static int thp7312_register_flash_mode(struct thp7312= _device *thp7312) goto error; } =20 - fwl =3D firmware_upload_register(THIS_MODULE, dev, "thp7312-firmware", + fwl =3D firmware_upload_register(dev, "thp7312-firmware", &thp7312_fw_upload_ops, thp7312); if (IS_ERR(fwl)) { ret =3D PTR_ERR(fwl); diff --git a/drivers/net/pse-pd/pd692x0.c b/drivers/net/pse-pd/pd692x0.c index 4a3c852780f5..7463f7d81201 100644 --- a/drivers/net/pse-pd/pd692x0.c +++ b/drivers/net/pse-pd/pd692x0.c @@ -1834,8 +1834,8 @@ static int pd692x0_i2c_probe(struct i2c_client *clien= t) return dev_err_probe(dev, ret, "failed to register PSE controller\n"); =20 - fwl =3D firmware_upload_register(THIS_MODULE, dev, dev_name(dev), - &pd692x0_fw_ops, priv); + fwl =3D firmware_upload_register(dev, dev_name(dev), &pd692x0_fw_ops, + priv); if (IS_ERR(fwl)) return dev_err_probe(dev, PTR_ERR(fwl), "failed to register to the Firmware Upload API\n"); diff --git a/lib/test_firmware.c b/lib/test_firmware.c index b471d720879a..cfe5475d9d18 100644 --- a/lib/test_firmware.c +++ b/lib/test_firmware.c @@ -1322,8 +1322,7 @@ static ssize_t upload_register_store(struct device *d= ev, goto free_tst; } =20 - fwl =3D firmware_upload_register(THIS_MODULE, dev, tst->name, - &upload_test_ops, tst); + fwl =3D firmware_upload_register(dev, tst->name, &upload_test_ops, tst); if (IS_ERR(fwl)) { ret =3D PTR_ERR(fwl); goto free_buf; --=20 2.53.0