Revert "staging: vchiq_arm: Improve initial VCHIQ connect"
The commit3e5def4249("staging: vchiq_arm: Improve initial VCHIQ connect") based on the assumption that in good case the VCHIQ connect always happen and therefore the keep-alive thread is guaranteed to be woken up. This is wrong, because in certain configurations there are no VCHIQ users and so the VCHIQ connect never happen. So revert it. Fixes:3e5def4249("staging: vchiq_arm: Improve initial VCHIQ connect") Reported-by: Maíra Canal <mcanal@igalia.com> Closes: https://lore.kernel.org/linux-staging/ba35b960-a981-4671-9f7f-060da10feaa1@usp.br/ Cc: stable@kernel.org Signed-off-by: Stefan Wahren <wahrenst@gmx.net> Reviewed-by: Maíra Canal <mcanal@igalia.com> Link: https://lore.kernel.org/r/20250715161108.3411-2-wahrenst@gmx.net Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
d0b3b7b22d
commit
ebe0b2ecb7
@@ -97,6 +97,13 @@ struct vchiq_arm_state {
|
||||
* tracked separately with the state.
|
||||
*/
|
||||
int peer_use_count;
|
||||
|
||||
/*
|
||||
* Flag to indicate that the first vchiq connect has made it through.
|
||||
* This means that both sides should be fully ready, and we should
|
||||
* be able to suspend after this point.
|
||||
*/
|
||||
int first_connect;
|
||||
};
|
||||
|
||||
static int
|
||||
@@ -1329,19 +1336,26 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
void vchiq_platform_connected(struct vchiq_state *state)
|
||||
{
|
||||
struct vchiq_arm_state *arm_state = vchiq_platform_get_arm_state(state);
|
||||
|
||||
wake_up_process(arm_state->ka_thread);
|
||||
}
|
||||
|
||||
void vchiq_platform_conn_state_changed(struct vchiq_state *state,
|
||||
enum vchiq_connstate oldstate,
|
||||
enum vchiq_connstate newstate)
|
||||
{
|
||||
struct vchiq_arm_state *arm_state = vchiq_platform_get_arm_state(state);
|
||||
|
||||
dev_dbg(state->dev, "suspend: %d: %s->%s\n",
|
||||
state->id, get_conn_state_name(oldstate), get_conn_state_name(newstate));
|
||||
if (state->conn_state != VCHIQ_CONNSTATE_CONNECTED)
|
||||
return;
|
||||
|
||||
write_lock_bh(&arm_state->susp_res_lock);
|
||||
if (arm_state->first_connect) {
|
||||
write_unlock_bh(&arm_state->susp_res_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
arm_state->first_connect = 1;
|
||||
write_unlock_bh(&arm_state->susp_res_lock);
|
||||
wake_up_process(arm_state->ka_thread);
|
||||
}
|
||||
|
||||
static const struct of_device_id vchiq_of_match[] = {
|
||||
|
||||
@@ -3343,7 +3343,6 @@ vchiq_connect_internal(struct vchiq_state *state, struct vchiq_instance *instanc
|
||||
return -EAGAIN;
|
||||
|
||||
vchiq_set_conn_state(state, VCHIQ_CONNSTATE_CONNECTED);
|
||||
vchiq_platform_connected(state);
|
||||
complete(&state->connect);
|
||||
}
|
||||
|
||||
|
||||
@@ -575,8 +575,6 @@ int vchiq_send_remote_use(struct vchiq_state *state);
|
||||
|
||||
int vchiq_send_remote_use_active(struct vchiq_state *state);
|
||||
|
||||
void vchiq_platform_connected(struct vchiq_state *state);
|
||||
|
||||
void vchiq_platform_conn_state_changed(struct vchiq_state *state,
|
||||
enum vchiq_connstate oldstate,
|
||||
enum vchiq_connstate newstate);
|
||||
|
||||
Reference in New Issue
Block a user