From 56cc177d242dd46cf512faa635e3e37ce6b191b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ertu=C4=9Frul=20Erata?= Date: Thu, 18 Feb 2016 21:10:09 +0200 Subject: [PATCH 1/2] works for new kernel --- .../kernel/files/patches/linux/patch-4.4.2.xz | Bin 0 -> 60144 bytes ...sable-forced-PORTS_IMPL-for-AHCI-1.3.patch | 42 ------ ...lear-PF_NOFREEZE-for-xfsaild-kthread.patch | 39 ++++++ ...st_modeset-regression-from-Linux-4.4.patch | 82 ++++++++++++ ..._vblank_offdelay-in-drm_vblank_on-v2.patch | 64 ++++++++++ ...redundant-calls-to-drm_vblank_off-v2.patch | 76 +++++++++++ ...umps-1-with-active-vblank-clients-v2.patch | 120 ++++++++++++++++++ ...rqs-after-display-engine-is-on-again.patch | 57 +++++++++ ...netfilter-IFWLOG-remove-unused-label.patch | 10 ++ kernel/kernel/files/patches/mageia/series | 14 +- kernel/kernel/pspec.xml | 25 +++- 11 files changed, 481 insertions(+), 48 deletions(-) create mode 100644 kernel/kernel/files/patches/linux/patch-4.4.2.xz delete mode 100644 kernel/kernel/files/patches/mageia/ata-libata-disable-forced-PORTS_IMPL-for-AHCI-1.3.patch create mode 100644 kernel/kernel/files/patches/mageia/fs-xfs-Revert-xfs-clear-PF_NOFREEZE-for-xfsaild-kthread.patch create mode 100644 kernel/kernel/files/patches/mageia/gpu-drm-Fix-drm_vblank_pre_post_modeset-regression-from-Linux-4.4.patch create mode 100644 kernel/kernel/files/patches/mageia/gpu-drm-Fix-treatment-of-drm_vblank_offdelay-in-drm_vblank_on-v2.patch create mode 100644 kernel/kernel/files/patches/mageia/gpu-drm-No-Op-redundant-calls-to-drm_vblank_off-v2.patch create mode 100644 kernel/kernel/files/patches/mageia/gpu-drm-Prevent-vblank-counter-bumps-1-with-active-vblank-clients-v2.patch create mode 100644 kernel/kernel/files/patches/mageia/gpu-drm_nouveau_display-Enable-vblank-irqs-after-display-engine-is-on-again.patch create mode 100644 kernel/kernel/files/patches/mageia/net-netfilter-IFWLOG-remove-unused-label.patch diff --git a/kernel/kernel/files/patches/linux/patch-4.4.2.xz b/kernel/kernel/files/patches/linux/patch-4.4.2.xz new file mode 100644 index 0000000000000000000000000000000000000000..b2133065372be371500d244810a6be679eacbe9b GIT binary patch literal 60144 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 FSz7R|12_Nx literal 0 HcmV?d00001 diff --git a/kernel/kernel/files/patches/mageia/ata-libata-disable-forced-PORTS_IMPL-for-AHCI-1.3.patch b/kernel/kernel/files/patches/mageia/ata-libata-disable-forced-PORTS_IMPL-for-AHCI-1.3.patch deleted file mode 100644 index 266ac607..00000000 --- a/kernel/kernel/files/patches/mageia/ata-libata-disable-forced-PORTS_IMPL-for-AHCI-1.3.patch +++ /dev/null @@ -1,42 +0,0 @@ -From: Tejun Heo -Subject: [PATCH v2] libata: disable forced PORTS_IMPL for >= AHCI 1.3 -Date: Fri, 15 Jan 2016 15:13:05 -0500 - -Some early controllers incorrectly reported zero ports in PORTS_IMPL -register and the ahci driver fabricates PORTS_IMPL from the number of -ports in those cases. This hasn't mattered but with the new nvme -controllers there are cases where zero PORTS_IMPL is valid and should -be honored. - -Disable the workaround for >= AHCI 1.3. - -Signed-off-by: Tejun Heo -Reported-by: Andy Lutomirski -Link: http://lkml.kernel.org/g/CALCETrU7yMvXEDhjAUShoHEhDwifJGapdw--BKxsP0jmjKGmRw@mail.gmail.com ---- -Hello, Andy. - -Can you please see whether this one works? - -Thanks. - - drivers/ata/libahci.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c -index d61740e..a91432a 100644 ---- a/drivers/ata/libahci.c -+++ b/drivers/ata/libahci.c -@@ -496,8 +496,9 @@ void ahci_save_initial_config(struct device *dev, struct ahci_host_priv *hpriv) - } - } - -- /* fabricate port_map from cap.nr_ports */ -- if (!port_map) { -+ /* fabricate port_map from cap.nr_ports for < AHCI 1.3 */ -+ if (!port_map && (!(vers >> 16) || -+ ((vers >> 16) == 1 && (vers & 0xFFFF) < 0x300))) { - port_map = (1 << ahci_nr_ports(cap)) - 1; - dev_warn(dev, "forcing PORTS_IMPL to 0x%x\n", port_map); - - diff --git a/kernel/kernel/files/patches/mageia/fs-xfs-Revert-xfs-clear-PF_NOFREEZE-for-xfsaild-kthread.patch b/kernel/kernel/files/patches/mageia/fs-xfs-Revert-xfs-clear-PF_NOFREEZE-for-xfsaild-kthread.patch new file mode 100644 index 00000000..5c483f7f --- /dev/null +++ b/kernel/kernel/files/patches/mageia/fs-xfs-Revert-xfs-clear-PF_NOFREEZE-for-xfsaild-kthread.patch @@ -0,0 +1,39 @@ +From 3e85286e75224fa3f08bdad20e78c8327742634e Mon Sep 17 00:00:00 2001 +From: Dave Chinner +Date: Tue, 19 Jan 2016 08:21:46 +1100 +Subject: [PATCH] Revert "xfs: clear PF_NOFREEZE for xfsaild kthread" + +This reverts commit 24ba16bb3d499c49974669cd8429c3e4138ab102 as it +prevents machines from suspending. This regression occurs when the +xfsaild is idle on entry to suspend, and so there s no activity to +wake it from it's idle sleep and hence see that it is supposed to +freeze. Hence the freezer times out waiting for it and suspend is +cancelled. + +There is no obvious fix for this short of freezing the filesystem +properly, so revert this change for now. + +cc: # 4.4 +Signed-off-by: Dave Chinner +Acked-by: Jiri Kosina +Reviewed-by: Brian Foster +Signed-off-by: Dave Chinner +--- + fs/xfs/xfs_trans_ail.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c +index aa67339..4f18fd9 100644 +--- a/fs/xfs/xfs_trans_ail.c ++++ b/fs/xfs/xfs_trans_ail.c +@@ -497,7 +497,6 @@ xfsaild( + long tout = 0; /* milliseconds */ + + current->flags |= PF_MEMALLOC; +- set_freezable(); + + while (!kthread_should_stop()) { + if (tout && tout <= 20) +-- +2.7.1 + diff --git a/kernel/kernel/files/patches/mageia/gpu-drm-Fix-drm_vblank_pre_post_modeset-regression-from-Linux-4.4.patch b/kernel/kernel/files/patches/mageia/gpu-drm-Fix-drm_vblank_pre_post_modeset-regression-from-Linux-4.4.patch new file mode 100644 index 00000000..df761c07 --- /dev/null +++ b/kernel/kernel/files/patches/mageia/gpu-drm-Fix-drm_vblank_pre_post_modeset-regression-from-Linux-4.4.patch @@ -0,0 +1,82 @@ +From: Mario Kleiner +Subject: [PATCH 3/6] drm: Fix drm_vblank_pre/post_modeset regression from Linux 4.4 +Date: Fri, 12 Feb 2016 20:30:29 +0100 + +Changes to drm_update_vblank_count() in Linux 4.4 broke the +behaviour of the pre/post modeset functions as the new update +code doesn't deal with hw vblank counter resets inbetween calls +to drm_vblank_pre_modeset an drm_vblank_post_modeset, as it +should. + +This causes mistreatment of such hw counter resets as counter +wraparound, and thereby large forward jumps of the software +vblank counter which in turn cause vblank event dispatching +and vblank waits to fail/hang --> userspace clients hang. + +This symptom was reported on radeon-kms to cause a infinite +hang of KDE Plasma 5 shell's login procedure, preventing users +from logging in. + +Fix this by detecting when drm_update_vblank_count() is called +inside a pre->post modeset interval. If so, clamp valid vblank +increments to the safe values 0 and 1, pretty much restoring +the update behavior of the old update code of Linux 4.3 and +earlier. Also reset the last recorded hw vblank count at call +to drm_vblank_post_modeset() to be safe against hw that after +modesetting, dpms on etc. only fires its first vblank irq after +drm_vblank_post_modeset() was already called. + +Reported-by: Vlastimil Babka +Signed-off-by: Mario Kleiner +Reviewed-by: Daniel Vetter +Tested-by: Vlastimil Babka + +Cc: # 4.4+ +Cc: michel@daenzer.net +Cc: vbabka@suse.cz +Cc: ville.syrjala@linux.intel.com +Cc: daniel.vetter@ffwll.ch +Cc: dri-devel@lists.freedesktop.org +Cc: alexander.deucher@amd.com +Cc: christian.koenig@amd.com +--- + drivers/gpu/drm/drm_irq.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c +index 92ad62f..055b0fa 100644 +--- a/drivers/gpu/drm/drm_irq.c ++++ b/drivers/gpu/drm/drm_irq.c +@@ -222,6 +222,21 @@ static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe, + } + + /* ++ * Within a drm_vblank_pre_modeset - drm_vblank_post_modeset ++ * interval? If so then vblank irqs keep running and it will likely ++ * happen that the hardware vblank counter is not trustworthy as it ++ * might reset at some point in that interval and vblank timestamps ++ * are not trustworthy either in that interval. Iow. this can result ++ * in a bogus diff >> 1 which must be avoided as it would cause ++ * random large forward jumps of the software vblank counter. ++ */ ++ if (diff > 1 && (vblank->inmodeset & 0x2)) { ++ DRM_DEBUG_VBL("clamping vblank bump to 1 on crtc %u: diffr=%u" ++ " due to pre-modeset.\n", pipe, diff); ++ diff = 1; ++ } ++ ++ /* + * FIMXE: Need to replace this hack with proper seqlocks. + * + * Restrict the bump of the software vblank counter to a safe maximum +@@ -1575,6 +1590,7 @@ void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe) + if (vblank->inmodeset) { + spin_lock_irqsave(&dev->vbl_lock, irqflags); + dev->vblank_disable_allowed = true; ++ drm_reset_vblank_timestamp(dev, pipe); + spin_unlock_irqrestore(&dev->vbl_lock, irqflags); + + if (vblank->inmodeset & 0x2) +-- +1.9.1 + diff --git a/kernel/kernel/files/patches/mageia/gpu-drm-Fix-treatment-of-drm_vblank_offdelay-in-drm_vblank_on-v2.patch b/kernel/kernel/files/patches/mageia/gpu-drm-Fix-treatment-of-drm_vblank_offdelay-in-drm_vblank_on-v2.patch new file mode 100644 index 00000000..246229bd --- /dev/null +++ b/kernel/kernel/files/patches/mageia/gpu-drm-Fix-treatment-of-drm_vblank_offdelay-in-drm_vblank_on-v2.patch @@ -0,0 +1,64 @@ +From: Mario Kleiner +Subject: [PATCH 4/6] drm: Fix treatment of drm_vblank_offdelay in drm_vblank_on() (v2) +Date: Fri, 12 Feb 2016 20:30:30 +0100 + +drm_vblank_offdelay can have three different types of values: + +< 0 is to be always treated the same as dev->vblank_disable_immediate += 0 is to be treated as "never disable vblanks" +> 0 is to be treated as disable immediate if kms driver wants it + that way via dev->vblank_disable_immediate. Otherwise it is + a disable timeout in msecs. + +This got broken in Linux 3.18+ for the implementation of +drm_vblank_on. If the user specified a value of zero which should +always reenable vblank irqs in this function, a kms driver could +override the users choice by setting vblank_disable_immediate +to true. This patch fixes the regression and keeps the user in +control. + +v2: Only reenable vblank if there are clients left or the user + requested to "never disable vblanks" via offdelay 0. Enabling + vblanks even in the "delayed disable" case (offdelay > 0) was + specifically added by Ville in commit cd19e52aee922 + ("drm: Kick start vblank interrupts at drm_vblank_on()"), + but after discussion it turns out that this was done by accident. + + Citing Ville: "I think it just ended up as a mess due to changing + some of the semantics of offdelay<0 vs. offdelay==0 vs. + disable_immediate during the review of the series. So yeah, given + how drm_vblank_put() works now, I'd just make this check for + offdelay==0." + +Signed-off-by: Mario Kleiner +Reviewed-by: Daniel Vetter + +Cc: # 3.18+ +Cc: michel@daenzer.net +Cc: vbabka@suse.cz +Cc: ville.syrjala@linux.intel.com +Cc: daniel.vetter@ffwll.ch +Cc: dri-devel@lists.freedesktop.org +Cc: alexander.deucher@amd.com +Cc: christian.koenig@amd.com +--- + drivers/gpu/drm/drm_irq.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c +index 055b0fa..8090989 100644 +--- a/drivers/gpu/drm/drm_irq.c ++++ b/drivers/gpu/drm/drm_irq.c +@@ -1494,8 +1494,7 @@ void drm_vblank_on(struct drm_device *dev, unsigned int pipe) + * re-enable interrupts if there are users left, or the + * user wishes vblank interrupts to be enabled all the time. + */ +- if (atomic_read(&vblank->refcount) != 0 || +- (!dev->vblank_disable_immediate && drm_vblank_offdelay == 0)) ++ if (atomic_read(&vblank->refcount) != 0 || drm_vblank_offdelay == 0) + WARN_ON(drm_vblank_enable(dev, pipe)); + spin_unlock_irqrestore(&dev->vbl_lock, irqflags); + } +-- +1.9.1 + diff --git a/kernel/kernel/files/patches/mageia/gpu-drm-No-Op-redundant-calls-to-drm_vblank_off-v2.patch b/kernel/kernel/files/patches/mageia/gpu-drm-No-Op-redundant-calls-to-drm_vblank_off-v2.patch new file mode 100644 index 00000000..480c88ba --- /dev/null +++ b/kernel/kernel/files/patches/mageia/gpu-drm-No-Op-redundant-calls-to-drm_vblank_off-v2.patch @@ -0,0 +1,76 @@ +From: Mario Kleiner +Subject: [PATCH 1/6] drm: No-Op redundant calls to drm_vblank_off() (v2) +Date: Fri, 12 Feb 2016 20:30:27 +0100 + +Otherwise if a kms driver calls into drm_vblank_off() more than once +before calling drm_vblank_on() again, the redundant calls to +vblank_disable_and_save() will call drm_update_vblank_count() +while hw vblank counters and vblank timestamping are in a undefined +state during modesets, dpms off etc. + +At least with the legacy drm helpers it is not unusual to +get multiple calls to drm_vblank_off and drm_vblank_on, e.g., +half a dozen calls to drm_vblank_off and two calls to drm_vblank_on +were observed on radeon-kms during dpms-off -> dpms-on transition. + +We don't no-op calls from atomic modesetting drivers, as they +should do a proper job of tracking hw state. + +Fixes large jumps of the software maintained vblank counter due to +the hardware vblank counter resetting to zero during dpms off or +modeset, e.g., if radeon-kms is modified to use drm_vblank_off/on +instead of drm_vblank_pre/post_modeset(). + +This fixes a regression caused by the changes made to +drm_update_vblank_count() in Linux 4.4. + +v2: Don't no-op on atomic modesetting drivers, per suggestion + of Daniel Vetter. + +Signed-off-by: Mario Kleiner +Reviewed-by: Daniel Vetter + +Cc: # 4.4+ +Cc: michel@daenzer.net +Cc: vbabka@suse.cz +Cc: ville.syrjala@linux.intel.com +Cc: daniel.vetter@ffwll.ch +Cc: dri-devel@lists.freedesktop.org +Cc: alexander.deucher@amd.com +Cc: christian.koenig@amd.com +--- + drivers/gpu/drm/drm_irq.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c +index 607f493..1a18033 100644 +--- a/drivers/gpu/drm/drm_irq.c ++++ b/drivers/gpu/drm/drm_irq.c +@@ -1313,7 +1313,13 @@ void drm_vblank_off(struct drm_device *dev, unsigned int pipe) + spin_lock_irqsave(&dev->event_lock, irqflags); + + spin_lock(&dev->vbl_lock); +- vblank_disable_and_save(dev, pipe); ++ DRM_DEBUG_VBL("crtc %d, vblank enabled %d, inmodeset %d\n", ++ pipe, vblank->enabled, vblank->inmodeset); ++ ++ /* Avoid redundant vblank disables without previous drm_vblank_on(). */ ++ if (drm_core_check_feature(dev, DRIVER_ATOMIC) || !vblank->inmodeset) ++ vblank_disable_and_save(dev, pipe); ++ + wake_up(&vblank->queue); + + /* +@@ -1415,6 +1421,9 @@ void drm_vblank_on(struct drm_device *dev, unsigned int pipe) + return; + + spin_lock_irqsave(&dev->vbl_lock, irqflags); ++ DRM_DEBUG_VBL("crtc %d, vblank enabled %d, inmodeset %d\n", ++ pipe, vblank->enabled, vblank->inmodeset); ++ + /* Drop our private "prevent drm_vblank_get" refcount */ + if (vblank->inmodeset) { + atomic_dec(&vblank->refcount); +-- +1.9.1 + diff --git a/kernel/kernel/files/patches/mageia/gpu-drm-Prevent-vblank-counter-bumps-1-with-active-vblank-clients-v2.patch b/kernel/kernel/files/patches/mageia/gpu-drm-Prevent-vblank-counter-bumps-1-with-active-vblank-clients-v2.patch new file mode 100644 index 00000000..c65efe96 --- /dev/null +++ b/kernel/kernel/files/patches/mageia/gpu-drm-Prevent-vblank-counter-bumps-1-with-active-vblank-clients-v2.patch @@ -0,0 +1,120 @@ +From: Mario Kleiner +Subject: [PATCH 2/6] drm: Prevent vblank counter bumps > 1 with active vblank clients. (v2) +Date: Fri, 12 Feb 2016 20:30:28 +0100 + +This fixes a regression introduced by the new drm_update_vblank_count() +implementation in Linux 4.4: + +Restrict the bump of the software vblank counter in drm_update_vblank_count() +to a safe maximum value of +1 whenever there is the possibility that +concurrent readers of vblank timestamps could be active at the moment, +as the current implementation of the timestamp caching and updating is +not safe against concurrent readers for calls to store_vblank() with a +bump of anything but +1. A bump != 1 would very likely return corrupted +timestamps to userspace, because the same slot in the cache could +be concurrently written by store_vblank() and read by one of those +readers in a non-atomic fashion and without the read-retry logic +detecting this collision. + +Concurrent readers can exist while drm_update_vblank_count() is called +from the drm_vblank_off() or drm_vblank_on() functions or other non-vblank- +irq callers. However, all those calls are happening with the vbl_lock +locked thereby preventing a drm_vblank_get(), so the vblank refcount +can't increase while drm_update_vblank_count() is executing. Therefore +a zero vblank refcount during execution of that function signals that +is safe for arbitrary counter bumps if called from outside vblank irq, +whereas a non-zero count is not safe. + +Whenever the function is called from vblank irq, we have to assume concurrent +readers could show up any time during its execution, even if the refcount +is currently zero, as vblank irqs are usually only enabled due to the +presence of readers, and because when it is called from vblank irq it +can't hold the vbl_lock to protect it from sudden bumps in vblank refcount. +Therefore also restrict bumps to +1 when the function is called from vblank +irq. + +Such bumps of more than +1 can happen at other times than reenabling +vblank irqs, e.g., when regular vblank interrupts get delayed by more +than 1 frame due to long held locks, long irq off periods, realtime +preemption on RT kernels, or system management interrupts. + +A better solution would be to rewrite the timestamp caching to use +full seqlocks to allow concurrent writes and reads for arbitrary +vblank counter increments. + +v2: Add code comment that this is essentially a hack and should + be replaced by a full seqlock implementation for caching of + timestamps. + +Signed-off-by: Mario Kleiner +Reviewed-by: Daniel Vetter + +Cc: # 4.4+ +Cc: michel@daenzer.net +Cc: vbabka@suse.cz +Cc: ville.syrjala@linux.intel.com +Cc: daniel.vetter@ffwll.ch +Cc: dri-devel@lists.freedesktop.org +Cc: alexander.deucher@amd.com +Cc: christian.koenig@amd.com +--- + drivers/gpu/drm/drm_irq.c | 43 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) + +diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c +index 1a18033..92ad62f 100644 +--- a/drivers/gpu/drm/drm_irq.c ++++ b/drivers/gpu/drm/drm_irq.c +@@ -221,6 +221,49 @@ static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe, + diff = (flags & DRM_CALLED_FROM_VBLIRQ) != 0; + } + ++ /* ++ * FIMXE: Need to replace this hack with proper seqlocks. ++ * ++ * Restrict the bump of the software vblank counter to a safe maximum ++ * value of +1 whenever there is the possibility that concurrent readers ++ * of vblank timestamps could be active at the moment, as the current ++ * implementation of the timestamp caching and updating is not safe ++ * against concurrent readers for calls to store_vblank() with a bump ++ * of anything but +1. A bump != 1 would very likely return corrupted ++ * timestamps to userspace, because the same slot in the cache could ++ * be concurrently written by store_vblank() and read by one of those ++ * readers without the read-retry logic detecting the collision. ++ * ++ * Concurrent readers can exist when we are called from the ++ * drm_vblank_off() or drm_vblank_on() functions and other non-vblank- ++ * irq callers. However, all those calls to us are happening with the ++ * vbl_lock locked to prevent drm_vblank_get(), so the vblank refcount ++ * can't increase while we are executing. Therefore a zero refcount at ++ * this point is safe for arbitrary counter bumps if we are called ++ * outside vblank irq, a non-zero count is not 100% safe. Unfortunately ++ * we must also accept a refcount of 1, as whenever we are called from ++ * drm_vblank_get() -> drm_vblank_enable() the refcount will be 1 and ++ * we must let that one pass through in order to not lose vblank counts ++ * during vblank irq off - which would completely defeat the whole ++ * point of this routine. ++ * ++ * Whenever we are called from vblank irq, we have to assume concurrent ++ * readers exist or can show up any time during our execution, even if ++ * the refcount is currently zero, as vblank irqs are usually only ++ * enabled due to the presence of readers, and because when we are called ++ * from vblank irq we can't hold the vbl_lock to protect us from sudden ++ * bumps in vblank refcount. Therefore also restrict bumps to +1 when ++ * called from vblank irq. ++ */ ++ if ((diff > 1) && (atomic_read(&vblank->refcount) > 1 || ++ (flags & DRM_CALLED_FROM_VBLIRQ))) { ++ DRM_DEBUG_VBL("clamping vblank bump to 1 on crtc %u: diffr=%u " ++ "refcount %u, vblirq %u\n", pipe, diff, ++ atomic_read(&vblank->refcount), ++ (flags & DRM_CALLED_FROM_VBLIRQ) != 0); ++ diff = 1; ++ } ++ + DRM_DEBUG_VBL("updating vblank count on crtc %u:" + " current=%u, diff=%u, hw=%u hw_last=%u\n", + pipe, vblank->count, diff, cur_vblank, vblank->last); +-- +1.9.1 + diff --git a/kernel/kernel/files/patches/mageia/gpu-drm_nouveau_display-Enable-vblank-irqs-after-display-engine-is-on-again.patch b/kernel/kernel/files/patches/mageia/gpu-drm_nouveau_display-Enable-vblank-irqs-after-display-engine-is-on-again.patch new file mode 100644 index 00000000..1db4ce1c --- /dev/null +++ b/kernel/kernel/files/patches/mageia/gpu-drm_nouveau_display-Enable-vblank-irqs-after-display-engine-is-on-again.patch @@ -0,0 +1,57 @@ +From: Mario Kleiner +Subject: [PATCH 6/6] drm/nouveau/display: Enable vblank irqs after display engine is on again. +Date: Fri, 12 Feb 2016 20:30:32 +0100 + +In the display resume path, move the calls to drm_vblank_on() +after the point when the display engine is running again. + +Since changes were made to drm_update_vblank_count() in Linux 4.4+ +to emulate hw vblank counters via vblank timestamping, the function +drm_vblank_on() now needs working high precision vblank timestamping +and therefore working scanout position queries at time of call. +These don't work before the display engine gets restarted, causing +miscalculation of vblank counter increments and thereby large forward +jumps in vblank count at display resume. These jumps can cause client +hangs on resume, or desktop hangs in the case of composited desktops. + +Fix this Linux 4.4 regression by reordering calls accordingly. + +Signed-off-by: Mario Kleiner +Cc: # 4.4+ +Cc: Ben Skeggs +Cc: ville.syrjala@linux.intel.com +Cc: daniel.vetter@ffwll.ch +Cc: dri-devel@lists.freedesktop.org +--- + drivers/gpu/drm/nouveau/nouveau_display.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c +index 18676b8..1f8e51b 100644 +--- a/drivers/gpu/drm/nouveau/nouveau_display.c ++++ b/drivers/gpu/drm/nouveau/nouveau_display.c +@@ -634,10 +634,6 @@ nouveau_display_resume(struct drm_device *dev, bool runtime) + nv_crtc->lut.depth = 0; + } + +- /* Make sure that drm and hw vblank irqs get resumed if needed. */ +- for (head = 0; head < dev->mode_config.num_crtc; head++) +- drm_vblank_on(dev, head); +- + /* This should ensure we don't hit a locking problem when someone + * wakes us up via a connector. We should never go into suspend + * while the display is on anyways. +@@ -647,6 +643,10 @@ nouveau_display_resume(struct drm_device *dev, bool runtime) + + drm_helper_resume_force_mode(dev); + ++ /* Make sure that drm and hw vblank irqs get resumed if needed. */ ++ for (head = 0; head < dev->mode_config.num_crtc; head++) ++ drm_vblank_on(dev, head); ++ + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + +-- +1.9.1 + diff --git a/kernel/kernel/files/patches/mageia/net-netfilter-IFWLOG-remove-unused-label.patch b/kernel/kernel/files/patches/mageia/net-netfilter-IFWLOG-remove-unused-label.patch new file mode 100644 index 00000000..b2c71eab --- /dev/null +++ b/kernel/kernel/files/patches/mageia/net-netfilter-IFWLOG-remove-unused-label.patch @@ -0,0 +1,10 @@ +--- linux-4.4/net/ipv4/netfilter/ipt_IFWLOG.c~ 2016-01-24 13:19:13.233713998 +0100 ++++ linux-4.4/net/ipv4/netfilter/ipt_IFWLOG.c 2016-01-24 20:49:10.145823623 +0100 +@@ -74,7 +74,6 @@ + return; + } + +-nlmsg_failure: + kfree_skb(skb); + PRINTR(KERN_WARNING "IFWLOG: Error sending netlink packet\n"); + } diff --git a/kernel/kernel/files/patches/mageia/series b/kernel/kernel/files/patches/mageia/series index edc9f22b..331e7847 100644 --- a/kernel/kernel/files/patches/mageia/series +++ b/kernel/kernel/files/patches/mageia/series @@ -122,9 +122,6 @@ block-Make-CFQ-default-to-IOPS-mode-on-SSDs.patch # ahci ids ahci-add-new-Intel-device-IDs.patch -# ahci fix -ata-libata-disable-forced-PORTS_IMPL-for-AHCI-1.3.patch - ### ### File-system ### @@ -141,6 +138,9 @@ fs-ovl-root-copy-attr.patch fs-ovl-setattr-check-permissions-before-copy-up.patch fs-ovl-check-dentry-positiveness-in-ovl_cleanup_whiteou.patch +# xfs trace fix (mga#17489) +fs-xfs-Revert-xfs-clear-PF_NOFREEZE-for-xfsaild-kthread.patch + ### ### FireWire ### @@ -200,6 +200,13 @@ gpu-drm-0109-drm-vc4-Add-an-interface-for-capturing-the-GPU-state.patch gpu-drm-radeon-Update-radeon_get_vblank_counter_kms.patch gpu-drm-radeon-Drop-unnecessary-unsigned-int-0-check.patch +# vblank fixes +gpu-drm-No-Op-redundant-calls-to-drm_vblank_off-v2.patch +gpu-drm-Prevent-vblank-counter-bumps-1-with-active-vblank-clients-v2.patch +gpu-drm-Fix-drm_vblank_pre_post_modeset-regression-from-Linux-4.4.patch +gpu-drm-Fix-treatment-of-drm_vblank_offdelay-in-drm_vblank_on-v2.patch +gpu-drm_nouveau_display-Enable-vblank-irqs-after-display-engine-is-on-again.patch + ### ### Hardware Monitoring ### @@ -244,6 +251,7 @@ net-netfilter-IFWLOG-2.6.35-buildfix.patch net-netfilter-IFWLOG-2.6.37-buildfix.patch net-ipv4-netfilter-ipt_IFWLOG-3.6-buildfix.patch net-netfilter-IFWLOG-3.7-buildfix.patch +net-netfilter-IFWLOG-remove-unused-label.patch # netfilter psd support net-netfilter-psd.patch diff --git a/kernel/kernel/pspec.xml b/kernel/kernel/pspec.xml index f3ae3f4f..9516b135 100644 --- a/kernel/kernel/pspec.xml +++ b/kernel/kernel/pspec.xml @@ -28,8 +28,8 @@ - patches/linux/patch-4.4.1.xz - + patches/linux/patch-4.4.2.xz + patches/mageia/x86-pci-toshiba-equium-a60-assign-busses.patch @@ -65,6 +65,7 @@ patches/mageia/fs-ovl-root-copy-attr.patch patches/mageia/fs-ovl-setattr-check-permissions-before-copy-up.patch patches/mageia/fs-ovl-check-dentry-positiveness-in-ovl_cleanup_whiteou.patch + patches/mageia/mageia/fs-xfs-Revert-xfs-clear-PF_NOFREEZE-for-xfsaild-kthread.patch patches/mageia/firewire-ieee1394-module-aliases.patch patches/mageia/char-agp-intel-new-Q57-id.patch patches/mageia/gpu-drm-mach64.patch @@ -102,6 +103,11 @@ patches/mageia/gpu-drm-0109-drm-vc4-Add-an-interface-for-capturing-the-GPU-state.patch patches/mageia/gpu-drm-radeon-Update-radeon_get_vblank_counter_kms.patch patches/mageia/gpu-drm-radeon-Drop-unnecessary-unsigned-int-0-check.patch + patches/mageia/gpu-drm-No-Op-redundant-calls-to-drm_vblank_off-v2.patch + patches/mageia/gpu-drm-Prevent-vblank-counter-bumps-1-with-active-vblank-clients-v2.patch + patches/mageia/gpu-drm-Fix-drm_vblank_pre_post_modeset-regression-from-Linux-4.4.patch + patches/mageia/gpu-drm-Fix-treatment-of-drm_vblank_offdelay-in-drm_vblank_on-v2.patch + patches/mageia/gpu-drm_nouveau_display-Enable-vblank-irqs-after-display-engine-is-on-again.patch patches/mageia/input-i8042-quirks-for-Fujitsu-Lifebook-A544-and-Lif.patch patches/mageia/net-sis190-fix-list-usage.patch patches/mageia/net-netfilter-IFWLOG.patch @@ -110,6 +116,7 @@ patches/mageia/net-netfilter-IFWLOG-2.6.37-buildfix.patch patches/mageia/net-ipv4-netfilter-ipt_IFWLOG-3.6-buildfix.patch patches/mageia/net-netfilter-IFWLOG-3.7-buildfix.patch + patches/mageia/net-netfilter-IFWLOG-remove-unused-label.patch patches/mageia/net-netfilter-psd.patch patches/mageia/net-netfilter-psd-mdv.patch patches/mageia/net-netfilter-psd-2.6.35-buildfix.patch @@ -149,7 +156,7 @@ patches/mageia/3rd-viahss-3.0-buildfix.patch patches/mageia/3rd-rtl8723bs.patch patches/mageia/ahci-add-new-Intel-device-IDs.patch - patches/mageia/ata-libata-disable-forced-PORTS_IMPL-for-AHCI-1.3.patch + patches/mageia/arm-0001-dt-bindings-Add-root-properties-for-Raspberry-Pi-2.patch patches/mageia/arm-0002-ARM-bcm2835-Add-a-compat-string-for-bcm2836-machine-.patch patches/mageia/arm-0003-ARM-bcm2835-Add-Kconfig-support-for-bcm2836.patch @@ -162,6 +169,7 @@ patches/mageia/arm-0024-ARM-bcm2835-Add-the-auxiliary-clocks-to-the-device-t.patch patches/mageia/arm-0031-ARM-bcm2835-enable-all-bcm2835-relevant-in-defconfig.patch patches/mageia/arm-0032-ARM-bcm2835-enable-auxiliary-spi-driver-in-defconfig.patch + mageia/net-netfilter-IFWLOG-remove-unused-label.patch @@ -216,6 +224,17 @@ + + 2016-02-18 + 4.4.2 + Version bump to 4.4.2 https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.2 + security + + systemRestart + + Ertuğrul Erata + ertugrulerata@gmail.com + 2016-02-02 4.4.1 From fdde8dcd010f286f1d2e81ed8b03dfaf3f3b1760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ertu=C4=9Frul=20Erata?= Date: Thu, 18 Feb 2016 22:29:15 +0200 Subject: [PATCH 2/2] last fix --- kernel/kernel/files/configs/kernel-x86_64-config | 3 +-- kernel/kernel/pspec.xml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/kernel/kernel/files/configs/kernel-x86_64-config b/kernel/kernel/files/configs/kernel-x86_64-config index b3d3edeb..b6092c88 100644 --- a/kernel/kernel/files/configs/kernel-x86_64-config +++ b/kernel/kernel/files/configs/kernel-x86_64-config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86_64 4.4.0 Kernel Configuration +# Linux/x86_64 4.4.2 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y @@ -5807,7 +5807,6 @@ CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_SECURITY=y CONFIG_EXT3_FS=m CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_XATTR=y CONFIG_EXT3_FS_SECURITY=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y diff --git a/kernel/kernel/pspec.xml b/kernel/kernel/pspec.xml index 9516b135..1d4be546 100644 --- a/kernel/kernel/pspec.xml +++ b/kernel/kernel/pspec.xml @@ -65,7 +65,7 @@ patches/mageia/fs-ovl-root-copy-attr.patch patches/mageia/fs-ovl-setattr-check-permissions-before-copy-up.patch patches/mageia/fs-ovl-check-dentry-positiveness-in-ovl_cleanup_whiteou.patch - patches/mageia/mageia/fs-xfs-Revert-xfs-clear-PF_NOFREEZE-for-xfsaild-kthread.patch + patches/mageia/fs-xfs-Revert-xfs-clear-PF_NOFREEZE-for-xfsaild-kthread.patch patches/mageia/firewire-ieee1394-module-aliases.patch patches/mageia/char-agp-intel-new-Q57-id.patch patches/mageia/gpu-drm-mach64.patch @@ -156,7 +156,6 @@ patches/mageia/3rd-viahss-3.0-buildfix.patch patches/mageia/3rd-rtl8723bs.patch patches/mageia/ahci-add-new-Intel-device-IDs.patch - patches/mageia/arm-0001-dt-bindings-Add-root-properties-for-Raspberry-Pi-2.patch patches/mageia/arm-0002-ARM-bcm2835-Add-a-compat-string-for-bcm2836-machine-.patch patches/mageia/arm-0003-ARM-bcm2835-Add-Kconfig-support-for-bcm2836.patch