Patch "xen/events: fix delayed eoi list handling" has been added to the 4.19-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

    xen/events: fix delayed eoi list handling

to the 4.19-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:
     xen-events-fix-delayed-eoi-list-handling.patch
and it can be found in the queue-4.19 subdirectory.

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



commit 68739f693340af033476547d7c967aeb8472b38e
Author: Juergen Gross <jgross@xxxxxxxx>
Date:   Mon Sep 25 17:54:13 2023 +0200

    xen/events: fix delayed eoi list handling
    
    [ Upstream commit 47d970204054f859f35a2237baa75c2d84fcf436 ]
    
    When delaying eoi handling of events, the related elements are queued
    into the percpu lateeoi list. In case the list isn't empty, the
    elements should be sorted by the time when eoi handling is to happen.
    
    Unfortunately a new element will never be queued at the start of the
    list, even if it has a handling time lower than all other list
    elements.
    
    Fix that by handling that case the same way as for an empty list.
    
    Fixes: e99502f76271 ("xen/events: defer eoi in case of excessive number of events")
    Reported-by: Jan Beulich <jbeulich@xxxxxxxx>
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index 960666aba12bf..3b27b98175c6d 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -490,7 +490,9 @@ static void lateeoi_list_add(struct irq_info *info)
 
 	spin_lock_irqsave(&eoi->eoi_list_lock, flags);
 
-	if (list_empty(&eoi->eoi_list)) {
+	elem = list_first_entry_or_null(&eoi->eoi_list, struct irq_info,
+					eoi_list);
+	if (!elem || info->eoi_time < elem->eoi_time) {
 		list_add(&info->eoi_list, &eoi->eoi_list);
 		mod_delayed_work_on(info->eoi_cpu, system_wq,
 				    &eoi->delayed, delay);



[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