Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0df771de authored by Alexander Shishkin's avatar Alexander Shishkin Committed by Greg Kroah-Hartman
Browse files

stm class: Mark src::link __rcu



Source device's link is protected with srcu, mark it as such to have
proper build-time validation of accesses to this field. The update
side that's dereferencing it under an update lock also needs an
accessor to dereference this field to keep sparse happy.

Signed-off-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent fab6266e
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -781,17 +781,20 @@ static int stm_source_link_add(struct stm_source_device *src,
static void __stm_source_link_drop(struct stm_source_device *src,
				   struct stm_device *stm)
{
	struct stm_device *link;

	spin_lock(&src->link_lock);
	if (WARN_ON_ONCE(src->link != stm)) {
	link = srcu_dereference_check(src->link, &stm_source_srcu, 1);
	if (WARN_ON_ONCE(link != stm)) {
		spin_unlock(&src->link_lock);
		return;
	}

	stm_output_free(src->link, &src->output);
	stm_output_free(link, &src->output);
	/* caller must hold stm::link_lock */
	list_del_init(&src->link_entry);
	/* matches stm_find_device() from stm_source_link_store() */
	stm_put_device(src->link);
	stm_put_device(link);
	rcu_assign_pointer(src->link, NULL);

	spin_unlock(&src->link_lock);
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ struct stm_source_device {
	struct device		dev;
	struct stm_source_data	*data;
	spinlock_t		link_lock;
	struct stm_device	*link;
	struct stm_device __rcu	*link;
	struct list_head	link_entry;
	/* one output per stm_source device */
	struct stp_policy_node	*policy_node;