• Shengjiu Wang's avatar
    remoteproc: core: Remove state checking before calling rproc_boot() · 8f454f95
    Shengjiu Wang authored
    There is no mutex protection of the state checking before rproc_boot(),
    which can't guarantee there is no another instance is trying to do
    same operation.
    
    Consider two instances case:
    Instance1: echo start > /sys/class/remoteproc/remoteproc0/state
    Instance2: echo start > /sys/class/remoteproc/remoteproc0/state
    ...
    Instance2: echo stop > /sys/class/remoteproc/remoteproc0/state
    ...
    Instance1: echo stop > /sys/class/remoteproc/remoteproc0/state
    
    The one issue is that the instance2 case may success when 'start'
    happens at same time as instance1, then rproc->power = 2; Or it
    may fail with -BUSY, then rproc->power = 1; which is uncertain.
    
    The another issue is for 'stop' operation, if the rproc->power = 1,
    when instance2 'stop' the remoteproc the instance1 will be
    impacted for it still needs the service at that time.
    
    The reference counter rproc->power is used to manage state
    changing and there is mutex protection in each operation
    function for multi instance case.
    
    So remove this state checking in rproc_cdev_write() and
    state_store() for 'start' operation, just let reference
    counter rproc->power to manage the behaviors.
    Signed-off-by: default avatarShengjiu Wang <shengjiu.wang@nxp.com>
    Link: https://lore.kernel.org/r/1648434012-16655-2-git-send-email-shengjiu.wang@nxp.comSigned-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    8f454f95
remoteproc_sysfs.c 7.91 KB