Hi, On Mon, Jun 11, 2018 at 10:25 AM, Raju P L S S S N <rplsssn@xxxxxxxxxxxxxx> wrote: > @@ -148,7 +148,8 @@ int rpmh_rsc_invalidate(struct rsc_drv *drv) > static struct tcs_group *get_tcs_for_msg(struct rsc_drv *drv, > const struct tcs_request *msg) > { > - int type; > + int type, ret; > + struct tcs_group *tcs; > > switch (msg->state) { > case RPMH_ACTIVE_ONLY_STATE: > @@ -164,7 +165,25 @@ static struct tcs_group *get_tcs_for_msg(struct rsc_drv *drv, > return ERR_PTR(-EINVAL); > } > > - return get_tcs_of_type(drv, type); > + /* > + * If we are making an active request on a RSC that does not have a > + * dedicated TCS for active state use, then re-purpose a wake TCS to > + * send active votes. > + * NOTE: The driver must be aware that this RSC does not have a > + * dedicated AMC, and therefore would invalidate the sleep and wake > + * TCSes before making an active state request. > + */ > + tcs = get_tcs_of_type(drv, type); > + if (msg->state == RPMH_ACTIVE_ONLY_STATE && IS_ERR(tcs)) { > + tcs = get_tcs_of_type(drv, WAKE_TCS); > + if (!IS_ERR(tcs)) { > + ret = rpmh_rsc_invalidate(drv); > + if (ret) > + return ERR_PTR(ret); In v9 you looped as long as the "ret" was -EAGAIN. Now you're not. Are all the callers setup to handle -EAGAIN or should you keep the loop in for -EAGAIN? I don't think callers handle this well. ...or is there some reason that EAGAIN can't happen in this call to rpmh_rsc_invalidate()? -Doug -- To unsubscribe from this list: send the line "unsubscribe linux-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html