• Loic Pallardy's avatar
    remoteproc: fix recovery procedure · d4c036fe
    Loic Pallardy authored
    Commit 7e83cab824a87e83cab824a8 ("remoteproc: Modify recovery path
    to use rproc_{start,stop}()") replaces rproc_{shutdown,boot}() with
    rproc_{stop,start}(), which skips destroy the virtio device at stop
    but re-initializes it again at start.
    
    Issue is that struct virtio_dev is not correctly reinitialized like done
    at initial allocation thanks to kzalloc() and kobject is considered as
    already initialized by kernel. That is due to the fact struct virtio_dev
    is allocated and released at vdev resource handling level managed and
    virtio device is registered and unregistered at rproc subdevices level.
    
    Moreover kernel documentation mentions that device struct must be
    zero initialized before calling device_initialize().
    
    This patch disentangles struct virtio_dev from struct rproc_vdev as
    the two struct don't have the same life-cycle.
    
    struct virtio_dev is now allocated on rproc_start() and released
    on rproc_stop().
    
    This patch applies on top of patch
    remoteproc: create vdev subdevice with specific dma memory pool [1]
    
    [1]: https://patchwork.kernel.org/patch/10755781/
    
    Fixes: 7e83cab8 ("remoteproc: Modify recovery path to use rproc_{start,stop}()")
    Reported-by: default avatarXiang Xiao <xiaoxiang781216@gmail.com>
    Signed-off-by: default avatarLoic Pallardy <loic.pallardy@st.com>
    Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
    d4c036fe
remoteproc_internal.h 3.29 KB