Patch "efi/unaccepted: touch soft lockup during memory accept" has been added to the 6.8-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    efi/unaccepted: touch soft lockup during memory accept

to the 6.8-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     efi-unaccepted-touch-soft-lockup-during-memory-accep.patch
and it can be found in the queue-6.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e529631f5740ebf866961fe241d551c6942925cc
Author: Chen Yu <yu.c.chen@xxxxxxxxx>
Date:   Wed Apr 10 18:23:01 2024 +0800

    efi/unaccepted: touch soft lockup during memory accept
    
    [ Upstream commit 1c5a1627f48105cbab81d25ec2f72232bfaa8185 ]
    
    Commit 50e782a86c98 ("efi/unaccepted: Fix soft lockups caused by
    parallel memory acceptance") has released the spinlock so other CPUs can
    do memory acceptance in parallel and not triggers softlockup on other
    CPUs.
    
    However the softlock up was intermittent shown up if the memory of the
    TD guest is large, and the timeout of softlockup is set to 1 second:
    
     RIP: 0010:_raw_spin_unlock_irqrestore
     Call Trace:
     ? __hrtimer_run_queues
     <IRQ>
     ? hrtimer_interrupt
     ? watchdog_timer_fn
     ? __sysvec_apic_timer_interrupt
     ? __pfx_watchdog_timer_fn
     ? sysvec_apic_timer_interrupt
     </IRQ>
     ? __hrtimer_run_queues
     <TASK>
     ? hrtimer_interrupt
     ? asm_sysvec_apic_timer_interrupt
     ? _raw_spin_unlock_irqrestore
     ? __sysvec_apic_timer_interrupt
     ? sysvec_apic_timer_interrupt
     accept_memory
     try_to_accept_memory
     do_huge_pmd_anonymous_page
     get_page_from_freelist
     __handle_mm_fault
     __alloc_pages
     __folio_alloc
     ? __tdx_hypercall
     handle_mm_fault
     vma_alloc_folio
     do_user_addr_fault
     do_huge_pmd_anonymous_page
     exc_page_fault
     ? __do_huge_pmd_anonymous_page
     asm_exc_page_fault
     __handle_mm_fault
    
    When the local irq is enabled at the end of accept_memory(), the
    softlockup detects that the watchdog on single CPU has not been fed for
    a while. That is to say, even other CPUs will not be blocked by
    spinlock, the current CPU might be stunk with local irq disabled for a
    while, which hurts not only nmi watchdog but also softlockup.
    
    Chao Gao pointed out that the memory accept could be time costly and
    there was similar report before. Thus to avoid any softlocup detection
    during this stage, give the softlockup a flag to skip the timeout check
    at the end of accept_memory(), by invoking touch_softlockup_watchdog().
    
    Reported-by: Hossain, Md Iqbal <md.iqbal.hossain@xxxxxxxxx>
    Signed-off-by: Chen Yu <yu.c.chen@xxxxxxxxx>
    Reviewed-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
    Fixes: 50e782a86c98 ("efi/unaccepted: Fix soft lockups caused by parallel memory acceptance")
    Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/firmware/efi/unaccepted_memory.c b/drivers/firmware/efi/unaccepted_memory.c
index 5b439d04079c8..50f6503fe49f5 100644
--- a/drivers/firmware/efi/unaccepted_memory.c
+++ b/drivers/firmware/efi/unaccepted_memory.c
@@ -4,6 +4,7 @@
 #include <linux/memblock.h>
 #include <linux/spinlock.h>
 #include <linux/crash_dump.h>
+#include <linux/nmi.h>
 #include <asm/unaccepted_memory.h>
 
 /* Protects unaccepted memory bitmap and accepting_list */
@@ -149,6 +150,9 @@ void accept_memory(phys_addr_t start, phys_addr_t end)
 	}
 
 	list_del(&range.list);
+
+	touch_softlockup_watchdog();
+
 	spin_unlock_irqrestore(&unaccepted_memory_lock, flags);
 }
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux