Hello community, here is the log from the commit of package kernel-source for openSUSE:Factory checked in at 2014-10-23 14:19:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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 2014-10-16 07:52:37.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.kernel-source.new/kernel-debug.changes 2014-10-23 14:19:58.000000000 +0200 @@ -1,0 +2,12 @@ +Sun Oct 19 01:36:23 CEST 2014 - [email protected] + +- Revert "Btrfs: race free update of commit root for ro snapshots" +- commit 5c4d099 + +------------------------------------------------------------------- +Wed Oct 15 23:06:40 CEST 2014 - [email protected] + +- Linux 3.17.1. +- commit 16cdf1f + +------------------------------------------------------------------- @@ -5,0 +18,6 @@ + +------------------------------------------------------------------- +Thu Oct 9 06:03:09 CEST 2014 - [email protected] + +- block: copy bi_vcnt in __bio_clone_fast (boo#888259). +- commit 263fe49 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-source.changes: same change kernel-syms.changes: same change kernel-vanilla.changes: same change kernel-xen.changes: same change ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kernel-debug.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -20,7 +20,7 @@ # needssslcertforbuild %define srcversion 3.17 -%define patchversion 3.17.0 +%define patchversion 3.17.1 %define variant %{nil} %define vanilla_only 0 @@ -59,11 +59,11 @@ Summary: A Debug Version of the Kernel License: GPL-2.0 Group: System/Kernel -Version: 3.17.0 +Version: 3.17.1 %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif Url: http://www.kernel.org/ BuildRequires: bc kernel-default.spec: same change kernel-desktop.spec: same change ++++++ kernel-docs.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -16,7 +16,7 @@ # -%define patchversion 3.17.0 +%define patchversion 3.17.1 %define variant %{nil} %include %_sourcedir/kernel-spec-macros @@ -25,11 +25,11 @@ Summary: Kernel Documentation License: GPL-2.0 Group: Documentation/Man -Version: 3.17.0 +Version: 3.17.1 %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif BuildRequires: docbook-toys BuildRequires: docbook-utils ++++++ kernel-ec2.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -20,7 +20,7 @@ # needssslcertforbuild %define srcversion 3.17 -%define patchversion 3.17.0 +%define patchversion 3.17.1 %define variant %{nil} %define vanilla_only 0 @@ -59,11 +59,11 @@ Summary: The Amazon EC2 Xen Kernel License: GPL-2.0 Group: System/Kernel -Version: 3.17.0 +Version: 3.17.1 %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif Url: http://www.kernel.org/ BuildRequires: bc kernel-lpae.spec: same change ++++++ kernel-obs-build.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -19,7 +19,7 @@ #!BuildIgnore: post-build-checks -%define patchversion 3.17.0 +%define patchversion 3.17.1 %define variant %{nil} %include %_sourcedir/kernel-spec-macros @@ -45,11 +45,11 @@ Summary: package kernel and initrd for OBS VM builds License: GPL-2.0 Group: SLES -Version: 3.17.0 +Version: 3.17.1 %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif %description ++++++ kernel-obs-qa-xen.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -17,7 +17,7 @@ # needsrootforbuild -%define patchversion 3.17.0 +%define patchversion 3.17.1 %define variant %{nil} %include %_sourcedir/kernel-spec-macros @@ -36,11 +36,11 @@ Summary: Basic QA tests for the kernel License: GPL-2.0 Group: SLES -Version: 3.17.0 +Version: 3.17.1 %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif %description kernel-obs-qa.spec: same change ++++++ kernel-pae.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -20,7 +20,7 @@ # needssslcertforbuild %define srcversion 3.17 -%define patchversion 3.17.0 +%define patchversion 3.17.1 %define variant %{nil} %define vanilla_only 0 @@ -59,11 +59,11 @@ Summary: Kernel with PAE Support License: GPL-2.0 Group: System/Kernel -Version: 3.17.0 +Version: 3.17.1 %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif Url: http://www.kernel.org/ BuildRequires: bc ++++++ kernel-source.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -18,7 +18,7 @@ %define srcversion 3.17 -%define patchversion 3.17.0 +%define patchversion 3.17.1 %define variant %{nil} %define vanilla_only 0 @@ -30,11 +30,11 @@ Summary: The Linux Kernel Sources License: GPL-2.0 Group: Development/Sources -Version: 3.17.0 +Version: 3.17.1 %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif Url: http://www.kernel.org/ AutoReqProv: off ++++++ kernel-syms.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -24,12 +24,12 @@ Summary: Kernel Symbol Versions (modversions) License: GPL-2.0 Group: Development/Sources -Version: 3.17.0 +Version: 3.17.1 %if %using_buildservice %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif %else %define kernel_source_release %(LC_ALL=C rpm -q kernel-devel%variant-%version --qf "%{RELEASE}" | grep -v 'not installed' || echo 0) ++++++ kernel-vanilla.spec ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:03.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:03.000000000 +0200 @@ -20,7 +20,7 @@ # needssslcertforbuild %define srcversion 3.17 -%define patchversion 3.17.0 +%define patchversion 3.17.1 %define variant %{nil} %define vanilla_only 0 @@ -59,11 +59,11 @@ Summary: The Standard Kernel - without any SUSE patches License: GPL-2.0 Group: System/Kernel -Version: 3.17.0 +Version: 3.17.1 %if 0%{?is_kotd} -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %else -Release: <RELEASE>.gc467423 +Release: <RELEASE>.g5c4d099 %endif Url: http://www.kernel.org/ BuildRequires: bc kernel-xen.spec: same change ++++++ patches.fixes.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/btrfs-0001-revert-race-free-update-of-commit-root-for-ro-.patch new/patches.fixes/btrfs-0001-revert-race-free-update-of-commit-root-for-ro-.patch --- old/patches.fixes/btrfs-0001-revert-race-free-update-of-commit-root-for-ro-.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/btrfs-0001-revert-race-free-update-of-commit-root-for-ro-.patch 2014-10-19 01:36:23.000000000 +0200 @@ -0,0 +1,126 @@ +From: Chris Mason <[email protected]> +Date: Wed, 15 Oct 2014 13:50:56 -0700 +Patch-mainline: 3.17 +Git-commit: babe65ac4dae4598127c5700be00fd97fd06762d +Subject: [PATCH] Revert "Btrfs: race free update of commit root for ro + snapshots" + +This reverts commit 9c3b306e1c9e6be4be09e99a8fe2227d1005effc. + +(cherry picked from commit d37973082b453ba6b89ec07eb7b84305895d35e1) + +Switching only one commit root during a transaction is wrong because it +leads the fs into an inconsistent state. All commit roots should be +switched at once, at transaction commit time, otherwise backref walking +can often miss important references that were only accessible through +the old commit root. Plus, the root item for the snapshot's root wasn't +getting updated and preventing the next transaction commit to do it. + +This made several users get into random corruption issues after creation +of readonly snapshots. + +A regression test for xfstests will follow soon. + +Cc: [email protected] # 3.17 +Signed-off-by: Filipe Manana <[email protected]> +Signed-off-by: Chris Mason <[email protected]> +Signed-off-by: David Sterba <[email protected]> +--- + fs/btrfs/inode.c | 36 ------------------------------------ + fs/btrfs/ioctl.c | 33 +++++++++++++++++++++++++++++++++ + 2 files changed, 33 insertions(+), 36 deletions(-) + +diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c +index 16454b6efc55..886d8d42640d 100644 +--- a/fs/btrfs/inode.c ++++ b/fs/btrfs/inode.c +@@ -5203,42 +5203,6 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) + iput(inode); + inode = ERR_PTR(ret); + } +- /* +- * If orphan cleanup did remove any orphans, it means the tree +- * was modified and therefore the commit root is not the same as +- * the current root anymore. This is a problem, because send +- * uses the commit root and therefore can see inode items that +- * don't exist in the current root anymore, and for example make +- * calls to btrfs_iget, which will do tree lookups based on the +- * current root and not on the commit root. Those lookups will +- * fail, returning a -ESTALE error, and making send fail with +- * that error. So make sure a send does not see any orphans we +- * have just removed, and that it will see the same inodes +- * regardless of whether a transaction commit happened before +- * it started (meaning that the commit root will be the same as +- * the current root) or not. +- */ +- if (sub_root->node != sub_root->commit_root) { +- u64 sub_flags = btrfs_root_flags(&sub_root->root_item); +- +- if (sub_flags & BTRFS_ROOT_SUBVOL_RDONLY) { +- struct extent_buffer *eb; +- +- /* +- * Assert we can't have races between dentry +- * lookup called through the snapshot creation +- * ioctl and the VFS. +- */ +- ASSERT(mutex_is_locked(&dir->i_mutex)); +- +- down_write(&root->fs_info->commit_root_sem); +- eb = sub_root->commit_root; +- sub_root->commit_root = +- btrfs_root_node(sub_root); +- up_write(&root->fs_info->commit_root_sem); +- free_extent_buffer(eb); +- } +- } + } + + return inode; +diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c +index 91269bd9ad05..b765d412cbb6 100644 +--- a/fs/btrfs/ioctl.c ++++ b/fs/btrfs/ioctl.c +@@ -714,6 +714,39 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, + if (ret) + goto fail; + ++ ret = btrfs_orphan_cleanup(pending_snapshot->snap); ++ if (ret) ++ goto fail; ++ ++ /* ++ * If orphan cleanup did remove any orphans, it means the tree was ++ * modified and therefore the commit root is not the same as the ++ * current root anymore. This is a problem, because send uses the ++ * commit root and therefore can see inode items that don't exist ++ * in the current root anymore, and for example make calls to ++ * btrfs_iget, which will do tree lookups based on the current root ++ * and not on the commit root. Those lookups will fail, returning a ++ * -ESTALE error, and making send fail with that error. So make sure ++ * a send does not see any orphans we have just removed, and that it ++ * will see the same inodes regardless of whether a transaction ++ * commit happened before it started (meaning that the commit root ++ * will be the same as the current root) or not. ++ */ ++ if (readonly && pending_snapshot->snap->node != ++ pending_snapshot->snap->commit_root) { ++ trans = btrfs_join_transaction(pending_snapshot->snap); ++ if (IS_ERR(trans) && PTR_ERR(trans) != -ENOENT) { ++ ret = PTR_ERR(trans); ++ goto fail; ++ } ++ if (!IS_ERR(trans)) { ++ ret = btrfs_commit_transaction(trans, ++ pending_snapshot->snap); ++ if (ret) ++ goto fail; ++ } ++ } ++ + inode = btrfs_lookup_dentry(dentry->d_parent->d_inode, dentry); + if (IS_ERR(inode)) { + ret = PTR_ERR(inode); +-- +2.1.1 + ++++++ patches.kernel.org.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.kernel.org/patch-3.17.1 new/patches.kernel.org/patch-3.17.1 --- old/patches.kernel.org/patch-3.17.1 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.kernel.org/patch-3.17.1 2014-10-15 23:06:40.000000000 +0200 @@ -0,0 +1,1170 @@ +From: Jiri Slaby <[email protected]> +Subject: Linux 3.17.1 +Patch-mainline: 3.17.1 +Git-commit: 3631073659d0aafeaa52227bb61a100efaf901dc +Git-commit: 1c40279960bcd7d52dbdf1d466b20d24b99176c8 +Git-commit: 1ede7dcca3c4fa15a518ab0473126f9c3e621e4c +Git-commit: 33ead538f642a33b1d658782a5d14a40b5014d1f +Git-commit: 4451d494b1910bf7b7f8381a637d0fe6d2142467 +Git-commit: ddbe1fca0bcb87ca8c199ea873a456ca8a948567 +Git-commit: 468bcc2a2ca071f652009d2d20d97f2437630cae +Git-commit: dee80ad12d2b1b304286a707fde7ab05d1fc7bab +Git-commit: bfc2d7dfdd761ae3beccdb26abebe03cef042f46 +Git-commit: bf17eba7ae1e813b0ad67cb1078dcbd7083b906e +Git-commit: 85b06f5e53d17c15844ef3cd45d0c7107f0ae45c +Git-commit: 710f1bf16ab1b1558f099b62c5011c4cbba6a7bb +Git-commit: f9554a6b199360c2f888173fd600e1eb7ff165ef +Git-commit: 734016b00b50a3c6a0e1fc1b7b217e783f5123a1 +Git-commit: 593078525c8b234a35a36ff551b8716464e86481 +Git-commit: d433889cd5a0933fbd90f1e65bff5a8d7963cc52 +Git-commit: 09f6edd424218eb69078551b2ecfada1f2d098eb +Git-commit: 3010279f0fc36f0388872203e63ca49912f648fd +Git-commit: 76a33061b9323b7fdb220ae5fa116c10833ec22e +Git-commit: c5c38ef3d70377dc504a6a3f611a3ec814bc757b +Git-commit: 5301e3e117d88ef0967ce278912e54757f1a31a2 +Git-commit: 88b09a6d958af6c458acf055ee2eb5bc9564efda +Git-commit: bdf6fa52f01b941d4a80372d56de465bdbbd1d23 +Git-commit: 3a67c9ccad926a168d8b7891537a452018368a5b +Git-commit: 47549650abd13d873fd2e5fc218db19e21031074 +Git-commit: e87474a6e697857df21cff0707a2472abceca8b3 +Git-commit: 3be07244b7337760a3269d56b2f4a63e72218648 + +Signed-off-by: Jiri Slaby <[email protected]> +--- +diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt +index 10d51c2f10d7..1edd5fdc629d 100644 +--- a/Documentation/kernel-parameters.txt ++++ b/Documentation/kernel-parameters.txt +@@ -3522,6 +3522,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. + READ_DISC_INFO command); + e = NO_READ_CAPACITY_16 (don't use + READ_CAPACITY_16 command); ++ f = NO_REPORT_OPCODES (don't use report opcodes ++ command, uas only); + h = CAPACITY_HEURISTICS (decrease the + reported device capacity by one + sector if the number is odd); +@@ -3541,6 +3543,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. + bogus residue values); + s = SINGLE_LUN (the device has only one + Logical Unit); ++ t = NO_ATA_1X (don't allow ATA(12) and ATA(16) ++ commands, uas only); + u = IGNORE_UAS (don't bind to the uas driver); + w = NO_WP_DETECT (don't test whether the + medium is write-protected). +diff --git a/Makefile b/Makefile +index b77de27e58fc..46694098725d 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,6 +1,6 @@ + VERSION = 3 + PATCHLEVEL = 17 +-SUBLEVEL = 0 ++SUBLEVEL = 1 + EXTRAVERSION = + NAME = Shuffling Zombie Juror + +diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild +index e858aa0ad8af..a52cbf178c3a 100644 +--- a/arch/alpha/include/asm/Kbuild ++++ b/arch/alpha/include/asm/Kbuild +@@ -4,6 +4,7 @@ generic-y += clkdev.h + generic-y += cputime.h + generic-y += exec.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += mcs_spinlock.h + generic-y += preempt.h + generic-y += scatterlist.h +diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild +index e76fd79f32b0..b8fffc1a2ac2 100644 +--- a/arch/arc/include/asm/Kbuild ++++ b/arch/arc/include/asm/Kbuild +@@ -18,6 +18,7 @@ generic-y += ioctl.h + generic-y += ioctls.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kmap_types.h + generic-y += kvm_para.h + generic-y += local.h +diff --git a/arch/arm/include/asm/irq_work.h b/arch/arm/include/asm/irq_work.h +new file mode 100644 +index 000000000000..712d03e5973a +--- /dev/null ++++ b/arch/arm/include/asm/irq_work.h +@@ -0,0 +1,11 @@ ++#ifndef __ASM_ARM_IRQ_WORK_H ++#define __ASM_ARM_IRQ_WORK_H ++ ++#include <asm/smp_plat.h> ++ ++static inline bool arch_irq_work_has_interrupt(void) ++{ ++ return is_smp(); ++} ++ ++#endif /* _ASM_ARM_IRQ_WORK_H */ +diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c +index 9388a3d479e1..bbe22fcb78f6 100644 +--- a/arch/arm/kernel/smp.c ++++ b/arch/arm/kernel/smp.c +@@ -503,7 +503,7 @@ void arch_send_call_function_single_ipi(int cpu) + #ifdef CONFIG_IRQ_WORK + void arch_irq_work_raise(void) + { +- if (is_smp()) ++ if (arch_irq_work_has_interrupt()) + smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK); + } + #endif +diff --git a/arch/arm64/include/asm/Kbuild b/arch/arm64/include/asm/Kbuild +index 0b3fcf86e6ba..c1968475cc4e 100644 +--- a/arch/arm64/include/asm/Kbuild ++++ b/arch/arm64/include/asm/Kbuild +@@ -9,8 +9,8 @@ generic-y += current.h + generic-y += delay.h + generic-y += div64.h + generic-y += dma.h +-generic-y += emergency-restart.h + generic-y += early_ioremap.h ++generic-y += emergency-restart.h + generic-y += errno.h + generic-y += ftrace.h + generic-y += hash.h +diff --git a/arch/arm64/include/asm/irq_work.h b/arch/arm64/include/asm/irq_work.h +new file mode 100644 +index 000000000000..8e24ef3f7c82 +--- /dev/null ++++ b/arch/arm64/include/asm/irq_work.h +@@ -0,0 +1,11 @@ ++#ifndef __ASM_IRQ_WORK_H ++#define __ASM_IRQ_WORK_H ++ ++#include <asm/smp.h> ++ ++static inline bool arch_irq_work_has_interrupt(void) ++{ ++ return !!__smp_cross_call; ++} ++ ++#endif /* __ASM_IRQ_WORK_H */ +diff --git a/arch/arm64/include/asm/smp.h b/arch/arm64/include/asm/smp.h +index a498f2cd2c2a..780f82c827b6 100644 +--- a/arch/arm64/include/asm/smp.h ++++ b/arch/arm64/include/asm/smp.h +@@ -48,6 +48,8 @@ extern void smp_init_cpus(void); + */ + extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int)); + ++extern void (*__smp_cross_call)(const struct cpumask *, unsigned int); ++ + /* + * Called from the secondary holding pen, this is the secondary CPU entry point. + */ +diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c +index 474339718105..b06d1d90ee8c 100644 +--- a/arch/arm64/kernel/smp.c ++++ b/arch/arm64/kernel/smp.c +@@ -470,7 +470,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) + } + } + +-static void (*__smp_cross_call)(const struct cpumask *, unsigned int); ++void (*__smp_cross_call)(const struct cpumask *, unsigned int); + + void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int)) + { +diff --git a/arch/avr32/include/asm/Kbuild b/arch/avr32/include/asm/Kbuild +index 00a0f3ccd6eb..2a71b1cb9848 100644 +--- a/arch/avr32/include/asm/Kbuild ++++ b/arch/avr32/include/asm/Kbuild +@@ -9,6 +9,7 @@ generic-y += exec.h + generic-y += futex.h + generic-y += hash.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += local.h + generic-y += local64.h + generic-y += mcs_spinlock.h +diff --git a/arch/blackfin/include/asm/Kbuild b/arch/blackfin/include/asm/Kbuild +index 0d93b9a79ca9..46ed6bb9c679 100644 +--- a/arch/blackfin/include/asm/Kbuild ++++ b/arch/blackfin/include/asm/Kbuild +@@ -15,6 +15,7 @@ generic-y += hw_irq.h + generic-y += ioctl.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kmap_types.h + generic-y += kvm_para.h +diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild +index 8dbdce8421b0..e77e0c1dbe75 100644 +--- a/arch/c6x/include/asm/Kbuild ++++ b/arch/c6x/include/asm/Kbuild +@@ -22,6 +22,7 @@ generic-y += ioctl.h + generic-y += ioctls.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kmap_types.h + generic-y += local.h +diff --git a/arch/cris/include/asm/Kbuild b/arch/cris/include/asm/Kbuild +index 31742dfadff9..802b94c4ca86 100644 +--- a/arch/cris/include/asm/Kbuild ++++ b/arch/cris/include/asm/Kbuild +@@ -8,6 +8,7 @@ generic-y += clkdev.h + generic-y += cputime.h + generic-y += exec.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += kvm_para.h + generic-y += linkage.h + generic-y += mcs_spinlock.h +diff --git a/arch/frv/include/asm/Kbuild b/arch/frv/include/asm/Kbuild +index 5b73921b6e9d..3caf05cabfc5 100644 +--- a/arch/frv/include/asm/Kbuild ++++ b/arch/frv/include/asm/Kbuild +@@ -3,6 +3,7 @@ generic-y += clkdev.h + generic-y += cputime.h + generic-y += exec.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += mcs_spinlock.h + generic-y += preempt.h + generic-y += scatterlist.h +diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild +index 0e69796b58c7..5f234a5a2320 100644 +--- a/arch/hexagon/include/asm/Kbuild ++++ b/arch/hexagon/include/asm/Kbuild +@@ -23,6 +23,7 @@ generic-y += ioctls.h + generic-y += iomap.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kmap_types.h + generic-y += local.h +diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild +index e8317d2d6c8d..747320be9d0e 100644 +--- a/arch/ia64/include/asm/Kbuild ++++ b/arch/ia64/include/asm/Kbuild +@@ -2,6 +2,7 @@ + generic-y += clkdev.h + generic-y += exec.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += kvm_para.h + generic-y += mcs_spinlock.h + generic-y += preempt.h +diff --git a/arch/m32r/include/asm/Kbuild b/arch/m32r/include/asm/Kbuild +index accc10a3dc78..e02448b0648b 100644 +--- a/arch/m32r/include/asm/Kbuild ++++ b/arch/m32r/include/asm/Kbuild +@@ -3,6 +3,7 @@ generic-y += clkdev.h + generic-y += cputime.h + generic-y += exec.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += mcs_spinlock.h + generic-y += module.h + generic-y += preempt.h +diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild +index c67c94a2d672..dbaf9f3065e8 100644 +--- a/arch/m68k/include/asm/Kbuild ++++ b/arch/m68k/include/asm/Kbuild +@@ -11,6 +11,7 @@ generic-y += hw_irq.h + generic-y += ioctl.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kmap_types.h + generic-y += kvm_para.h +diff --git a/arch/metag/include/asm/Kbuild b/arch/metag/include/asm/Kbuild +index c29ead89a317..7b8111c8f937 100644 +--- a/arch/metag/include/asm/Kbuild ++++ b/arch/metag/include/asm/Kbuild +@@ -19,6 +19,7 @@ generic-y += ioctl.h + generic-y += ioctls.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kmap_types.h + generic-y += kvm_para.h +diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild +index 27a3acda6c19..448143b8cabd 100644 +--- a/arch/microblaze/include/asm/Kbuild ++++ b/arch/microblaze/include/asm/Kbuild +@@ -5,6 +5,7 @@ generic-y += cputime.h + generic-y += device.h + generic-y += exec.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += mcs_spinlock.h + generic-y += preempt.h + generic-y += scatterlist.h +diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild +index 335e5290ec75..57012ef1f51e 100644 +--- a/arch/mips/include/asm/Kbuild ++++ b/arch/mips/include/asm/Kbuild +@@ -3,6 +3,7 @@ generic-y += cputime.h + generic-y += current.h + generic-y += emergency-restart.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += local64.h + generic-y += mcs_spinlock.h + generic-y += mutex.h +diff --git a/arch/mn10300/include/asm/Kbuild b/arch/mn10300/include/asm/Kbuild +index ecbd6676bd33..77eb1a68d13b 100644 +--- a/arch/mn10300/include/asm/Kbuild ++++ b/arch/mn10300/include/asm/Kbuild +@@ -4,6 +4,7 @@ generic-y += clkdev.h + generic-y += cputime.h + generic-y += exec.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += mcs_spinlock.h + generic-y += preempt.h + generic-y += scatterlist.h +diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild +index 480af0d9c2f5..89b61d7dc790 100644 +--- a/arch/openrisc/include/asm/Kbuild ++++ b/arch/openrisc/include/asm/Kbuild +@@ -31,6 +31,7 @@ generic-y += ioctl.h + generic-y += ioctls.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kmap_types.h + generic-y += kvm_para.h +diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild +index ecf25e6678ad..ffb024b8423f 100644 +--- a/arch/parisc/include/asm/Kbuild ++++ b/arch/parisc/include/asm/Kbuild +@@ -10,6 +10,7 @@ generic-y += exec.h + generic-y += hash.h + generic-y += hw_irq.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kvm_para.h + generic-y += local.h +diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild +index 7f23f162ce9c..31e8f59aff38 100644 +--- a/arch/powerpc/include/asm/Kbuild ++++ b/arch/powerpc/include/asm/Kbuild +@@ -1,6 +1,7 @@ + + generic-y += clkdev.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += mcs_spinlock.h + generic-y += preempt.h + generic-y += rwsem.h +diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild +index b3fea0722ff1..773f86676588 100644 +--- a/arch/s390/include/asm/Kbuild ++++ b/arch/s390/include/asm/Kbuild +@@ -2,6 +2,7 @@ + + generic-y += clkdev.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += mcs_spinlock.h + generic-y += preempt.h + generic-y += scatterlist.h +diff --git a/arch/score/include/asm/Kbuild b/arch/score/include/asm/Kbuild +index aad209199f7e..1909d2a5b82f 100644 +--- a/arch/score/include/asm/Kbuild ++++ b/arch/score/include/asm/Kbuild +@@ -6,6 +6,7 @@ generic-y += barrier.h + generic-y += clkdev.h + generic-y += cputime.h + generic-y += hash.h ++generic-y += irq_work.h + generic-y += mcs_spinlock.h + generic-y += preempt.h + generic-y += scatterlist.h +diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild +index c19e47dacb31..5a6c9acff0d2 100644 +--- a/arch/sh/include/asm/Kbuild ++++ b/arch/sh/include/asm/Kbuild +@@ -12,6 +12,7 @@ generic-y += hash.h + generic-y += ioctl.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kvm_para.h + generic-y += local.h + generic-y += local64.h +diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild +index cdd1b447bb6c..f5f94ce1692c 100644 +--- a/arch/sparc/include/asm/Kbuild ++++ b/arch/sparc/include/asm/Kbuild +@@ -8,6 +8,7 @@ generic-y += emergency-restart.h + generic-y += exec.h + generic-y += hash.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += linkage.h + generic-y += local.h + generic-y += local64.h +diff --git a/arch/tile/include/asm/Kbuild b/arch/tile/include/asm/Kbuild +index 0aa5675e7025..e6462b8a6284 100644 +--- a/arch/tile/include/asm/Kbuild ++++ b/arch/tile/include/asm/Kbuild +@@ -17,6 +17,7 @@ generic-y += ioctl.h + generic-y += ioctls.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += local.h + generic-y += local64.h + generic-y += mcs_spinlock.h +diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild +index 7bd64aa2e94a..244b12c8cb39 100644 +--- a/arch/um/include/asm/Kbuild ++++ b/arch/um/include/asm/Kbuild +@@ -14,6 +14,7 @@ generic-y += hash.h + generic-y += hw_irq.h + generic-y += io.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += mcs_spinlock.h + generic-y += mutex.h +diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild +index 1e5fb872a4aa..5a2bb53faa42 100644 +--- a/arch/unicore32/include/asm/Kbuild ++++ b/arch/unicore32/include/asm/Kbuild +@@ -22,6 +22,7 @@ generic-y += ioctl.h + generic-y += ioctls.h + generic-y += ipcbuf.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kmap_types.h + generic-y += local.h +diff --git a/arch/x86/include/asm/irq_work.h b/arch/x86/include/asm/irq_work.h +new file mode 100644 +index 000000000000..78162f8e248b +--- /dev/null ++++ b/arch/x86/include/asm/irq_work.h +@@ -0,0 +1,11 @@ ++#ifndef _ASM_IRQ_WORK_H ++#define _ASM_IRQ_WORK_H ++ ++#include <asm/processor.h> ++ ++static inline bool arch_irq_work_has_interrupt(void) ++{ ++ return cpu_has_apic; ++} ++ ++#endif /* _ASM_IRQ_WORK_H */ +diff --git a/arch/x86/kernel/irq_work.c b/arch/x86/kernel/irq_work.c +index 1de84e3ab4e0..15d741ddfeeb 100644 +--- a/arch/x86/kernel/irq_work.c ++++ b/arch/x86/kernel/irq_work.c +@@ -41,7 +41,7 @@ __visible void smp_trace_irq_work_interrupt(struct pt_regs *regs) + void arch_irq_work_raise(void) + { + #ifdef CONFIG_X86_LOCAL_APIC +- if (!cpu_has_apic) ++ if (!arch_irq_work_has_interrupt()) + return; + + apic->send_IPI_self(IRQ_WORK_VECTOR); +diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild +index c3d20ba6eb86..105d38922c44 100644 +--- a/arch/xtensa/include/asm/Kbuild ++++ b/arch/xtensa/include/asm/Kbuild +@@ -12,6 +12,7 @@ generic-y += hardirq.h + generic-y += hash.h + generic-y += ioctl.h + generic-y += irq_regs.h ++generic-y += irq_work.h + generic-y += kdebug.h + generic-y += kmap_types.h + generic-y += kvm_para.h +diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c +index f3e7b9f894cd..6f674906c64c 100644 +--- a/drivers/ata/libata-core.c ++++ b/drivers/ata/libata-core.c +@@ -4261,10 +4261,10 @@ static unsigned long ata_dev_blacklisted(const struct ata_device *dev) + ata_id_c_string(dev->id, model_rev, ATA_ID_FW_REV, sizeof(model_rev)); + + while (ad->model_num) { +- if (glob_match(model_num, ad->model_num)) { ++ if (glob_match(ad->model_num, model_num)) { + if (ad->model_rev == NULL) + return ad->horkage; +- if (glob_match(model_rev, ad->model_rev)) ++ if (glob_match(ad->model_rev, model_rev)) + return ad->horkage; + } + ad++; +diff --git a/drivers/base/node.c b/drivers/base/node.c +index c6d3ae05f1ca..d51c49c9bafa 100644 +--- a/drivers/base/node.c ++++ b/drivers/base/node.c +@@ -603,7 +603,6 @@ void unregister_one_node(int nid) + return; + + unregister_node(node_devices[nid]); +- kfree(node_devices[nid]); + node_devices[nid] = NULL; + } + +diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c +index b464d03ebf40..e9cc753d5095 100644 +--- a/drivers/crypto/caam/caamhash.c ++++ b/drivers/crypto/caam/caamhash.c +@@ -1413,9 +1413,9 @@ static int ahash_update_first(struct ahash_request *req) + struct device *jrdev = ctx->jrdev; + gfp_t flags = (req->base.flags & (CRYPTO_TFM_REQ_MAY_BACKLOG | + CRYPTO_TFM_REQ_MAY_SLEEP)) ? GFP_KERNEL : GFP_ATOMIC; +- u8 *next_buf = state->buf_0 + state->current_buf * +- CAAM_MAX_HASH_BLOCK_SIZE; +- int *next_buflen = &state->buflen_0 + state->current_buf; ++ u8 *next_buf = state->current_buf ? state->buf_1 : state->buf_0; ++ int *next_buflen = state->current_buf ? ++ &state->buflen_1 : &state->buflen_0; + int to_hash; + u32 *sh_desc = ctx->sh_desc_update_first, *desc; + dma_addr_t ptr = ctx->sh_desc_update_first_dma; +diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c +index 8ca49f04acec..0a3108b3c267 100644 +--- a/drivers/net/ethernet/3com/3c59x.c ++++ b/drivers/net/ethernet/3com/3c59x.c +@@ -2214,7 +2214,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) + } + } + #else +- dma_addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, skb->len, PCI_DMA_TODEVICE)); ++ dma_addr = pci_map_single(VORTEX_PCI(vp), skb->data, skb->len, PCI_DMA_TODEVICE); + if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr)) + goto out_dma_err; + vp->tx_ring[entry].addr = cpu_to_le32(dma_addr); +diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c +index d9b9170ed2fc..71068d7d930d 100644 +--- a/drivers/net/ethernet/broadcom/bcmsysport.c ++++ b/drivers/net/ethernet/broadcom/bcmsysport.c +@@ -848,7 +848,8 @@ static irqreturn_t bcm_sysport_wol_isr(int irq, void *dev_id) + return IRQ_HANDLED; + } + +-static int bcm_sysport_insert_tsb(struct sk_buff *skb, struct net_device *dev) ++static struct sk_buff *bcm_sysport_insert_tsb(struct sk_buff *skb, ++ struct net_device *dev) + { + struct sk_buff *nskb; + struct bcm_tsb *tsb; +@@ -864,7 +865,7 @@ static int bcm_sysport_insert_tsb(struct sk_buff *skb, struct net_device *dev) + if (!nskb) { + dev->stats.tx_errors++; + dev->stats.tx_dropped++; +- return -ENOMEM; ++ return NULL; + } + skb = nskb; + } +@@ -883,7 +884,7 @@ static int bcm_sysport_insert_tsb(struct sk_buff *skb, struct net_device *dev) + ip_proto = ipv6_hdr(skb)->nexthdr; + break; + default: +- return 0; ++ return skb; + } + + /* Get the checksum offset and the L4 (transport) offset */ +@@ -902,7 +903,7 @@ static int bcm_sysport_insert_tsb(struct sk_buff *skb, struct net_device *dev) + tsb->l4_ptr_dest_map = csum_info; + } + +- return 0; ++ return skb; + } + + static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb, +@@ -936,8 +937,8 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb, + + /* Insert TSB and checksum infos */ + if (priv->tsb_en) { +- ret = bcm_sysport_insert_tsb(skb, dev); +- if (ret) { ++ skb = bcm_sysport_insert_tsb(skb, dev); ++ if (!skb) { + ret = NETDEV_TX_OK; + goto out; + } +diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c +index 66979cf7fca6..da2d34688370 100644 +--- a/drivers/net/hyperv/netvsc.c ++++ b/drivers/net/hyperv/netvsc.c +@@ -705,6 +705,7 @@ int netvsc_send(struct hv_device *device, + unsigned int section_index = NETVSC_INVALID_INDEX; + u32 msg_size = 0; + struct sk_buff *skb; ++ u16 q_idx = packet->q_idx; + + + net_device = get_outbound_net_device(device); +@@ -769,24 +770,24 @@ int netvsc_send(struct hv_device *device, + + if (ret == 0) { + atomic_inc(&net_device->num_outstanding_sends); +- atomic_inc(&net_device->queue_sends[packet->q_idx]); ++ atomic_inc(&net_device->queue_sends[q_idx]); + + if (hv_ringbuf_avail_percent(&out_channel->outbound) < + RING_AVAIL_PERCENT_LOWATER) { + netif_tx_stop_queue(netdev_get_tx_queue( +- ndev, packet->q_idx)); ++ ndev, q_idx)); + + if (atomic_read(&net_device-> +- queue_sends[packet->q_idx]) < 1) ++ queue_sends[q_idx]) < 1) + netif_tx_wake_queue(netdev_get_tx_queue( +- ndev, packet->q_idx)); ++ ndev, q_idx)); + } + } else if (ret == -EAGAIN) { + netif_tx_stop_queue(netdev_get_tx_queue( +- ndev, packet->q_idx)); +- if (atomic_read(&net_device->queue_sends[packet->q_idx]) < 1) { ++ ndev, q_idx)); ++ if (atomic_read(&net_device->queue_sends[q_idx]) < 1) { + netif_tx_wake_queue(netdev_get_tx_queue( +- ndev, packet->q_idx)); ++ ndev, q_idx)); + ret = -ENOSPC; + } + } else { +diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c +index ef10302ec936..1f76c2ea53f2 100644 +--- a/drivers/net/team/team.c ++++ b/drivers/net/team/team.c +@@ -647,7 +647,7 @@ static void team_notify_peers(struct team *team) + { + if (!team->notify_peers.count || !netif_running(team->dev)) + return; +- atomic_set(&team->notify_peers.count_pending, team->notify_peers.count); ++ atomic_add(team->notify_peers.count, &team->notify_peers.count_pending); + schedule_delayed_work(&team->notify_peers.dw, 0); + } + +@@ -687,7 +687,7 @@ static void team_mcast_rejoin(struct team *team) + { + if (!team->mcast_rejoin.count || !netif_running(team->dev)) + return; +- atomic_set(&team->mcast_rejoin.count_pending, team->mcast_rejoin.count); ++ atomic_add(team->mcast_rejoin.count, &team->mcast_rejoin.count_pending); + schedule_delayed_work(&team->mcast_rejoin.dw, 0); + } + +diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c +index 2a412fa3b338..af91077d3513 100644 +--- a/drivers/pci/hotplug/pciehp_hpc.c ++++ b/drivers/pci/hotplug/pciehp_hpc.c +@@ -173,7 +173,7 @@ static void pcie_wait_cmd(struct controller *ctrl) + if (!rc) + ctrl_info(ctrl, "Timeout on hotplug command %#010x (issued %u msec ago)\n", + ctrl->slot_ctrl, +- jiffies_to_msecs(now - ctrl->cmd_started)); ++ jiffies_to_msecs(jiffies - ctrl->cmd_started)); + } + + /** +diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c +index 61830b1792eb..14d3e6be8800 100644 +--- a/drivers/tty/serial/8250/8250_pci.c ++++ b/drivers/tty/serial/8250/8250_pci.c +@@ -1788,6 +1788,7 @@ pci_wch_ch353_setup(struct serial_private *priv, + #define PCI_DEVICE_ID_COMMTECH_4222PCIE 0x0022 + #define PCI_DEVICE_ID_BROADCOM_TRUMANAGE 0x160a + #define PCI_DEVICE_ID_AMCC_ADDIDATA_APCI7800 0x818e ++#define PCI_DEVICE_ID_INTEL_QRK_UART 0x0936 + + #define PCI_VENDOR_ID_SUNIX 0x1fd4 + #define PCI_DEVICE_ID_SUNIX_1999 0x1999 +@@ -1898,6 +1899,13 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { + .subdevice = PCI_ANY_ID, + .setup = byt_serial_setup, + }, ++ { ++ .vendor = PCI_VENDOR_ID_INTEL, ++ .device = PCI_DEVICE_ID_INTEL_QRK_UART, ++ .subvendor = PCI_ANY_ID, ++ .subdevice = PCI_ANY_ID, ++ .setup = pci_default_setup, ++ }, + /* + * ITE + */ +@@ -2740,6 +2748,7 @@ enum pci_board_num_t { + pbn_ADDIDATA_PCIe_8_3906250, + pbn_ce4100_1_115200, + pbn_byt, ++ pbn_qrk, + pbn_omegapci, + pbn_NETMOS9900_2s_115200, + pbn_brcm_trumanage, +@@ -3490,6 +3499,12 @@ static struct pciserial_board pci_boards[] = { + .uart_offset = 0x80, + .reg_shift = 2, + }, ++ [pbn_qrk] = { ++ .flags = FL_BASE0, ++ .num_ports = 1, ++ .base_baud = 2764800, ++ .reg_shift = 2, ++ }, + [pbn_omegapci] = { + .flags = FL_BASE0, + .num_ports = 8, +@@ -5192,6 +5207,12 @@ static struct pci_device_id serial_pci_tbl[] = { + pbn_byt }, + + /* ++ * Intel Quark x1000 ++ */ ++ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_UART, ++ PCI_ANY_ID, PCI_ANY_ID, 0, 0, ++ pbn_qrk }, ++ /* + * Cronyx Omega PCI + */ + { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_CRONYX_OMEGA, +diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c +index d481c99a20d7..dc849154f9de 100644 +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -1983,8 +1983,10 @@ void usb_set_device_state(struct usb_device *udev, + || new_state == USB_STATE_SUSPENDED) + ; /* No change to wakeup settings */ + else if (new_state == USB_STATE_CONFIGURED) +- wakeup = udev->actconfig->desc.bmAttributes +- & USB_CONFIG_ATT_WAKEUP; ++ wakeup = (udev->quirks & ++ USB_QUIRK_IGNORE_REMOTE_WAKEUP) ? 0 : ++ udev->actconfig->desc.bmAttributes & ++ USB_CONFIG_ATT_WAKEUP; + else + wakeup = 0; + } +diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c +index bae636e2a1a3..814e712655e4 100644 +--- a/drivers/usb/core/quirks.c ++++ b/drivers/usb/core/quirks.c +@@ -159,6 +159,10 @@ static const struct usb_device_id usb_quirk_list[] = { + /* USB3503 */ + { USB_DEVICE(0x0424, 0x3503), .driver_info = USB_QUIRK_RESET_RESUME }, + ++ /* ASUS Base Station(T100) */ ++ { USB_DEVICE(0x0b05, 0x17e0), .driver_info = ++ USB_QUIRK_IGNORE_REMOTE_WAKEUP }, ++ + { } /* terminating entry must be last */ + }; + +diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c +index 6935a822ce2b..f80151932053 100644 +--- a/drivers/usb/gadget/composite.c ++++ b/drivers/usb/gadget/composite.c +@@ -1956,7 +1956,6 @@ void composite_dev_cleanup(struct usb_composite_dev *cdev) + } + if (cdev->req) { + kfree(cdev->req->buf); +- usb_ep_dequeue(cdev->gadget->ep0, cdev->req); + usb_ep_free_request(cdev->gadget->ep0, cdev->req); + } + cdev->next_string_id = 0; +diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c +index 0dc3552d1360..7ad7137ba39a 100644 +--- a/drivers/usb/gadget/function/f_fs.c ++++ b/drivers/usb/gadget/function/f_fs.c +@@ -2393,7 +2393,8 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep, + struct usb_endpoint_descriptor *ds = (void *)desc; + struct ffs_function *func = priv; + struct ffs_ep *ffs_ep; +- unsigned ep_desc_id, idx; ++ unsigned ep_desc_id; ++ int idx; + static const char *speed_names[] = { "full", "high", "super" }; + + if (type != FFS_DESCRIPTOR) +diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c +index c791ba5da91a..154bcf1b5dfa 100644 +--- a/drivers/usb/musb/musb_dsps.c ++++ b/drivers/usb/musb/musb_dsps.c +@@ -870,6 +870,7 @@ static int dsps_suspend(struct device *dev) + struct musb *musb = platform_get_drvdata(glue->musb); + void __iomem *mbase = musb->ctrl_base; + ++ del_timer_sync(&glue->timer); + glue->context.control = dsps_readl(mbase, wrp->control); + glue->context.epintr = dsps_readl(mbase, wrp->epintr_set); + glue->context.coreintr = dsps_readl(mbase, wrp->coreintr_set); +@@ -895,6 +896,7 @@ static int dsps_resume(struct device *dev) + dsps_writel(mbase, wrp->mode, glue->context.mode); + dsps_writel(mbase, wrp->tx_mode, glue->context.tx_mode); + dsps_writel(mbase, wrp->rx_mode, glue->context.rx_mode); ++ setup_timer(&glue->timer, otg_timer, (unsigned long) musb); + + return 0; + } +diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c +index e4bb62225cb9..eca1747ca8c7 100644 +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -122,6 +122,7 @@ static const struct usb_device_id id_table[] = { + { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ + { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ + { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ ++ { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */ + { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ + { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ + { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ +@@ -155,6 +156,7 @@ static const struct usb_device_id id_table[] = { + { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */ + { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */ + { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ ++ { USB_DEVICE(0x1D6F, 0x0010) }, /* Seluxit ApS RF Dongle */ + { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ + { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */ + { USB_DEVICE(0x1FB9, 0x0100) }, /* Lake Shore Model 121 Current Source */ +diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c +index 9bfa7252f7f9..98ff609f968b 100644 +--- a/drivers/usb/storage/uas.c ++++ b/drivers/usb/storage/uas.c +@@ -28,6 +28,7 @@ + #include <scsi/scsi_tcq.h> + + #include "uas-detect.h" ++#include "scsiglue.h" + + /* + * The r00-r01c specs define this version of the SENSE IU data structure. +@@ -49,6 +50,7 @@ struct uas_dev_info { + struct usb_anchor cmd_urbs; + struct usb_anchor sense_urbs; + struct usb_anchor data_urbs; ++ unsigned long flags; + int qdepth, resetting; + struct response_iu response; + unsigned cmd_pipe, status_pipe, data_in_pipe, data_out_pipe; +@@ -714,6 +716,15 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd, + + BUILD_BUG_ON(sizeof(struct uas_cmd_info) > sizeof(struct scsi_pointer)); + ++ if ((devinfo->flags & US_FL_NO_ATA_1X) && ++ (cmnd->cmnd[0] == ATA_12 || cmnd->cmnd[0] == ATA_16)) { ++ memcpy(cmnd->sense_buffer, usb_stor_sense_invalidCDB, ++ sizeof(usb_stor_sense_invalidCDB)); ++ cmnd->result = SAM_STAT_CHECK_CONDITION; ++ cmnd->scsi_done(cmnd); ++ return 0; ++ } ++ + spin_lock_irqsave(&devinfo->lock, flags); + + if (devinfo->resetting) { +@@ -950,6 +961,10 @@ static int uas_slave_alloc(struct scsi_device *sdev) + static int uas_slave_configure(struct scsi_device *sdev) + { + struct uas_dev_info *devinfo = sdev->hostdata; ++ ++ if (devinfo->flags & US_FL_NO_REPORT_OPCODES) ++ sdev->no_report_opcodes = 1; ++ + scsi_set_tag_type(sdev, MSG_ORDERED_TAG); + scsi_activate_tcq(sdev, devinfo->qdepth - 2); + return 0; +@@ -1087,6 +1102,8 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) + devinfo->resetting = 0; + devinfo->running_task = 0; + devinfo->shutdown = 0; ++ devinfo->flags = id->driver_info; ++ usb_stor_adjust_quirks(udev, &devinfo->flags); + init_usb_anchor(&devinfo->cmd_urbs); + init_usb_anchor(&devinfo->sense_urbs); + init_usb_anchor(&devinfo->data_urbs); +diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h +index 7244444df8ee..8511b54a65d9 100644 +--- a/drivers/usb/storage/unusual_uas.h ++++ b/drivers/usb/storage/unusual_uas.h +@@ -40,13 +40,38 @@ + * and don't forget to CC: the USB development list <[email protected]> + */ + +-/* +- * This is an example entry for the US_FL_IGNORE_UAS flag. Once we have an +- * actual entry using US_FL_IGNORE_UAS this entry should be removed. +- * +- * UNUSUAL_DEV( 0xabcd, 0x1234, 0x0100, 0x0100, +- * "Example", +- * "Storage with broken UAS", +- * USB_SC_DEVICE, USB_PR_DEVICE, NULL, +- * US_FL_IGNORE_UAS), +- */ ++/* https://bugzilla.kernel.org/show_bug.cgi?id=79511 */ ++UNUSUAL_DEV(0x0bc2, 0x2312, 0x0000, 0x9999, ++ "Seagate", ++ "Expansion Desk", ++ USB_SC_DEVICE, USB_PR_DEVICE, NULL, ++ US_FL_NO_ATA_1X), ++ ++/* https://bbs.archlinux.org/viewtopic.php?id=183190 */ ++UNUSUAL_DEV(0x0bc2, 0x3312, 0x0000, 0x9999, ++ "Seagate", ++ "Expansion Desk", ++ USB_SC_DEVICE, USB_PR_DEVICE, NULL, ++ US_FL_NO_ATA_1X), ++ ++/* https://bbs.archlinux.org/viewtopic.php?id=183190 */ ++UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999, ++ "Seagate", ++ "Backup+ BK", ++ USB_SC_DEVICE, USB_PR_DEVICE, NULL, ++ US_FL_NO_ATA_1X), ++ ++/* Reported-by: Claudio Bizzarri <[email protected]> */ ++UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999, ++ "JMicron", ++ "JMS567", ++ USB_SC_DEVICE, USB_PR_DEVICE, NULL, ++ US_FL_NO_REPORT_OPCODES), ++ ++/* Most ASM1051 based devices have issues with uas, blacklist them all */ ++/* Reported-by: Hans de Goede <[email protected]> */ ++UNUSUAL_DEV(0x174c, 0x5106, 0x0000, 0x9999, ++ "ASMedia", ++ "ASM1051", ++ USB_SC_DEVICE, USB_PR_DEVICE, NULL, ++ US_FL_IGNORE_UAS), +diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c +index cedb29252a92..f60e7d463636 100644 +--- a/drivers/usb/storage/usb.c ++++ b/drivers/usb/storage/usb.c +@@ -478,7 +478,8 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags) + US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE | + US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT | + US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 | +- US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE); ++ US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE | ++ US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES); + + p = quirks; + while (*p) { +@@ -516,6 +517,9 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags) + case 'e': + f |= US_FL_NO_READ_CAPACITY_16; + break; ++ case 'f': ++ f |= US_FL_NO_REPORT_OPCODES; ++ break; + case 'h': + f |= US_FL_CAPACITY_HEURISTICS; + break; +@@ -543,6 +547,9 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags) + case 's': + f |= US_FL_SINGLE_LUN; + break; ++ case 't': ++ f |= US_FL_NO_ATA_1X; ++ break; + case 'u': + f |= US_FL_IGNORE_UAS; + break; +diff --git a/include/asm-generic/irq_work.h b/include/asm-generic/irq_work.h +new file mode 100644 +index 000000000000..a44f452c6590 +--- /dev/null ++++ b/include/asm-generic/irq_work.h +@@ -0,0 +1,10 @@ ++#ifndef __ASM_IRQ_WORK_H ++#define __ASM_IRQ_WORK_H ++ ++static inline bool arch_irq_work_has_interrupt(void) ++{ ++ return false; ++} ++ ++#endif /* __ASM_IRQ_WORK_H */ ++ +diff --git a/include/linux/irq_work.h b/include/linux/irq_work.h +index bf9422c3aefe..bf3fe719c7ce 100644 +--- a/include/linux/irq_work.h ++++ b/include/linux/irq_work.h +@@ -39,9 +39,12 @@ bool irq_work_queue_on(struct irq_work *work, int cpu); + #endif + + void irq_work_run(void); ++void irq_work_tick(void); + void irq_work_sync(struct irq_work *work); + + #ifdef CONFIG_IRQ_WORK ++#include <asm/irq_work.h> ++ + bool irq_work_needs_cpu(void); + #else + static inline bool irq_work_needs_cpu(void) { return false; } +diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h +index 55a17b188daa..32e0f5c04e72 100644 +--- a/include/linux/usb/quirks.h ++++ b/include/linux/usb/quirks.h +@@ -41,4 +41,7 @@ + */ + #define USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL 0x00000080 + ++/* device generates spurious wakeup, ignore remote wakeup capability */ ++#define USB_QUIRK_IGNORE_REMOTE_WAKEUP 0x00000200 ++ + #endif /* __LINUX_USB_QUIRKS_H */ +diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h +index 9b7de1b46437..a7f2604c5f25 100644 +--- a/include/linux/usb_usual.h ++++ b/include/linux/usb_usual.h +@@ -73,6 +73,10 @@ + /* Device advertises UAS but it is broken */ \ + US_FLAG(BROKEN_FUA, 0x01000000) \ + /* Cannot handle FUA in WRITE or READ CDBs */ \ ++ US_FLAG(NO_ATA_1X, 0x02000000) \ ++ /* Cannot handle ATA_12 or ATA_16 CDBs */ \ ++ US_FLAG(NO_REPORT_OPCODES, 0x04000000) \ ++ /* Cannot handle MI_REPORT_SUPPORTED_OPERATION_CODES */ \ + + #define US_FLAG(name, value) US_FL_##name = value , + enum { US_DO_ALL_FLAGS }; +diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h +index f22538e68245..d4a20d00461c 100644 +--- a/include/net/sctp/command.h ++++ b/include/net/sctp/command.h +@@ -115,7 +115,7 @@ typedef enum { + * analysis of the state functions, but in reality just taken from + * thin air in the hopes othat we don't trigger a kernel panic. + */ +-#define SCTP_MAX_NUM_COMMANDS 14 ++#define SCTP_MAX_NUM_COMMANDS 20 + + typedef union { + void *zero_all; /* Set to NULL to clear the entire union */ +diff --git a/kernel/irq_work.c b/kernel/irq_work.c +index e6bcbe756663..385b85aded19 100644 +--- a/kernel/irq_work.c ++++ b/kernel/irq_work.c +@@ -115,8 +115,10 @@ bool irq_work_needs_cpu(void) + + raised = &__get_cpu_var(raised_list); + lazy = &__get_cpu_var(lazy_list); +- if (llist_empty(raised) && llist_empty(lazy)) +- return false; ++ ++ if (llist_empty(raised) || arch_irq_work_has_interrupt()) ++ if (llist_empty(lazy)) ++ return false; + + /* All work should have been flushed before going offline */ + WARN_ON_ONCE(cpu_is_offline(smp_processor_id())); +@@ -171,6 +173,15 @@ void irq_work_run(void) + } + EXPORT_SYMBOL_GPL(irq_work_run); + ++void irq_work_tick(void) ++{ ++ struct llist_head *raised = &__get_cpu_var(raised_list); ++ ++ if (!llist_empty(raised) && !arch_irq_work_has_interrupt()) ++ irq_work_run_list(raised); ++ irq_work_run_list(&__get_cpu_var(lazy_list)); ++} ++ + /* + * Synchronize against the irq_work @entry, ensures the entry is not + * currently in use. +diff --git a/kernel/time/timer.c b/kernel/time/timer.c +index aca5dfe2fa3d..9bbb8344ed3b 100644 +--- a/kernel/time/timer.c ++++ b/kernel/time/timer.c +@@ -1385,7 +1385,7 @@ void update_process_times(int user_tick) + rcu_check_callbacks(cpu, user_tick); + #ifdef CONFIG_IRQ_WORK + if (in_irq()) +- irq_work_run(); ++ irq_work_tick(); + #endif + scheduler_tick(); + run_posix_cpu_timers(p); +diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c +index f304471477dc..97299d76c1b0 100644 +--- a/net/ipv6/ip6_gre.c ++++ b/net/ipv6/ip6_gre.c +@@ -782,7 +782,7 @@ static inline int ip6gre_xmit_ipv4(struct sk_buff *skb, struct net_device *dev) + encap_limit = t->parms.encap_limit; + + memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6)); +- fl6.flowi6_proto = IPPROTO_IPIP; ++ fl6.flowi6_proto = IPPROTO_GRE; + + dsfield = ipv4_get_dsfield(iph); + +@@ -832,7 +832,7 @@ static inline int ip6gre_xmit_ipv6(struct sk_buff *skb, struct net_device *dev) + encap_limit = t->parms.encap_limit; + + memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6)); +- fl6.flowi6_proto = IPPROTO_IPV6; ++ fl6.flowi6_proto = IPPROTO_GRE; + + dsfield = ipv6_get_dsfield(ipv6h); + if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) +diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c +index c28b0d327b12..4f4e08b0e2b7 100644 +--- a/net/sched/cls_api.c ++++ b/net/sched/cls_api.c +@@ -549,6 +549,7 @@ void tcf_exts_change(struct tcf_proto *tp, struct tcf_exts *dst, + tcf_tree_lock(tp); + list_splice_init(&dst->actions, &tmp); + list_splice(&src->actions, &dst->actions); ++ dst->type = src->type; + tcf_tree_unlock(tp); + tcf_action_destroy(&tmp, TCA_ACT_UNBIND); + #endif +diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c +index d3f1ea460c50..c8f606324134 100644 +--- a/net/sctp/sm_statefuns.c ++++ b/net/sctp/sm_statefuns.c +@@ -1775,9 +1775,22 @@ static sctp_disposition_t sctp_sf_do_dupcook_a(struct net *net, + /* Update the content of current association. */ + sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_ASSOC, SCTP_ASOC(new_asoc)); + sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev)); +- sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, +- SCTP_STATE(SCTP_STATE_ESTABLISHED)); +- sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); ++ if (sctp_state(asoc, SHUTDOWN_PENDING) && ++ (sctp_sstate(asoc->base.sk, CLOSING) || ++ sock_flag(asoc->base.sk, SOCK_DEAD))) { ++ /* if were currently in SHUTDOWN_PENDING, but the socket ++ * has been closed by user, don't transition to ESTABLISHED. ++ * Instead trigger SHUTDOWN bundled with COOKIE_ACK. ++ */ ++ sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); ++ return sctp_sf_do_9_2_start_shutdown(net, ep, asoc, ++ SCTP_ST_CHUNK(0), NULL, ++ commands); ++ } else { ++ sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, ++ SCTP_STATE(SCTP_STATE_ESTABLISHED)); ++ sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); ++ } + return SCTP_DISPOSITION_CONSUME; + + nomem_ev: ++++++ series.conf ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:04.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:04.000000000 +0200 @@ -27,6 +27,7 @@ # DO NOT MODIFY THEM! # Send separate patches upstream if you find a problem... ######################################################## + patches.kernel.org/patch-3.17.1 ######################################################## # Build fixes that apply to the vanilla kernel too. @@ -248,6 +249,7 @@ ######################################################## patches.suse/btrfs-use-correct-device-for-maps.patch patches.suse/btrfs-check-index-in-extent_buffer_page + patches.fixes/btrfs-0001-revert-race-free-update-of-commit-root-for-ro-.patch ######################################################## # Reiserfs Patches ++++++ source-timestamp ++++++ --- /var/tmp/diff_new_pack.XPrQjP/_old 2014-10-23 14:20:04.000000000 +0200 +++ /var/tmp/diff_new_pack.XPrQjP/_new 2014-10-23 14:20:04.000000000 +0200 @@ -1,3 +1,3 @@ -2014-10-09 06:04:52 +0200 -GIT Revision: c46742374ebc367322b8c4468b64397a5f23d7ac +2014-10-19 01:36:23 +0200 +GIT Revision: 5c4d099465293cd2ef36a6336a5bea79c4e919ef GIT Branch: stable -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
