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]

Reply via email to