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

Commit 27437e1b authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "soc: qcom: glink: Get additional reference in glink open" into msm-4.9

parents 8d0f80b5 390dd203
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1846,7 +1846,7 @@ static void glink_ch_ctx_release(struct rwref_lock *ch_st_lock)

/**
 * ch_name_to_ch_ctx_create() - lookup a channel by name, create the channel if
 *                              it is not found.
 *                              it is not found and get reference of context.
 * @xprt_ctx:	Transport to search for a matching channel.
 * @name:	Name of the desired channel.
 *
@@ -1902,6 +1902,7 @@ static struct channel_ctx *ch_name_to_ch_ctx_create(
			spin_unlock_irqrestore(&xprt_ctx->xprt_ctx_lock_lhb1,
					flags);
			kfree(ctx);
			rwref_get(&entry->ch_state_lhb2);
			rwref_write_put(&xprt_ctx->xprt_state_lhb0);
			return entry;
		}
@@ -1935,6 +1936,7 @@ static struct channel_ctx *ch_name_to_ch_ctx_create(
			"%s: local:GLINK_CHANNEL_CLOSED\n",
			__func__);
	}
	rwref_get(&ctx->ch_state_lhb2);
	spin_unlock_irqrestore(&xprt_ctx->xprt_ctx_lock_lhb1, flags);
	rwref_write_put(&xprt_ctx->xprt_state_lhb0);
	mutex_lock(&xprt_ctx->xprt_dbgfs_lock_lhb4);
@@ -2579,6 +2581,7 @@ void *glink_open(const struct glink_open_config *cfg)
		GLINK_INFO_CH_XPRT(ctx, transport_ptr,
		"%s: Channel not ready to be re-opened. State: %u\n",
		__func__, ctx->local_open_state);
		rwref_put(&ctx->ch_state_lhb2);
		return ERR_PTR(-EBUSY);
	}

@@ -2627,11 +2630,13 @@ void *glink_open(const struct glink_open_config *cfg)
		ctx->local_open_state = GLINK_CHANNEL_CLOSED;
		GLINK_ERR_CH(ctx, "%s: Unable to send open command %d\n",
			__func__, ret);
		rwref_put(&ctx->ch_state_lhb2);
		return ERR_PTR(ret);
	}

	GLINK_INFO_CH(ctx, "%s: Created channel, sent OPEN command. ctx %p\n",
			__func__, ctx);
	rwref_put(&ctx->ch_state_lhb2);
	return ctx;
}
EXPORT_SYMBOL(glink_open);
@@ -4805,6 +4810,7 @@ static void glink_core_rx_cmd_ch_remote_open(struct glink_transport_if *if_ptr,
		GLINK_ERR_CH(ctx,
		       "%s: Duplicate remote open for rcid %u, name '%s'\n",
		       __func__, rcid, name);
		rwref_put(&ctx->ch_state_lhb2);
		glink_core_migration_edge_unlock(if_ptr->glink_core_priv);
		return;
	}
@@ -4827,6 +4833,7 @@ static void glink_core_rx_cmd_ch_remote_open(struct glink_transport_if *if_ptr,

	if (do_migrate)
		ch_migrate(NULL, ctx);
	rwref_put(&ctx->ch_state_lhb2);
	glink_core_migration_edge_unlock(if_ptr->glink_core_priv);
}