linux/drivers/of
Douglas Anderson 17f1675a47 device property: Make modifications of fwnode "flags" thread safe
commit f72e77c33e upstream.

In various places in the kernel, we modify the fwnode "flags" member
by doing either:
  fwnode->flags |= SOME_FLAG;
  fwnode->flags &= ~SOME_FLAG;

This type of modification is not thread-safe. If two threads are both
mucking with the flags at the same time then one can clobber the
other.

While flags are often modified while under the "fwnode_link_lock",
this is not universally true.

Create some accessor functions for setting, clearing, and testing the
FWNODE flags and move all users to these accessor functions. New
accessor functions use set_bit() and clear_bit(), which are
thread-safe.

Cc: stable@vger.kernel.org
Fixes: c2c724c868 ("driver core: Add fw_devlink_parse_fwtree()")
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
Reviewed-by: Saravana Kannan <saravanak@kernel.org>
Link: https://patch.msgid.link/20260317090112.v2.1.I0a4d03104ecd5103df3d76f66c8d21b1d15a2e38@changeid
[ Fix fwnode_clear_flag() argument alignment, restore dropped blank
  line in fwnode_dev_initialized(), and remove unnecessary parentheses
  around fwnode_test_flag() calls. - Danilo ]
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-06-01 17:35:13 +02:00
..
unittest-data of/address: Add support for 3 address cell bus 2025-01-23 17:15:56 +01:00
address.c of: address: Preserve the flags portion on 1:1 dma-ranges mapping 2025-01-23 17:15:56 +01:00
base.c of: fix reference count leak in of_alias_scan() 2026-02-06 16:41:56 +01:00
device.c of: module: add buffer overflow check in of_modalias() 2025-05-09 09:39:41 +02:00
dynamic.c of: dynamic: Synchronize of_changeset_destroy() with the devlink removals 2024-04-10 16:19:42 +02:00
fdt.c of: fdt: fix off-by-one error in unflatten_dt_nodes() 2022-09-23 14:15:46 +02:00
fdt_address.c of: Use SPDX license tag for DT files 2018-01-08 08:22:45 -06:00
irq.c of/irq: Fix device node refcount leakages in of_irq_init() 2025-05-02 07:44:06 +02:00
Kconfig of: net: move of_net under net/ 2022-03-08 19:12:41 +01:00
kexec.c of: kexec: Mark ima_{free,stable}_kexec_buffer() as __init 2023-09-19 12:22:30 +02:00
kobj.c of: Don't allow __of_attached_node_sysfs() without CONFIG_SYSFS 2021-08-23 13:52:09 -05:00
Makefile of: net: move of_net under net/ 2022-03-08 19:12:41 +01:00
of_numa.c of, numa: Validate some distance map rules 2018-11-08 12:44:34 -06:00
of_private.h of: Move of_dma_set_restricted_buffer() into device.c 2021-08-23 06:32:02 -04:00
of_reserved_mem.c Revert "of: reserved-memory: Fix using wrong number of cells to get property 'alignment'" 2025-03-13 12:51:01 +01:00
overlay.c of: overlay: Reorder struct fragment fields kerneldoc 2023-10-19 23:05:32 +02:00
pdt.c of: Remove struct device_node.type pointer 2019-01-10 16:24:44 -06:00
platform.c of: platform: Use default match table for /firmware 2026-02-06 16:42:01 +01:00
property.c device property: Make modifications of fwnode "flags" thread safe 2026-06-01 17:35:13 +02:00
resolver.c of: overlay: log the error cause on resolver failure 2020-03-02 11:32:44 -06:00
unittest.c of/address: Add support for 3 address cell bus 2025-01-23 17:15:56 +01:00