Hello community, here is the log from the commit of package kernel-source for openSUSE:Factory checked in at 2015-10-01 09:28:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kernel-source (Old) and /work/SRC/openSUSE:Factory/.kernel-source.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kernel-source" Changes: -------- --- /work/SRC/openSUSE:Factory/kernel-source/kernel-debug.changes 2015-09-02 00:35:00.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.kernel-source.new/kernel-debug.changes 2015-10-01 09:28:36.000000000 +0200 @@ -1,0 +2,189 @@ +Fri Sep 25 10:21:54 CEST 2015 - [email protected] + +- ALSA: hda - Disable power_save_node for Thinkpads (bsc#943982). +- commit 6996a42 + +------------------------------------------------------------------- +Tue Sep 22 21:52:03 CEST 2015 - [email protected] + +- Refresh patches.xen/xen3-stack-unwind. + XEN needs a fix for stack unwinder too. +- commit 9c7cacf + +------------------------------------------------------------------- +Tue Sep 22 16:49:30 CEST 2015 - [email protected] + +- Update config files. +- Refresh patches.suse/stack-unwind. +- Refresh patches.xen/xen3-patch-2.6.27. + Reenable dwarf stack unwinder for C. Assembler is not dwarf-friendly + annotated (removed in upstream and neither + patches.arch/x86_64-unwind-annotations is enabled (yet)), so dwarf + unwinder does not work there (yet). + This should be fixed by Josh Poimbeouf's stacktool later. But until + then, dwarf-unwind at least C and use frame pointers for asm. + I.e. no more question marks for most cases: + [<ffffffff81008415>] try_stack_unwind+0x175/0x190 + [<ffffffff81007293>] dump_trace+0x93/0x3a0 + [<ffffffff8100847b>] show_trace_log_lvl+0x4b/0x60 + [<ffffffff810076ac>] show_stack_log_lvl+0x10c/0x180 + [<ffffffff81008515>] show_stack+0x25/0x50 + [<ffffffff81364619>] dump_stack+0x4b/0x72 + [<ffffffffa01a302e>] init1+0xe/0x20 [aaa] + [<ffffffff810002f3>] do_one_initcall+0xb3/0x200 + [<ffffffff8116e4da>] do_init_module+0x5f/0x1f6 + [<ffffffff810ee87e>] load_module+0x15fe/0x1b60 + [<ffffffff810eefe8>] SYSC_finit_module+0x98/0xc0 + [<ffffffff810ef02e>] SyS_finit_module+0xe/0x10 + [<ffffffff816b07b6>] entry_SYSCALL_64_fastpath+0x16/0x75 + DWARF2 unwinder stuck at entry_SYSCALL_64_fastpath+0x16/0x75 + Leftover inexact backtrace: + <nothing> + Instead of the funny: + [<ffffffff81364619>] ? dump_stack+0x4b/0x72 + [<ffffffffa022a02e>] ? init1+0xe/0x20 [aaa] + [<ffffffff810002f3>] ? do_one_initcall+0xb3/0x200 + [<ffffffff8116e4a2>] ? do_init_module+0x27/0x1f6 + [<ffffffff8116e4da>] ? do_init_module+0x5f/0x1f6 + [<ffffffff810ee87e>] ? load_module+0x15fe/0x1b60 + [<ffffffff810eaa40>] ? __symbol_put+0x50/0x50 + [<ffffffff811e9501>] ? kernel_read+0x41/0x60 + [<ffffffff810eefe8>] ? SYSC_finit_module+0x98/0xc0 + [<ffffffff810ef02e>] ? SyS_finit_module+0xe/0x10 + [<ffffffff816b07b6>] ? entry_SYSCALL_64_fastpath+0x16/0x75 + where __symbol_put and do_init_module+0x27 should not be there at all. +- commit 68d392a + +------------------------------------------------------------------- +Tue Sep 22 09:24:12 CEST 2015 - [email protected] + +- Linux 4.2.1. +- commit 0d0e86c + +------------------------------------------------------------------- +Mon Sep 14 17:37:27 CEST 2015 - [email protected] + +- Refresh + patches.fixes/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch. + Fix upstream status. +- commit 9af8b5d + +------------------------------------------------------------------- +Sun Sep 13 21:45:37 CEST 2015 - [email protected] + +- Update config files: ARM64: Raise CPUs to 128 + There are machines with more than 64 CPUs, allow them + to be used. Update vanilla config from default. +- commit de7016d + +------------------------------------------------------------------- +Fri Sep 11 16:16:31 CEST 2015 - [email protected] + +- Update config files. + Fix FW fixes fallout (bnc#944661). +- commit 6a28e38 + +------------------------------------------------------------------- +Thu Sep 10 16:15:22 CEST 2015 - [email protected] + +- rpm/kernel-spec-macros: Include the version string in the Obsoletes line +- commit 083cdb4 + +------------------------------------------------------------------- +Thu Sep 10 15:19:39 CEST 2015 - [email protected] + +- rpm/kernel-binary.spec.in: Obsolete previous builds of the same package (boo#867595) +- commit ffb73eb + +------------------------------------------------------------------- +Wed Sep 9 14:54:24 CEST 2015 - [email protected] + +- config/x86_64/ec2: Align CONFIG_STRICT_DEVMEM + CONFIG_STRICT_DEVMEM is enabled in every other kernel flavor, so + enable it for x86_64/ec2 as well. +- commit c156734 + +------------------------------------------------------------------- +Mon Sep 7 14:30:51 CEST 2015 - [email protected] + +- leds:lp55xx: Correct Kconfig dependency for f/w user helper + (boo#944661). +- commit 589a02c + +------------------------------------------------------------------- +Mon Sep 7 13:55:19 CEST 2015 - [email protected] + +- Disable CONFIG_FW_LOADER_USER_HELPER_FALLBACK that was reenabled unexpectedly (boo#944661) +- commit 14a23c3 + +------------------------------------------------------------------- +Mon Sep 7 12:23:57 CEST 2015 - [email protected] + +- Update config files: enable leftover CONFIG_FB_TFT_HX8357D=m for arm +- commit cae15fc + +------------------------------------------------------------------- +Mon Sep 7 12:13:14 CEST 2015 - [email protected] + +- drm/vmwgfx: Allow dropped masters render-node like access on + legacy nodes v2 (boo#934266). +- vmwgfx: Rework device initialization (boo#934266). +- commit 28dbc80 + +------------------------------------------------------------------- +Mon Sep 7 10:55:54 CEST 2015 - [email protected] + +- workqueue: Make flush_workqueue() available again to non + GPL modules. +- commit 82076fa + +------------------------------------------------------------------- +Mon Sep 7 00:44:39 CEST 2015 - [email protected] + +- Update config files: update arm config files so that they are up-to-date + and don't break build. +- commit c1a445e + +------------------------------------------------------------------- +Mon Sep 7 00:39:59 CEST 2015 - [email protected] + +- bcache: Fix writeback_thread never writing back incomplete + stripes. +- commit 395add4 + +------------------------------------------------------------------- +Mon Aug 31 13:17:08 CEST 2015 - [email protected] + +- Update Xen patches to 4.2-final. +- commit 7b8109d + +------------------------------------------------------------------- +Mon Aug 31 11:11:55 CEST 2015 - [email protected] + +- Refresh + patches.apparmor/apparmor-compatibility-patch-for-v5-network-control. + Fix this: + patches.apparmor/apparmor-compatibility-patch-for-v5-network-control:25: + error: Timestamp after filename + by scripts/refresh_patch.sh. +- commit 2089c9a + +------------------------------------------------------------------- +Mon Aug 31 10:02:14 CEST 2015 - [email protected] + +- Refresh + patches.fixes/btrfs-fix-stale-dir-entries-after-unlink-inode-eviction-and-fsync. + Fix this: + missing header for unified diff at line 107 of patch + (Patch is indented 4 spaces.) + can't find file to patch at input line 107 + by commenting also the @@ sign. +- commit 8e48b46 + +------------------------------------------------------------------- +Mon Aug 31 05:08:05 CEST 2015 - [email protected] + +- Update to 4.2-final. +- commit c617119 + +------------------------------------------------------------------- @@ -23,0 +213,7 @@ +Wed Aug 26 17:23:55 CEST 2015 - [email protected] + +- rpm/constraints.in: Require 14GB worth of disk space on POWER + The builds started to fail randomly due to ENOSPC errors. +- commit b57d276 + +------------------------------------------------------------------- ++++ 408 more lines (skipped) ++++ between /work/SRC/openSUSE:Factory/kernel-source/kernel-debug.changes ++++ and /work/SRC/openSUSE:Factory/.kernel-source.new/kernel-debug.changes kernel-default.changes: same change kernel-desktop.changes: same change kernel-docs.changes: same change kernel-ec2.changes: same change kernel-lpae.changes: same change kernel-obs-build.changes: same change kernel-obs-qa-xen.changes: same change kernel-obs-qa.changes: same change kernel-pae.changes: same change kernel-pv.changes: same change kernel-source.changes: same change kernel-syms.changes: same change kernel-vanilla.changes: same change kernel-xen.changes: same change Old: ---- linux-4.1.tar.xz New: ---- linux-4.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kernel-debug.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,8 +19,8 @@ # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt # needssslcertforbuild -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -59,9 +59,9 @@ Summary: A Debug Version of the Kernel License: GPL-2.0 Group: System/Kernel -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -154,6 +154,7 @@ Provides: kernel-kdump-base = 2.6.28 Obsoletes: kernel-kdump-base <= 2.6.28 %endif +%obsolete_rebuilds %name Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%srcversion.tar.xz Source2: source-post.sh Source3: kernel-source.rpmlintrc @@ -964,6 +965,7 @@ Provides: kernel-kdump-base = 2.6.28 Obsoletes: kernel-kdump-base <= 2.6.28 %endif +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -1006,6 +1008,7 @@ Provides: kernel-kdump-extra = 2.6.28 Obsoletes: kernel-kdump-extra <= 2.6.28 %endif +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -1061,6 +1064,7 @@ Provides: kernel-kdump-devel = 2.6.28 Obsoletes: kernel-kdump-devel <= 2.6.28 %endif +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel ++++++ kernel-default.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,8 +19,8 @@ # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt # needssslcertforbuild -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -59,9 +59,9 @@ Summary: The Standard Kernel License: GPL-2.0 Group: System/Kernel -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -186,6 +186,7 @@ Provides: kernel-bigsmp-base = 3.1 Obsoletes: kernel-bigsmp-base <= 3.1 %endif +%obsolete_rebuilds %name Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%srcversion.tar.xz Source2: source-post.sh Source3: kernel-source.rpmlintrc @@ -251,7 +252,7 @@ Source120: kabi.tar.bz2 Source121: sysctl.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-build -ExclusiveArch: aarch64 armv6hl armv7hl %ix86 ppc ppc64 ppc64le s390x x86_64 +ExclusiveArch: aarch64 armv7hl %ix86 ppc ppc64 ppc64le s390x x86_64 %define kmp_target_cpu %_target_cpu %ifarch %ix86 # Only i386/default supports i586, mark other flavors' packages as i686 @@ -1009,6 +1010,7 @@ Provides: kernel-bigsmp-base = 3.1 Obsoletes: kernel-bigsmp-base <= 3.1 %endif +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -1064,6 +1066,7 @@ Provides: kernel-bigsmp-extra = 3.1 Obsoletes: kernel-bigsmp-extra <= 3.1 %endif +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -1132,6 +1135,7 @@ Provides: kernel-bigsmp-devel = 3.1 Obsoletes: kernel-bigsmp-devel <= 3.1 %endif +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel ++++++ kernel-desktop.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,8 +19,8 @@ # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt # needssslcertforbuild -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -59,9 +59,9 @@ Summary: Kernel optimized for the desktop License: GPL-2.0 Group: System/Kernel -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -148,6 +148,7 @@ Provides: kernel = %version-%source_rel +%obsolete_rebuilds %name Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%srcversion.tar.xz Source2: source-post.sh Source3: kernel-source.rpmlintrc @@ -967,6 +968,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -1018,6 +1020,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -1082,6 +1085,7 @@ Requires: kernel-devel%variant = %version-%source_rel Supplements: packageand(%name:kernel-devel%variant) +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel ++++++ kernel-docs.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -16,7 +16,7 @@ # -%define patchversion 4.1.6 +%define patchversion 4.2.1 %define variant %{nil} %include %_sourcedir/kernel-spec-macros @@ -27,9 +27,9 @@ Summary: Kernel Documentation (man pages) License: GPL-2.0 Group: Documentation/Man -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif ++++++ kernel-ec2.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,8 +19,8 @@ # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt # needssslcertforbuild -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -59,9 +59,9 @@ Summary: The Amazon EC2 Xen Kernel License: GPL-2.0 Group: System/Kernel -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -148,6 +148,7 @@ Provides: kernel = %version-%source_rel +%obsolete_rebuilds %name Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%srcversion.tar.xz Source2: source-post.sh Source3: kernel-source.rpmlintrc @@ -957,6 +958,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -998,6 +1000,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -1052,6 +1055,7 @@ Requires: kernel-devel%variant = %version-%source_rel Supplements: packageand(%name:kernel-devel%variant) +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel kernel-lpae.spec: same change ++++++ kernel-obs-build.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,7 +19,7 @@ #!BuildIgnore: post-build-checks -%define patchversion 4.1.6 +%define patchversion 4.2.1 %define variant %{nil} %include %_sourcedir/kernel-spec-macros @@ -33,7 +33,7 @@ %ifarch %ix86 x86_64 BuildRequires: kernel-xen %endif -ExclusiveArch: aarch64 armv6hl armv7hl %ix86 ppc64 ppc64le s390x x86_64 +ExclusiveArch: aarch64 armv7hl %ix86 ppc64 ppc64le s390x x86_64 %if 0%{?suse_version} < 1315 # For SLE 11 BuildRequires: mkinitrd @@ -45,9 +45,9 @@ Summary: package kernel and initrd for OBS VM builds License: GPL-2.0 Group: SLES -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif ++++++ kernel-obs-qa-xen.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -17,7 +17,7 @@ # needsrootforbuild -%define patchversion 4.1.6 +%define patchversion 4.2.1 %define variant %{nil} %include %_sourcedir/kernel-spec-macros @@ -36,9 +36,9 @@ Summary: Basic QA tests for the kernel License: GPL-2.0 Group: SLES -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif ++++++ kernel-obs-qa.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -17,7 +17,7 @@ # needsrootforbuild -%define patchversion 4.1.6 +%define patchversion 4.2.1 %define variant %{nil} %include %_sourcedir/kernel-spec-macros @@ -28,7 +28,7 @@ # here as well to avoid that qa and build package build parallel BuildRequires: kernel-obs-build BuildRequires: modutils -ExclusiveArch: aarch64 armv6hl armv7hl %ix86 ppc64 ppc64le s390x x86_64 +ExclusiveArch: aarch64 armv7hl %ix86 ppc64 ppc64le s390x x86_64 %if 0%{?suse_version} < 1200 # for SLE 11 BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -36,9 +36,9 @@ Summary: Basic QA tests for the kernel License: GPL-2.0 Group: SLES -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif ++++++ kernel-pae.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,8 +19,8 @@ # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt # needssslcertforbuild -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -59,9 +59,9 @@ Summary: Kernel with PAE Support License: GPL-2.0 Group: System/Kernel -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -156,6 +156,7 @@ Provides: kernel-vmi-base = 2.6.38 Obsoletes: kernel-vmi-base <= 2.6.38 %endif +%obsolete_rebuilds %name Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%srcversion.tar.xz Source2: source-post.sh Source3: kernel-source.rpmlintrc @@ -972,6 +973,7 @@ Provides: kernel-vmi-base = 2.6.38 Obsoletes: kernel-vmi-base <= 2.6.38 %endif +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -1020,6 +1022,7 @@ Provides: kernel-vmi-extra = 2.6.38 Obsoletes: kernel-vmi-extra <= 2.6.38 %endif +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -1081,6 +1084,7 @@ Provides: kernel-vmi-devel = 2.6.38 Obsoletes: kernel-vmi-devel <= 2.6.38 %endif +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel ++++++ kernel-pv.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,8 +19,8 @@ # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt # needssslcertforbuild -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -59,9 +59,9 @@ Summary: The para-virtualized Kernel License: GPL-2.0 Group: System/Kernel -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -148,6 +148,7 @@ Provides: kernel = %version-%source_rel +%obsolete_rebuilds %name Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%srcversion.tar.xz Source2: source-post.sh Source3: kernel-source.rpmlintrc @@ -956,6 +957,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -996,6 +998,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -1049,6 +1052,7 @@ Requires: kernel-devel%variant = %version-%source_rel Supplements: packageand(%name:kernel-devel%variant) +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel ++++++ kernel-source.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -17,8 +17,8 @@ # icecream 0 -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -30,9 +30,9 @@ Summary: The Linux Kernel Sources License: GPL-2.0 Group: Development/Sources -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif ++++++ kernel-syms.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -24,10 +24,10 @@ Summary: Kernel Symbol Versions (modversions) License: GPL-2.0 Group: Development/Sources -Version: 4.1.6 +Version: 4.2.1 %if %using_buildservice %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -38,7 +38,7 @@ Url: http://www.kernel.org/ AutoReqProv: off BuildRequires: coreutils -%ifarch aarch64 armv6hl armv7hl %ix86 ppc ppc64 ppc64le s390x x86_64 +%ifarch aarch64 armv7hl %ix86 ppc ppc64 ppc64le s390x x86_64 Requires: kernel-default-devel = %version-%source_rel %endif %ifarch %ix86 x86_64 @@ -62,7 +62,7 @@ Source: README.KSYMS Requires: kernel-devel%variant = %version-%source_rel BuildRoot: %{_tmppath}/%{name}-%{version}-build -ExclusiveArch: %ix86 aarch64 armv6hl armv7hl ppc ppc64 ppc64le s390x x86_64 +ExclusiveArch: %ix86 aarch64 armv7hl ppc ppc64 ppc64le s390x x86_64 Prefix: /usr/src %description ++++++ kernel-vanilla.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,8 +19,8 @@ # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt # needssslcertforbuild -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -59,9 +59,9 @@ Summary: The Standard Kernel - without any SUSE patches License: GPL-2.0 Group: System/Kernel -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -148,6 +148,7 @@ Provides: kernel = %version-%source_rel +%obsolete_rebuilds %name Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%srcversion.tar.xz Source2: source-post.sh Source3: kernel-source.rpmlintrc @@ -213,7 +214,7 @@ Source120: kabi.tar.bz2 Source121: sysctl.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-build -ExclusiveArch: aarch64 armv6hl armv7hl %ix86 ppc ppc64 ppc64le s390x x86_64 +ExclusiveArch: aarch64 armv7hl %ix86 ppc ppc64 ppc64le s390x x86_64 %define kmp_target_cpu %_target_cpu %ifarch %ix86 # Only i386/default supports i586, mark other flavors' packages as i686 @@ -954,6 +955,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -992,6 +994,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -1043,6 +1046,7 @@ Requires: kernel-devel%variant = %version-%source_rel Supplements: packageand(%name:kernel-devel%variant) +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel ++++++ kernel-xen.spec ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:44.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:44.000000000 +0200 @@ -19,8 +19,8 @@ # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt # needssslcertforbuild -%define srcversion 4.1 -%define patchversion 4.1.6 +%define srcversion 4.2 +%define patchversion 4.2.1 %define variant %{nil} %define vanilla_only 0 @@ -59,9 +59,9 @@ Summary: The Xen Kernel License: GPL-2.0 Group: System/Kernel -Version: 4.1.6 +Version: 4.2.1 %if 0%{?is_kotd} -Release: <RELEASE>.gd867e86 +Release: <RELEASE>.g6996a42 %else Release: 0 %endif @@ -151,6 +151,7 @@ Obsoletes: kernel-xenpae <= 2.6.17 %endif +%obsolete_rebuilds %name Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%srcversion.tar.xz Source2: source-post.sh Source3: kernel-source.rpmlintrc @@ -960,6 +961,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -1001,6 +1003,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -1055,6 +1058,7 @@ Requires: kernel-devel%variant = %version-%source_rel Supplements: packageand(%name:kernel-devel%variant) +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel ++++++ _constraints ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:45.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:45.000000000 +0200 @@ -45,7 +45,7 @@ <hardware> <processors>4</processors> <disk> - <size unit="G">10</size> + <size unit="G">14</size> </disk> </hardware> </overwrite> ++++++ config.conf ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:45.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:45.000000000 +0200 @@ -36,8 +36,8 @@ +ppc64le ppc64le/vanilla # ARM architectures -+armv6hl armv6hl/default -+armv6hl armv6hl/vanilla ++armv6hl -!needs_updating armv6hl/default ++armv6hl -!needs_updating armv6hl/vanilla +armv7hl armv7hl/default +armv7hl armv7hl/vanilla +armv7hl armv7hl/lpae ++++++ config.sh ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:45.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:45.000000000 +0200 @@ -1,5 +1,5 @@ # The version of the main tarball to use -SRCVERSION=4.1 +SRCVERSION=4.2 # variant of the kernel-source package, either empty or "-rt" VARIANT= # buildservice projects to build the kernel against ++++++ config.tar.bz2 ++++++ ++++ 25886 lines of diff (skipped) ++++++ constraints.in ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:46.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:46.000000000 +0200 @@ -29,7 +29,7 @@ <hardware> <processors>4</processors> <disk> - <size unit="G">10</size> + <size unit="G">14</size> </disk> </hardware> </overwrite> ++++++ kernel-binary.spec.in ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:46.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:46.000000000 +0200 @@ -148,6 +148,7 @@ Provides: kernel = %version-%source_rel @PROVIDES_OBSOLETES@ @PROVIDES_OBSOLETES_BASE@ +%obsolete_rebuilds %name @SOURCES@ BuildRoot: %{_tmppath}/%{name}-%{version}-build ExclusiveArch: @ARCHS@ @@ -828,6 +829,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd @PROVIDES_OBSOLETES_BASE@ +%obsolete_rebuilds %name-base %ifarch %ix86 Conflicts: libc.so.6()(64bit) %endif @@ -866,6 +868,7 @@ Requires(post): perl-Bootloader Requires(post): mkinitrd @PROVIDES_OBSOLETES_EXTRA@ +%obsolete_rebuilds %name-extra Supplements: packageand(product(SUSE_SLED):%{name}_%_target_cpu) %ifarch %ix86 Conflicts: libc.so.6()(64bit) @@ -917,6 +920,7 @@ Requires: kernel-devel%variant = %version-%source_rel Supplements: packageand(%name:kernel-devel%variant) @PROVIDES_OBSOLETES_DEVEL@ +%obsolete_rebuilds %name-devel PreReq: coreutils %description devel ++++++ kernel-spec-macros ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:46.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:46.000000000 +0200 @@ -11,8 +11,14 @@ # suffix, we keep that suffix and strip the rightmost digit component. # This is used in KOTD builds: 2.1.g1234567 -> 2.g1234567 %define source_rel %release +%define obsolete_rebuilds() %nil %if %using_buildservice %define source_rel %(echo %release | sed -r 's/\\.[0-9]+($|\\.[^.]*[^.0-9][^.]*$)/\\1/') +# If the rebuild counter is > 1, obsolete all previous rebuilds (boo#867595) +%define obsolete_rebuilds() %( %{verbose:set -x} \ + set -- $(echo %release | sed -rn 's/(.*\\.)([0-9]+)($|\\.[^.]*[^.0-9][^.]*$)/\\1 \\2 \\3/p') \ + seq 1 $(($2-1)) | sed "s/.*/Obsoletes: %1 = %version-$1&$3/" \ +) %endif # how the kernel release string (uname -r) should look like ++++++ linux-4.1.tar.xz -> linux-4.2.tar.xz ++++++ /work/SRC/openSUSE:Factory/kernel-source/linux-4.1.tar.xz /work/SRC/openSUSE:Factory/.kernel-source.new/linux-4.2.tar.xz differ: char 26, line 1 ++++++ patches.apparmor.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.apparmor/apparmor-compatibility-patch-for-v5-network-control new/patches.apparmor/apparmor-compatibility-patch-for-v5-network-control --- old/patches.apparmor/apparmor-compatibility-patch-for-v5-network-control 2013-09-24 15:55:10.000000000 +0200 +++ new/patches.apparmor/apparmor-compatibility-patch-for-v5-network-control 2015-08-31 11:11:55.000000000 +0200 @@ -21,8 +21,8 @@ create mode 100644 security/apparmor/include/net.h create mode 100644 security/apparmor/net.c ---- a/security/apparmor/Makefile 2013-09-17 11:00:31.021703815 -0400 -+++ b/security/apparmor/Makefile 2013-09-17 11:00:42.645510072 -0400 +--- a/security/apparmor/Makefile ++++ b/security/apparmor/Makefile @@ -4,10 +4,10 @@ obj-$(CONFIG_SECURITY_APPARMOR) += appar apparmor-y := apparmorfs.o audit.o capability.o context.o ipc.o lib.o match.o \ @@ -60,9 +60,9 @@ $(call cmd,make-rlim) +$(obj)/af_names.h : $(srctree)/include/linux/socket.h + $(call cmd,make-af) ---- a/security/apparmor/apparmorfs.c 2013-09-17 11:00:31.021703815 -0400 -+++ b/security/apparmor/apparmorfs.c 2013-09-17 11:00:42.645510072 -0400 -@@ -811,6 +811,7 @@ static struct aa_fs_entry aa_fs_entry_fe +--- a/security/apparmor/apparmorfs.c ++++ b/security/apparmor/apparmorfs.c +@@ -809,6 +809,7 @@ static struct aa_fs_entry aa_fs_entry_fe AA_FS_FILE_U64("capability", VFS_CAP_FLAGS_MASK), AA_FS_DIR("rlimit", aa_fs_entry_rlimit), AA_FS_DIR("caps", aa_fs_entry_caps), @@ -70,7 +70,7 @@ { } }; -@@ -820,6 +821,8 @@ static struct aa_fs_entry aa_fs_entry_ap +@@ -818,6 +819,8 @@ static struct aa_fs_entry aa_fs_entry_ap AA_FS_FILE_FOPS(".remove", 0640, &aa_fs_profile_remove), AA_FS_FILE_FOPS("profiles", 0640, &aa_fs_profiles_fops), AA_FS_DIR("features", aa_fs_entry_features), @@ -79,9 +79,9 @@ { } }; ---- a/security/apparmor/include/audit.h 2013-09-17 11:00:31.025703750 -0400 -+++ b/security/apparmor/include/audit.h 2013-09-17 11:00:42.645510072 -0400 -@@ -126,6 +126,10 @@ struct apparmor_audit_data { +--- a/security/apparmor/include/audit.h ++++ b/security/apparmor/include/audit.h +@@ -125,6 +125,10 @@ struct apparmor_audit_data { u32 denied; kuid_t ouid; } fs; @@ -92,8 +92,8 @@ }; }; ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ b/security/apparmor/include/net.h 2013-09-17 11:00:42.645510072 -0400 +--- /dev/null ++++ b/security/apparmor/include/net.h @@ -0,0 +1,40 @@ +/* + * AppArmor security module @@ -135,8 +135,8 @@ +} + +#endif /* __AA_NET_H */ ---- a/security/apparmor/include/policy.h 2013-09-17 11:00:31.025703750 -0400 -+++ b/security/apparmor/include/policy.h 2013-09-17 11:00:42.645510072 -0400 +--- a/security/apparmor/include/policy.h ++++ b/security/apparmor/include/policy.h @@ -27,6 +27,7 @@ #include "capability.h" #include "domain.h" @@ -161,8 +161,8 @@ struct aa_rlimit rlimits; unsigned char *hash; ---- a/security/apparmor/lsm.c 2013-09-17 11:00:31.025703750 -0400 -+++ b/security/apparmor/lsm.c 2013-09-17 11:00:42.645510072 -0400 +--- a/security/apparmor/lsm.c ++++ b/security/apparmor/lsm.c @@ -32,6 +32,7 @@ #include "include/context.h" #include "include/file.h" @@ -171,7 +171,7 @@ #include "include/path.h" #include "include/policy.h" #include "include/procattr.h" -@@ -615,6 +616,104 @@ static int apparmor_task_setrlimit(struc +@@ -605,6 +606,104 @@ static int apparmor_task_setrlimit(struc return error; } @@ -273,31 +273,31 @@ + return aa_revalidate_sk(OP_SOCK_SHUTDOWN, sk); +} + - static struct security_operations apparmor_ops = { - .name = "apparmor", - -@@ -647,6 +746,19 @@ static struct security_operations apparm - .getprocattr = apparmor_getprocattr, - .setprocattr = apparmor_setprocattr, - -+ .socket_create = apparmor_socket_create, -+ .socket_bind = apparmor_socket_bind, -+ .socket_connect = apparmor_socket_connect, -+ .socket_listen = apparmor_socket_listen, -+ .socket_accept = apparmor_socket_accept, -+ .socket_sendmsg = apparmor_socket_sendmsg, -+ .socket_recvmsg = apparmor_socket_recvmsg, -+ .socket_getsockname = apparmor_socket_getsockname, -+ .socket_getpeername = apparmor_socket_getpeername, -+ .socket_getsockopt = apparmor_socket_getsockopt, -+ .socket_setsockopt = apparmor_socket_setsockopt, -+ .socket_shutdown = apparmor_socket_shutdown, -+ - .cred_alloc_blank = apparmor_cred_alloc_blank, - .cred_free = apparmor_cred_free, - .cred_prepare = apparmor_cred_prepare, ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ b/security/apparmor/net.c 2013-09-17 11:00:42.649510003 -0400 + static struct security_hook_list apparmor_hooks[] = { + LSM_HOOK_INIT(ptrace_access_check, apparmor_ptrace_access_check), + LSM_HOOK_INIT(ptrace_traceme, apparmor_ptrace_traceme), +@@ -634,6 +733,19 @@ static struct security_hook_list apparmo + LSM_HOOK_INIT(getprocattr, apparmor_getprocattr), + LSM_HOOK_INIT(setprocattr, apparmor_setprocattr), + ++ LSM_HOOK_INIT(socket_create, apparmor_socket_create), ++ LSM_HOOK_INIT(socket_bind, apparmor_socket_bind), ++ LSM_HOOK_INIT(socket_connect, apparmor_socket_connect), ++ LSM_HOOK_INIT(socket_listen, apparmor_socket_listen), ++ LSM_HOOK_INIT(socket_accept, apparmor_socket_accept), ++ LSM_HOOK_INIT(socket_sendmsg, apparmor_socket_sendmsg), ++ LSM_HOOK_INIT(socket_recvmsg, apparmor_socket_recvmsg), ++ LSM_HOOK_INIT(socket_getsockname, apparmor_socket_getsockname), ++ LSM_HOOK_INIT(socket_getpeername, apparmor_socket_getpeername), ++ LSM_HOOK_INIT(socket_getsockopt, apparmor_socket_getsockopt), ++ LSM_HOOK_INIT(socket_setsockopt, apparmor_socket_setsockopt), ++ LSM_HOOK_INIT(socket_shutdown, apparmor_socket_shutdown), ++ + LSM_HOOK_INIT(cred_alloc_blank, apparmor_cred_alloc_blank), + LSM_HOOK_INIT(cred_free, apparmor_cred_free), + LSM_HOOK_INIT(cred_prepare, apparmor_cred_prepare), +--- /dev/null ++++ b/security/apparmor/net.c @@ -0,0 +1,184 @@ +/* + * AppArmor security module @@ -483,9 +483,9 @@ + + return error; +} ---- a/security/apparmor/policy.c 2013-09-17 11:00:31.029703685 -0400 -+++ b/security/apparmor/policy.c 2013-09-17 11:00:42.649510003 -0400 -@@ -602,6 +602,7 @@ void aa_free_profile(struct aa_profile * +--- a/security/apparmor/policy.c ++++ b/security/apparmor/policy.c +@@ -603,6 +603,7 @@ void aa_free_profile(struct aa_profile * aa_free_file_rules(&profile->file); aa_free_cap_rules(&profile->caps); @@ -493,8 +493,8 @@ aa_free_rlimit_rules(&profile->rlimits); kzfree(profile->dirname); ---- a/security/apparmor/policy_unpack.c 2013-09-17 11:00:31.029703685 -0400 -+++ b/security/apparmor/policy_unpack.c 2013-09-17 11:00:42.649510003 -0400 +--- a/security/apparmor/policy_unpack.c ++++ b/security/apparmor/policy_unpack.c @@ -193,6 +193,19 @@ fail: return 0; } ++++++ patches.arch.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/arm64-0004-net-xgbe-Add-A0-silicon-support.patch new/patches.arch/arm64-0004-net-xgbe-Add-A0-silicon-support.patch --- old/patches.arch/arm64-0004-net-xgbe-Add-A0-silicon-support.patch 2015-08-03 20:25:04.000000000 +0200 +++ new/patches.arch/arm64-0004-net-xgbe-Add-A0-silicon-support.patch 2015-07-06 22:44:45.000000000 +0200 @@ -10370,9 +10370,9 @@ --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile @@ -34,4 +34,5 @@ obj-$(CONFIG_MDIO_BUS_MUX_MMIOREG) += md + obj-$(CONFIG_MDIO_BUS_MUX_MMIOREG) += mdio-mux-mmioreg.o obj-$(CONFIG_MDIO_SUN4I) += mdio-sun4i.o obj-$(CONFIG_MDIO_MOXART) += mdio-moxart.o - obj-$(CONFIG_AMD_XGBE_PHY) += amd-xgbe-phy.o +obj-$(CONFIG_AMD_XGBE_PHY) += amd-xgbe-phy-a0.o obj-$(CONFIG_MDIO_BCM_UNIMAC) += mdio-bcm-unimac.o --- /dev/null diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/arm64-0005-arm64-dts-Add-X-Gene-reboot-driver-dts-node.patch new/patches.arch/arm64-0005-arm64-dts-Add-X-Gene-reboot-driver-dts-node.patch --- old/patches.arch/arm64-0005-arm64-dts-Add-X-Gene-reboot-driver-dts-node.patch 2015-08-03 20:25:04.000000000 +0200 +++ new/patches.arch/arm64-0005-arm64-dts-Add-X-Gene-reboot-driver-dts-node.patch 2015-07-06 22:44:45.000000000 +0200 @@ -31,7 +31,7 @@ #address-cells = <2>; #size-cells = <2>; @@ -469,6 +474,13 @@ - clocks = <&pcie4clk 0>; + msi-parent = <&msi>; }; + reboot: reboot@17000014 { ++++++ patches.drivers.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/0001-qmi_wwan-Add-support-for-Dell-Wireless-5809e-4G-Mode.patch new/patches.drivers/0001-qmi_wwan-Add-support-for-Dell-Wireless-5809e-4G-Mode.patch --- old/patches.drivers/0001-qmi_wwan-Add-support-for-Dell-Wireless-5809e-4G-Mode.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/0001-qmi_wwan-Add-support-for-Dell-Wireless-5809e-4G-Mode.patch 2015-09-25 10:21:54.000000000 +0200 @@ -0,0 +1,35 @@ +From 22ebbe4c34da96f1e283baae5956e39d629c18a3 Mon Sep 17 00:00:00 2001 +From: Pieter Hollants <[email protected]> +Date: Mon, 20 Jul 2015 10:14:13 +0200 +Subject: [PATCH] qmi_wwan: Add support for Dell Wireless 5809e 4G Modem +References: bnc#937974 +Git-Commit: 2070c48cf2b78af89ba529c00992eaaa18df8ef7 +Patch-Mainline: Queued in subsystem maintainer repository +Git-repo: http://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git + +Added the USB IDs 0x413c:0x81b1 for the "Dell Wireless 5809e Gobi(TM) 4G +LTE Mobile Broadband Card", a Dell-branded Sierra Wireless EM7305 LTE +card in M.2 form factor, used eg. in Dell's Latitude E7540 Notebook +series. + +Signed-off-by: Pieter Hollants <[email protected]> +Signed-off-by: Oliver Neukum <[email protected]> +--- + drivers/net/usb/qmi_wwan.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c +index f603f36..f06c687 100644 +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -784,6 +784,7 @@ static const struct usb_device_id products[] = { + {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ + {QMI_FIXED_INTF(0x413c, 0x81a8, 8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */ + {QMI_FIXED_INTF(0x413c, 0x81a9, 8)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */ ++ {QMI_FIXED_INTF(0x413c, 0x81b1, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card */ + {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */ + {QMI_FIXED_INTF(0x03f0, 0x581d, 4)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Module (Huawei me906e) */ + +-- +2.1.4 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/0001-vmwgfx-Rework-device-initialization.patch new/patches.drivers/0001-vmwgfx-Rework-device-initialization.patch --- old/patches.drivers/0001-vmwgfx-Rework-device-initialization.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/0001-vmwgfx-Rework-device-initialization.patch 2015-09-25 10:21:54.000000000 +0200 @@ -0,0 +1,872 @@ +From 153b3d5b037eeb01d1e5610958a5bbd79885b2be Mon Sep 17 00:00:00 2001 +From: Thomas Hellstrom <[email protected]> +Date: Thu, 25 Jun 2015 10:47:43 -0700 +Subject: [PATCH] vmwgfx: Rework device initialization +Git-commit: 153b3d5b037eeb01d1e5610958a5bbd79885b2be +Patch-mainline: v4.3-rc1 +References: boo#934266 + +This commit reworks device initialization so that we always enable the +FIFO at driver load, deferring SVGA enable until either first modeset +or fbdev enable. +This should always leave the fifo properly enabled for render- and +control nodes. +In addition, +*) We disable the use of VRAM when SVGA is not enabled. +*) We simplify PM support so that we only throw out resources on hibernate, +not on suspend, since the device keeps its state on suspend. + +Signed-off-by: Thomas Hellstrom <[email protected]> +Reviewed-by: Sinclair Yeh <[email protected]> +Acked-by: Takashi Iwai <[email protected]> + +--- + drivers/gpu/drm/vmwgfx/vmwgfx_context.c | 8 + drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 337 +++++++++++++++++--------------- + drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 19 + + drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | 4 + drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c | 12 - + drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 1 + drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | 6 + drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 1 + drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 4 + drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 12 - + 10 files changed, 230 insertions(+), 174 deletions(-) + +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c +@@ -140,7 +140,7 @@ static void vmw_hw_context_destroy(struc + cmd->body.cid = cpu_to_le32(res->id); + + vmw_fifo_commit(dev_priv, sizeof(*cmd)); +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + } + + static int vmw_gb_context_init(struct vmw_private *dev_priv, +@@ -220,7 +220,7 @@ static int vmw_context_init(struct vmw_p + cmd->body.cid = cpu_to_le32(res->id); + + vmw_fifo_commit(dev_priv, sizeof(*cmd)); +- (void) vmw_3d_resource_inc(dev_priv, false); ++ vmw_fifo_resource_inc(dev_priv); + vmw_resource_activate(res, vmw_hw_context_destroy); + return 0; + +@@ -281,7 +281,7 @@ static int vmw_gb_context_create(struct + cmd->header.size = sizeof(cmd->body); + cmd->body.cid = res->id; + vmw_fifo_commit(dev_priv, sizeof(*cmd)); +- (void) vmw_3d_resource_inc(dev_priv, false); ++ vmw_fifo_resource_inc(dev_priv); + + return 0; + +@@ -414,7 +414,7 @@ static int vmw_gb_context_destroy(struct + if (dev_priv->query_cid == res->id) + dev_priv->query_cid_valid = false; + vmw_resource_release_id(res); +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + + return 0; + } +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +@@ -339,24 +339,47 @@ static int vmw_dummy_query_bo_create(str + return ret; + } + +-static int vmw_request_device(struct vmw_private *dev_priv) ++/** ++ * vmw_request_device_late - Perform late device setup ++ * ++ * @dev_priv: Pointer to device private. ++ * ++ * This function performs setup of otables and enables large command ++ * buffer submission. These tasks are split out to a separate function ++ * because it reverts vmw_release_device_early and is intended to be used ++ * by an error path in the hibernation code. ++ */ ++static int vmw_request_device_late(struct vmw_private *dev_priv) + { + int ret; + +- ret = vmw_fifo_init(dev_priv, &dev_priv->fifo); +- if (unlikely(ret != 0)) { +- DRM_ERROR("Unable to initialize FIFO.\n"); +- return ret; +- } +- vmw_fence_fifo_up(dev_priv->fman); + if (dev_priv->has_mob) { + ret = vmw_otables_setup(dev_priv); + if (unlikely(ret != 0)) { + DRM_ERROR("Unable to initialize " + "guest Memory OBjects.\n"); +- goto out_no_mob; ++ return ret; + } + } ++ ++ return 0; ++} ++ ++static int vmw_request_device(struct vmw_private *dev_priv) ++{ ++ int ret; ++ ++ ret = vmw_fifo_init(dev_priv, &dev_priv->fifo); ++ if (unlikely(ret != 0)) { ++ DRM_ERROR("Unable to initialize FIFO.\n"); ++ return ret; ++ } ++ vmw_fence_fifo_up(dev_priv->fman); ++ ++ ret = vmw_request_device_late(dev_priv); ++ if (ret) ++ goto out_no_mob; ++ + ret = vmw_dummy_query_bo_create(dev_priv); + if (unlikely(ret != 0)) + goto out_no_query_bo; +@@ -364,15 +387,25 @@ static int vmw_request_device(struct vmw + return 0; + + out_no_query_bo: +- if (dev_priv->has_mob) ++ if (dev_priv->has_mob) { ++ (void) ttm_bo_evict_mm(&dev_priv->bdev, VMW_PL_MOB); + vmw_otables_takedown(dev_priv); ++ } + out_no_mob: + vmw_fence_fifo_down(dev_priv->fman); + vmw_fifo_release(dev_priv, &dev_priv->fifo); + return ret; + } + +-static void vmw_release_device(struct vmw_private *dev_priv) ++/** ++ * vmw_release_device_early - Early part of fifo takedown. ++ * ++ * @dev_priv: Pointer to device private struct. ++ * ++ * This is the first part of command submission takedown, to be called before ++ * buffer management is taken down. ++ */ ++static void vmw_release_device_early(struct vmw_private *dev_priv) + { + /* + * Previous destructions should've released +@@ -382,64 +415,24 @@ static void vmw_release_device(struct vm + BUG_ON(dev_priv->pinned_bo != NULL); + + ttm_bo_unref(&dev_priv->dummy_query_bo); +- if (dev_priv->has_mob) ++ if (dev_priv->has_mob) { ++ ttm_bo_evict_mm(&dev_priv->bdev, VMW_PL_MOB); + vmw_otables_takedown(dev_priv); +- vmw_fence_fifo_down(dev_priv->fman); +- vmw_fifo_release(dev_priv, &dev_priv->fifo); +-} +- +- +-/** +- * Increase the 3d resource refcount. +- * If the count was prevously zero, initialize the fifo, switching to svga +- * mode. Note that the master holds a ref as well, and may request an +- * explicit switch to svga mode if fb is not running, using @unhide_svga. +- */ +-int vmw_3d_resource_inc(struct vmw_private *dev_priv, +- bool unhide_svga) +-{ +- int ret = 0; +- +- mutex_lock(&dev_priv->release_mutex); +- if (unlikely(dev_priv->num_3d_resources++ == 0)) { +- ret = vmw_request_device(dev_priv); +- if (unlikely(ret != 0)) +- --dev_priv->num_3d_resources; +- } else if (unhide_svga) { +- vmw_write(dev_priv, SVGA_REG_ENABLE, +- vmw_read(dev_priv, SVGA_REG_ENABLE) & +- ~SVGA_REG_ENABLE_HIDE); + } +- +- mutex_unlock(&dev_priv->release_mutex); +- return ret; + } + + /** +- * Decrease the 3d resource refcount. +- * If the count reaches zero, disable the fifo, switching to vga mode. +- * Note that the master holds a refcount as well, and may request an +- * explicit switch to vga mode when it releases its refcount to account +- * for the situation of an X server vt switch to VGA with 3d resources +- * active. ++ * vmw_release_device_late - Late part of fifo takedown. ++ * ++ * @dev_priv: Pointer to device private struct. ++ * ++ * This is the last part of the command submission takedown, to be called when ++ * command submission is no longer needed. It may wait on pending fences. + */ +-void vmw_3d_resource_dec(struct vmw_private *dev_priv, +- bool hide_svga) ++static void vmw_release_device_late(struct vmw_private *dev_priv) + { +- int32_t n3d; +- +- mutex_lock(&dev_priv->release_mutex); +- if (unlikely(--dev_priv->num_3d_resources == 0)) +- vmw_release_device(dev_priv); +- else if (hide_svga) +- vmw_write(dev_priv, SVGA_REG_ENABLE, +- vmw_read(dev_priv, SVGA_REG_ENABLE) | +- SVGA_REG_ENABLE_HIDE); +- +- n3d = (int32_t) dev_priv->num_3d_resources; +- mutex_unlock(&dev_priv->release_mutex); +- +- BUG_ON(n3d < 0); ++ vmw_fence_fifo_down(dev_priv->fman); ++ vmw_fifo_release(dev_priv, &dev_priv->fifo); + } + + /** +@@ -603,6 +596,7 @@ static int vmw_driver_load(struct drm_de + spin_lock_init(&dev_priv->hw_lock); + spin_lock_init(&dev_priv->waiter_lock); + spin_lock_init(&dev_priv->cap_lock); ++ spin_lock_init(&dev_priv->svga_lock); + + for (i = vmw_res_context; i < vmw_res_max; ++i) { + idr_init(&dev_priv->res_idr[i]); +@@ -714,17 +708,6 @@ static int vmw_driver_load(struct drm_de + dev_priv->active_master = &dev_priv->fbdev_master; + + +- ret = ttm_bo_device_init(&dev_priv->bdev, +- dev_priv->bo_global_ref.ref.object, +- &vmw_bo_driver, +- dev->anon_inode->i_mapping, +- VMWGFX_FILE_PAGE_OFFSET, +- false); +- if (unlikely(ret != 0)) { +- DRM_ERROR("Failed initializing TTM buffer object driver.\n"); +- goto out_err1; +- } +- + dev_priv->mmio_mtrr = arch_phys_wc_add(dev_priv->mmio_start, + dev_priv->mmio_size); + +@@ -787,13 +770,28 @@ static int vmw_driver_load(struct drm_de + goto out_no_fman; + } + ++ ret = ttm_bo_device_init(&dev_priv->bdev, ++ dev_priv->bo_global_ref.ref.object, ++ &vmw_bo_driver, ++ dev->anon_inode->i_mapping, ++ VMWGFX_FILE_PAGE_OFFSET, ++ false); ++ if (unlikely(ret != 0)) { ++ DRM_ERROR("Failed initializing TTM buffer object driver.\n"); ++ goto out_no_bdev; ++ } + ++ /* ++ * Enable VRAM, but initially don't use it until SVGA is enabled and ++ * unhidden. ++ */ + ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM, + (dev_priv->vram_size >> PAGE_SHIFT)); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed initializing memory manager for VRAM.\n"); + goto out_no_vram; + } ++ dev_priv->bdev.man[TTM_PL_VRAM].use_type = false; + + dev_priv->has_gmr = true; + if (((dev_priv->capabilities & (SVGA_CAP_GMR | SVGA_CAP_GMR2)) == 0) || +@@ -814,18 +812,18 @@ static int vmw_driver_load(struct drm_de + } + } + +- vmw_kms_save_vga(dev_priv); +- +- /* Start kms and overlay systems, needs fifo. */ + ret = vmw_kms_init(dev_priv); + if (unlikely(ret != 0)) + goto out_no_kms; + vmw_overlay_init(dev_priv); + ++ ret = vmw_request_device(dev_priv); ++ if (ret) ++ goto out_no_fifo; ++ + if (dev_priv->enable_fb) { +- ret = vmw_3d_resource_inc(dev_priv, true); +- if (unlikely(ret != 0)) +- goto out_no_fifo; ++ vmw_fifo_resource_inc(dev_priv); ++ vmw_svga_enable(dev_priv); + vmw_fb_init(dev_priv); + } + +@@ -838,13 +836,14 @@ out_no_fifo: + vmw_overlay_close(dev_priv); + vmw_kms_close(dev_priv); + out_no_kms: +- vmw_kms_restore_vga(dev_priv); + if (dev_priv->has_mob) + (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); + if (dev_priv->has_gmr) + (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); + (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); + out_no_vram: ++ (void)ttm_bo_device_release(&dev_priv->bdev); ++out_no_bdev: + vmw_fence_manager_takedown(dev_priv->fman); + out_no_fman: + if (dev_priv->capabilities & SVGA_CAP_IRQMASK) +@@ -860,8 +859,6 @@ out_err4: + iounmap(dev_priv->mmio_virt); + out_err3: + arch_phys_wc_del(dev_priv->mmio_mtrr); +- (void)ttm_bo_device_release(&dev_priv->bdev); +-out_err1: + vmw_ttm_global_release(dev_priv); + out_err0: + for (i = vmw_res_context; i < vmw_res_max; ++i) +@@ -883,18 +880,22 @@ static int vmw_driver_unload(struct drm_ + vfree(dev_priv->ctx.cmd_bounce); + if (dev_priv->enable_fb) { + vmw_fb_close(dev_priv); +- vmw_kms_restore_vga(dev_priv); +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); ++ vmw_svga_disable(dev_priv); + } ++ + vmw_kms_close(dev_priv); + vmw_overlay_close(dev_priv); + +- if (dev_priv->has_mob) +- (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); + if (dev_priv->has_gmr) + (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); + (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); + ++ vmw_release_device_early(dev_priv); ++ if (dev_priv->has_mob) ++ (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); ++ (void) ttm_bo_device_release(&dev_priv->bdev); ++ vmw_release_device_late(dev_priv); + vmw_fence_manager_takedown(dev_priv->fman); + if (dev_priv->capabilities & SVGA_CAP_IRQMASK) + drm_irq_uninstall(dev_priv->dev); +@@ -1148,27 +1149,13 @@ static int vmw_master_set(struct drm_dev + struct vmw_master *vmaster = vmw_master(file_priv->master); + int ret = 0; + +- if (!dev_priv->enable_fb) { +- ret = vmw_3d_resource_inc(dev_priv, true); +- if (unlikely(ret != 0)) +- return ret; +- vmw_kms_save_vga(dev_priv); +- vmw_write(dev_priv, SVGA_REG_TRACES, 0); +- } +- + if (active) { + BUG_ON(active != &dev_priv->fbdev_master); + ret = ttm_vt_lock(&active->lock, false, vmw_fp->tfile); + if (unlikely(ret != 0)) +- goto out_no_active_lock; ++ return ret; + + ttm_lock_set_kill(&active->lock, true, SIGTERM); +- ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM); +- if (unlikely(ret != 0)) { +- DRM_ERROR("Unable to clean VRAM on " +- "master drop.\n"); +- } +- + dev_priv->active_master = NULL; + } + +@@ -1182,14 +1169,6 @@ static int vmw_master_set(struct drm_dev + dev_priv->active_master = vmaster; + + return 0; +- +-out_no_active_lock: +- if (!dev_priv->enable_fb) { +- vmw_kms_restore_vga(dev_priv); +- vmw_3d_resource_dec(dev_priv, true); +- vmw_write(dev_priv, SVGA_REG_TRACES, 1); +- } +- return ret; + } + + static void vmw_master_drop(struct drm_device *dev, +@@ -1214,16 +1193,9 @@ static void vmw_master_drop(struct drm_d + } + + ttm_lock_set_kill(&vmaster->lock, false, SIGTERM); +- vmw_execbuf_release_pinned_bo(dev_priv); + +- if (!dev_priv->enable_fb) { +- ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM); +- if (unlikely(ret != 0)) +- DRM_ERROR("Unable to clean VRAM on master drop.\n"); +- vmw_kms_restore_vga(dev_priv); +- vmw_3d_resource_dec(dev_priv, true); +- vmw_write(dev_priv, SVGA_REG_TRACES, 1); +- } ++ if (!dev_priv->enable_fb) ++ vmw_svga_disable(dev_priv); + + dev_priv->active_master = &dev_priv->fbdev_master; + ttm_lock_set_kill(&dev_priv->fbdev_master.lock, false, SIGTERM); +@@ -1233,6 +1205,74 @@ static void vmw_master_drop(struct drm_d + vmw_fb_on(dev_priv); + } + ++/** ++ * __vmw_svga_enable - Enable SVGA mode, FIFO and use of VRAM. ++ * ++ * @dev_priv: Pointer to device private struct. ++ * Needs the reservation sem to be held in non-exclusive mode. ++ */ ++void __vmw_svga_enable(struct vmw_private *dev_priv) ++{ ++ spin_lock(&dev_priv->svga_lock); ++ if (!dev_priv->bdev.man[TTM_PL_VRAM].use_type) { ++ vmw_write(dev_priv, SVGA_REG_ENABLE, SVGA_REG_ENABLE); ++ dev_priv->bdev.man[TTM_PL_VRAM].use_type = true; ++ } ++ spin_unlock(&dev_priv->svga_lock); ++} ++ ++/** ++ * vmw_svga_enable - Enable SVGA mode, FIFO and use of VRAM. ++ * ++ * @dev_priv: Pointer to device private struct. ++ */ ++void vmw_svga_enable(struct vmw_private *dev_priv) ++{ ++ ttm_read_lock(&dev_priv->reservation_sem, false); ++ __vmw_svga_enable(dev_priv); ++ ttm_read_unlock(&dev_priv->reservation_sem); ++} ++ ++/** ++ * __vmw_svga_disable - Disable SVGA mode and use of VRAM. ++ * ++ * @dev_priv: Pointer to device private struct. ++ * Needs the reservation sem to be held in exclusive mode. ++ * Will not empty VRAM. VRAM must be emptied by caller. ++ */ ++void __vmw_svga_disable(struct vmw_private *dev_priv) ++{ ++ spin_lock(&dev_priv->svga_lock); ++ if (dev_priv->bdev.man[TTM_PL_VRAM].use_type) { ++ dev_priv->bdev.man[TTM_PL_VRAM].use_type = false; ++ vmw_write(dev_priv, SVGA_REG_ENABLE, ++ SVGA_REG_ENABLE_ENABLE_HIDE); ++ } ++ spin_unlock(&dev_priv->svga_lock); ++} ++ ++/** ++ * vmw_svga_disable - Disable SVGA_MODE, and use of VRAM. Keep the fifo ++ * running. ++ * ++ * @dev_priv: Pointer to device private struct. ++ * Will empty VRAM. ++ */ ++void vmw_svga_disable(struct vmw_private *dev_priv) ++{ ++ ttm_write_lock(&dev_priv->reservation_sem, false); ++ spin_lock(&dev_priv->svga_lock); ++ if (dev_priv->bdev.man[TTM_PL_VRAM].use_type) { ++ dev_priv->bdev.man[TTM_PL_VRAM].use_type = false; ++ vmw_write(dev_priv, SVGA_REG_ENABLE, ++ SVGA_REG_ENABLE_ENABLE_HIDE); ++ spin_unlock(&dev_priv->svga_lock); ++ if (ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM)) ++ DRM_ERROR("Failed evicting VRAM buffers.\n"); ++ } else ++ spin_unlock(&dev_priv->svga_lock); ++ ttm_write_unlock(&dev_priv->reservation_sem); ++} + + static void vmw_remove(struct pci_dev *pdev) + { +@@ -1250,21 +1290,21 @@ static int vmwgfx_pm_notifier(struct not + + switch (val) { + case PM_HIBERNATION_PREPARE: +- case PM_SUSPEND_PREPARE: + ttm_suspend_lock(&dev_priv->reservation_sem); + +- /** ++ /* + * This empties VRAM and unbinds all GMR bindings. + * Buffer contents is moved to swappable memory. + */ + vmw_execbuf_release_pinned_bo(dev_priv); + vmw_resource_evict_all(dev_priv); ++ vmw_release_device_early(dev_priv); + ttm_bo_swapout_all(&dev_priv->bdev); +- ++ vmw_fence_fifo_down(dev_priv->fman); + break; + case PM_POST_HIBERNATION: +- case PM_POST_SUSPEND: + case PM_POST_RESTORE: ++ vmw_fence_fifo_up(dev_priv->fman); + ttm_suspend_unlock(&dev_priv->reservation_sem); + + break; +@@ -1276,20 +1316,13 @@ static int vmwgfx_pm_notifier(struct not + return 0; + } + +-/** +- * These might not be needed with the virtual SVGA device. +- */ +- + static int vmw_pci_suspend(struct pci_dev *pdev, pm_message_t state) + { + struct drm_device *dev = pci_get_drvdata(pdev); + struct vmw_private *dev_priv = vmw_priv(dev); + +- if (dev_priv->num_3d_resources != 0) { +- DRM_INFO("Can't suspend or hibernate " +- "while 3D resources are active.\n"); ++ if (dev_priv->refuse_hibernation) + return -EBUSY; +- } + + pci_save_state(pdev); + pci_disable_device(pdev); +@@ -1321,56 +1354,62 @@ static int vmw_pm_resume(struct device * + return vmw_pci_resume(pdev); + } + +-static int vmw_pm_prepare(struct device *kdev) ++static int vmw_pm_freeze(struct device *kdev) + { + struct pci_dev *pdev = to_pci_dev(kdev); + struct drm_device *dev = pci_get_drvdata(pdev); + struct vmw_private *dev_priv = vmw_priv(dev); + +- /** +- * Release 3d reference held by fbdev and potentially +- * stop fifo. +- */ + dev_priv->suspended = true; + if (dev_priv->enable_fb) +- vmw_3d_resource_dec(dev_priv, true); +- +- if (dev_priv->num_3d_resources != 0) { +- +- DRM_INFO("Can't suspend or hibernate " +- "while 3D resources are active.\n"); ++ vmw_fifo_resource_dec(dev_priv); + ++ if (atomic_read(&dev_priv->num_fifo_resources) != 0) { ++ DRM_ERROR("Can't hibernate while 3D resources are active.\n"); + if (dev_priv->enable_fb) +- vmw_3d_resource_inc(dev_priv, true); ++ vmw_fifo_resource_inc(dev_priv); ++ WARN_ON(vmw_request_device_late(dev_priv)); + dev_priv->suspended = false; + return -EBUSY; + } + ++ if (dev_priv->enable_fb) ++ __vmw_svga_disable(dev_priv); ++ ++ vmw_release_device_late(dev_priv); ++ + return 0; + } + +-static void vmw_pm_complete(struct device *kdev) ++static int vmw_pm_restore(struct device *kdev) + { + struct pci_dev *pdev = to_pci_dev(kdev); + struct drm_device *dev = pci_get_drvdata(pdev); + struct vmw_private *dev_priv = vmw_priv(dev); ++ int ret; + + vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2); + (void) vmw_read(dev_priv, SVGA_REG_ID); + +- /** +- * Reclaim 3d reference held by fbdev and potentially +- * start fifo. +- */ + if (dev_priv->enable_fb) +- vmw_3d_resource_inc(dev_priv, false); ++ vmw_fifo_resource_inc(dev_priv); ++ ++ ret = vmw_request_device(dev_priv); ++ if (ret) ++ return ret; ++ ++ if (dev_priv->enable_fb) ++ __vmw_svga_enable(dev_priv); + + dev_priv->suspended = false; ++ ++ return 0; + } + + static const struct dev_pm_ops vmw_pm_ops = { +- .prepare = vmw_pm_prepare, +- .complete = vmw_pm_complete, ++ .freeze = vmw_pm_freeze, ++ .thaw = vmw_pm_restore, ++ .restore = vmw_pm_restore, + .suspend = vmw_pm_suspend, + .resume = vmw_pm_resume, + }; +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +@@ -484,6 +484,7 @@ struct vmw_private { + + bool stealth; + bool enable_fb; ++ spinlock_t svga_lock; + + /** + * Master management. +@@ -493,9 +494,10 @@ struct vmw_private { + struct vmw_master fbdev_master; + struct notifier_block pm_nb; + bool suspended; ++ bool refuse_hibernation; + + struct mutex release_mutex; +- uint32_t num_3d_resources; ++ atomic_t num_fifo_resources; + + /* + * Replace this with an rwsem as soon as we have down_xx_interruptible() +@@ -587,8 +589,9 @@ static inline uint32_t vmw_read(struct v + return val; + } + +-int vmw_3d_resource_inc(struct vmw_private *dev_priv, bool unhide_svga); +-void vmw_3d_resource_dec(struct vmw_private *dev_priv, bool hide_svga); ++extern void vmw_svga_enable(struct vmw_private *dev_priv); ++extern void vmw_svga_disable(struct vmw_private *dev_priv); ++ + + /** + * GMR utilities - vmwgfx_gmr.c +@@ -1116,4 +1119,14 @@ static inline struct ttm_mem_global *vmw + { + return (struct ttm_mem_global *) dev_priv->mem_global_ref.object; + } ++ ++static inline void vmw_fifo_resource_inc(struct vmw_private *dev_priv) ++{ ++ atomic_inc(&dev_priv->num_fifo_resources); ++} ++ ++static inline void vmw_fifo_resource_dec(struct vmw_private *dev_priv) ++{ ++ atomic_dec(&dev_priv->num_fifo_resources); ++} + #endif +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c +@@ -596,7 +596,10 @@ int vmw_fb_off(struct vmw_private *vmw_p + + info = vmw_priv->fb_info; + par = info->par; ++ if (!par->bo_ptr) ++ return 0; + ++ vmw_kms_save_vga(vmw_priv); + spin_lock_irqsave(&par->dirty.lock, flags); + par->dirty.active = false; + spin_unlock_irqrestore(&par->dirty.lock, flags); +@@ -648,6 +651,7 @@ int vmw_fb_on(struct vmw_private *vmw_pr + spin_lock_irqsave(&par->dirty.lock, flags); + par->dirty.active = true; + spin_unlock_irqrestore(&par->dirty.lock, flags); ++ vmw_kms_restore_vga(vmw_priv); + + err_no_buffer: + vmw_fb_set_par(info); +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c +@@ -98,7 +98,6 @@ int vmw_fifo_init(struct vmw_private *de + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + uint32_t max; + uint32_t min; +- uint32_t dummy; + + fifo->static_buffer_size = VMWGFX_FIFO_STATIC_SIZE; + fifo->static_buffer = vmalloc(fifo->static_buffer_size); +@@ -112,10 +111,6 @@ int vmw_fifo_init(struct vmw_private *de + mutex_init(&fifo->fifo_mutex); + init_rwsem(&fifo->rwsem); + +- /* +- * Allow mapping the first page read-only to user-space. +- */ +- + DRM_INFO("width %d\n", vmw_read(dev_priv, SVGA_REG_WIDTH)); + DRM_INFO("height %d\n", vmw_read(dev_priv, SVGA_REG_HEIGHT)); + DRM_INFO("bpp %d\n", vmw_read(dev_priv, SVGA_REG_BITS_PER_PIXEL)); +@@ -123,7 +118,9 @@ int vmw_fifo_init(struct vmw_private *de + dev_priv->enable_state = vmw_read(dev_priv, SVGA_REG_ENABLE); + dev_priv->config_done_state = vmw_read(dev_priv, SVGA_REG_CONFIG_DONE); + dev_priv->traces_state = vmw_read(dev_priv, SVGA_REG_TRACES); +- vmw_write(dev_priv, SVGA_REG_ENABLE, 1); ++ ++ vmw_write(dev_priv, SVGA_REG_ENABLE, SVGA_REG_ENABLE_ENABLE_HIDE); ++ vmw_write(dev_priv, SVGA_REG_TRACES, 0); + + min = 4; + if (dev_priv->capabilities & SVGA_CAP_EXTENDED_FIFO) +@@ -155,7 +152,8 @@ int vmw_fifo_init(struct vmw_private *de + atomic_set(&dev_priv->marker_seq, dev_priv->last_read_seqno); + iowrite32(dev_priv->last_read_seqno, fifo_mem + SVGA_FIFO_FENCE); + vmw_marker_queue_init(&fifo->marker_queue); +- return vmw_fifo_send_fence(dev_priv, &dummy); ++ ++ return 0; + } + + void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason) +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c +@@ -280,6 +280,7 @@ static int vmw_ldu_crtc_set_config(struc + } + + vmw_fb_off(dev_priv); ++ vmw_svga_enable(dev_priv); + + crtc->primary->fb = fb; + encoder->crtc = crtc; +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c +@@ -574,7 +574,7 @@ void vmw_mob_unbind(struct vmw_private * + vmw_fence_single_bo(bo, NULL); + ttm_bo_unreserve(bo); + } +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + } + + /* +@@ -627,7 +627,7 @@ int vmw_mob_bind(struct vmw_private *dev + mob->pt_level += VMW_MOBFMT_PTDEPTH_1 - SVGA3D_MOBFMT_PTDEPTH_1; + } + +- (void) vmw_3d_resource_inc(dev_priv, false); ++ vmw_fifo_resource_inc(dev_priv); + + cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); + if (unlikely(cmd == NULL)) { +@@ -648,7 +648,7 @@ int vmw_mob_bind(struct vmw_private *dev + return 0; + + out_no_cmd_space: +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + if (pt_set_up) + ttm_bo_unref(&mob->pt_bo); + +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c +@@ -332,6 +332,7 @@ static int vmw_sou_crtc_set_config(struc + } + + vmw_fb_off(dev_priv); ++ vmw_svga_enable(dev_priv); + + if (mode->hdisplay != crtc->mode.hdisplay || + mode->vdisplay != crtc->mode.vdisplay) { +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c +@@ -165,7 +165,7 @@ static int vmw_gb_shader_create(struct v + cmd->body.type = shader->type; + cmd->body.sizeInBytes = shader->size; + vmw_fifo_commit(dev_priv, sizeof(*cmd)); +- (void) vmw_3d_resource_inc(dev_priv, false); ++ vmw_fifo_resource_inc(dev_priv); + + return 0; + +@@ -275,7 +275,7 @@ static int vmw_gb_shader_destroy(struct + vmw_fifo_commit(dev_priv, sizeof(*cmd)); + mutex_unlock(&dev_priv->binding_mutex); + vmw_resource_release_id(res); +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + + return 0; + } +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c +@@ -340,7 +340,7 @@ static void vmw_hw_surface_destroy(struc + dev_priv->used_memory_size -= res->backup_size; + mutex_unlock(&dev_priv->cmdbuf_mutex); + } +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + } + + /** +@@ -576,14 +576,14 @@ static int vmw_surface_init(struct vmw_p + + BUG_ON(res_free == NULL); + if (!dev_priv->has_mob) +- (void) vmw_3d_resource_inc(dev_priv, false); ++ vmw_fifo_resource_inc(dev_priv); + ret = vmw_resource_init(dev_priv, res, true, res_free, + (dev_priv->has_mob) ? &vmw_gb_surface_func : + &vmw_legacy_surface_func); + + if (unlikely(ret != 0)) { + if (!dev_priv->has_mob) +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + res_free(res); + return ret; + } +@@ -1028,7 +1028,7 @@ static int vmw_gb_surface_create(struct + if (likely(res->id != -1)) + return 0; + +- (void) vmw_3d_resource_inc(dev_priv, false); ++ vmw_fifo_resource_inc(dev_priv); + ret = vmw_resource_alloc_id(res); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed to allocate a surface id.\n"); +@@ -1068,7 +1068,7 @@ static int vmw_gb_surface_create(struct + out_no_fifo: + vmw_resource_release_id(res); + out_no_id: +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + return ret; + } + +@@ -1213,7 +1213,7 @@ static int vmw_gb_surface_destroy(struct + vmw_fifo_commit(dev_priv, sizeof(*cmd)); + mutex_unlock(&dev_priv->binding_mutex); + vmw_resource_release_id(res); +- vmw_3d_resource_dec(dev_priv, false); ++ vmw_fifo_resource_dec(dev_priv); + + return 0; + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/0002-drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch new/patches.drivers/0002-drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch --- old/patches.drivers/0002-drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/0002-drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch 2015-09-25 10:21:54.000000000 +0200 @@ -0,0 +1,57 @@ +From aa3469ce7afd86a670d22375a64f1b5a06707725 Mon Sep 17 00:00:00 2001 +From: Thomas Hellstrom <[email protected]> +Date: Thu, 27 Aug 2015 10:06:24 -0700 +Subject: [PATCH] drm/vmwgfx: Allow dropped masters render-node like access on legacy nodes v2 +Git-commit: aa3469ce7afd86a670d22375a64f1b5a06707725 +Patch-mainline: v4.3-rc1 +References: boo#934266 + +Applications like gnome-shell may try to render after dropping master +privileges. Since the driver should now be safe against this scenario, +allow those applications to use their legacy node like a render node. + +V2: Add missing return statement. + +Signed-off-by: Thomas Hellstrom <[email protected]> +Reviewed-by: Sinclair Yeh <[email protected]> +Acked-by: Takashi Iwai <[email protected]> + +--- + drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 7 ++++++- + drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 6 ++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +@@ -993,10 +993,15 @@ static struct vmw_master *vmw_master_che + } + + /* +- * Check if we were previously master, but now dropped. ++ * Check if we were previously master, but now dropped. In that ++ * case, allow at least render node functionality. + */ + if (vmw_fp->locked_master) { + mutex_unlock(&dev->master_mutex); ++ ++ if (flags & DRM_RENDER_ALLOW) ++ return NULL; ++ + DRM_ERROR("Dropped master trying to access ioctl that " + "requires authentication.\n"); + return ERR_PTR(-EACCES); +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c +@@ -906,6 +906,12 @@ vmw_surface_handle_reference(struct vmw_ + "surface reference.\n"); + return -EACCES; + } ++ if (ACCESS_ONCE(vmw_fpriv(file_priv)->locked_master)) { ++ DRM_ERROR("Locked master refused legacy " ++ "surface reference.\n"); ++ return -EACCES; ++ } ++ + handle = u_handle; + } + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/ALSA-hda-Disable-power_save_node-for-Thinkpads new/patches.drivers/ALSA-hda-Disable-power_save_node-for-Thinkpads --- old/patches.drivers/ALSA-hda-Disable-power_save_node-for-Thinkpads 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/ALSA-hda-Disable-power_save_node-for-Thinkpads 2015-09-25 10:21:54.000000000 +0200 @@ -0,0 +1,82 @@ +From 7f57d803ee03730d570dc59a9e3e4842b58dd5cc Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <[email protected]> +Date: Thu, 24 Sep 2015 17:36:51 +0200 +Subject: [PATCH] ALSA: hda - Disable power_save_node for Thinkpads +Git-commit: 7f57d803ee03730d570dc59a9e3e4842b58dd5cc +Patch-mainline: 4.3-rc3 +References: bsc#943982 + +Lenovo Thinkpads with recent Realtek codecs seem suffering from click +noises at power transition since the introduction of widget power +saving in 4.1 kernel. Although this might be solved by some delays in +appropriate points, as a quick workaround, just disable the +power_save_node feature for now. The gain it gives is relatively +small, and this makes the situation back to pre 4.1 time. + +This patch ended up with a bit more code changes than usual because +the existing fixup for Thinkpads is highly chained. Instead of adding +yet another chain, combine a few of them into a single fixup entry, as +a gratis cleanup. + +Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=943982 +Cc: <[email protected]> # v4.1+ +Signed-off-by: Takashi Iwai <[email protected]> + +--- + sound/pci/hda/patch_realtek.c | 31 +++++++++++++++++++------------ + 1 file changed, 19 insertions(+), 12 deletions(-) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -4188,6 +4188,24 @@ static void alc_fixup_disable_aamix(stru + } + } + ++/* fixup for Thinkpad docks: add dock pins, avoid HP parser fixup */ ++static void alc_fixup_tpt440_dock(struct hda_codec *codec, ++ const struct hda_fixup *fix, int action) ++{ ++ static const struct hda_pintbl pincfgs[] = { ++ { 0x16, 0x21211010 }, /* dock headphone */ ++ { 0x19, 0x21a11010 }, /* dock mic */ ++ { } ++ }; ++ struct alc_spec *spec = codec->spec; ++ ++ if (action == HDA_FIXUP_ACT_PRE_PROBE) { ++ spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP; ++ codec->power_save_node = 0; /* avoid click noises */ ++ snd_hda_apply_pincfgs(codec, pincfgs); ++ } ++} ++ + static void alc_shutup_dell_xps13(struct hda_codec *codec) + { + struct alc_spec *spec = codec->spec; +@@ -4562,7 +4580,6 @@ enum { + ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC, + ALC293_FIXUP_DELL1_MIC_NO_PRESENCE, + ALC292_FIXUP_TPT440_DOCK, +- ALC292_FIXUP_TPT440_DOCK2, + ALC283_FIXUP_BXBT2807_MIC, + ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED, + ALC282_FIXUP_ASPIRE_V5_PINS, +@@ -5029,17 +5046,7 @@ static const struct hda_fixup alc269_fix + }, + [ALC292_FIXUP_TPT440_DOCK] = { + .type = HDA_FIXUP_FUNC, +- .v.func = alc269_fixup_pincfg_no_hp_to_lineout, +- .chained = true, +- .chain_id = ALC292_FIXUP_TPT440_DOCK2 +- }, +- [ALC292_FIXUP_TPT440_DOCK2] = { +- .type = HDA_FIXUP_PINS, +- .v.pins = (const struct hda_pintbl[]) { +- { 0x16, 0x21211010 }, /* dock headphone */ +- { 0x19, 0x21a11010 }, /* dock mic */ +- { } +- }, ++ .v.func = alc_fixup_tpt440_dock, + .chained = true, + .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST + }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/bcache-fix-writeback-thread-incomplete-stripes-starvation.patch new/patches.drivers/bcache-fix-writeback-thread-incomplete-stripes-starvation.patch --- old/patches.drivers/bcache-fix-writeback-thread-incomplete-stripes-starvation.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/bcache-fix-writeback-thread-incomplete-stripes-starvation.patch 2015-09-25 10:21:54.000000000 +0200 @@ -0,0 +1,51 @@ +From: Vojtech Pavlik <[email protected]> +To: Kent Overstreet <[email protected]> +Cc: [email protected], [email protected], Kent Overstreet <[email protected]>, Emmanuel Florac <[email protected]>, Jiri Kosina <[email protected]>, Jens Axboe <[email protected]> +Subject: [PATCH] bcache: Fix writeback_thread never writing back incomplete stripes. +Patch-mainline: not yet, submitted + +Fix writeback_thread never finishing writing back all dirty data in bcache when +partial_stripes_expensive is set, and spinning, consuming 100% of CPU instead. + +Signed-off-by: Vojtech Pavlik <[email protected]> +--- + +This is a fix for the current upstream bcache, not the devel branch. + +If partial_stripes_expensive is set for a cache set, then writeback_thread +always attempts to write full stripes out back to the backing device first. +However, since it does that based on a bitmap and not a simple linear +search, like the rest of the code of refill_dirty(), it changes the +last_scanned pointer so that never points to 'end'. refill_dirty() then +never tries to scan from 'start', resulting in the writeback_thread +looping, consuming 100% of CPU, but never making progress in writing out +the incomplete dirty stripes in the cache. + +Scanning the tree after not finding enough full stripes fixes the issue. + +Incomplete dirty stripes are written to the backing device, the device +eventually reaches a clean state if there is nothing dirtying data and +writeback_thread sleeps. This also fixes the problem of the cache device +not being possible to detach in the partial_stripes_expensive scenario. + +It may be more efficient to separate the last_scanned field for normal and +stripe scans instead. + + drivers/md/bcache/writeback.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c +index f1986bc..6f8b81d 100644 +--- a/drivers/md/bcache/writeback.c ++++ b/drivers/md/bcache/writeback.c +@@ -382,6 +382,7 @@ static bool refill_dirty(struct cached_dev *dc) + refill_full_stripes(dc); + if (array_freelist_empty(&buf->freelist)) + return false; ++ bch_refill_keybuf(dc->disk.c, buf, &end, dirty_pred); + } + + if (bkey_cmp(&buf->last_scanned, &end) >= 0) { +-- +2.1.4 + ++++++ patches.fixes.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/0001-NFSv4-When-returning-a-delegation-don-t-reclaim-an-i.patch new/patches.fixes/0001-NFSv4-When-returning-a-delegation-don-t-reclaim-an-i.patch --- old/patches.fixes/0001-NFSv4-When-returning-a-delegation-don-t-reclaim-an-i.patch 2015-08-28 12:59:34.000000000 +0200 +++ new/patches.fixes/0001-NFSv4-When-returning-a-delegation-don-t-reclaim-an-i.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,46 +0,0 @@ -From: NeilBrown <[email protected]> -Date: Wed, 24 Jun 2015 12:56:20 +1000 -Subject: [PATCH] NFSv4: When returning a delegation, don't reclaim an - incompatible open mode. -Patch-mainline: not yet -References: bnc#934202 - -It is possible to have an active open with one mode, and a delegation -for the same file with a different mode. -In particular, a WR_ONLY open and an RD_ONLY delegation. - -When returning the delegation, we currently try to claim opens for -every open type (n_rdwr, n_rdonly, n_wronly). As there is no harm -in claiming an open for a mode that we already have, this is often -simplest. - -However if the delegation only provides a subset of the modes that we -currently have open, this will produce an error from the server. e.g. - -NFS: nfs4_handle_delegation_recall_error: unhandled error -13 - -So when claiming open modes prior to returning a delegation, skip the -open request if the mode is not covered by the delegation - the open_stateid -must already cover that mode, so there is nothing to do. - -Signed-off-by: NeilBrown <[email protected]> ---- - fs/nfs/nfs4proc.c | 7 +++++++ - 1 file changed, 7 insertions(+) - ---- a/fs/nfs/nfs4proc.c -+++ b/fs/nfs/nfs4proc.c -@@ -1553,6 +1553,13 @@ static int nfs4_open_recover_helper(stru - struct nfs4_state *newstate; - int ret; - -+ if ((opendata->o_arg.claim == NFS4_OPEN_CLAIM_DELEGATE_CUR || -+ opendata->o_arg.claim == NFS4_OPEN_CLAIM_DELEG_CUR_FH) && -+ (opendata->o_arg.u.delegation_type & fmode) != fmode) -+ /* This mode can't have been delegated, so we must have -+ * a valid open_stateid to cover it - not need to reclaim. -+ */ -+ return 0; - opendata->o_arg.open_flags = 0; - opendata->o_arg.fmode = fmode; - opendata->o_arg.share_access = nfs4_map_atomic_open_share( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/0001-NFSv4-do-not-accept-an-incompatible-delegation.patch new/patches.fixes/0001-NFSv4-do-not-accept-an-incompatible-delegation.patch --- old/patches.fixes/0001-NFSv4-do-not-accept-an-incompatible-delegation.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/0001-NFSv4-do-not-accept-an-incompatible-delegation.patch 2015-09-14 17:37:27.000000000 +0200 @@ -0,0 +1,56 @@ +From: Neil Brown <[email protected]> +Date: Mon, 22 Jun 2015 15:13:21 +1000 +Subject: [PATCH] NFSv4 - do not accept an incompatible delegation. +References: bsc#934202 +Patch-mainline: not yet + +When opening a file, nfs _nfs4_do_open() will return any +incompatible delegation, meaning if the delegation held for +that file does not give all the permissions required, it is +returned. +This is because various places assume that the current delegation +provides all necessary access. + +However when a delegation is received, it is not validated in the +same way so it is possible to, for example, hold a read-only +delegation while the file is open write-only. +When that delegation is recalled, the NFS client will try to +reclaim the write-only open, and that will fail. + +So when considering a new delegation, reject it if it is incompatible +with any open. + +Signed-off-by: NeilBrown <[email protected]> +URL: https://bugzilla.suse.com/show_bug.cgi?id=934202 +--- + fs/nfs/delegation.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +--- a/fs/nfs/delegation.c ++++ b/fs/nfs/delegation.c +@@ -377,6 +377,25 @@ int nfs_inode_set_delegation(struct inod + old_delegation, clp); + if (freeme == NULL) + goto out; ++ } else { ++ /* Don't accept an incompatible delegation */ ++ int incompatible = 0; ++ struct nfs_inode *nfsi = NFS_I(inode); ++ struct nfs4_state *state; ++ ++ spin_lock(&inode->i_lock); ++ list_for_each_entry(state, &nfsi->open_states, inode_states) { ++ if ((state->state & delegation->type) != state->state) { ++ incompatible = 1; ++ break; ++ } ++ } ++ spin_unlock(&inode->i_lock); ++ if (incompatible) { ++ freeme = delegation; ++ delegation = NULL; ++ goto out; ++ } + } + list_add_tail_rcu(&delegation->super_list, &server->delegations); + rcu_assign_pointer(nfsi->delegation, delegation); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/btrfs-fix-stale-dir-entries-after-unlink-inode-eviction-and-fsync new/patches.fixes/btrfs-fix-stale-dir-entries-after-unlink-inode-eviction-and-fsync --- old/patches.fixes/btrfs-fix-stale-dir-entries-after-unlink-inode-eviction-and-fsync 2015-08-28 12:59:34.000000000 +0200 +++ new/patches.fixes/btrfs-fix-stale-dir-entries-after-unlink-inode-eviction-and-fsync 2015-09-14 17:37:27.000000000 +0200 @@ -104,7 +104,7 @@ generic/098 4s ... - output mismatch (see /home/fdmanana/git/hub/xfstests/results//generic/098.out.bad) # --- tests/generic/098.out 2015-07-23 18:01:12.616175932 +0100 # +++ /home/fdmanana/git/hub/xfstests/results//generic/098.out.bad 2015-07-23 18:04:58.924138308 +0100 - @@ -1,3 +1,6 @@ +# @@ -1,3 +1,6 @@ QA output created by 098 Entries in testdir: +bar diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip-take-two.patch new/patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip-take-two.patch --- old/patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip-take-two.patch 2015-08-28 12:59:34.000000000 +0200 +++ new/patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip-take-two.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -From: Chris Wilson <[email protected]> -Date: Mon, 27 Apr 2015 13:41:15 +0100 -Subject: drm/i915: Ensure cache flushes prior to doing CS flips -- take two -Patch-mainline: not yet -References: bnc#931300 - -Synchronising to an object active on the same ring is a no-op, for the -benefit of execbuffer scheduler. However, for CS flips this means that -we can forgo checking whether the last write request of the object is -actually queued and more importantly whether the cache flush for the -write was emitted. - -Signed-off-by: Chris Wilson <[email protected]> -Signed-off-by: Daniel Vetter <[email protected]> -Signed-off-by: Jiri Slaby <[email protected]> ---- - drivers/gpu/drm/i915/intel_display.c | 7 +++++++ - 1 file changed, 7 insertions(+) - ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -10022,6 +10022,13 @@ static int intel_queue_mmio_flip(struct - uint32_t flags) - { - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -+ int ret; -+ -+ if (obj->last_write_req) { -+ ret = i915_gem_check_olr(obj->last_write_req); -+ if (ret) -+ return ret; -+ } - - i915_gem_request_assign(&intel_crtc->mmio_flip.req, - obj->last_write_req); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip.patch new/patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip.patch --- old/patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip.patch 2015-08-28 12:59:34.000000000 +0200 +++ new/patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,40 +0,0 @@ -From: Chris Wilson <[email protected]> -Date: Mon, 27 Apr 2015 13:41:15 +0100 -Subject: drm/i915: Ensure cache flushes prior to doing CS flips -Patch-mainline: 4.2-rc1 -Git-commit: d94b5030d26b4f45510a092262bc2b542a00bd7c -References: bnc#931300 - -Synchronising to an object active on the same ring is a no-op, for the -benefit of execbuffer scheduler. However, for CS flips this means that -we can forgo checking whether the last write request of the object is -actually queued and more importantly whether the cache flush for the -write was emitted. - -Signed-off-by: Chris Wilson <[email protected]> -Signed-off-by: Daniel Vetter <[email protected]> -Signed-off-by: Jiri Slaby <[email protected]> ---- - drivers/gpu/drm/i915/intel_display.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index c890e03939fa..3c8801cecd3f 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -11040,6 +11040,12 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, - i915_gem_request_assign(&work->flip_queued_req, - obj->last_write_req); - } else { -+ if (obj->last_write_req) { -+ ret = i915_gem_check_olr(obj->last_write_req); -+ if (ret) -+ goto cleanup_unpin; -+ } -+ - ret = dev_priv->display.queue_flip(dev, crtc, fb, obj, ring, - page_flip_flags); - if (ret) --- -2.4.3 - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/leds-lp55xx-Correct-Kconfig-dependency-for-f-w-user- new/patches.fixes/leds-lp55xx-Correct-Kconfig-dependency-for-f-w-user- --- old/patches.fixes/leds-lp55xx-Correct-Kconfig-dependency-for-f-w-user- 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/leds-lp55xx-Correct-Kconfig-dependency-for-f-w-user- 2015-09-14 17:37:27.000000000 +0200 @@ -0,0 +1,38 @@ +From: Takashi Iwai <[email protected]> +Date: Mon, 7 Sep 2015 14:09:22 +0200 +Subject: [PATCH] leds:lp55xx: Correct Kconfig dependency for f/w user helper +Patch-mainline: Submitted, Mon, 7 Sep 2015, LKML +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +References: boo#944661 + +The commit [b67893206fc0: leds:lp55xx: fix firmware loading error] +tries to address the firmware file handling with user helper, but it +sets a wrong Kconfig CONFIG_FW_LOADER_USER_HELPER_FALLBACK. Since the +wrong option was enabled, the system got a regression -- it suffers +from the unexpected long delays for non-present firmware files. + +This patch corrects the Kconfig dependency to the right one, +CONFIG_FW_LOADER_USER_HELPER. This doesn't change the fallback +behavior but only enables UMH when needed. + +Bugzilla: https://bugzilla.opensuse.org/show_bug.cgi?id=944661 +Fixes: b67893206fc0 ('leds:lp55xx: fix firmware loading error') +Cc: <[email protected]> # v4.2+ +Signed-off-by: Takashi Iwai <[email protected]> +Acked-by: Takashi Iwai <[email protected]> + +--- + drivers/leds/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/leds/Kconfig ++++ b/drivers/leds/Kconfig +@@ -229,7 +229,7 @@ config LEDS_LP55XX_COMMON + tristate "Common Driver for TI/National LP5521/5523/55231/5562/8501" + depends on LEDS_LP5521 || LEDS_LP5523 || LEDS_LP5562 || LEDS_LP8501 + select FW_LOADER +- select FW_LOADER_USER_HELPER_FALLBACK ++ select FW_LOADER_USER_HELPER + help + This option supports common operations for LP5521/5523/55231/5562/8501 + devices. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch new/patches.fixes/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch --- old/patches.fixes/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch 2015-08-28 12:59:34.000000000 +0200 +++ new/patches.fixes/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch 2015-09-14 17:37:27.000000000 +0200 @@ -1,9 +1,8 @@ From: Haibo Chen <[email protected]> Date: Tue, 25 Aug 2015 10:02:11 +0800 Subject: mmc: sdhci: fix dma memory leak in sdhci_pre_req() -Patch-mainline: Queued in subsystem maintainer repository +Patch-mainline: v4.3-rc1 Git-commit: d31911b9374a76560d2c8ea4aa6ce5781621e81d -Git-repo: git://git.linaro.org/people/ulf.hansson/mmc.git#next References: bnc#934531 Currently one mrq->data maybe execute dma_map_sg() twice @@ -19,24 +18,22 @@ This patch use another method to map the dma memory for the mrq->data which can fix this dma memory leak issue. -[js] add sg_count to mmc_data as happenned in 208489032bdd8d (mmc: - mediatek: Add Mediatek MMC driver). - Fixes: 348487cb28e6 ("mmc: sdhci: use pipeline mmc requests to improve performance") Reported-and-tested-by: Jiri Slaby <[email protected]> Signed-off-by: Haibo Chen <[email protected]> Signed-off-by: Ulf Hansson <[email protected]> Signed-off-by: Jiri Slaby <[email protected]> --- - drivers/mmc/host/sdhci.c | 67 +++++++++++++++++------------------------------ - drivers/mmc/host/sdhci.h | 8 ++--- - include/linux/mmc/core.h | 1 - 3 files changed, 30 insertions(+), 46 deletions(-) + drivers/mmc/host/sdhci.c | 67 ++++++++++++++++++------------------------------ + drivers/mmc/host/sdhci.h | 8 +++--- + 2 files changed, 29 insertions(+), 46 deletions(-) +diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c +index 0f1a8876e3b1..31678b55b5ec 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c -@@ -55,8 +55,7 @@ static int sdhci_execute_tuning(struct m - static void sdhci_tuning_timer(unsigned long data); +@@ -54,8 +54,7 @@ static void sdhci_finish_command(struct sdhci_host *); + static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode); static void sdhci_enable_preset_value(struct sdhci_host *host, bool enable); static int sdhci_pre_dma_transfer(struct sdhci_host *host, - struct mmc_data *data, @@ -45,7 +42,7 @@ static int sdhci_do_get_cd(struct sdhci_host *host); #ifdef CONFIG_PM -@@ -510,7 +509,7 @@ static int sdhci_adma_table_pre(struct s +@@ -495,7 +494,7 @@ static int sdhci_adma_table_pre(struct sdhci_host *host, goto fail; BUG_ON(host->align_addr & host->align_mask); @@ -54,7 +51,7 @@ if (host->sg_count < 0) goto unmap_align; -@@ -649,9 +648,11 @@ static void sdhci_adma_table_post(struct +@@ -634,9 +633,11 @@ static void sdhci_adma_table_post(struct sdhci_host *host, } } @@ -67,7 +64,7 @@ } static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd) -@@ -847,7 +848,7 @@ static void sdhci_prepare_data(struct sd +@@ -832,7 +833,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) } else { int sg_cnt; @@ -76,7 +73,7 @@ if (sg_cnt <= 0) { /* * This only happens when someone fed -@@ -963,11 +964,13 @@ static void sdhci_finish_data(struct sdh +@@ -948,11 +949,13 @@ static void sdhci_finish_data(struct sdhci_host *host) if (host->flags & SDHCI_USE_ADMA) sdhci_adma_table_post(host, data); else { @@ -91,7 +88,7 @@ } } -@@ -2129,49 +2132,36 @@ static void sdhci_post_req(struct mmc_ho +@@ -2116,49 +2119,36 @@ static void sdhci_post_req(struct mmc_host *mmc, struct mmc_request *mrq, struct mmc_data *data = mrq->data; if (host->flags & SDHCI_REQ_USE_DMA) { @@ -155,7 +152,7 @@ return sg_count; } -@@ -2181,16 +2171,10 @@ static void sdhci_pre_req(struct mmc_hos +@@ -2168,16 +2158,10 @@ static void sdhci_pre_req(struct mmc_host *mmc, struct mmc_request *mrq, { struct sdhci_host *host = mmc_priv(mmc); @@ -174,7 +171,7 @@ } static void sdhci_card_event(struct mmc_host *mmc) -@@ -3088,7 +3072,6 @@ int sdhci_add_host(struct sdhci_host *ho +@@ -3049,7 +3033,6 @@ int sdhci_add_host(struct sdhci_host *host) host->max_clk = host->ops->get_max_clock(host); } @@ -182,6 +179,8 @@ /* * In case of Host Controller v3.00, find out whether clock * multiplier is supported. +diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h +index 67046ca0c1f0..7c02ff46c8ac 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -309,9 +309,10 @@ struct sdhci_adma2_64_desc { @@ -198,21 +197,14 @@ }; struct sdhci_host { -@@ -506,7 +507,6 @@ struct sdhci_host { +@@ -505,7 +506,6 @@ struct sdhci_host { + unsigned int tuning_mode; /* Re-tuning mode supported by host */ #define SDHCI_TUNING_MODE_1 0 - struct timer_list tuning_timer; /* Timer for tuning */ - struct sdhci_host_next next_data; unsigned long private[0] ____cacheline_aligned; }; ---- a/include/linux/mmc/core.h -+++ b/include/linux/mmc/core.h -@@ -121,6 +121,7 @@ struct mmc_data { - struct mmc_request *mrq; /* associated request */ - - unsigned int sg_len; /* size of scatter list */ -+ int sg_count; /* mapped sg entries */ - struct scatterlist *sg; /* I/O scatter list */ - s32 host_cookie; /* host private data */ - }; +-- +2.5.0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/workqueue-Make-flush_workqueue-available-again-to-no.patch new/patches.fixes/workqueue-Make-flush_workqueue-available-again-to-no.patch --- old/patches.fixes/workqueue-Make-flush_workqueue-available-again-to-no.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/workqueue-Make-flush_workqueue-available-again-to-no.patch 2015-09-14 17:37:27.000000000 +0200 @@ -0,0 +1,34 @@ +From: Tim Gardner <[email protected]> +Date: Tue, 4 Aug 2015 11:26:04 -0600 +Subject: workqueue: Make flush_workqueue() available again to non GPL modules +Patch-mainline: v4.3-rc1 +Git-commit: 1dadafa86a779884f14a6e7a3ddde1a57b0a0a65 + +Commit 37b1ef31a568fc02e53587620226e5f3c66454c8 ("workqueue: move +flush_scheduled_work() to workqueue.h") moved the exported non GPL +flush_scheduled_work() from a function to an inline wrapper. +Unfortunately, it directly calls flush_workqueue() which is a GPL function. +This has the effect of changing the licensing requirement for this function +and makes it unavailable to non GPL modules. + +See commit ad7b1f841f8a54c6d61ff181451f55b68175e15a ("workqueue: Make +schedule_work() available again to non GPL modules") for precedent. + +Signed-off-by: Tim Gardner <[email protected]> +Signed-off-by: Tejun Heo <[email protected]> +Signed-off-by: Jiri Slaby <[email protected]> +--- + kernel/workqueue.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kernel/workqueue.c ++++ b/kernel/workqueue.c +@@ -2614,7 +2614,7 @@ void flush_workqueue(struct workqueue_st + out_unlock: + mutex_unlock(&wq->mutex); + } +-EXPORT_SYMBOL_GPL(flush_workqueue); ++EXPORT_SYMBOL(flush_workqueue); + + /** + * drain_workqueue - drain a workqueue ++++++ patches.kernel.org.tar.bz2 ++++++ ++++ 33148 lines of diff (skipped) ++++++ patches.suse.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/8250-sysrq-ctrl_o.patch new/patches.suse/8250-sysrq-ctrl_o.patch --- old/patches.suse/8250-sysrq-ctrl_o.patch 2015-08-28 11:17:01.000000000 +0200 +++ new/patches.suse/8250-sysrq-ctrl_o.patch 2015-09-22 17:17:36.000000000 +0200 @@ -113,14 +113,14 @@ --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -102,6 +102,8 @@ static unsigned int skip_txen_test; /* f - #define CONFIG_SERIAL_MANY_PORTS 1 - #endif + #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) + +#define arch_8250_sysrq_via_ctrl_o(a,b) 0 + + #include <asm/serial.h> /* - * HUB6 is always on. This will be removed once the header - * files have been cleaned. + * SERIAL_PORT_DFNS tells us about built-in ports that have no @@ -1423,7 +1425,11 @@ receive_chars(struct uart_8250_port *up, do { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-fix-hang-during-inode-eviction-due-to-concurre.patch new/patches.suse/btrfs-fix-hang-during-inode-eviction-due-to-concurre.patch --- old/patches.suse/btrfs-fix-hang-during-inode-eviction-due-to-concurre.patch 2015-08-28 11:17:01.000000000 +0200 +++ new/patches.suse/btrfs-fix-hang-during-inode-eviction-due-to-concurre.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,164 +0,0 @@ -From: Filipe Manana <[email protected]> -Date: Tue, 26 May 2015 00:55:42 +0100 -Patch-mainline: 4.2-rc1 -Git-commit: 6ca0709756710c47ec604dd08b9fc45929d36390 -References: bnc#937403 -Subject: [PATCH] Btrfs: fix hang during inode eviction due to concurrent - readahead - -Zygo Blaxell and other users have reported occasional hangs while an -inode is being evicted, leading to traces like the following: - -[ 5281.972322] INFO: task rm:20488 blocked for more than 120 seconds. -[ 5281.973836] Not tainted 4.0.0-rc5-btrfs-next-9+ #2 -[ 5281.974818] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. -[ 5281.976364] rm D ffff8800724cfc38 0 20488 7747 0x00000000 -[ 5281.977506] ffff8800724cfc38 ffff8800724cfc38 ffff880065da5c50 0000000000000001 -[ 5281.978461] ffff8800724cffd8 ffff8801540a5f50 0000000000000008 ffff8801540a5f78 -[ 5281.979541] ffff8801540a5f50 ffff8800724cfc58 ffffffff8143107e 0000000000000123 -[ 5281.981396] Call Trace: -[ 5281.982066] [<ffffffff8143107e>] schedule+0x74/0x83 -[ 5281.983341] [<ffffffffa03b33cf>] wait_on_state+0xac/0xcd [btrfs] -[ 5281.985127] [<ffffffff81075cd6>] ? signal_pending_state+0x31/0x31 -[ 5281.986715] [<ffffffffa03b4b71>] wait_extent_bit.constprop.32+0x7c/0xde [btrfs] -[ 5281.988680] [<ffffffffa03b540b>] lock_extent_bits+0x5d/0x88 [btrfs] -[ 5281.990200] [<ffffffffa03a621d>] btrfs_evict_inode+0x24e/0x5be [btrfs] -[ 5281.991781] [<ffffffff8116964d>] evict+0xa0/0x148 -[ 5281.992735] [<ffffffff8116a43d>] iput+0x18f/0x1e5 -[ 5281.993796] [<ffffffff81160d4a>] do_unlinkat+0x15b/0x1fa -[ 5281.994806] [<ffffffff81435b54>] ? ret_from_sys_call+0x1d/0x58 -[ 5281.996120] [<ffffffff8107d314>] ? trace_hardirqs_on_caller+0x18f/0x1ab -[ 5281.997562] [<ffffffff8123960b>] ? trace_hardirqs_on_thunk+0x3a/0x3f -[ 5281.998815] [<ffffffff81161a16>] SyS_unlinkat+0x29/0x2b -[ 5281.999920] [<ffffffff81435b32>] system_call_fastpath+0x12/0x17 -[ 5282.001299] 1 lock held by rm/20488: -[ 5282.002066] #0: (sb_writers#12){.+.+.+}, at: [<ffffffff8116dd81>] mnt_want_write+0x24/0x4b - -This happens when we have readahead, which calls readpages(), happening -right before the inode eviction handler is invoked. So the reason is -essentially: - -1) readpages() is called while a reference on the inode is held, so - eviction can not be triggered before readpages() returns. It also - locks one or more ranges in the inode's io_tree (which is done at - extent_io.c:__do_contiguous_readpages()); - -2) readpages() submits several read bios, all with an end io callback - that runs extent_io.c:end_bio_extent_readpage() and that is executed - by other task when a bio finishes, corresponding to a work queue - (fs_info->end_io_workers) worker kthread. This callback unlocks - the ranges in the inode's io_tree that were previously locked in - step 1; - -3) readpages() returns, the reference on the inode is dropped; - -4) One or more of the read bios previously submitted are still not - complete (their end io callback was not yet invoked or has not - yet finished execution); - -5) Inode eviction is triggered (through an unlink call for example). - The inode reference count was not incremented before submitting - the read bios, therefore this is possible; - -6) The eviction handler starts executing and enters the loop that - iterates over all extent states in the inode's io_tree; - -7) The loop picks one extent state record and uses its ->start and - ->end fields, after releasing the inode's io_tree spinlock, to - call lock_extent_bits() and clear_extent_bit(). The call to lock - the range [state->start, state->end] blocks because the whole - range or a part of it was locked by the previous call to - readpages() and the corresponding end io callback, which unlocks - the range was not yet executed; - -8) The end io callback for the read bio is executed and unlocks the - range [state->start, state->end] (or a superset of that range). - And at clear_extent_bit() the extent_state record state is used - as a second argument to split_state(), which sets state->start to - a larger value; - -9) The task executing the eviction handler is woken up by the task - executing the bio's end io callback (through clear_state_bit) and - the eviction handler locks the range - [old value for state->start, state->end]. Shortly after, when - calling clear_extent_bit(), it unlocks the range - [new value for state->start, state->end], so it ends up unlocking - only part of the range that it locked, leaving an extent state - record in the io_tree that represents the unlocked subrange; - -10) The eviction handler loop, in its next iteration, gets the - extent_state record for the subrange that it did not unlock in the - previous step and then tries to lock it, resulting in an hang. - -So fix this by not using the ->start and ->end fields of an existing -extent_state record. This is a simple solution, and an alternative -could be to bump the inode's reference count before submitting each -read bio and having it dropped in the bio's end io callback. But that -would be a more invasive/complex change and would not protect against -other possible places that are not holding a reference on the inode -as well. Something to consider in the future. - -Many thanks to Zygo Blaxell for reporting, in the mailing list, the -issue, a set of scripts to trigger it and testing this fix. - -Reported-by: Zygo Blaxell <[email protected]> -Tested-by: Zygo Blaxell <[email protected]> -Signed-off-by: Filipe Manana <[email protected]> -Signed-off-by: Chris Mason <[email protected]> ---- - fs/btrfs/inode.c | 26 +++++++++++++++++++++----- - 1 file changed, 21 insertions(+), 5 deletions(-) - -diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c -index 8bb0136..855935f 100644 ---- a/fs/btrfs/inode.c -+++ b/fs/btrfs/inode.c -@@ -4986,24 +4986,40 @@ static void evict_inode_truncate_pages(struct inode *inode) - } - write_unlock(&map_tree->lock); - -+ /* -+ * Keep looping until we have no more ranges in the io tree. -+ * We can have ongoing bios started by readpages (called from readahead) -+ * that didn't get their end io callbacks called yet or they are still -+ * in progress ((extent_io.c:end_bio_extent_readpage()). This means some -+ * ranges can still be locked and eviction started because before -+ * submitting those bios, which are executed by a separate task (work -+ * queue kthread), inode references (inode->i_count) were not taken -+ * (which would be dropped in the end io callback of each bio). -+ * Therefore here we effectively end up waiting for those bios and -+ * anyone else holding locked ranges without having bumped the inode's -+ * reference count - if we don't do it, when they access the inode's -+ * io_tree to unlock a range it may be too late, leading to an -+ * use-after-free issue. -+ */ - spin_lock(&io_tree->lock); - while (!RB_EMPTY_ROOT(&io_tree->state)) { - struct extent_state *state; - struct extent_state *cached_state = NULL; -+ u64 start; -+ u64 end; - - node = rb_first(&io_tree->state); - state = rb_entry(node, struct extent_state, rb_node); -- atomic_inc(&state->refs); -+ start = state->start; -+ end = state->end; - spin_unlock(&io_tree->lock); - -- lock_extent_bits(io_tree, state->start, state->end, -- 0, &cached_state); -- clear_extent_bit(io_tree, state->start, state->end, -+ lock_extent_bits(io_tree, start, end, 0, &cached_state); -+ clear_extent_bit(io_tree, start, end, - EXTENT_LOCKED | EXTENT_DIRTY | - EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING | - EXTENT_DEFRAG, 1, 1, - &cached_state, GFP_NOFS); -- free_extent_state(state); - - cond_resched(); - spin_lock(&io_tree->lock); --- -1.8.4.5 - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/crasher-26.diff new/patches.suse/crasher-26.diff --- old/patches.suse/crasher-26.diff 2015-08-28 11:17:01.000000000 +0200 +++ new/patches.suse/crasher-26.diff 2015-09-22 17:17:36.000000000 +0200 @@ -19,9 +19,9 @@ + help + Slab cache memory tester. Only use this as a module + - config MSM_SMD_PKT - bool "Enable device interface for some SMD packet ports" - default n + config TILE_SROM + bool "Character-device access via hypervisor to the Tilera SPI ROM" + depends on TILE --- a/drivers/char/Makefile +++ b/drivers/char/Makefile @@ -57,6 +57,7 @@ obj-$(CONFIG_IPMI_HANDLER) += ipmi/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/scsi-netlink-ml new/patches.suse/scsi-netlink-ml --- old/patches.suse/scsi-netlink-ml 2015-08-28 11:17:01.000000000 +0200 +++ new/patches.suse/scsi-netlink-ml 2015-09-22 17:17:36.000000000 +0200 @@ -18,9 +18,9 @@ --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -25,6 +25,8 @@ + #include <linux/blkdev.h> #include <linux/delay.h> #include <linux/jiffies.h> - #include <asm/unaligned.h> +#include <linux/netlink.h> +#include <net/netlink.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/stack-unwind new/patches.suse/stack-unwind --- old/patches.suse/stack-unwind 2015-08-28 11:17:01.000000000 +0200 +++ new/patches.suse/stack-unwind 2015-09-22 17:17:36.000000000 +0200 @@ -22,10 +22,43 @@ Update Jun 24 2014 jeffm: - VSYSCALL_START / END replaced upstream with VSYSCALL_ADDR / VSYSCALL_ADDR + PAGE_SIZE +Update Sep 22 2015 jslaby: +- Enablement after manual dwarf annotations are gone from upstream + +TODO: +* annotate arch_unwind_init_running by FRAME_BEGIN/END in both entry_32/64.S. + (Only after stacktool is merged.) +* assembler not unwound properly, as annotations are gone -- frame ptr is used + for the rest of the stack instead (as always). + +--- + Makefile | 5 + arch/x86/Kconfig | 2 + arch/x86/Makefile | 11 + arch/x86/entry/calling.h | 13 + arch/x86/entry/entry_32.S | 33 + arch/x86/entry/entry_64.S | 32 + arch/x86/include/asm/stacktrace.h | 4 + arch/x86/include/asm/switch_to.h | 10 + arch/x86/include/asm/unwind.h | 159 +++ + arch/x86/kernel/dumpstack.c | 88 ++ + arch/x86/kernel/dumpstack_32.c | 4 + arch/x86/kernel/dumpstack_64.c | 7 + arch/x86/kernel/vmlinux.lds.S | 2 + arch/x86/tools/relocs.c | 1 + include/asm-generic/vmlinux.lds.h | 22 + include/linux/module.h | 3 + include/linux/unwind.h | 135 +++ + init/main.c | 3 + kernel/Makefile | 1 + kernel/module.c | 32 + kernel/unwind.c | 1652 ++++++++++++++++++++++++++++++++++++++ + lib/Kconfig.debug | 24 + 22 files changed, 2237 insertions(+), 6 deletions(-) --- a/Makefile +++ b/Makefile -@@ -727,6 +727,11 @@ endif +@@ -729,6 +729,11 @@ endif KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments) @@ -39,7 +72,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g) --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -627,7 +627,7 @@ config X86_32_IRIS +@@ -635,7 +635,7 @@ config X86_32_IRIS config SCHED_OMIT_FRAME_POINTER def_bool y prompt "Single-depth WCHAN output" @@ -50,7 +83,30 @@ is disabled then wchan values will recurse back to the --- a/arch/x86/Makefile +++ b/arch/x86/Makefile -@@ -163,7 +163,9 @@ KBUILD_CFLAGS += -pipe +@@ -149,6 +149,11 @@ endif + sp-$(CONFIG_X86_32) := esp + sp-$(CONFIG_X86_64) := rsp + ++# do binutils support CFI? ++cfi := $(call as-instr,.cfi_startproc\n.cfi_rel_offset $(sp-y)$(comma)0\n.cfi_endproc,-DCONFIG_AS_CFI=1) ++# is .cfi_signal_frame supported too? ++cfi-sections := $(call as-instr,.cfi_sections .debug_frame,-DCONFIG_AS_CFI_SECTIONS=1) ++ + # does binutils support specific instructions? + asinstr := $(call as-instr,fxsaveq (%rax),-DCONFIG_AS_FXSAVEQ=1) + asinstr += $(call as-instr,pshufb %xmm0$(comma)%xmm0,-DCONFIG_AS_SSSE3=1) +@@ -156,8 +161,8 @@ asinstr += $(call as-instr,crc32l %eax$( + avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1) + avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) + +-KBUILD_AFLAGS += $(asinstr) $(avx_instr) $(avx2_instr) +-KBUILD_CFLAGS += $(asinstr) $(avx_instr) $(avx2_instr) ++KBUILD_AFLAGS += $(cfi) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) ++KBUILD_CFLAGS += $(cfi) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) + + LDFLAGS := -m elf_$(UTS_MACHINE) + +@@ -166,7 +171,9 @@ KBUILD_CFLAGS += -pipe # Workaround for a gcc prelease that unfortunately was shipped in a suse release KBUILD_CFLAGS += -Wno-sign-compare # @@ -60,27 +116,111 @@ # prevent gcc from generating any FP code by mistake KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow KBUILD_CFLAGS += $(call cc-option,-mno-avx,) ---- a/arch/x86/include/asm/dwarf2.h -+++ b/arch/x86/include/asm/dwarf2.h -@@ -35,7 +35,8 @@ - #define CFI_SIGNAL_FRAME - #endif +--- a/arch/x86/entry/calling.h ++++ b/arch/x86/entry/calling.h +@@ -46,6 +46,19 @@ For 32-bit we have the following convent + + */ --#if defined(CONFIG_AS_CFI_SECTIONS) && defined(__ASSEMBLY__) +#if !defined(CONFIG_UNWIND_INFO) && defined(CONFIG_AS_CFI_SECTIONS) \ -+ && defined(__ASSEMBLY__) - /* - * Emit CFI data in .debug_frame sections, not .eh_frame sections. - * The latter we currently just discard since we don't do DWARF -@@ -53,7 +54,7 @@ - * Due to the structure of pre-exisiting code, don't use assembler line - * comment character # to ignore the arguments. Instead, use a dummy macro. - */ --.macro cfi_ignore a=0, b=0, c=0, d=0 -+.macro cfi_ignore a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0 - .endm ++ && defined(__ASSEMBLY__) ++ /* ++ * Emit CFI data in .debug_frame sections, not .eh_frame sections. ++ * The latter we currently just discard since we don't do DWARF ++ * unwinding at runtime. So only the offline DWARF information is ++ * useful to anyone. Note we should not use this directive if this ++ * file is used in the vDSO assembly, or if vmlinux.lds.S gets ++ * changed so it doesn't discard .eh_frame. ++ */ ++ .cfi_sections .debug_frame ++#endif ++ + #ifdef CONFIG_X86_64 + + /* +--- a/arch/x86/entry/entry_32.S ++++ b/arch/x86/entry/entry_32.S +@@ -224,6 +224,39 @@ ENTRY(ret_from_fork) + jmp syscall_exit + END(ret_from_fork) + ++#ifdef CONFIG_STACK_UNWIND ++ENTRY(arch_unwind_init_running) ++ movl 4(%esp), %edx ++ movl (%esp), %ecx ++ leal 4(%esp), %eax ++ movl %ebx, PT_EBX(%edx) ++ xorl %ebx, %ebx ++ movl %ebx, PT_ECX(%edx) ++ movl %ebx, PT_EDX(%edx) ++ movl %esi, PT_ESI(%edx) ++ movl %edi, PT_EDI(%edx) ++ movl %ebp, PT_EBP(%edx) ++ movl %ebx, PT_EAX(%edx) ++ movl $__USER_DS, PT_DS(%edx) ++ movl $__USER_DS, PT_ES(%edx) ++ movl $__KERNEL_PERCPU, PT_FS(%edx) ++ movl $__KERNEL_STACK_CANARY, PT_GS(%edx) ++ movl %eax, PT_OLDESP(%edx) ++ movl 16(%esp), %eax ++ movl %ebx, PT_ORIG_EAX(%edx) ++ movl %ecx, PT_EIP(%edx) ++ movl 12(%esp), %ecx ++ movl $__KERNEL_CS, PT_CS(%edx) ++ movl %eax, 12(%esp) ++ movl 8(%esp), %eax ++ movl %ecx, 8(%esp) ++ movl %ebx, PT_EFLAGS(%edx) ++ movl PT_EBX(%edx), %ebx ++ movl $__KERNEL_DS, PT_OLDSS(%edx) ++ jmpl *%eax ++ENDPROC(arch_unwind_init_running) ++#endif ++ + ENTRY(ret_from_kernel_thread) + pushl %eax + call schedule_tail +--- a/arch/x86/entry/entry_64.S ++++ b/arch/x86/entry/entry_64.S +@@ -973,6 +973,38 @@ ENTRY(do_softirq_own_stack) + ret + END(do_softirq_own_stack) + ++#ifdef CONFIG_STACK_UNWIND ++ENTRY(arch_unwind_init_running) ++ movq %r15, R15(%rdi) ++ movq %r14, R14(%rdi) ++ xchgq %rsi, %rdx ++ movq %r13, R13(%rdi) ++ movq %r12, R12(%rdi) ++ xorl %eax, %eax ++ movq %rbp, RBP(%rdi) ++ movq %rbx, RBX(%rdi) ++ movq (%rsp), %r9 ++ xchgq %rdx, %rcx ++ movq %rax, R11(%rdi) ++ movq %rax, R10(%rdi) ++ movq %rax, R9(%rdi) ++ movq %rax, R8(%rdi) ++ movq %rax, RAX(%rdi) ++ movq %rax, RCX(%rdi) ++ movq %rax, RDX(%rdi) ++ movq %rax, RSI(%rdi) ++ movq %rax, RDI(%rdi) ++ movq %rax, ORIG_RAX(%rdi) ++ movq %r9, RIP(%rdi) ++ leaq 8(%rsp), %r9 ++ movq $__KERNEL_CS, CS(%rdi) ++ movq %rax, EFLAGS(%rdi) ++ movq %r9, RSP(%rdi) ++ movq $__KERNEL_DS, SS(%rdi) ++ jmpq *%rcx ++END(arch_unwind_init_running) ++#endif ++ + #ifdef CONFIG_XEN + idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0 - #define CFI_STARTPROC cfi_ignore --- a/arch/x86/include/asm/stacktrace.h +++ b/arch/x86/include/asm/stacktrace.h @@ -92,6 +92,10 @@ extern void @@ -96,7 +236,7 @@ /* The form of the top of the frame on the stack */ --- a/arch/x86/include/asm/switch_to.h +++ b/arch/x86/include/asm/switch_to.h -@@ -100,6 +100,15 @@ do { \ +@@ -100,12 +100,22 @@ do { \ #define __switch_canary_iparam #endif /* CC_STACKPROTECTOR */ @@ -109,10 +249,9 @@ +#define THREAD_RETURN_SYM +#endif + - /* - * There is no need to save or restore flags, because flags are always - * clean in kernel mode, with the possible exception of IOPL. Kernel IOPL -@@ -110,6 +119,7 @@ do { \ + /* Save restore flags to clear handle leaking NT */ + #define switch_to(prev, next, last) \ + asm volatile(SAVE_CONTEXT \ "movq %%rsp,%P[threadrsp](%[prev])\n\t" /* save RSP */ \ "movq %P[threadrsp](%[next]),%%rsp\n\t" /* restore RSP */ \ "call __switch_to\n\t" \ @@ -120,7 +259,7 @@ "movq "__percpu_arg([current_task])",%%rsi\n\t" \ __switch_canary \ "movq %P[thread_info](%%rsi),%%r8\n\t" \ ---- a/dev/null +--- /dev/null +++ b/arch/x86/include/asm/unwind.h @@ -0,0 +1,159 @@ +#ifndef _ASM_X86_UNWIND_H @@ -374,7 +513,7 @@ /* * x86-64 can have up to three kernel stacks: * process stack -@@ -367,3 +437,21 @@ static int __init code_bytes_setup(char +@@ -367,3 +437,21 @@ static int __init code_bytes_setup(char return 1; } __setup("code_bytes=", code_bytes_setup); @@ -432,93 +571,6 @@ if (!stack) { if (regs) stack = (unsigned long *)regs->sp; ---- a/arch/x86/kernel/entry_32.S -+++ b/arch/x86/kernel/entry_32.S -@@ -299,6 +299,41 @@ ENTRY(ret_from_fork) - CFI_ENDPROC - END(ret_from_fork) - -+#ifdef CONFIG_STACK_UNWIND -+ENTRY(arch_unwind_init_running) -+ CFI_STARTPROC -+ movl 4(%esp), %edx -+ movl (%esp), %ecx -+ leal 4(%esp), %eax -+ movl %ebx, PT_EBX(%edx) -+ xorl %ebx, %ebx -+ movl %ebx, PT_ECX(%edx) -+ movl %ebx, PT_EDX(%edx) -+ movl %esi, PT_ESI(%edx) -+ movl %edi, PT_EDI(%edx) -+ movl %ebp, PT_EBP(%edx) -+ movl %ebx, PT_EAX(%edx) -+ movl $__USER_DS, PT_DS(%edx) -+ movl $__USER_DS, PT_ES(%edx) -+ movl $__KERNEL_PERCPU, PT_FS(%edx) -+ movl $__KERNEL_STACK_CANARY, PT_GS(%edx) -+ movl %eax, PT_OLDESP(%edx) -+ movl 16(%esp), %eax -+ movl %ebx, PT_ORIG_EAX(%edx) -+ movl %ecx, PT_EIP(%edx) -+ movl 12(%esp), %ecx -+ movl $__KERNEL_CS, PT_CS(%edx) -+ movl %eax, 12(%esp) -+ movl 8(%esp), %eax -+ movl %ecx, 8(%esp) -+ movl %ebx, PT_EFLAGS(%edx) -+ movl PT_EBX(%edx), %ebx -+ movl $__KERNEL_DS, PT_OLDSS(%edx) -+ jmpl *%eax -+ CFI_ENDPROC -+ENDPROC(arch_unwind_init_running) -+#endif -+ - ENTRY(ret_from_kernel_thread) - CFI_STARTPROC - pushl_cfi %eax ---- a/arch/x86/kernel/entry_64.S -+++ b/arch/x86/kernel/entry_64.S -@@ -1140,6 +1140,40 @@ ENTRY(do_softirq_own_stack) - CFI_ENDPROC - END(do_softirq_own_stack) - -+#ifdef CONFIG_STACK_UNWIND -+ENTRY(arch_unwind_init_running) -+ CFI_STARTPROC -+ movq %r15, R15(%rdi) -+ movq %r14, R14(%rdi) -+ xchgq %rsi, %rdx -+ movq %r13, R13(%rdi) -+ movq %r12, R12(%rdi) -+ xorl %eax, %eax -+ movq %rbp, RBP(%rdi) -+ movq %rbx, RBX(%rdi) -+ movq (%rsp), %r9 -+ xchgq %rdx, %rcx -+ movq %rax, R11(%rdi) -+ movq %rax, R10(%rdi) -+ movq %rax, R9(%rdi) -+ movq %rax, R8(%rdi) -+ movq %rax, RAX(%rdi) -+ movq %rax, RCX(%rdi) -+ movq %rax, RDX(%rdi) -+ movq %rax, RSI(%rdi) -+ movq %rax, RDI(%rdi) -+ movq %rax, ORIG_RAX(%rdi) -+ movq %r9, RIP(%rdi) -+ leaq 8(%rsp), %r9 -+ movq $__KERNEL_CS, CS(%rdi) -+ movq %rax, EFLAGS(%rdi) -+ movq %r9, RSP(%rdi) -+ movq $__KERNEL_DS, SS(%rdi) -+ jmpq *%rcx -+ CFI_ENDPROC -+END(arch_unwind_init_running) -+#endif -+ - #ifdef CONFIG_XEN - idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0 - --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -332,7 +332,9 @@ SECTIONS @@ -578,7 +630,7 @@ +#endif --- a/include/linux/module.h +++ b/include/linux/module.h -@@ -284,6 +284,9 @@ struct module { +@@ -398,6 +398,9 @@ struct module { /* Size of RO sections of the module (text+rodata) */ unsigned int init_ro_size, core_ro_size; @@ -588,7 +640,7 @@ /* Arch-specific module values */ struct mod_arch_specific arch; ---- a/dev/null +--- /dev/null +++ b/include/linux/unwind.h @@ -0,0 +1,135 @@ +#ifndef _LINUX_UNWIND_H @@ -736,7 +788,7 @@ #include <linux/buffer_head.h> #include <linux/page_ext.h> #include <linux/debug_locks.h> -@@ -498,6 +499,7 @@ asmlinkage __visible void __init start_k +@@ -503,6 +504,7 @@ asmlinkage __visible void __init start_k * Need to run as early as possible, to initialize the * lockdep hash: */ @@ -744,7 +796,7 @@ lockdep_init(); set_task_stack_end_magic(&init_task); smp_setup_processor_id(); -@@ -523,6 +525,7 @@ asmlinkage __visible void __init start_k +@@ -528,6 +530,7 @@ asmlinkage __visible void __init start_k setup_arch(&command_line); mm_init_cpumask(&init_mm); setup_command_line(command_line); @@ -754,7 +806,7 @@ smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */ --- a/kernel/Makefile +++ b/kernel/Makefile -@@ -49,6 +49,7 @@ obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += +@@ -49,6 +49,7 @@ obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += obj-$(CONFIG_MODULES) += module.o obj-$(CONFIG_MODULE_SIG) += module_signing.o obj-$(CONFIG_KALLSYMS) += kallsyms.o @@ -772,7 +824,7 @@ #include <linux/rculist.h> #include <asm/uaccess.h> #include <asm/cacheflush.h> -@@ -195,7 +196,7 @@ struct load_info { +@@ -344,7 +345,7 @@ struct load_info { unsigned int num_debug; bool sig_ok; struct { @@ -781,7 +833,7 @@ } index; }; -@@ -607,6 +608,27 @@ bool is_module_percpu_address(unsigned l +@@ -764,6 +765,27 @@ bool is_module_percpu_address(unsigned l #endif /* CONFIG_SMP */ @@ -809,7 +861,7 @@ #define MODINFO_ATTR(field) \ static void setup_modinfo_##field(struct module *mod, const char *s) \ { \ -@@ -1919,6 +1941,8 @@ static void free_module(struct module *m +@@ -2089,6 +2111,8 @@ static void free_module(struct module *m /* Remove dynamic debug info */ ddebug_remove_module(mod->name); @@ -818,7 +870,7 @@ /* Arch-specific cleanup. */ module_arch_cleanup(mod); -@@ -2752,6 +2776,8 @@ static struct module *setup_load_info(st +@@ -2907,6 +2931,8 @@ static struct module *setup_load_info(st info->index.pcpu = find_pcpusec(info); @@ -827,7 +879,7 @@ /* Check module struct version now, before we try to use module. */ if (!check_modstruct_version(info->sechdrs, info->index.vers, mod)) return ERR_PTR(-ENOEXEC); -@@ -3194,6 +3220,7 @@ static noinline int do_init_module(struc +@@ -3349,6 +3375,7 @@ static noinline int do_init_module(struc /* Drop initial reference. */ module_put(mod); trim_init_extable(mod); @@ -835,7 +887,7 @@ #ifdef CONFIG_KALLSYMS mod->num_symtab = mod->core_num_syms; mod->symtab = mod->core_symtab; -@@ -3436,6 +3463,9 @@ static int load_module(struct load_info +@@ -3606,6 +3633,9 @@ static int load_module(struct load_info if (err < 0) goto bug_cleanup; @@ -845,7 +897,7 @@ /* Get rid of temporary copy. */ free_copy(info); ---- a/dev/null +--- /dev/null +++ b/kernel/unwind.c @@ -0,0 +1,1652 @@ +/* @@ -2527,7 +2579,7 @@ config BOOT_PRINTK_DELAY bool "Delay each boot printk message by N milliseconds" depends on DEBUG_KERNEL && PRINTK && GENERIC_CALIBRATE_DELAY -@@ -1486,7 +1504,8 @@ config FAULT_INJECTION_STACKTRACE_FILTER +@@ -1553,7 +1571,8 @@ config FAULT_INJECTION_STACKTRACE_FILTER depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT depends on !X86_64 select STACKTRACE @@ -2537,7 +2589,7 @@ help Provide stacktrace filter for fault-injection capabilities -@@ -1496,7 +1515,8 @@ config LATENCYTOP +@@ -1563,7 +1582,8 @@ config LATENCYTOP depends on DEBUG_KERNEL depends on STACKTRACE_SUPPORT depends on PROC_FS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/supported-flag new/patches.suse/supported-flag --- old/patches.suse/supported-flag 2015-08-28 11:17:01.000000000 +0200 +++ new/patches.suse/supported-flag 2015-09-22 17:17:36.000000000 +0200 @@ -30,7 +30,7 @@ --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt -@@ -3654,6 +3654,14 @@ bytes respectively. Such letter suffixes +@@ -3789,6 +3789,14 @@ bytes respectively. Such letter suffixes unknown_nmi_panic [X86] Cause panic on unknown NMI. @@ -47,7 +47,7 @@ (default -1 = authorized except for wireless USB, --- a/Documentation/sysctl/kernel.txt +++ b/Documentation/sysctl/kernel.txt -@@ -843,6 +843,18 @@ can be ORed together: +@@ -869,6 +869,18 @@ can be ORed together: signature. 16384 - A soft lockup has previously occurred on the system. 32768 - The kernel has been live patched. @@ -68,7 +68,7 @@ --- a/Makefile +++ b/Makefile -@@ -411,6 +411,11 @@ KBUILD_AFLAGS_MODULE := -DMODULE +@@ -400,6 +400,11 @@ KBUILD_AFLAGS_MODULE := -DMODULE KBUILD_CFLAGS_MODULE := -DMODULE KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds @@ -82,7 +82,7 @@ KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) --- a/include/linux/kernel.h +++ b/include/linux/kernel.h -@@ -425,6 +425,9 @@ extern int panic_on_oops; +@@ -438,6 +438,9 @@ extern int panic_on_oops; extern int panic_on_unrecovered_nmi; extern int panic_on_io_nmi; extern int panic_on_warn; @@ -90,9 +90,9 @@ +extern int unsupported; +#endif extern int sysctl_panic_on_stackoverflow; - /* - * Only to be used by arch init code. If the user over-wrote the default -@@ -472,6 +475,15 @@ extern enum system_states { + + extern bool crash_kexec_post_notifiers; +@@ -489,6 +492,15 @@ extern enum system_states { #define TAINT_SOFTLOCKUP 14 #define TAINT_LIVEPATCH 15 @@ -110,7 +110,7 @@ #define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4] --- a/include/linux/module.h +++ b/include/linux/module.h -@@ -381,6 +381,9 @@ struct module *__module_address(unsigned +@@ -417,6 +417,9 @@ struct module *__module_address(unsigned bool is_module_address(unsigned long addr); bool is_module_percpu_address(unsigned long addr); bool is_module_text_address(unsigned long addr); @@ -214,7 +214,7 @@ /* * Mutex protects: * 1) List of modules (also safely readable with preempt_disable), -@@ -995,6 +1011,12 @@ static size_t module_flags_taint(struct +@@ -1157,6 +1173,12 @@ static size_t module_flags_taint(struct buf[l++] = 'C'; if (mod->taints & (1 << TAINT_UNSIGNED_MODULE)) buf[l++] = 'E'; @@ -227,7 +227,7 @@ /* * TAINT_FORCED_RMMOD: could be added. * TAINT_CPU_OUT_OF_SPEC, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't -@@ -1072,6 +1094,33 @@ static ssize_t show_taint(struct module_ +@@ -1234,6 +1256,33 @@ static ssize_t show_taint(struct module_ static struct module_attribute modinfo_taint = __ATTR(taint, 0444, show_taint, NULL); @@ -261,7 +261,7 @@ static struct module_attribute *modinfo_attrs[] = { &module_uevent, &modinfo_version, -@@ -1080,6 +1129,9 @@ static struct module_attribute *modinfo_ +@@ -1242,6 +1291,9 @@ static struct module_attribute *modinfo_ &modinfo_coresize, &modinfo_initsize, &modinfo_taint, @@ -271,7 +271,7 @@ #ifdef CONFIG_MODULE_UNLOAD &modinfo_refcnt, #endif -@@ -1626,9 +1678,37 @@ static int mod_sysfs_setup(struct module +@@ -1800,9 +1852,37 @@ static int mod_sysfs_setup(struct module add_sect_attrs(mod, info); add_notes_attrs(mod, info); @@ -309,7 +309,7 @@ out_unreg_param: module_param_sysfs_remove(mod); out_unreg_holders: -@@ -3836,6 +3916,9 @@ void print_modules(void) +@@ -4068,6 +4148,9 @@ void print_modules(void) if (last_unloaded_module[0]) pr_cont(" [last unloaded: %s]", last_unloaded_module); pr_cont("\n"); @@ -321,7 +321,7 @@ #ifdef CONFIG_MODVERSIONS --- a/kernel/panic.c +++ b/kernel/panic.c -@@ -226,6 +226,10 @@ static const struct tnt tnts[] = { +@@ -228,6 +228,10 @@ static const struct tnt tnts[] = { { TAINT_UNSIGNED_MODULE, 'E', ' ' }, { TAINT_SOFTLOCKUP, 'L', ' ' }, { TAINT_LIVEPATCH, 'K', ' ' }, @@ -332,7 +332,7 @@ }; /** -@@ -246,6 +250,8 @@ static const struct tnt tnts[] = { +@@ -249,6 +253,8 @@ static const struct tnt tnts[] = { * 'E' - Unsigned module has been loaded. * 'L' - A soft lockup has previously occurred. * 'K' - Kernel has been live patched. @@ -343,7 +343,7 @@ */ --- a/kernel/sysctl.c +++ b/kernel/sysctl.c -@@ -769,6 +769,15 @@ static struct ctl_table kern_table[] = { +@@ -759,6 +759,15 @@ static struct ctl_table kern_table[] = { .extra1 = &pid_max_min, .extra2 = &pid_max_max, }, @@ -376,7 +376,7 @@ --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c -@@ -1685,6 +1685,50 @@ static char *remove_dot(char *s) +@@ -1918,6 +1918,50 @@ static char *remove_dot(char *s) return s; } @@ -427,7 +427,7 @@ static void read_symbols(char *modname) { const char *symname; -@@ -1899,6 +1943,15 @@ static void add_staging_flag(struct buff +@@ -2132,6 +2176,15 @@ static void add_staging_flag(struct buff buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n"); } @@ -443,7 +443,7 @@ /** * Record CRCs for unresolved symbols **/ -@@ -2040,6 +2093,15 @@ static void write_if_changed(struct buff +@@ -2273,6 +2326,15 @@ static void write_if_changed(struct buff fclose(file); } @@ -459,7 +459,7 @@ /* parse Module.symvers file. line format: * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something] **/ -@@ -2135,12 +2197,15 @@ int main(int argc, char **argv) +@@ -2368,12 +2430,15 @@ int main(int argc, char **argv) struct buffer buf = { }; char *kernel_read = NULL, *module_read = NULL; char *dump_write = NULL, *files_source = NULL; @@ -476,7 +476,7 @@ switch (opt) { case 'i': kernel_read = optarg; -@@ -2181,11 +2246,20 @@ int main(int argc, char **argv) +@@ -2414,11 +2479,20 @@ int main(int argc, char **argv) case 'w': warn_unresolved = 1; break; @@ -497,7 +497,7 @@ if (kernel_read) read_dump(kernel_read, 1); if (module_read) -@@ -2222,6 +2296,9 @@ int main(int argc, char **argv) +@@ -2455,6 +2529,9 @@ int main(int argc, char **argv) add_header(&buf, mod); add_intree_flag(&buf, !external_module); add_staging_flag(&buf, mod->name); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/suse-hv-storvsc-sg_tablesize.patch new/patches.suse/suse-hv-storvsc-sg_tablesize.patch --- old/patches.suse/suse-hv-storvsc-sg_tablesize.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/suse-hv-storvsc-sg_tablesize.patch 2015-09-22 17:17:36.000000000 +0200 @@ -0,0 +1,28 @@ +Subject: hv_storvsc: use small sg_tablesize on x86 +From: <[email protected]> +Patch-mainline: Never, upstream may provide different fix +References: bnc#937256 + +Reducing the sg_tablesize allows booting of SP4 kernels in 32bit VMs, after +commit be0cf6ca301c61458dc4aa1a37acf4f58d2ed3d6 ("scsi: storvsc: Set the +tablesize based on the information given by the host") + +[ 5.567138] hv_storvsc vmbus_1: adjusting sg_tablesize 0x800 -> 0x20 + + +diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c +index 4a65916..e2245c7 100644 +--- a/drivers/scsi/storvsc_drv.c ++++ b/drivers/scsi/storvsc_drv.c +@@ -1951,6 +1951,11 @@ static int storvsc_probe(struct hv_device *device, + * from the host. + */ + host->sg_tablesize = (stor_device->max_transfer_bytes >> PAGE_SHIFT); ++#if defined(CONFIG_X86_32) ++ dev_warn(&device->device, "adjusting sg_tablesize 0x%x -> 0x%x", ++ host->sg_tablesize, MAX_MULTIPAGE_BUFFER_COUNT); ++ host->sg_tablesize = MAX_MULTIPAGE_BUFFER_COUNT; ++#endif + + /* Register the HBA and start the scsi bus scan */ + ret = scsi_add_host(host, &device->device); ++++++ patches.xen.tar.bz2 ++++++ ++++ 30983 lines of diff (skipped) ++++++ series.conf ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:48.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:48.000000000 +0200 @@ -27,12 +27,7 @@ # DO NOT MODIFY THEM! # Send separate patches upstream if you find a problem... ######################################################## - patches.kernel.org/patch-4.1.1 - patches.kernel.org/patch-4.1.1-2 - patches.kernel.org/patch-4.1.2-3 - patches.kernel.org/patch-4.1.3-4 - patches.kernel.org/patch-4.1.4-5 - patches.kernel.org/patch-4.1.5-6 + patches.kernel.org/patch-4.2.1 ######################################################## # Build fixes that apply to the vanilla kernel too. @@ -72,6 +67,7 @@ ######################################################## # Simple export additions/removals ######################################################## + patches.fixes/workqueue-Make-flush_workqueue-available-again-to-no.patch ######################################################## # Bug workarounds for binutils @@ -168,16 +164,15 @@ patches.arch/arm64-0010-KVM-ARM-Hack-to-enable-VGIC-mapping-on-64k-PAGE_SIZE.patch # Generic PCIe host bridge, necessary for QEMU and Seattle, upstreaming wip - patches.arch/arm64-gpex-0001-device-core-Introduce-per-device-MSI-domain-pointer.patch - patches.arch/arm64-gpex-0002-PCI-MSI-add-hooks-to-populate-the-msi_domain-field.patch - patches.arch/arm64-gpex-0003-PCI-MSI-of-add-support-for-OF-provided-msi_domain.patch - patches.arch/arm64-gpex-0004-PCI-MSI-Let-pci_msi_get_domain-use-struct-device-s-m.patch - patches.arch/arm64-gpex-0005-irqchip-GICv2m-Get-rid-of-struct-msi_controller.patch - patches.arch/arm64-gpex-0006-irqchip-gicv3-its-Get-rid-of-struct-msi_controller.patch - patches.arch/arm64-gpex-0007-PCI-MSI-Drop-domain-field-from-msi_controller.patch - patches.arch/arm64-gpex-0008-PCI-MSI-of-Allow-msi_domain-lookup-using-the-PHB-nod.patch - patches.arch/arm64-gpex-0009-pci-Enable-pci-host-generic-support-for-ARM64.patch - ++mbrugger patches.arch/arm64-gpex-0001-device-core-Introduce-per-device-MSI-domain-pointer.patch ++mbrugger patches.arch/arm64-gpex-0002-PCI-MSI-add-hooks-to-populate-the-msi_domain-field.patch ++mbrugger patches.arch/arm64-gpex-0003-PCI-MSI-of-add-support-for-OF-provided-msi_domain.patch ++mbrugger patches.arch/arm64-gpex-0004-PCI-MSI-Let-pci_msi_get_domain-use-struct-device-s-m.patch ++mbrugger patches.arch/arm64-gpex-0005-irqchip-GICv2m-Get-rid-of-struct-msi_controller.patch ++mbrugger patches.arch/arm64-gpex-0006-irqchip-gicv3-its-Get-rid-of-struct-msi_controller.patch ++mbrugger patches.arch/arm64-gpex-0007-PCI-MSI-Drop-domain-field-from-msi_controller.patch ++mbrugger patches.arch/arm64-gpex-0008-PCI-MSI-of-Allow-msi_domain-lookup-using-the-PHB-nod.patch + patches.arch/arm64-gpex-0009-pci-Enable-pci-host-generic-support-for-ARM64.patch ######################################################## # S/390 @@ -231,6 +226,7 @@ # Suse specific stuff ######################################################## patches.suse/suse-hv-guest-os-id.patch + patches.suse/suse-hv-storvsc-sg_tablesize.patch ######################################################## # Networking, IPv6 @@ -240,8 +236,7 @@ ######################################################## # NFS ######################################################## - - patches.fixes/0001-NFSv4-When-returning-a-delegation-don-t-reclaim-an-i.patch + patches.fixes/0001-NFSv4-do-not-accept-an-incompatible-delegation.patch ######################################################## # lockd + statd @@ -264,7 +259,6 @@ # btrfs ######################################################## patches.suse/btrfs-use-correct-device-for-maps.patch - patches.suse/btrfs-fix-hang-during-inode-eviction-due-to-concurre.patch patches.fixes/btrfs-fix-stale-directory-entries-after-fsync-log-replay patches.fixes/btrfs-fix-stale-dir-entries-after-unlink-inode-eviction-and-fsync @@ -347,12 +341,14 @@ patches.drivers/0004-bcache-unregister-reboot-notifier-when-bcache-fails-.patch patches.drivers/0005-fix-a-leak-in-bch_cached_dev_run.patch + patches.drivers/bcache-fix-writeback-thread-incomplete-stripes-starvation.patch + ######################################################## # DRM/Video ######################################################## +jeffm patches.fixes/nouveau-fix-race-with-fence-signaling - patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip.patch - patches.fixes/drm-i915-Ensure-cache-flushes-prior-to-doing-CS-flip-take-two.patch + patches.drivers/0001-vmwgfx-Rework-device-initialization.patch + patches.drivers/0002-drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch ######################################################## # video4linux @@ -389,6 +385,8 @@ # USB ######################################################## + patches.drivers/0001-qmi_wwan-Add-support-for-Dell-Wireless-5809e-4G-Mode.patch + ######################################################## # I2C ######################################################## @@ -402,6 +400,7 @@ ########################################################## # Sound ########################################################## + patches.drivers/ALSA-hda-Disable-power_save_node-for-Thinkpads ######################################################## # Char / serial @@ -414,6 +413,7 @@ # Needs updating WRT d27769ec (block: add GENHD_FL_NO_PART_SCAN) +hare patches.suse/no-partition-scan patches.fixes/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch + patches.fixes/leds-lp55xx-Correct-Kconfig-dependency-for-f-w-user- ######################################################## # Other drivers we have added to the tree @@ -471,7 +471,7 @@ patches.suse/crasher-26.diff patches.suse/revert-x86-remove-warning-and-warning_symbol-from-struct-stacktrace_ops patches.suse/stack-unwind - patches.arch/x86_64-unwind-annotations ++needs_updating patches.arch/x86_64-unwind-annotations ######################################################## # Kdump @@ -596,6 +596,7 @@ patches.xen/xen3-patch-3.19 patches.xen/xen3-patch-4.0 patches.xen/xen3-patch-4.1 + patches.xen/xen3-patch-4.2 # ports of other patches patches.xen/xen3-stack-unwind ++++++ source-timestamp ++++++ --- /var/tmp/diff_new_pack.pwNTkG/_old 2015-10-01 09:28:48.000000000 +0200 +++ /var/tmp/diff_new_pack.pwNTkG/_new 2015-10-01 09:28:48.000000000 +0200 @@ -1,3 +1,3 @@ -2015-08-28 12:59:34 +0200 -GIT Revision: d867e863d55239553067c5f9ac7ecdd96076bd9f +2015-09-25 10:21:54 +0200 +GIT Revision: 6996a42b7e04d743c62cbcd0a390cf8f357908f0 GIT Branch: stable
