From b6bf4faa74364bddec3e5c5c6139e9ddadaf397b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 9 Jul 2025 10:39:10 +0200 Subject: [PATCH] drop queue-6.12/firmware-arm_ffa-replace-mutex-with-rwlock-to-avoid-.patch --- ...-replace-mutex-with-rwlock-to-avoid-.patch | 148 ------------------ queue-6.12/series | 1 - 2 files changed, 149 deletions(-) delete mode 100644 queue-6.12/firmware-arm_ffa-replace-mutex-with-rwlock-to-avoid-.patch diff --git a/queue-6.12/firmware-arm_ffa-replace-mutex-with-rwlock-to-avoid-.patch b/queue-6.12/firmware-arm_ffa-replace-mutex-with-rwlock-to-avoid-.patch deleted file mode 100644 index 5bf74763bc..0000000000 --- a/queue-6.12/firmware-arm_ffa-replace-mutex-with-rwlock-to-avoid-.patch +++ /dev/null @@ -1,148 +0,0 @@ -From 9065bf41771c0a75a56aa041311467829ef560eb Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 28 May 2025 09:49:43 +0100 -Subject: firmware: arm_ffa: Replace mutex with rwlock to avoid sleep in atomic - context -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Sudeep Holla - -[ Upstream commit 9ca7a421229bbdfbe2e1e628cff5cfa782720a10 ] - -The current use of a mutex to protect the notifier hashtable accesses -can lead to issues in the atomic context. It results in the below -kernel warnings: - - | BUG: sleeping function called from invalid context at kernel/locking/mutex.c:258 - | in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 9, name: kworker/0:0 - | preempt_count: 1, expected: 0 - | RCU nest depth: 0, expected: 0 - | CPU: 0 UID: 0 PID: 9 Comm: kworker/0:0 Not tainted 6.14.0 #4 - | Workqueue: ffa_pcpu_irq_notification notif_pcpu_irq_work_fn - | Call trace: - | show_stack+0x18/0x24 (C) - | dump_stack_lvl+0x78/0x90 - | dump_stack+0x18/0x24 - | __might_resched+0x114/0x170 - | __might_sleep+0x48/0x98 - | mutex_lock+0x24/0x80 - | handle_notif_callbacks+0x54/0xe0 - | notif_get_and_handle+0x40/0x88 - | generic_exec_single+0x80/0xc0 - | smp_call_function_single+0xfc/0x1a0 - | notif_pcpu_irq_work_fn+0x2c/0x38 - | process_one_work+0x14c/0x2b4 - | worker_thread+0x2e4/0x3e0 - | kthread+0x13c/0x210 - | ret_from_fork+0x10/0x20 - -To address this, replace the mutex with an rwlock to protect the notifier -hashtable accesses. This ensures that read-side locking does not sleep and -multiple readers can acquire the lock concurrently, avoiding unnecessary -contention and potential deadlocks. Writer access remains exclusive, -preserving correctness. - -This change resolves warnings from lockdep about potential sleep in -atomic context. - -Cc: Jens Wiklander -Reported-by: Jérôme Forissier -Closes: https://github.com/OP-TEE/optee_os/issues/7394 -Fixes: e0573444edbf ("firmware: arm_ffa: Add interfaces to request notification callbacks") -Message-Id: <20250528-ffa_notif_fix-v1-3-5ed7bc7f8437@arm.com> -Reviewed-by: Jens Wiklander -Tested-by: Jens Wiklander -Signed-off-by: Sudeep Holla -Signed-off-by: Sasha Levin ---- - drivers/firmware/arm_ffa/driver.c | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - -diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c -index 33f7bdb5c86dd..134e77a646cc1 100644 ---- a/drivers/firmware/arm_ffa/driver.c -+++ b/drivers/firmware/arm_ffa/driver.c -@@ -110,7 +110,7 @@ struct ffa_drv_info { - struct work_struct sched_recv_irq_work; - struct xarray partition_info; - DECLARE_HASHTABLE(notifier_hash, ilog2(FFA_MAX_NOTIFICATIONS)); -- struct mutex notify_lock; /* lock to protect notifier hashtable */ -+ rwlock_t notify_lock; /* lock to protect notifier hashtable */ - }; - - static struct ffa_drv_info *drv_info; -@@ -1223,19 +1223,19 @@ static int __ffa_notify_relinquish(struct ffa_device *dev, int notify_id, - if (notify_id >= FFA_MAX_NOTIFICATIONS) - return -EINVAL; - -- mutex_lock(&drv_info->notify_lock); -+ write_lock(&drv_info->notify_lock); - - rc = update_notifier_cb(dev, notify_id, NULL, is_framework); - if (rc) { - pr_err("Could not unregister notification callback\n"); -- mutex_unlock(&drv_info->notify_lock); -+ write_unlock(&drv_info->notify_lock); - return rc; - } - - if (!is_framework) - rc = ffa_notification_unbind(dev->vm_id, BIT(notify_id)); - -- mutex_unlock(&drv_info->notify_lock); -+ write_unlock(&drv_info->notify_lock); - - return rc; - } -@@ -1275,7 +1275,7 @@ static int __ffa_notify_request(struct ffa_device *dev, bool is_per_vcpu, - else - cb_info->cb = cb; - -- mutex_lock(&drv_info->notify_lock); -+ write_lock(&drv_info->notify_lock); - - if (!is_framework) { - if (is_per_vcpu) -@@ -1295,7 +1295,7 @@ static int __ffa_notify_request(struct ffa_device *dev, bool is_per_vcpu, - } - - out_unlock_free: -- mutex_unlock(&drv_info->notify_lock); -+ write_unlock(&drv_info->notify_lock); - if (rc) - kfree(cb_info); - -@@ -1344,16 +1344,16 @@ static void handle_notif_callbacks(u64 bitmap, enum notify_type type) - if (!(bitmap & 1)) - continue; - -- mutex_lock(&drv_info->notify_lock); -+ read_lock(&drv_info->notify_lock); - cb_info = notifier_hnode_get_by_type(notify_id, type); -- mutex_unlock(&drv_info->notify_lock); -+ read_unlock(&drv_info->notify_lock); - - if (cb_info && cb_info->cb) - cb_info->cb(notify_id, cb_info->cb_data); - } - } - --static void notif_get_and_handle(void *unused) -+static void notif_get_and_handle(void *cb_data) - { - int rc; - struct ffa_notify_bitmaps bitmaps; -@@ -1800,7 +1800,7 @@ static void ffa_notifications_setup(void) - goto cleanup; - - hash_init(drv_info->notifier_hash); -- mutex_init(&drv_info->notify_lock); -+ rwlock_init(&drv_info->notify_lock); - - drv_info->notif_enabled = true; - return; --- -2.39.5 - diff --git a/queue-6.12/series b/queue-6.12/series index 8315111f47..e9bc72b1ff 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -185,7 +185,6 @@ wifi-ath6kl-remove-warn-on-bad-firmware-input.patch acpica-refuse-to-evaluate-a-method-if-arguments-are-.patch mtd-spinand-fix-memory-leak-of-ecc-engine-conf.patch rcu-return-early-if-callback-is-not-specified.patch -firmware-arm_ffa-replace-mutex-with-rwlock-to-avoid-.patch add-a-string-to-qstr-constructor.patch module-provide-export_symbol_gpl_for_modules-helper.patch fs-export-anon_inode_make_secure_inode-and-fix-secre.patch -- 2.47.2