lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 496/757] um: time-travel: Fix IRQ handling in time_travel_handle_message()
    Date
    From: Johannes Berg <johannes.berg@intel.com>

    [ Upstream commit ebef8ea2ba967026192a26f4529890893919bc57 ]

    As the comment here indicates, we need to do the polling in the
    idle loop without blocking interrupts, since interrupts can be
    vhost-user messages that we must process even while in our idle
    loop.

    I don't know why I explained one thing and implemented another,
    but we have indeed observed random hangs due to this, depending
    on the timing of the messages.

    Fixes: 88ce64249233 ("um: Implement time-travel=ext")
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Acked-By: Anton Ivanov <anton.ivanov@cambridgegreys.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/um/kernel/time.c | 14 +++++++++-----
    1 file changed, 9 insertions(+), 5 deletions(-)

    diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c
    index 25eaa6a0c6583..c07436e89e599 100644
    --- a/arch/um/kernel/time.c
    +++ b/arch/um/kernel/time.c
    @@ -70,13 +70,17 @@ static void time_travel_handle_message(struct um_timetravel_msg *msg,
    * read of the message and write of the ACK.
    */
    if (mode != TTMH_READ) {
    + bool disabled = irqs_disabled();
    +
    + BUG_ON(mode == TTMH_IDLE && !disabled);
    +
    + if (disabled)
    + local_irq_enable();
    while (os_poll(1, &time_travel_ext_fd) != 0) {
    - if (mode == TTMH_IDLE) {
    - BUG_ON(!irqs_disabled());
    - local_irq_enable();
    - local_irq_disable();
    - }
    + /* nothing */
    }
    + if (disabled)
    + local_irq_disable();
    }

    ret = os_read_file(time_travel_ext_fd, msg, sizeof(*msg));
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 17:20    [W:4.093 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site