[linux] 02/03: Update to 4.10-rc5

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Tue Jan 24 21:06:53 UTC 2017


This is an automated email from the git hooks/post-receive script.

benh pushed a commit to branch master
in repository linux.

commit 601b9e92a15cc060b76facba7f4fdd6861be3a6f
Author: Ben Hutchings <ben at decadent.org.uk>
Date:   Tue Jan 24 19:25:08 2017 +0000

    Update to 4.10-rc5
    
    Drop/refresh patches as appropriate.
    
    [rt] Disable until it is updated for 4.10 or later
---
 debian/changelog                                   |  10 +-
 debian/config/defines                              |   2 +-
 .../patches/bugfix/all/ext4-fix-bug-838544.patch   | 218 ------------
 ...emove-redundant-log-messages-from-drivers.patch | 251 ++++++--------
 ...mware_class-log-every-success-and-failure.patch |   6 +-
 ...le_softdep-declarations-for-hard-coded-cr.patch |  15 +-
 ...l-workqueue-for-creating-per-memcg-caches.patch |  73 ----
 .../all/tools-lib-traceevent-use-ldflags.patch     |  14 +-
 ...-missing-crcs-add-yet-more-asm-prototypes.patch |   6 +-
 .../revert-s390-move-exports-to-definitions.patch  |  29 +-
 .../x86/tools-hv-fix-fortify-format-warning.patch  |  55 ---
 debian/patches/debian/tools-perf-install.patch     |   6 +-
 debian/patches/debian/tools-perf-version.patch     |  12 +-
 debian/patches/debian/version.patch                |   6 +-
 debian/patches/features/all/aufs4/aufs4-base.patch |  48 +--
 debian/patches/features/all/aufs4/aufs4-mmap.patch |  83 ++---
 .../features/all/aufs4/aufs4-standalone.patch      |  98 ++----
 ...-acpi_rsdp-kernel-parameter-when-securele.patch |  10 +-
 ...ernel-config-option-to-set-securelevel-wh.patch |  19 +-
 ...wn-bar-access-when-securelevel-is-enabled.patch |  19 +-
 ...v-mem-and-dev-kmem-when-securelevel-is-se.patch |  10 +-
 .../uswsusp-disable-when-securelevel-is-set.patch  |   6 +-
 .../ARM-dts-orion5x-convert-ls-chl-to-FDT.patch    | 207 ------------
 .../arm/arm-dts-add-support-for-turris-omnia.patch | 376 ---------------------
 .../x86-make-x32-syscall-support-conditional.patch |  30 +-
 debian/patches/series                              |   5 -
 26 files changed, 284 insertions(+), 1330 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 8a36fff..36702d8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,11 @@
-linux (4.9.2-3) UNRELEASED; urgency=medium
+linux (4.10~rc5-1~exp1) UNRELEASED; urgency=medium
 
-  [ Roger Shimizu ]
-  * [armel] Add DT support of Buffalo Linkstation Live v3 (LS-CHL)
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [rt] Disable until it is updated for 4.10 or later
 
- -- Roger Shimizu <rogershimizu at gmail.com>  Thu, 19 Jan 2017 01:06:58 +0900
+ -- Ben Hutchings <ben at decadent.org.uk>  Tue, 24 Jan 2017 19:08:03 +0000
 
 linux (4.9.2-2) unstable; urgency=medium
 
diff --git a/debian/config/defines b/debian/config/defines
index 07cab40..0d6833e 100644
--- a/debian/config/defines
+++ b/debian/config/defines
@@ -48,7 +48,7 @@ debug-info: true
 signed-modules: true
 
 [featureset-rt_base]
-enabled: true
+enabled: false
 
 [description]
 part-long-up: This kernel is not suitable for SMP (multi-processor,
diff --git a/debian/patches/bugfix/all/ext4-fix-bug-838544.patch b/debian/patches/bugfix/all/ext4-fix-bug-838544.patch
deleted file mode 100644
index 2bdf2b5..0000000
--- a/debian/patches/bugfix/all/ext4-fix-bug-838544.patch
+++ /dev/null
@@ -1,218 +0,0 @@
-From:  "Darrick J. Wong" <darrick.wong at oracle.com>
-Date: Mon, 19 Sep 2016 22:52:16 -0700
-Subject: Re: Trouble mounting metadata_csum ext4 filesystems with v4.7.x after c9274d891869880648c4ee9365df3ecc7ba2e285: not enough inode bytes checksummed?
-Origin: https://www.spinics.net/lists/linux-fsdevel/msg101888.html
-Bug-Debian: https://bugs.debian.org/838544
-
-[cc Ted and the ext4 list]
-
-On Mon, Sep 19, 2016 at 03:19:03PM +0100, Nix wrote:
-> So I ran into spurious metadata corruption warnings in v4.7.2 due to the
-> problem fixed by c9274d8. I applied an early version of the fix,
-> rebooted, and oh dear root filesystem mount failure with invalid
-> checksum errors.
-> 
-> The problem persists in v4.7.4, as seen here in qemu emulation on a raw
-> image dd'ed directly from the thing that won't boot, with a couple of
-> printk()s:
-> 
-> # mount /dev/vda /new-root/
-> [    8.124692] EXT4-fs (vda): couldn't mount as ext3 due to feature incompatibilities
-> [    8.126977] EXT4-fs (vda): couldn't mount as ext2 due to feature incompatibilities
-> [    9.017980] Inode size 256 > good old size 128; fits in inode: 0
-> [    8.134897] inode 8: provided: 5c50l; calculated: 36e1i
-> [    8.135098] EXT4-fs error (device vda): ext4_iget:4479: inode #8: comm mount: checksum invalid
-> [    8.138992] EXT4-fs (vda): no journal found
-> [    8.165744] UDF-fs: warning (device vda): udf_fill_super: No partition found (2)
-> mount: mounting /dev/vda on /new-root/ failed: Invalid argument
-> 
-> I added a bit of printking to show the failure of the journal inode
-> checksum to pass muster. e2fsck (from e2fsprogs 1.43.1-14) is quite
-> happy with this filesystem. Reverting c9274d8 makes everything happy
-> again (well, it does bring the original bug back, which is a rather
-> serious one, but other than that...):
-> 
-> [    9.823032] EXT4-fs (vda): couldn't mount as ext3 due to feature incompatibilities
-> [    9.824647] EXT4-fs (vda): couldn't mount as ext2 due to feature incompatibilities
-> [    9.832593] inode 8: provided: 5c50l; calculated: 5c50i
-> [    9.839253] inode 2: provided: d6ea92e9l; calculated: d6ea92e9i
-> [    9.846947] EXT4-fs (vda): mounted filesystem with ordered data mode. Opts: (null)
-> 
-> So c9274d8 is clearly messing up the calculation of the checksum.
-> 
-> The problem becomes more evident if we add more printk()s to the old
-> code, so we can see what region is being checksummed:
-> 
-> # mount /dev/vda /new-root
-> [    6.827297] inode 8: unadjusted csum of 256 bytes with seed a5df92a7: 449a5c50
-> [    6.827596] adjusted csum: 5c50
-> [    6.835993] inode 2: unadjusted csum of 256 bytes with seed 759c6c33: d6ea92e9
-> [    6.836173] adjusted csum: d6ea92e9
-> [    6.844801] EXT4-fs (vda): mounted filesystem with ordered data mode. Opts:
-> 
-> and the new:
-> 
-> [   11.098013] inode 8: csum of first 124 bytes with seed a5df92a7: f375b663
-> [   11.098205] inode 8: added csum of 2 dummy_csum bytes with seed a5df92a7: 20cfebcb
-> [   11.098420] inode 8: added csum of 2 bytes from offset 126 -- 128 to existing: d79e7432
-> [   11.098646] inode 8: > GOOD_OLD_INODE_SIZE; added csum of 2 bytes from 128 -- 130 to existing: d10936e1
-> [   11.098890] 8: adjusted csum: 36e1
-> [   11.099133] EXT4-fs error (device vda): ext4_iget:4483: inode #8: comm mount: checksum invalid
-> 
-> We are not checksumming enough bytes! We used to checksum the entire
-> 256-byte inode: now, we checksum only 130 bytes of it, which isn't even
-> enough to cover the 28-byte extra_isize on this filesystem and is more
-> or less guaranteed to give the wrong answer. I'd fix the problem, but I
-> frankly can't see how the new code is meant to be equivalent to the old
-> code in any sense -- most particularly what the stuff around dummy_csum
-> is meant to do -- so I thought it better to let the people who wrote it
-> fix it :)
-
-Sh*t, I missed this during the review.  So your filesystem image (thank
-you!) had this to say:
-
-debugfs> stats
-Inode size:               256
-debugfs> stat <8>
-Size of extra inode fields: 0
-
-Basically, a 128-byte inode inside a filesystem that allocated 256 bytes
-for each inode.  As you point out, the old code would checksum the entire
-allocated space, whether or not the inode core used it.  Obviously, you
-want this since inline extended attributes live in that space:
-
-csum = ext4_chksum(sbi, ei->i_csum_seed, (__u8 *)raw,
-		   EXT4_INODE_SIZE(inode->i_sb));
-
-The new code, on the other hand, carefully checksums around the
-i_checksum fields and only bothers to checksum the space between the end
-of i_checksum_hi and the end of the allocated space if the inode core is
-big enough to store i_checksum_hi.  Since we allocated 256 bytes for
-each inode, we checksum the first two bytes after byte 128
-(EXT4_GOOD_OLD_INODE_SIZE), but then we see that i_extra_size == 0 so we
-never bother to checksum anything after that.  This is of course wrong
-since we no longer checksum the xattr space and we've deviated from the
-pre-4.7.4 (documented) on-disk format.
-
-*FORTUNATELY* since the root inode fails the read verifier, the file (in
-this case the root dir) can't be modified and therefore nothing has been
-corrupted.  Especially fortunate for you, the fs won't mount, reducing
-the chances that any serious damage has occurred.
-
-I /think/ the fix in this case is to hoist the last ext4_chksum call
-out of the EXT4_FITS_IN_INODE blob:
-
-if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
-	offset = offsetof(struct ext4_inode, i_checksum_hi);
-	csum = ext4_chksum(sbi, csum, (__u8 *)raw +
-			   EXT4_GOOD_OLD_INODE_SIZE,
-			   offset - EXT4_GOOD_OLD_INODE_SIZE);
-	if (EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi)) {
-		csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum,
-				   csum_size);
-		offset += csum_size;
-	}
-	csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
-			   EXT4_INODE_SIZE(inode->i_sb) - offset);
-}
-
-Can you give that a try?
-
-> tune2fs output for this filesystem, particularly the extra_isize and
-> inode size fields are likely relevant:
-> 
-> tune2fs 1.43.1 (08-Jun-2016)
-> Filesystem volume name:   root
-> Last mounted on:          /
-> Filesystem UUID:          6c0f7fa7-d6c2-4054-bff3-3a878460bdc7
-> Filesystem magic number:  0xEF53
-> Filesystem revision #:    1 (dynamic)
-> Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
-> Filesystem flags:         signed_directory_hash
-> Default mount options:    (none)
-> Filesystem state:         clean
-> Errors behavior:          Continue
-> Filesystem OS type:       Linux
-> Inode count:              65536
-> Block count:              262144
-> Reserved block count:     13107
-> Free blocks:              227009
-> Free inodes:              59499
-> First block:              0
-> Block size:               4096
-> Fragment size:            4096
-> Group descriptor size:    64
-> Reserved GDT blocks:      63
-> Blocks per group:         32768
-> Fragments per group:      32768
-> Inodes per group:         8192
-> Inode blocks per group:   512
-> RAID stripe width:        16
-> Flex block group size:    64
-> Filesystem created:       Tue May 26 21:28:46 2009
-> Last mount time:          Sun Sep 18 23:34:41 2016
-> Last write time:          Mon Sep 19 13:51:59 2016
-> Mount count:              0
-> Maximum mount count:      36
-> Last checked:             Mon Sep 19 13:51:59 2016
-> Check interval:           15552000 (6 months)
-> Next check after:         Sat Mar 18 12:51:59 2017
-> Lifetime writes:          16 GB
-> Reserved blocks uid:      0 (user root)
-> Reserved blocks gid:      0 (group root)
-> First inode:              11
-> Inode size:               256
-> Required extra isize:     28
-> Desired extra isize:      28
-> Journal inode:            8
-> Default directory hash:   half_md4
-> Directory Hash Seed:      f1da2da0-057e-4ba0-a021-3d56db5b24ab
-> Journal backup:           inode blocks
-> Checksum type:            crc32c
-> Checksum:                 0x92acf115
-> 
-> This is an old, upgraded fs from before the days of checksums, but even
-> so I'm surprised that with a 256-byte inode and no xattrs in use,
-> EXT4_FITS_IN_INODE is false. Maybe the extra_isize isn't big enough?
-
-It's zero, so yes. :)
-
-> An lzipped e2image of the problematic filesystem is available from
-> <http://www.esperi.org.uk/~nix/temporary/csum-corruption.img.lz>:
-> I have verified that the problem recurs with this image.
-> 
-> I can also replicate the problem in literally seconds if you need more
-> debugging output.
-> 
-> 
-> ... The mystery is why this isn't going wrong anywhere else: I have
-> metadata_csum working on every fs on a bunch of other ext4-using
-> systems, and indeed on every filesystem on this machine as well, as long
-> as c9274d8 is not applied. Many of them are similarly upgraded pre-csum
-> fses with the same inode size and extra_isize, but they work...
-
-Hard to say, but this bug only affects inodes with 0 < i_extra_size <= 4
-i.e. 128 < inode-core-size <= 130.  Maybe an old ext3 fs that was
-created with 256 bytes per inode but inode-core-size of 128?
-
-Uck.  Sorry about this mess.
-
---D
-
-[bwh: Converted to a patch]
----
---- a/fs/ext4/inode.c
-+++ b/fs/ext4/inode.c
-@@ -71,10 +71,9 @@ static __u32 ext4_inode_csum(struct inod
- 			csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum,
- 					   csum_size);
- 			offset += csum_size;
--			csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
--					   EXT4_INODE_SIZE(inode->i_sb) -
--					   offset);
- 		}
-+		csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
-+				   EXT4_INODE_SIZE(inode->i_sb) - offset);
- 	}
- 
- 	return csum;
diff --git a/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch b/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
index 5ecdb4c..2e36aee 100644
--- a/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
+++ b/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
@@ -53,7 +53,7 @@ upstream submission.
  	/* disable MPU */
 --- a/arch/x86/kernel/cpu/microcode/amd.c
 +++ b/arch/x86/kernel/cpu/microcode/amd.c
-@@ -917,10 +917,8 @@ static enum ucode_state request_microcod
+@@ -918,10 +918,8 @@ static enum ucode_state request_microcod
  	if (c->x86 >= 0x15)
  		snprintf(fw_name, sizeof(fw_name), "amd-ucode/microcode_amd_fam%.2xh.bin", c->x86);
  
@@ -203,7 +203,7 @@ upstream submission.
  		       fw->size, fw_name);
 --- a/drivers/dma/imx-sdma.c
 +++ b/drivers/dma/imx-sdma.c
-@@ -1433,11 +1433,8 @@ static void sdma_load_firmware(const str
+@@ -1438,11 +1438,8 @@ static void sdma_load_firmware(const str
  	const struct sdma_script_start_addrs *addr;
  	unsigned short *ram_code;
  
@@ -233,7 +233,7 @@ upstream submission.
  	where = 0;
 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
 +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
-@@ -1787,10 +1787,8 @@ gf100_gr_ctor_fw_legacy(struct gf100_gr
+@@ -1793,10 +1793,8 @@ gf100_gr_ctor_fw_legacy(struct gf100_gr
  	if (ret) {
  		snprintf(f, sizeof(f), "nouveau/%s", fwname);
  		ret = request_firmware(&fw, f, device->dev);
@@ -345,7 +345,7 @@ upstream submission.
  			  card->name, firmware->size);
 --- a/drivers/media/tuners/tuner-xc2028.c
 +++ b/drivers/media/tuners/tuner-xc2028.c
-@@ -1374,7 +1374,6 @@ static void load_firmware_cb(const struc
+@@ -1370,7 +1370,6 @@ static void load_firmware_cb(const struc
  
  	tuner_dbg("request_firmware_nowait(): %s\n", fw ? "OK" : "error");
  	if (!fw) {
@@ -355,7 +355,7 @@ upstream submission.
  	}
 --- a/drivers/media/usb/dvb-usb/dib0700_devices.c
 +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
-@@ -2411,12 +2411,9 @@ static int stk9090m_frontend_attach(stru
+@@ -2410,12 +2410,9 @@ static int stk9090m_frontend_attach(stru
  
  	dib9000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x10, 0x80);
  
@@ -370,7 +370,7 @@ upstream submission.
  	stk9090m_config.microcode_B_fe_size = state->frontend_firmware->size;
  	stk9090m_config.microcode_B_fe_buffer = state->frontend_firmware->data;
  
-@@ -2477,12 +2474,9 @@ static int nim9090md_frontend_attach(str
+@@ -2476,12 +2473,9 @@ static int nim9090md_frontend_attach(str
  	msleep(20);
  	dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1);
  
@@ -387,13 +387,12 @@ upstream submission.
  	nim9090md_config[1].microcode_B_fe_size = state->frontend_firmware->size;
 --- a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c
 +++ b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c
-@@ -80,14 +80,9 @@ int dvb_usb_download_firmware(struct usb
+@@ -79,13 +79,9 @@ int dvb_usb_download_firmware(struct usb
  	int ret;
  	const struct firmware *fw = NULL;
  
 -	if ((ret = request_firmware(&fw, props->firmware, &udev->dev)) != 0) {
--		err("did not find the firmware file. (%s) "
--			"Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
+-		err("did not find the firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
 -			props->firmware,ret);
 +	ret = request_firmware(&fw, props->firmware, &udev->dev);
 +	if (ret)
@@ -406,13 +405,12 @@ upstream submission.
  		case CYPRESS_AN2135:
 --- a/drivers/media/usb/dvb-usb/gp8psk.c
 +++ b/drivers/media/usb/dvb-usb/gp8psk.c
-@@ -134,20 +134,14 @@ static int gp8psk_load_bcm4500fw(struct
+@@ -134,19 +134,14 @@ static int gp8psk_load_bcm4500fw(struct
  	const u8 *ptr;
  	u8 *buf;
  	if ((ret = request_firmware(&fw, bcm4500_firmware,
 -					&d->udev->dev)) != 0) {
--		err("did not find the bcm4500 firmware file. (%s) "
--			"Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
+-		err("did not find the bcm4500 firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
 -			bcm4500_firmware,ret);
 +					&d->udev->dev)) != 0)
  		return ret;
@@ -430,12 +428,11 @@ upstream submission.
  	if (!buf) {
 --- a/drivers/media/usb/dvb-usb/opera1.c
 +++ b/drivers/media/usb/dvb-usb/opera1.c
-@@ -453,9 +453,6 @@ static int opera1_xilinx_load_firmware(s
+@@ -453,8 +453,6 @@ static int opera1_xilinx_load_firmware(s
  	info("start downloading fpga firmware %s",filename);
  
  	if ((ret = request_firmware(&fw, filename, &dev->dev)) != 0) {
--		err("did not find the firmware file. (%s) "
--			"Please see linux/Documentation/dvb/ for more details on firmware-problems.",
+-		err("did not find the firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems.",
 -			filename);
  		return ret;
  	} else {
@@ -484,8 +481,8 @@ upstream submission.
 -		printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n",
 -			__func__);
 -		if (ret) {
--			printk(KERN_ERR "%s: No firmware uploaded "
--				"(timeout or file not found?)\n", __func__);
+-			printk(KERN_ERR "%s: No firmware uploaded (timeout or file not found?)\n",
+-			       __func__);
 +		if (ret)
  			return ret;
 -		}
@@ -527,8 +524,8 @@ upstream submission.
  				state->i2c->dev.parent);
 -	printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
 -	if (ret) {
--		printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
--				"found?)\n", __func__);
+-		printk(KERN_ERR "%s: No firmware uploaded (timeout or file not found?)\n",
+-		       __func__);
 +	if (ret)
  		return ret;
 -	}
@@ -537,28 +534,28 @@ upstream submission.
  	if (ret)
 --- a/drivers/media/dvb-frontends/nxt200x.c
 +++ b/drivers/media/dvb-frontends/nxt200x.c
-@@ -891,12 +891,8 @@ static int nxt2002_init(struct dvb_front
+@@ -890,12 +890,8 @@ static int nxt2002_init(struct dvb_front
  		 __func__, NXT2002_DEFAULT_FIRMWARE);
  	ret = request_firmware(&fw, NXT2002_DEFAULT_FIRMWARE,
  			       state->i2c->dev.parent);
 -	pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
 -	if (ret) {
--		pr_err("%s: No firmware uploaded (timeout or file not found?)"
--		       "\n", __func__);
+-		pr_err("%s: No firmware uploaded (timeout or file not found?)\n",
+-		       __func__);
 +	if (ret)
  		return ret;
 -	}
  
  	ret = nxt2002_load_firmware(fe, fw);
  	release_firmware(fw);
-@@ -958,12 +954,8 @@ static int nxt2004_init(struct dvb_front
+@@ -957,12 +953,8 @@ static int nxt2004_init(struct dvb_front
  		 __func__, NXT2004_DEFAULT_FIRMWARE);
  	ret = request_firmware(&fw, NXT2004_DEFAULT_FIRMWARE,
  			       state->i2c->dev.parent);
 -	pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
 -	if (ret) {
--		pr_err("%s: No firmware uploaded (timeout or file not found?)"
--		       "\n", __func__);
+-		pr_err("%s: No firmware uploaded (timeout or file not found?)\n",
+-		       __func__);
 +	if (ret)
  		return ret;
 -	}
@@ -567,13 +564,12 @@ upstream submission.
  	release_firmware(fw);
 --- a/drivers/media/dvb-frontends/or51132.c
 +++ b/drivers/media/dvb-frontends/or51132.c
-@@ -341,11 +341,8 @@ static int or51132_set_parameters(struct
+@@ -341,10 +341,8 @@ static int or51132_set_parameters(struct
  		printk("or51132: Waiting for firmware upload(%s)...\n",
  		       fwname);
  		ret = request_firmware(&fw, fwname, state->i2c->dev.parent);
 -		if (ret) {
--			printk(KERN_WARNING "or51132: No firmware up"
--			       "loaded(timeout or file not found?)\n");
+-			printk(KERN_WARNING "or51132: No firmware uploaded(timeout or file not found?)\n");
 +		if (ret)
  			return ret;
 -		}
@@ -582,14 +578,13 @@ upstream submission.
  		if (ret) {
 --- a/drivers/media/dvb-frontends/or51211.c
 +++ b/drivers/media/dvb-frontends/or51211.c
-@@ -375,12 +375,8 @@ static int or51211_init(struct dvb_front
+@@ -375,11 +375,8 @@ static int or51211_init(struct dvb_front
  			OR51211_DEFAULT_FIRMWARE);
  		ret = config->request_firmware(fe, &fw,
  					       OR51211_DEFAULT_FIRMWARE);
 -		pr_info("Got Hotplug firmware\n");
 -		if (ret) {
--			pr_warn("No firmware uploaded "
--				"(timeout or file not found?)\n");
+-			pr_warn("No firmware uploaded (timeout or file not found?)\n");
 +		if (ret)
  			return ret;
 -		}
@@ -612,7 +607,7 @@ upstream submission.
  		printk("sp8870: writing firmware to device failed\n");
 --- a/drivers/media/dvb-frontends/sp887x.c
 +++ b/drivers/media/dvb-frontends/sp887x.c
-@@ -527,10 +527,8 @@ static int sp887x_init(struct dvb_fronte
+@@ -526,10 +526,8 @@ static int sp887x_init(struct dvb_fronte
  		/* request the firmware, this will block until someone uploads it */
  		printk("sp887x: waiting for firmware upload (%s)...\n", SP887X_DEFAULT_FIRMWARE);
  		ret = state->config->request_firmware(fe, &fw, SP887X_DEFAULT_FIRMWARE);
@@ -715,28 +710,25 @@ upstream submission.
  			 SMS_ALLOC_ALIGNMENT), GFP_KERNEL | GFP_DMA);
 --- a/drivers/media/pci/ttpci/av7110.c
 +++ b/drivers/media/pci/ttpci/av7110.c
-@@ -1531,16 +1531,9 @@ static int get_firmware(struct av7110* a
+@@ -1513,13 +1513,8 @@ static int get_firmware(struct av7110* a
  	/* request the av7110 firmware, this will block until someone uploads it */
  	ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
  	if (ret) {
 -		if (ret == -ENOENT) {
--			printk(KERN_ERR "dvb-ttpci: could not load firmware,"
--			       " file not found: dvb-ttpci-01.fw\n");
--			printk(KERN_ERR "dvb-ttpci: usually this should be in "
--			       "/usr/lib/hotplug/firmware or /lib/firmware\n");
--			printk(KERN_ERR "dvb-ttpci: and can be downloaded from"
-+		if (ret == -ENOENT)
-+			printk(KERN_ERR "dvb-ttpci: firmware can be downloaded from"
- 			       " https://linuxtv.org/download/dvb/firmware/\n");
+-			printk(KERN_ERR "dvb-ttpci: could not load firmware, file not found: dvb-ttpci-01.fw\n");
+-			printk(KERN_ERR "dvb-ttpci: usually this should be in /usr/lib/hotplug/firmware or /lib/firmware\n");
+-			printk(KERN_ERR "dvb-ttpci: and can be downloaded from https://linuxtv.org/download/dvb/firmware/\n");
 -		} else
--			printk(KERN_ERR "dvb-ttpci: cannot request firmware"
--			       " (error %i)\n", ret);
+-			printk(KERN_ERR "dvb-ttpci: cannot request firmware (error %i)\n",
+-			       ret);
++		if (ret == -ENOENT)
++			printk(KERN_ERR "dvb-ttpci: firmware can be downloaded from https://linuxtv.org/download/dvb/firmware/\n");
  		return -EINVAL;
  	}
  
 --- a/drivers/media/pci/ttpci/av7110_hw.c
 +++ b/drivers/media/pci/ttpci/av7110_hw.c
-@@ -251,11 +251,8 @@ int av7110_bootarm(struct av7110 *av7110
+@@ -250,11 +250,8 @@ int av7110_bootarm(struct av7110 *av7110
  	//saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT);
  
  	ret = request_firmware(&fw, fw_name, &dev->pci->dev);
@@ -765,7 +757,7 @@ upstream submission.
  	b[0] = 0xaa;
 --- a/drivers/media/usb/ttusb-dec/ttusb_dec.c
 +++ b/drivers/media/usb/ttusb-dec/ttusb_dec.c
-@@ -1296,11 +1296,8 @@ static int ttusb_dec_boot_dsp(struct ttu
+@@ -1348,11 +1348,8 @@ static int ttusb_dec_boot_dsp(struct ttu
  	dprintk("%s\n", __func__);
  
  	result = request_firmware(&fw_entry, dec->firmware_name, &dec->udev->dev);
@@ -795,7 +787,7 @@ upstream submission.
  	packet_num = ptr[0];
 --- a/drivers/media/radio/wl128x/fmdrv_common.c
 +++ b/drivers/media/radio/wl128x/fmdrv_common.c
-@@ -1249,10 +1249,8 @@ static int fm_download_firmware(struct f
+@@ -1246,10 +1246,8 @@ static int fm_download_firmware(struct f
  
  	ret = request_firmware(&fw_entry, fw_name,
  				&fmdev->radio_dev->dev);
@@ -809,7 +801,7 @@ upstream submission.
  	fw_data = (void *)fw_entry->data;
 --- a/drivers/media/pci/bt8xx/bttv-cards.c
 +++ b/drivers/media/pci/bt8xx/bttv-cards.c
-@@ -3912,10 +3912,8 @@ static int pvr_boot(struct bttv *btv)
+@@ -3909,10 +3909,8 @@ static int pvr_boot(struct bttv *btv)
  	int rc;
  
  	rc = request_firmware(&fw_entry, "hcwamc.rbf", &btv->c.pci->dev);
@@ -838,7 +830,7 @@ upstream submission.
  	cmd.direction = TRANSFER_WRITE;
 --- a/drivers/media/pci/cx18/cx18-av-firmware.c
 +++ b/drivers/media/pci/cx18/cx18-av-firmware.c
-@@ -85,10 +85,8 @@ int cx18_av_loadfw(struct cx18 *cx)
+@@ -84,10 +84,8 @@ int cx18_av_loadfw(struct cx18 *cx)
  	int i;
  	int retries1 = 0;
  
@@ -863,15 +855,6 @@ upstream submission.
  		size_t sz = (*fw)->size;
  		if (sz < 2 || sz > 64 || (sz % 2) != 0) {
  			CX18_ERR("Firmware %s has a bad size: %lu bytes\n",
-@@ -156,7 +154,7 @@ static int yuan_mpc718_mt352_reqfw(struc
- 
- 	if (ret) {
- 		CX18_ERR("The MPC718 board variant with the MT352 DVB-T"
--			  "demodualtor will not work without it\n");
-+			  "demodulator will not work without firmware\n");
- 		CX18_ERR("Run 'linux/Documentation/dvb/get_dvb_firmware "
- 			  "mpc718' if you need the firmware\n");
- 	}
 --- a/drivers/media/pci/cx18/cx18-firmware.c
 +++ b/drivers/media/pci/cx18/cx18-firmware.c
 @@ -106,11 +106,8 @@ static int load_cpu_fw_direct(const char
@@ -912,32 +895,29 @@ upstream submission.
  		return retval;
 --- a/drivers/media/pci/cx23885/cx23885-417.c
 +++ b/drivers/media/pci/cx23885/cx23885-417.c
-@@ -931,14 +931,8 @@ static int cx23885_load_firmware(struct
+@@ -929,12 +929,8 @@ static int cx23885_load_firmware(struct
  	retval = request_firmware(&firmware, CX23885_FIRM_IMAGE_NAME,
  				  &dev->pci->dev);
  
 -	if (retval != 0) {
--		printk(KERN_ERR
--			"ERROR: Hotplug firmware request failed (%s).\n",
--			CX23885_FIRM_IMAGE_NAME);
--		printk(KERN_ERR "Please fix your hotplug setup, the board will "
--			"not work without firmware loaded!\n");
+-		pr_err("ERROR: Hotplug firmware request failed (%s).\n",
+-		       CX23885_FIRM_IMAGE_NAME);
+-		pr_err("Please fix your hotplug setup, the board will not work without firmware loaded!\n");
 +	if (retval != 0)
  		return -1;
 -	}
  
  	if (firmware->size != CX23885_FIRM_IMAGE_SIZE) {
- 		printk(KERN_ERR "ERROR: Firmware size mismatch "
+ 		pr_err("ERROR: Firmware size mismatch (have %zu, expected %d)\n",
 --- a/drivers/media/pci/cx23885/cx23885-cards.c
 +++ b/drivers/media/pci/cx23885/cx23885-cards.c
-@@ -2341,11 +2341,7 @@ void cx23885_card_setup(struct cx23885_d
- 				cinfo.rev, filename);
+@@ -2339,10 +2339,7 @@ void cx23885_card_setup(struct cx23885_d
+ 			cinfo.rev, filename);
  
  		ret = request_firmware(&fw, filename, &dev->pci->dev);
 -		if (ret != 0)
--			printk(KERN_ERR "did not find the firmware file. (%s) "
--			"Please see linux/Documentation/dvb/ for more details "
--			"on firmware-problems.", filename);
+-			pr_err("did not find the firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems.",
+-			       filename);
 -		else
 +		if (ret == 0)
  			altera_init(&netup_config, fw);
@@ -959,13 +939,13 @@ upstream submission.
  
 --- a/drivers/media/pci/cx88/cx88-blackbird.c
 +++ b/drivers/media/pci/cx88/cx88-blackbird.c
-@@ -444,12 +444,8 @@ static int blackbird_load_firmware(struc
+@@ -471,12 +471,8 @@ static int blackbird_load_firmware(struc
+ 	retval = request_firmware(&firmware, CX2341X_FIRM_ENC_FILENAME,
  				  &dev->pci->dev);
  
- 
 -	if (retval != 0) {
 -		pr_err("Hotplug firmware request failed (%s).\n",
--			CX2341X_FIRM_ENC_FILENAME);
+-		       CX2341X_FIRM_ENC_FILENAME);
 -		pr_err("Please fix your hotplug setup, the board will not work without firmware loaded!\n");
 +	if (retval != 0)
  		return -EIO;
@@ -1000,26 +980,22 @@ upstream submission.
  
 --- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
 +++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
-@@ -1382,29 +1382,6 @@ static int pvr2_locate_firmware(struct p
+@@ -1381,25 +1381,6 @@ static int pvr2_locate_firmware(struct p
  			   "request_firmware fatal error with code=%d",ret);
  		return ret;
  	}
 -	pvr2_trace(PVR2_TRACE_ERROR_LEGS,
--		   "***WARNING***"
--		   " Device %s firmware"
--		   " seems to be missing.",
+-		   "***WARNING*** Device %s firmware seems to be missing.",
 -		   fwtypename);
 -	pvr2_trace(PVR2_TRACE_ERROR_LEGS,
--		   "Did you install the pvrusb2 firmware files"
--		   " in their proper location?");
+-		   "Did you install the pvrusb2 firmware files in their proper location?");
 -	if (fwcount == 1) {
 -		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
 -			   "request_firmware unable to locate %s file %s",
 -			   fwtypename,fwnames[0]);
 -	} else {
 -		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
--			   "request_firmware unable to locate"
--			   " one of the following %s files:",
+-			   "request_firmware unable to locate one of the following %s files:",
 -			   fwtypename);
 -		for (idx = 0; idx < fwcount; idx++) {
 -			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
@@ -1065,8 +1041,8 @@ upstream submission.
  
  		ret = request_firmware(&fw, fwname, &dev->pci->dev);
 -		if (ret) {
--			printk(KERN_ERR "%s() Upload failed. "
--				"(file not found?)\n", __func__);
+-			printk(KERN_ERR "%s() Upload failed. (file not found?)\n",
+-			       __func__);
 +		if (ret)
  			return -ENOMEM;
 -		}
@@ -1105,7 +1081,7 @@ upstream submission.
  	/* parse the firmware */
 --- a/drivers/net/ethernet/3com/typhoon.c
 +++ b/drivers/net/ethernet/3com/typhoon.c
-@@ -1279,11 +1279,8 @@ typhoon_request_firmware(struct typhoon
+@@ -1284,11 +1284,8 @@ typhoon_request_firmware(struct typhoon
  		return 0;
  
  	err = request_firmware(&typhoon_fw, FIRMWARE_NAME, &tp->pdev->dev);
@@ -1120,7 +1096,7 @@ upstream submission.
  	remaining = typhoon_fw->size;
 --- a/drivers/net/ethernet/adaptec/starfire.c
 +++ b/drivers/net/ethernet/adaptec/starfire.c
-@@ -1016,11 +1016,8 @@ static int netdev_open(struct net_device
+@@ -1015,11 +1015,8 @@ static int netdev_open(struct net_device
  #endif /* VLAN_SUPPORT */
  
  	retval = request_firmware(&fw_rx, FIRMWARE_RX, &np->pci_dev->dev);
@@ -1133,7 +1109,7 @@ upstream submission.
  	if (fw_rx->size % 4) {
  		printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n",
  		       fw_rx->size, FIRMWARE_RX);
-@@ -1028,11 +1025,8 @@ static int netdev_open(struct net_device
+@@ -1027,11 +1024,8 @@ static int netdev_open(struct net_device
  		goto out_rx;
  	}
  	retval = request_firmware(&fw_tx, FIRMWARE_TX, &np->pci_dev->dev);
@@ -1148,7 +1124,7 @@ upstream submission.
  		       fw_tx->size, FIRMWARE_TX);
 --- a/drivers/net/ethernet/alteon/acenic.c
 +++ b/drivers/net/ethernet/alteon/acenic.c
-@@ -2888,11 +2888,8 @@ static int ace_load_firmware(struct net_
+@@ -2892,11 +2892,8 @@ static int ace_load_firmware(struct net_
  		fw_name = "acenic/tg1.bin";
  
  	ret = request_firmware(&fw, fw_name, &ap->pdev->dev);
@@ -1163,7 +1139,7 @@ upstream submission.
  
 --- a/drivers/net/ethernet/broadcom/bnx2.c
 +++ b/drivers/net/ethernet/broadcom/bnx2.c
-@@ -3726,16 +3726,13 @@ static int bnx2_request_uncached_firmwar
+@@ -3719,16 +3719,13 @@ static int bnx2_request_uncached_firmwar
  	}
  
  	rc = request_firmware(&bp->mips_firmware, mips_fw_file, &bp->pdev->dev);
@@ -1185,7 +1161,7 @@ upstream submission.
  	if (bp->mips_firmware->size < sizeof(*mips_fw) ||
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
-@@ -13489,11 +13489,8 @@ static int bnx2x_init_firmware(struct bn
+@@ -13492,11 +13492,8 @@ static int bnx2x_init_firmware(struct bn
  	BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
  
  	rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
@@ -1200,7 +1176,7 @@ upstream submission.
  	if (rc) {
 --- a/drivers/net/ethernet/broadcom/tg3.c
 +++ b/drivers/net/ethernet/broadcom/tg3.c
-@@ -11346,11 +11346,8 @@ static int tg3_request_firmware(struct t
+@@ -11349,11 +11349,8 @@ static int tg3_request_firmware(struct t
  {
  	const struct tg3_firmware_hdr *fw_hdr;
  
@@ -1294,7 +1270,7 @@ upstream submission.
  	}
 --- a/drivers/net/ethernet/smsc/smc91c92_cs.c
 +++ b/drivers/net/ethernet/smsc/smc91c92_cs.c
-@@ -647,10 +647,8 @@ static int osi_load_firmware(struct pcmc
+@@ -646,10 +646,8 @@ static int osi_load_firmware(struct pcmc
  	int i, err;
  
  	err = request_firmware(&fw, FIRMWARE_NAME, &link->dev);
@@ -1393,7 +1369,7 @@ upstream submission.
  	fwh = (struct at76_fw_header *)(fwe->fw->data);
 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
 +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
-@@ -1160,9 +1160,6 @@ static void ath9k_hif_usb_firmware_cb(co
+@@ -1161,9 +1161,6 @@ static void ath9k_hif_usb_firmware_cb(co
  		if (!ret)
  			return;
  
@@ -1415,7 +1391,7 @@ upstream submission.
  
 --- a/drivers/net/wireless/atmel/atmel.c
 +++ b/drivers/net/wireless/atmel/atmel.c
-@@ -3917,12 +3917,8 @@ static int reset_atmel_card(struct net_d
+@@ -3912,12 +3912,8 @@ static int reset_atmel_card(struct net_d
  					strcpy(priv->firmware_id, "atmel_at76c502.bin");
  				}
  				err = request_firmware(&fw_entry, priv->firmware_id, priv->sys_dev);
@@ -1493,7 +1469,7 @@ upstream submission.
  	}
 --- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
 +++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
-@@ -8418,12 +8418,8 @@ static int ipw2100_get_firmware(struct i
+@@ -8419,12 +8419,8 @@ static int ipw2100_get_firmware(struct i
  
  	rc = request_firmware(&fw->fw_entry, fw_name, &priv->pci_dev->dev);
  
@@ -1559,8 +1535,8 @@ upstream submission.
 --- a/drivers/net/wireless/marvell/mwifiex/main.c
 +++ b/drivers/net/wireless/marvell/mwifiex/main.c
 @@ -524,11 +524,8 @@ static void mwifiex_fw_dpc(const struct
- 	bool init_failed = false;
  	struct wireless_dev *wdev;
+ 	struct completion *fw_done = adapter->fw_done;
  
 -	if (!firmware) {
 -		mwifiex_dbg(adapter, ERROR,
@@ -1737,7 +1713,7 @@ upstream submission.
  	}
 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
 +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
-@@ -95,7 +95,6 @@ static void rtl92se_fw_cb(const struct f
+@@ -91,7 +91,6 @@ static void rtl92se_fw_cb(const struct f
  			 "Firmware callback routine entered!\n");
  	complete(&rtlpriv->firmware_loading_complete);
  	if (!firmware) {
@@ -1930,7 +1906,7 @@ upstream submission.
  	}
 --- a/drivers/scsi/qla2xxx/qla_init.c
 +++ b/drivers/scsi/qla2xxx/qla_init.c
-@@ -5656,8 +5656,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
+@@ -5652,8 +5652,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
  	/* Load firmware blob. */
  	blob = qla2x00_request_firmware(vha);
  	if (!blob) {
@@ -1939,7 +1915,7 @@ upstream submission.
  		ql_log(ql_log_info, vha, 0x0084,
  		    "Firmware images can be retrieved from: "QLA_FW_URL ".\n");
  		return QLA_FUNCTION_FAILED;
-@@ -5759,8 +5757,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
+@@ -5755,8 +5753,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
  	/* Load firmware blob. */
  	blob = qla2x00_request_firmware(vha);
  	if (!blob) {
@@ -1950,7 +1926,7 @@ upstream submission.
  		    QLA_FW_URL ".\n");
 --- a/drivers/scsi/qla2xxx/qla_nx.c
 +++ b/drivers/scsi/qla2xxx/qla_nx.c
-@@ -2460,11 +2460,8 @@ try_blob_fw:
+@@ -2465,11 +2465,8 @@ try_blob_fw:
  
  	/* Load firmware blob. */
  	blob = ha->hablob = qla2x00_request_firmware(vha);
@@ -1965,7 +1941,7 @@ upstream submission.
  	if (qla82xx_validate_firmware_blob(vha,
 --- a/drivers/scsi/qla2xxx/qla_os.c
 +++ b/drivers/scsi/qla2xxx/qla_os.c
-@@ -5641,8 +5641,6 @@ qla2x00_request_firmware(scsi_qla_host_t
+@@ -5841,8 +5841,6 @@ qla2x00_request_firmware(scsi_qla_host_t
  		goto out;
  
  	if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
@@ -2084,34 +2060,33 @@ upstream submission.
  	return rc;
  }
  MODULE_FIRMWARE("rtlwifi/rtl8712u.bin");
---- a/drivers/staging/slicoss/slicoss.c
-+++ b/drivers/staging/slicoss/slicoss.c
-@@ -376,11 +376,8 @@ static int slic_card_download_gbrcv(stru
- 	}
- 
- 	ret = request_firmware(&fw, file, &adapter->pcidev->dev);
--	if (ret) {
--		dev_err(&adapter->pcidev->dev,
--			"Failed to load firmware %s\n", file);
-+	if (ret)
- 		return ret;
+--- a/drivers/net/ethernet/alacritech/slicoss.c
++++ b/drivers/net/ethernet/alacritech/slicoss.c
+@@ -1063,11 +1063,8 @@ static int slic_load_rcvseq_firmware(str
+ 	file = (sdev->model == SLIC_MODEL_OASIS) ?  SLIC_RCV_FIRMWARE_OASIS :
+ 						    SLIC_RCV_FIRMWARE_MOJAVE;
+ 	err = request_firmware(&fw, file, &sdev->pdev->dev);
+-	if (err) {
+-		dev_err(&sdev->pdev->dev,
+-			"failed to load receive sequencer firmware %s\n", file);
++	if (err)
+ 		return err;
 -	}
- 
- 	rcvucodelen = *(u32 *)(fw->data + index);
- 	index += 4;
-@@ -454,11 +451,8 @@ static int slic_card_download(struct ada
- 		return -ENOENT;
- 	}
- 	ret = request_firmware(&fw, file, &adapter->pcidev->dev);
--	if (ret) {
--		dev_err(&adapter->pcidev->dev,
--			"Failed to load firmware %s\n", file);
-+	if (ret)
- 		return ret;
+ 	/* Do an initial sanity check concerning firmware size now. A further
+ 	 * check follows below.
+ 	 */
+@@ -1138,10 +1135,8 @@ static int slic_load_firmware(struct sli
+ 	file = (sdev->model == SLIC_MODEL_OASIS) ?  SLIC_FIRMWARE_OASIS :
+ 						    SLIC_FIRMWARE_MOJAVE;
+ 	err = request_firmware(&fw, file, &sdev->pdev->dev);
+-	if (err) {
+-		dev_err(&sdev->pdev->dev, "failed to load firmware %s\n", file);
++	if (err)
+ 		return err;
 -	}
- 	numsects = *(u32 *)(fw->data + index);
- 	index += 4;
- 	for (i = 0; i < numsects; i++) {
+ 	/* Do an initial sanity check concerning firmware size now. A further
+ 	 * check follows below.
+ 	 */
 --- a/drivers/staging/vt6656/firmware.c
 +++ b/drivers/staging/vt6656/firmware.c
 @@ -49,11 +49,8 @@ int vnt_download_firmware(struct vnt_pri
@@ -2367,7 +2342,7 @@ upstream submission.
  
 --- a/drivers/usb/serial/ti_usb_3410_5052.c
 +++ b/drivers/usb/serial/ti_usb_3410_5052.c
-@@ -1702,10 +1702,8 @@ static int ti_download_firmware(struct t
+@@ -1706,10 +1706,8 @@ static int ti_download_firmware(struct t
  	}
  
  check_firmware:
@@ -2510,20 +2485,18 @@ upstream submission.
  	return err;
 --- a/sound/pci/emu10k1/emu10k1_main.c
 +++ b/sound/pci/emu10k1/emu10k1_main.c
-@@ -901,12 +901,8 @@ static int snd_emu10k1_emu1010_init(stru
- 		}
+@@ -887,10 +887,8 @@ static int snd_emu10k1_emu1010_init(stru
+ 	dev_info(emu->card->dev, "emu1010: EMU_HANA_ID = 0x%x\n", reg);
  
- 		err = request_firmware(&emu->firmware, filename, &emu->pci->dev);
--		if (err != 0) {
--			dev_info(emu->card->dev,
--				 "emu1010: firmware: %s not found. Err = %d\n",
--				 filename, err);
-+		if (err != 0)
- 			return err;
--		}
- 		dev_info(emu->card->dev,
- 			 "emu1010: firmware file = %s, size = 0x%zx\n",
- 			   filename, emu->firmware->size);
+ 	err = snd_emu1010_load_firmware(emu, 0, &emu->firmware);
+-	if (err < 0) {
+-		dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n");
++	if (err < 0)
+ 		return err;
+-	}
+ 
+ 	/* ID, should read & 0x7f = 0x55 when FPGA programmed. */
+ 	snd_emu1010_fpga_read(emu, EMU_HANA_ID, &reg);
 --- a/sound/pci/hda/hda_intel.c
 +++ b/sound/pci/hda/hda_intel.c
 @@ -1815,10 +1815,8 @@ static void azx_firmware_cb(const struct
diff --git a/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch b/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
index ab8c172..2f09081 100644
--- a/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
+++ b/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
@@ -23,7 +23,7 @@ format to detect missing firmware.
 ---
 --- a/drivers/base/firmware_class.c
 +++ b/drivers/base/firmware_class.c
-@@ -350,21 +350,22 @@ fw_get_filesystem_firmware(struct device
+@@ -418,21 +418,22 @@ fw_get_filesystem_firmware(struct device
  		rc = kernel_read_file_from_path(path, &buf->data, &size, msize,
  						id);
  		if (rc) {
@@ -41,7 +41,7 @@ format to detect missing firmware.
 +		dev_info(device, "firmware: direct-loading firmware %s\n",
 +			 buf->fw_id);
  		buf->size = size;
- 		fw_finish_direct_load(device, buf);
+ 		fw_state_done(&buf->fw_st);
  		break;
  	}
  	__putname(path);
@@ -53,7 +53,7 @@ format to detect missing firmware.
  	return rc;
  }
  
-@@ -1155,7 +1156,7 @@ _request_firmware(const struct firmware
+@@ -1193,7 +1194,7 @@ _request_firmware(const struct firmware
  	if (opt_flags & FW_OPT_NOWAIT) {
  		timeout = usermodehelper_read_lock_wait(timeout);
  		if (!timeout) {
diff --git a/debian/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch b/debian/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch
index bde2c1f..83360e9 100644
--- a/debian/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch
+++ b/debian/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch
@@ -11,14 +11,14 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
 ---
 --- a/fs/btrfs/super.c
 +++ b/fs/btrfs/super.c
-@@ -2456,3 +2456,4 @@ late_initcall(init_btrfs_fs);
+@@ -2473,3 +2473,4 @@ late_initcall(init_btrfs_fs);
  module_exit(exit_btrfs_fs)
  
  MODULE_LICENSE("GPL");
 +MODULE_SOFTDEP("pre: crypto-crc32c");
 --- a/fs/cifs/cifsfs.c
 +++ b/fs/cifs/cifsfs.c
-@@ -1373,5 +1373,13 @@ MODULE_DESCRIPTION
+@@ -1365,5 +1365,13 @@ MODULE_DESCRIPTION
      ("VFS to access servers complying with the SNIA CIFS Specification "
       "e.g. Samba and Windows");
  MODULE_VERSION(CIFS_VERSION);
@@ -34,14 +34,14 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
  module_exit(exit_cifs)
 --- a/fs/crypto/crypto.c
 +++ b/fs/crypto/crypto.c
-@@ -566,3 +566,4 @@ static void __exit fscrypt_exit(void)
+@@ -614,3 +614,4 @@ static void __exit fscrypt_exit(void)
  module_exit(fscrypt_exit);
  
  MODULE_LICENSE("GPL");
 +MODULE_SOFTDEP("pre: crypto-aes crypto-ecb");
 --- a/fs/ext4/super.c
 +++ b/fs/ext4/super.c
-@@ -5441,5 +5441,13 @@ static void __exit ext4_exit_fs(void)
+@@ -5692,5 +5692,13 @@ static void __exit ext4_exit_fs(void)
  MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
  MODULE_DESCRIPTION("Fourth Extended Filesystem");
  MODULE_LICENSE("GPL");
@@ -57,14 +57,15 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
  module_exit(ext4_exit_fs)
 --- a/fs/f2fs/super.c
 +++ b/fs/f2fs/super.c
-@@ -1742,3 +1742,4 @@ module_exit(exit_f2fs_fs)
+@@ -2244,4 +2244,5 @@ module_exit(exit_f2fs_fs)
  MODULE_AUTHOR("Samsung Electronics's Praesto Team");
  MODULE_DESCRIPTION("Flash Friendly File System");
  MODULE_LICENSE("GPL");
 +MODULE_SOFTDEP("pre: crypto-crc32c");
+ 
 --- a/fs/jbd2/journal.c
 +++ b/fs/jbd2/journal.c
-@@ -2716,6 +2716,7 @@ static void __exit journal_exit(void)
+@@ -2674,6 +2674,7 @@ static void __exit journal_exit(void)
  }
  
  MODULE_LICENSE("GPL");
@@ -74,7 +75,7 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
  
 --- a/fs/nfsd/nfsctl.c
 +++ b/fs/nfsd/nfsctl.c
-@@ -1314,5 +1314,8 @@ static void __exit exit_nfsd(void)
+@@ -1308,5 +1308,8 @@ static void __exit exit_nfsd(void)
  
  MODULE_AUTHOR("Olaf Kirch <okir at monad.swb.de>");
  MODULE_LICENSE("GPL");
diff --git a/debian/patches/bugfix/all/mm-memcontrol-use-special-workqueue-for-creating-per-memcg-caches.patch b/debian/patches/bugfix/all/mm-memcontrol-use-special-workqueue-for-creating-per-memcg-caches.patch
deleted file mode 100644
index 5b57876..0000000
--- a/debian/patches/bugfix/all/mm-memcontrol-use-special-workqueue-for-creating-per-memcg-caches.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From: Vladimir Davydov <vdavydov.dev at gmail.com>
-Date: Sat, 1 Oct 2016 16:39:09 +0300
-Subject: mm: memcontrol: use special workqueue for creating per-memcg caches
-Origin: https://patchwork.kernel.org/patch/9361853/
-Bug: https://bugzilla.kernel.org/show_bug.cgi?id=172981
-
-Creating a lot of cgroups at the same time might stall all worker
-threads with kmem cache creation works, because kmem cache creation is
-done with the slab_mutex held. The problem was amplified by commits
-801faf0db894 ("mm/slab: lockless decision to grow cache") in case of
-SLAB and 81ae6d03952c ("mm/slub.c: replace kick_all_cpus_sync() with
-synchronize_sched() in kmem_cache_shrink()") in case of SLUB, which
-increased the maximal time the slab_mutex can be held.
-
-To prevent that from happening, let's use a special ordered single
-threaded workqueue for kmem cache creation. This shouldn't introduce any
-functional changes regarding how kmem caches are created, as the work
-function holds the global slab_mutex during its whole runtime anyway,
-making it impossible to run more than one work at a time. By using a
-single threaded workqueue, we just avoid creating a thread per each
-work. Ordering is required to avoid a situation when a cgroup's work is
-put off indefinitely because there are other cgroups to serve, in other
-words to guarantee fairness.
-
-Link: https://bugzilla.kernel.org/show_bug.cgi?id=172981
-Signed-off-by: Vladimir Davydov <vdavydov.dev at gmail.com>
-Reported-by: Doug Smythies <dsmythies at telus.net>
-Cc: Christoph Lameter <cl at linux.com>
-Cc: David Rientjes <rientjes at google.com>
-Cc: Johannes Weiner <hannes at cmpxchg.org>
-Cc: Joonsoo Kim <iamjoonsoo.kim at lge.com>
-Cc: Michal Hocko <mhocko at kernel.org>
-Cc: Pekka Enberg <penberg at kernel.org>
-Acked-by: Michal Hocko <mhocko at suse.com>
----
---- a/mm/memcontrol.c
-+++ b/mm/memcontrol.c
-@@ -2232,6 +2232,8 @@ struct memcg_kmem_cache_create_work {
- 	struct work_struct work;
- };
- 
-+static struct workqueue_struct *memcg_kmem_cache_create_wq;
-+
- static void memcg_kmem_cache_create_func(struct work_struct *w)
- {
- 	struct memcg_kmem_cache_create_work *cw =
-@@ -2263,7 +2265,7 @@ static void __memcg_schedule_kmem_cache_
- 	cw->cachep = cachep;
- 	INIT_WORK(&cw->work, memcg_kmem_cache_create_func);
- 
--	schedule_work(&cw->work);
-+	queue_work(memcg_kmem_cache_create_wq, &cw->work);
- }
- 
- static void memcg_schedule_kmem_cache_create(struct mem_cgroup *memcg,
-@@ -5811,6 +5813,17 @@ static int __init mem_cgroup_init(void)
- {
- 	int cpu, node;
- 
-+#ifndef CONFIG_SLOB
-+	/*
-+	 * Kmem cache creation is mostly done with the slab_mutex held,
-+	 * so use a special workqueue to avoid stalling all worker
-+	 * threads in case lots of cgroups are created simultaneously.
-+	 */
-+	memcg_kmem_cache_create_wq =
-+		alloc_ordered_workqueue("memcg_kmem_cache_create", 0);
-+	BUG_ON(!memcg_kmem_cache_create_wq);
-+#endif
-+
- 	hotcpu_notifier(memcg_cpu_hotplug_callback, 0);
- 
- 	for_each_possible_cpu(cpu)
diff --git a/debian/patches/bugfix/all/tools-lib-traceevent-use-ldflags.patch b/debian/patches/bugfix/all/tools-lib-traceevent-use-ldflags.patch
index fe0248c..d1612f7 100644
--- a/debian/patches/bugfix/all/tools-lib-traceevent-use-ldflags.patch
+++ b/debian/patches/bugfix/all/tools-lib-traceevent-use-ldflags.patch
@@ -7,16 +7,16 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
 ---
 --- a/tools/lib/traceevent/Makefile
 +++ b/tools/lib/traceevent/Makefile
-@@ -172,7 +172,7 @@ $(TE_IN): force
+@@ -173,7 +173,7 @@ $(TE_IN): force
  	$(Q)$(MAKE) $(build)=libtraceevent
  
- $(OUTPUT)libtraceevent.so: $(TE_IN)
--	$(QUIET_LINK)$(CC) --shared $^ -o $@
-+	$(QUIET_LINK)$(CC) $(LDFLAGS) --shared $^ -o $@
+ $(OUTPUT)libtraceevent.so.$(EVENT_PARSE_VERSION): $(TE_IN)
+-	$(QUIET_LINK)$(CC) --shared $^ -Wl,-soname,libtraceevent.so.$(EP_VERSION) -o $@
++	$(QUIET_LINK)$(CC) $(LDFLAGS) --shared $^ -Wl,-soname,libtraceevent.so.$(EP_VERSION) -o $@
+ 	@ln -sf $(@F) $(OUTPUT)libtraceevent.so
+ 	@ln -sf $(@F) $(OUTPUT)libtraceevent.so.$(EP_VERSION)
  
- $(OUTPUT)libtraceevent.a: $(TE_IN)
- 	$(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
-@@ -189,7 +189,7 @@ $(PLUGINS_IN): force
+@@ -192,7 +192,7 @@ $(PLUGINS_IN): force
  	$(Q)$(MAKE) $(build)=$(plugin_obj)
  
  $(OUTPUT)%.so: $(OUTPUT)%-in.o
diff --git a/debian/patches/bugfix/powerpc/powerpc-fix-missing-crcs-add-yet-more-asm-prototypes.patch b/debian/patches/bugfix/powerpc/powerpc-fix-missing-crcs-add-yet-more-asm-prototypes.patch
index be736e5..2fc9ab7 100644
--- a/debian/patches/bugfix/powerpc/powerpc-fix-missing-crcs-add-yet-more-asm-prototypes.patch
+++ b/debian/patches/bugfix/powerpc/powerpc-fix-missing-crcs-add-yet-more-asm-prototypes.patch
@@ -12,13 +12,11 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
  arch/powerpc/include/asm/asm-prototypes.h | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/arch/powerpc/include/asm/asm-prototypes.h b/arch/powerpc/include/asm/asm-prototypes.h
-index e0baba1535e6..ba0225ff38f8 100644
 --- a/arch/powerpc/include/asm/asm-prototypes.h
 +++ b/arch/powerpc/include/asm/asm-prototypes.h
-@@ -18,6 +18,8 @@
+@@ -17,6 +17,8 @@
  #include <asm/checksum.h>
- #include <asm/uaccess.h>
+ #include <linux/uaccess.h>
  #include <asm/epapr_hcalls.h>
 +#include <asm/dcr.h>
 +#include <asm/mmu_context.h>
diff --git a/debian/patches/bugfix/s390/revert-s390-move-exports-to-definitions.patch b/debian/patches/bugfix/s390/revert-s390-move-exports-to-definitions.patch
index 75cf4be..f550b8f 100644
--- a/debian/patches/bugfix/s390/revert-s390-move-exports-to-definitions.patch
+++ b/debian/patches/bugfix/s390/revert-s390-move-exports-to-definitions.patch
@@ -16,23 +16,19 @@ hashes).
  6 files changed, 16 insertions(+), 14 deletions(-)
  create mode 100644 arch/s390/kernel/s390_ksyms.c
 
-diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild
-index 20f196b82a6e..9043d2e1e2ae 100644
 --- a/arch/s390/include/asm/Kbuild
 +++ b/arch/s390/include/asm/Kbuild
 @@ -1,7 +1,6 @@
- 
- 
+ generic-y += asm-offsets.h
  generic-y += clkdev.h
+ generic-y += dma-contiguous.h
 -generic-y += export.h
  generic-y += irq_work.h
  generic-y += mcs_spinlock.h
  generic-y += mm-arch-hooks.h
-diff --git a/arch/s390/kernel/Makefile b/arch/s390/kernel/Makefile
-index 1f0fe98f6db9..72ccc41444dc 100644
 --- a/arch/s390/kernel/Makefile
 +++ b/arch/s390/kernel/Makefile
-@@ -61,7 +61,7 @@ obj-y	+= entry.o reipl.o relocate_kernel.o
+@@ -68,7 +68,7 @@ obj-y	+= entry.o reipl.o relocate_kernel
  
  extra-y				+= head.o head64.o vmlinux.lds
  
@@ -41,8 +37,6 @@ index 1f0fe98f6db9..72ccc41444dc 100644
  obj-$(CONFIG_SMP)		+= smp.o
  obj-$(CONFIG_SCHED_TOPOLOGY)	+= topology.o
  obj-$(CONFIG_HIBERNATION)	+= suspend.o swsusp.o
-diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
-index 49a30737adde..c51650a1ed16 100644
 --- a/arch/s390/kernel/entry.S
 +++ b/arch/s390/kernel/entry.S
 @@ -23,7 +23,6 @@
@@ -53,7 +47,7 @@ index 49a30737adde..c51650a1ed16 100644
  
  __PT_R0      =	__PT_GPRS
  __PT_R1      =	__PT_GPRS + 8
-@@ -260,8 +259,6 @@ sie_exit:
+@@ -265,8 +264,6 @@ sie_exit:
  
  	EX_TABLE(.Lrewind_pad,.Lsie_fault)
  	EX_TABLE(sie_exit,.Lsie_fault)
@@ -62,7 +56,7 @@ index 49a30737adde..c51650a1ed16 100644
  #endif
  
  /*
-@@ -828,9 +825,6 @@ ENTRY(save_fpu_regs)
+@@ -835,9 +832,6 @@ ENTRY(save_fpu_regs)
  	oi	__LC_CPU_FLAGS+7,_CIF_FPU
  	br	%r14
  .Lsave_fpu_regs_end:
@@ -72,8 +66,6 @@ index 49a30737adde..c51650a1ed16 100644
  
  /*
   * Load floating-point controls and floating-point or vector registers.
-diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S
-index 9a17e4475d27..e499370fbccb 100644
 --- a/arch/s390/kernel/mcount.S
 +++ b/arch/s390/kernel/mcount.S
 @@ -9,7 +9,6 @@
@@ -93,9 +85,6 @@ index 9a17e4475d27..e499370fbccb 100644
  ENTRY(ftrace_caller)
  	.globl	ftrace_regs_caller
  	.set	ftrace_regs_caller,ftrace_caller
-diff --git a/arch/s390/kernel/s390_ksyms.c b/arch/s390/kernel/s390_ksyms.c
-new file mode 100644
-index 000000000000..e67453b73c3c
 --- /dev/null
 +++ b/arch/s390/kernel/s390_ksyms.c
 @@ -0,0 +1,15 @@
@@ -114,8 +103,6 @@ index 000000000000..e67453b73c3c
 +#endif
 +EXPORT_SYMBOL(memcpy);
 +EXPORT_SYMBOL(memset);
-diff --git a/arch/s390/lib/mem.S b/arch/s390/lib/mem.S
-index be9fa65bfac4..c6d553e85ab1 100644
 --- a/arch/s390/lib/mem.S
 +++ b/arch/s390/lib/mem.S
 @@ -5,7 +5,6 @@
@@ -125,8 +112,8 @@ index be9fa65bfac4..c6d553e85ab1 100644
 -#include <asm/export.h>
  
  /*
-  * memset implementation
-@@ -61,7 +60,6 @@ ENTRY(memset)
+  * void *memmove(void *dest, const void *src, size_t n)
+@@ -100,7 +99,6 @@ ENTRY(memset)
  	xc	0(1,%r1),0(%r1)
  .Lmemset_mvc:
  	mvc	1(1,%r1),0(%r1)
@@ -134,7 +121,7 @@ index be9fa65bfac4..c6d553e85ab1 100644
  
  /*
   * memcpy implementation
-@@ -88,4 +86,3 @@ ENTRY(memcpy)
+@@ -127,4 +125,3 @@ ENTRY(memcpy)
  	j	.Lmemcpy_rest
  .Lmemcpy_mvc:
  	mvc	0(1,%r1),0(%r3)
diff --git a/debian/patches/bugfix/x86/tools-hv-fix-fortify-format-warning.patch b/debian/patches/bugfix/x86/tools-hv-fix-fortify-format-warning.patch
deleted file mode 100644
index dd8b903..0000000
--- a/debian/patches/bugfix/x86/tools-hv-fix-fortify-format-warning.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From: Ben Hutchings <ben at decadent.org.uk>
-Date: Fri, 25 Sep 2015 20:28:10 +0100
-Subject: tools/hv: Fix fortify format warning
-Forwarded: no
-
-With fortify enabled, gcc warns:
-
-tools/hv/hv_kvp_daemon.c:705:2: error: format not a string literal and no format arguments [-Werror=format-security]
-  snprintf(dev_id, sizeof(dev_id), kvp_net_dir);
-  ^
-
-kvp_net_dir is a pointer to a string literal, but lacks const
-qualification.  As it is never modified, it should be a const
-array rather than a pointer.
-
-Also, while snprintf() has a bounds check, the following strcat()s
-do not.  Combine them into a single snprintf().
-
-Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
----
---- a/tools/hv/hv_kvp_daemon.c
-+++ b/tools/hv/hv_kvp_daemon.c
-@@ -691,10 +691,10 @@ static char *kvp_mac_to_if_name(char *ma
- 	DIR *dir;
- 	struct dirent *entry;
- 	FILE    *file;
--	char    *p, *q, *x;
-+	char    *p, *x;
- 	char    *if_name = NULL;
- 	char    buf[256];
--	char *kvp_net_dir = "/sys/class/net/";
-+	const char kvp_net_dir[] = "/sys/class/net/";
- 	char dev_id[256];
- 	unsigned int i;
- 
-@@ -702,17 +702,9 @@ static char *kvp_mac_to_if_name(char *ma
- 	if (dir == NULL)
- 		return NULL;
- 
--	snprintf(dev_id, sizeof(dev_id), kvp_net_dir);
--	q = dev_id + strlen(kvp_net_dir);
--
- 	while ((entry = readdir(dir)) != NULL) {
--		/*
--		 * Set the state for the next pass.
--		 */
--		*q = '\0';
--
--		strcat(dev_id, entry->d_name);
--		strcat(dev_id, "/address");
-+		snprintf(dev_id, sizeof(dev_id), "%s%s/address",
-+			 kvp_net_dir, entry->d_name);
- 
- 		file = fopen(dev_id, "r");
- 		if (file == NULL)
diff --git a/debian/patches/debian/tools-perf-install.patch b/debian/patches/debian/tools-perf-install.patch
index 8d3ede9..5c56199 100644
--- a/debian/patches/debian/tools-perf-install.patch
+++ b/debian/patches/debian/tools-perf-install.patch
@@ -7,7 +7,7 @@ Forwarded: no
 
 --- a/tools/perf/Makefile.perf
 +++ b/tools/perf/Makefile.perf
-@@ -563,8 +563,8 @@ endif
+@@ -677,8 +677,8 @@ endif
  ifndef NO_LIBPERL
  	$(call QUIET_INSTALL, perl-scripts) \
  		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
@@ -18,7 +18,7 @@ Forwarded: no
  		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
  		$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
  endif
-@@ -572,23 +572,23 @@ ifndef NO_LIBPYTHON
+@@ -686,23 +686,23 @@ ifndef NO_LIBPYTHON
  	$(call QUIET_INSTALL, python-scripts) \
  		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
  		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'; \
@@ -46,5 +46,5 @@ Forwarded: no
 -		$(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'
 +		$(INSTALL) -m 644 tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'
  
- install-bin: install-tools install-tests
+ install-bin: install-tools install-tests install-traceevent-plugins
  
diff --git a/debian/patches/debian/tools-perf-version.patch b/debian/patches/debian/tools-perf-version.patch
index f9fa2ca..aa5abc8 100644
--- a/debian/patches/debian/tools-perf-version.patch
+++ b/debian/patches/debian/tools-perf-version.patch
@@ -9,7 +9,7 @@ version-dependent name.  And do the same for trace.]
 
 --- a/tools/perf/Makefile.perf
 +++ b/tools/perf/Makefile.perf
-@@ -539,18 +539,18 @@ install-gtk:
+@@ -649,22 +649,22 @@ endif
  install-tools: all install-gtk
  	$(call QUIET_INSTALL, binaries) \
  		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'; \
@@ -29,12 +29,16 @@ version-dependent name.  And do the same for trace.]
 -		$(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)';
 +		$(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
  endif
+ ifndef NO_JVMTI
+ 	$(call QUIET_INSTALL, $(LIBJVMTI)) \
+ 		$(INSTALL) $(OUTPUT)$(LIBJVMTI) '$(DESTDIR_SQ)$(libdir_SQ)';
+ endif
 -	$(call QUIET_INSTALL, libexec) \
 -		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
  	$(call QUIET_INSTALL, perf-archive) \
  		$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
  	$(call QUIET_INSTALL, perf-with-kcore) \
-@@ -578,7 +578,7 @@ ifndef NO_LIBPYTHON
+@@ -692,7 +692,7 @@ ifndef NO_LIBPYTHON
  endif
  	$(call QUIET_INSTALL, perf_completion-script) \
  		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
@@ -43,7 +47,7 @@ version-dependent name.  And do the same for trace.]
  	$(call QUIET_INSTALL, perf-tip) \
  		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
  		$(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
-@@ -599,7 +599,7 @@ install-python_ext:
+@@ -713,7 +713,7 @@ install-python_ext:
  
  # 'make install-doc' should call 'make -C Documentation install'
  $(INSTALL_DOC_TARGETS):
@@ -79,7 +83,7 @@ version-dependent name.  And do the same for trace.]
  
 --- a/tools/perf/util/Build
 +++ b/tools/perf/util/Build
-@@ -138,6 +138,7 @@ CFLAGS_rbtree.o        += -Wno-unused-pa
+@@ -162,6 +162,7 @@ CFLAGS_rbtree.o        += -Wno-unused-pa
  CFLAGS_libstring.o     += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
  CFLAGS_hweight.o       += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
  CFLAGS_parse-events.o  += -Wno-redundant-decls
diff --git a/debian/patches/debian/version.patch b/debian/patches/debian/version.patch
index 505f0b7..ed327b2 100644
--- a/debian/patches/debian/version.patch
+++ b/debian/patches/debian/version.patch
@@ -99,7 +99,7 @@ are set.
  
  #include <asm/pgtable.h>
  #include <asm/io.h>
-@@ -1340,8 +1341,9 @@ void show_regs(struct pt_regs * regs)
+@@ -1328,8 +1329,9 @@ void show_regs(struct pt_regs * regs)
  
  	printk("NIP: "REG" LR: "REG" CTR: "REG"\n",
  	       regs->nip, regs->link, regs->ctr);
@@ -119,9 +119,9 @@ are set.
  #include <linux/uio.h>
 +#include <generated/package.h>
  
- #include <asm/uaccess.h>
+ #include <linux/uaccess.h>
  #include <asm/sections.h>
-@@ -3282,11 +3283,12 @@ void __init dump_stack_set_arch_desc(con
+@@ -3117,11 +3118,12 @@ void __init dump_stack_set_arch_desc(con
   */
  void dump_stack_print_info(const char *log_lvl)
  {
diff --git a/debian/patches/features/all/aufs4/aufs4-base.patch b/debian/patches/features/all/aufs4/aufs4-base.patch
index 4c04427..463f4de 100644
--- a/debian/patches/features/all/aufs4/aufs4-base.patch
+++ b/debian/patches/features/all/aufs4/aufs4-base.patch
@@ -8,11 +8,9 @@ Patch headers added by debian/patches/features/all/aufs4/gen-patch
 
 aufs4.9 base patch
 
-diff --git a/MAINTAINERS b/MAINTAINERS
-index 63cefa6..d78b954 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -2293,6 +2293,19 @@ F:	include/linux/audit.h
+@@ -2308,6 +2308,19 @@ F:	include/linux/audit.h
  F:	include/uapi/linux/audit.h
  F:	kernel/audit*
  
@@ -32,11 +30,9 @@ index 63cefa6..d78b954 100644
  AUXILIARY DISPLAY DRIVERS
  M:	Miguel Ojeda Sandonis <miguel.ojeda.sandonis at gmail.com>
  W:	http://miguelojeda.es/auxdisplay.htm
-diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index fa1b7a9..6ee9235 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
-@@ -701,6 +701,24 @@ static inline int is_loop_device(struct file *file)
+@@ -701,6 +701,24 @@ static inline int is_loop_device(struct
  	return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
  }
  
@@ -61,8 +57,6 @@ index fa1b7a9..6ee9235 100644
  /* loop sysfs attributes */
  
  static ssize_t loop_attr_show(struct device *dev, char *page,
-diff --git a/fs/dcache.c b/fs/dcache.c
-index 5c7cc95..df0268c 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
 @@ -1164,7 +1164,7 @@ enum d_walk_ret {
@@ -74,8 +68,6 @@ index 5c7cc95..df0268c 100644
  		   enum d_walk_ret (*enter)(void *, struct dentry *),
  		   void (*finish)(void *))
  {
-diff --git a/fs/fcntl.c b/fs/fcntl.c
-index 350a2c8..6f42279 100644
 --- a/fs/fcntl.c
 +++ b/fs/fcntl.c
 @@ -29,7 +29,7 @@
@@ -87,7 +79,7 @@ index 350a2c8..6f42279 100644
  {
  	struct inode * inode = file_inode(filp);
  	int error = 0;
-@@ -60,6 +60,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
+@@ -60,6 +60,8 @@ static int setfl(int fd, struct file * f
  
  	if (filp->f_op->check_flags)
  		error = filp->f_op->check_flags(arg);
@@ -96,11 +88,9 @@ index 350a2c8..6f42279 100644
  	if (error)
  		return error;
  
-diff --git a/fs/inode.c b/fs/inode.c
-index 88110fd..9a9ba3a 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
-@@ -1642,7 +1642,7 @@ int generic_update_time(struct inode *inode, struct timespec *time, int flags)
+@@ -1642,7 +1642,7 @@ EXPORT_SYMBOL(generic_update_time);
   * This does the actual work of updating an inodes time or version.  Must have
   * had called mnt_want_write() before calling this.
   */
@@ -109,11 +99,9 @@ index 88110fd..9a9ba3a 100644
  {
  	int (*update_time)(struct inode *, struct timespec *, int);
  
-diff --git a/fs/read_write.c b/fs/read_write.c
-index 190e0d36..4052813 100644
 --- a/fs/read_write.c
 +++ b/fs/read_write.c
-@@ -515,6 +515,28 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
+@@ -515,6 +515,28 @@ ssize_t __vfs_write(struct file *file, c
  }
  EXPORT_SYMBOL(__vfs_write);
  
@@ -142,11 +130,9 @@ index 190e0d36..4052813 100644
  ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
  {
  	mm_segment_t old_fs;
-diff --git a/fs/splice.c b/fs/splice.c
-index 5a7750b..28160a7 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -855,8 +855,8 @@ ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, struct file *out,
+@@ -856,8 +856,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
  /*
   * Attempt to initiate a splice from pipe to file.
   */
@@ -157,7 +143,7 @@ index 5a7750b..28160a7 100644
  {
  	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
  				loff_t *, size_t, unsigned int);
-@@ -872,9 +872,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -873,9 +873,9 @@ static long do_splice_from(struct pipe_i
  /*
   * Attempt to initiate a splice from a file to a pipe.
   */
@@ -170,23 +156,19 @@ index 5a7750b..28160a7 100644
  {
  	ssize_t (*splice_read)(struct file *, loff_t *,
  			       struct pipe_inode_info *, size_t, unsigned int);
-diff --git a/include/linux/file.h b/include/linux/file.h
-index 7444f5f..bdac0be 100644
 --- a/include/linux/file.h
 +++ b/include/linux/file.h
-@@ -19,6 +19,7 @@
+@@ -19,6 +19,7 @@ struct dentry;
  struct path;
- extern struct file *alloc_file(struct path *, fmode_t mode,
+ extern struct file *alloc_file(const struct path *, fmode_t mode,
  	const struct file_operations *fop);
 +extern struct file *get_empty_filp(void);
  
  static inline void fput_light(struct file *file, int fput_needed)
  {
-diff --git a/include/linux/fs.h b/include/linux/fs.h
-index dc0478c..27c05e7 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -1291,6 +1291,7 @@ struct fasync_struct {
+@@ -1240,6 +1240,7 @@ extern void fasync_free(struct fasync_st
  /* can be called from interrupts */
  extern void kill_fasync(struct fasync_struct **, int, int);
  
@@ -194,7 +176,7 @@ index dc0478c..27c05e7 100644
  extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
  extern void f_setown(struct file *filp, unsigned long arg, int force);
  extern void f_delown(struct file *filp);
-@@ -1715,6 +1716,7 @@ struct file_operations {
+@@ -1664,6 +1665,7 @@ struct file_operations {
  	ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
  	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
  	int (*check_flags)(int);
@@ -202,7 +184,7 @@ index dc0478c..27c05e7 100644
  	int (*flock) (struct file *, int, struct file_lock *);
  	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
  	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-@@ -1768,6 +1770,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
+@@ -1717,6 +1719,12 @@ ssize_t rw_copy_check_uvector(int type,
  			      struct iovec *fast_pointer,
  			      struct iovec **ret_pointer);
  
@@ -215,7 +197,7 @@ index dc0478c..27c05e7 100644
  extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
  extern ssize_t __vfs_write(struct file *, const char __user *, size_t, loff_t *);
  extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
-@@ -2140,6 +2148,7 @@ extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
+@@ -2108,6 +2116,7 @@ extern int current_umask(void);
  extern void ihold(struct inode * inode);
  extern void iput(struct inode *);
  extern int generic_update_time(struct inode *, struct timespec *, int);
@@ -223,11 +205,9 @@ index dc0478c..27c05e7 100644
  
  /* /sys/fs */
  extern struct kobject *fs_kobj;
-diff --git a/include/linux/splice.h b/include/linux/splice.h
-index 00a2116..1f0a4a2 100644
 --- a/include/linux/splice.h
 +++ b/include/linux/splice.h
-@@ -86,4 +86,10 @@ extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
+@@ -86,4 +86,10 @@ extern void spd_release_page(struct spli
  
  extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
  extern const struct pipe_buf_operations default_pipe_buf_ops;
diff --git a/debian/patches/features/all/aufs4/aufs4-mmap.patch b/debian/patches/features/all/aufs4/aufs4-mmap.patch
index 04010d6..aea007d 100644
--- a/debian/patches/features/all/aufs4/aufs4-mmap.patch
+++ b/debian/patches/features/all/aufs4/aufs4-mmap.patch
@@ -8,11 +8,11 @@ Patch headers added by debian/patches/features/all/aufs4/gen-patch
 
 aufs4.9 mmap patch
 
-diff --git a/fs/proc/base.c b/fs/proc/base.c
-index ca651ac..0e8551a 100644
+[bwh: Forward-ported to 4.10: adjust indentation]
+
 --- a/fs/proc/base.c
 +++ b/fs/proc/base.c
-@@ -1953,7 +1953,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path)
+@@ -1958,7 +1958,7 @@ static int map_files_get_link(struct den
  	down_read(&mm->mmap_sem);
  	vma = find_exact_vma(mm, vm_start, vm_end);
  	if (vma && vma->vm_file) {
@@ -21,11 +21,9 @@ index ca651ac..0e8551a 100644
  		path_get(path);
  		rc = 0;
  	}
-diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
-index f8595e8..cb8eda0 100644
 --- a/fs/proc/nommu.c
 +++ b/fs/proc/nommu.c
-@@ -45,7 +45,10 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
+@@ -45,7 +45,10 @@ static int nommu_region_show(struct seq_
  	file = region->vm_file;
  
  	if (file) {
@@ -37,11 +35,9 @@ index f8595e8..cb8eda0 100644
  		dev = inode->i_sb->s_dev;
  		ino = inode->i_ino;
  	}
-diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index 35b92d8..5b981db 100644
 --- a/fs/proc/task_mmu.c
 +++ b/fs/proc/task_mmu.c
-@@ -291,7 +291,10 @@ static int is_stack(struct proc_maps_private *priv,
+@@ -291,7 +291,10 @@ show_map_vma(struct seq_file *m, struct
  	const char *name = NULL;
  
  	if (file) {
@@ -53,7 +49,7 @@ index 35b92d8..5b981db 100644
  		dev = inode->i_sb->s_dev;
  		ino = inode->i_ino;
  		pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
-@@ -1627,7 +1630,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+@@ -1628,7 +1631,7 @@ static int show_numa_map(struct seq_file
  	struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
  	struct vm_area_struct *vma = v;
  	struct numa_maps *md = &numa_priv->md;
@@ -62,11 +58,9 @@ index 35b92d8..5b981db 100644
  	struct mm_struct *mm = vma->vm_mm;
  	struct mm_walk walk = {
  		.hugetlb_entry = gather_hugetlb_stats,
-diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
-index 3717562..6a328f1 100644
 --- a/fs/proc/task_nommu.c
 +++ b/fs/proc/task_nommu.c
-@@ -155,7 +155,10 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
+@@ -155,7 +155,10 @@ static int nommu_vma_show(struct seq_fil
  	file = vma->vm_file;
  
  	if (file) {
@@ -78,11 +72,9 @@ index 3717562..6a328f1 100644
  		dev = inode->i_sb->s_dev;
  		ino = inode->i_ino;
  		pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
-diff --git a/include/linux/mm.h b/include/linux/mm.h
-index a92c8d7..1d83a2a 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -1266,6 +1266,28 @@ static inline int fixup_user_fault(struct task_struct *tsk,
+@@ -1257,6 +1257,28 @@ static inline int fixup_user_fault(struc
  }
  #endif
  
@@ -111,8 +103,6 @@ index a92c8d7..1d83a2a 100644
  extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len,
  		unsigned int gup_flags);
  extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
-diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index 4a8aced..badd16b 100644
 --- a/include/linux/mm_types.h
 +++ b/include/linux/mm_types.h
 @@ -275,6 +275,7 @@ struct vm_region {
@@ -131,11 +121,9 @@ index 4a8aced..badd16b 100644
  	void * vm_private_data;		/* was vm_pte (shared mem) */
  
  #ifndef CONFIG_MMU
-diff --git a/kernel/fork.c b/kernel/fork.c
-index 997ac1d..4d0131b 100644
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
-@@ -624,7 +624,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
+@@ -626,7 +626,7 @@ static __latent_entropy int dup_mmap(str
  			struct inode *inode = file_inode(file);
  			struct address_space *mapping = file->f_mapping;
  
@@ -144,11 +132,9 @@ index 997ac1d..4d0131b 100644
  			if (tmp->vm_flags & VM_DENYWRITE)
  				atomic_dec(&inode->i_writecount);
  			i_mmap_lock_write(mapping);
-diff --git a/mm/Makefile b/mm/Makefile
-index 295bd7a..14fa1c8 100644
 --- a/mm/Makefile
 +++ b/mm/Makefile
-@@ -37,7 +37,7 @@ obj-y			:= filemap.o mempool.o oom_kill.o \
+@@ -37,7 +37,7 @@ obj-y			:= filemap.o mempool.o oom_kill.
  			   mm_init.o mmu_context.o percpu.o slab_common.o \
  			   compaction.o vmacache.o \
  			   interval_tree.o list_lru.o workingset.o \
@@ -157,11 +143,9 @@ index 295bd7a..14fa1c8 100644
  
  obj-y += init-mm.o
  
-diff --git a/mm/filemap.c b/mm/filemap.c
-index 50b52fe..9e607f9 100644
 --- a/mm/filemap.c
 +++ b/mm/filemap.c
-@@ -2304,7 +2304,7 @@ int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -2392,7 +2392,7 @@ int filemap_page_mkwrite(struct vm_area_
  	int ret = VM_FAULT_LOCKED;
  
  	sb_start_pagefault(inode->i_sb);
@@ -170,24 +154,20 @@ index 50b52fe..9e607f9 100644
  	lock_page(page);
  	if (page->mapping != inode->i_mapping) {
  		unlock_page(page);
-diff --git a/mm/memory.c b/mm/memory.c
-index e18c57b..7be4a39 100644
 --- a/mm/memory.c
 +++ b/mm/memory.c
-@@ -2117,7 +2117,7 @@ static inline int wp_page_reuse(struct fault_env *fe, pte_t orig_pte,
- 		}
- 
- 		if (!page_mkwrite)
--			file_update_time(vma->vm_file);
-+			vma_file_update_time(vma);
+@@ -2091,7 +2091,7 @@ static void fault_dirty_shared_page(stru
  	}
  
- 	return VM_FAULT_WRITE;
-diff --git a/mm/mmap.c b/mm/mmap.c
-index 1af87c1..95b0ff4 100644
+ 	if (!page_mkwrite)
+-		file_update_time(vma->vm_file);
++		vma_file_update_time(vma);
+ }
+ 
+ /*
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
-@@ -170,7 +170,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
+@@ -170,7 +170,7 @@ static struct vm_area_struct *remove_vma
  	if (vma->vm_ops && vma->vm_ops->close)
  		vma->vm_ops->close(vma);
  	if (vma->vm_file)
@@ -196,7 +176,7 @@ index 1af87c1..95b0ff4 100644
  	mpol_put(vma_policy(vma));
  	kmem_cache_free(vm_area_cachep, vma);
  	return next;
-@@ -879,7 +879,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
+@@ -879,7 +879,7 @@ again:
  	if (remove_next) {
  		if (file) {
  			uprobe_munmap(next, next->vm_start, next->vm_end);
@@ -205,7 +185,7 @@ index 1af87c1..95b0ff4 100644
  		}
  		if (next->anon_vma)
  			anon_vma_merge(vma, next);
-@@ -1727,8 +1727,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1727,8 +1727,8 @@ out:
  	return addr;
  
  unmap_and_free_vma:
@@ -215,7 +195,7 @@ index 1af87c1..95b0ff4 100644
  
  	/* Undo any partial mapping done by a device driver. */
  	unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end);
-@@ -2533,7 +2533,7 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2533,7 +2533,7 @@ static int __split_vma(struct mm_struct
  		goto out_free_mpol;
  
  	if (new->vm_file)
@@ -224,7 +204,7 @@ index 1af87c1..95b0ff4 100644
  
  	if (new->vm_ops && new->vm_ops->open)
  		new->vm_ops->open(new);
-@@ -2552,7 +2552,7 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2552,7 +2552,7 @@ static int __split_vma(struct mm_struct
  	if (new->vm_ops && new->vm_ops->close)
  		new->vm_ops->close(new);
  	if (new->vm_file)
@@ -233,7 +213,7 @@ index 1af87c1..95b0ff4 100644
  	unlink_anon_vmas(new);
   out_free_mpol:
  	mpol_put(vma_policy(new));
-@@ -2703,7 +2703,7 @@ int vm_munmap(unsigned long start, size_t len)
+@@ -2703,7 +2703,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsign
  	struct vm_area_struct *vma;
  	unsigned long populate = 0;
  	unsigned long ret = -EINVAL;
@@ -242,7 +222,7 @@ index 1af87c1..95b0ff4 100644
  
  	pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.txt.\n",
  		     current->comm, current->pid);
-@@ -2778,10 +2778,27 @@ int vm_munmap(unsigned long start, size_t len)
+@@ -2778,10 +2778,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsign
  		}
  	}
  
@@ -271,7 +251,7 @@ index 1af87c1..95b0ff4 100644
  out:
  	up_write(&mm->mmap_sem);
  	if (populate)
-@@ -3056,7 +3073,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+@@ -3056,7 +3073,7 @@ struct vm_area_struct *copy_vma(struct v
  		if (anon_vma_clone(new_vma, vma))
  			goto out_free_mempol;
  		if (new_vma->vm_file)
@@ -280,11 +260,9 @@ index 1af87c1..95b0ff4 100644
  		if (new_vma->vm_ops && new_vma->vm_ops->open)
  			new_vma->vm_ops->open(new_vma);
  		vma_link(mm, new_vma, prev, rb_link, rb_parent);
-diff --git a/mm/nommu.c b/mm/nommu.c
-index 8b8faaf..5d26ed94 100644
 --- a/mm/nommu.c
 +++ b/mm/nommu.c
-@@ -636,7 +636,7 @@ static void __put_nommu_region(struct vm_region *region)
+@@ -636,7 +636,7 @@ static void __put_nommu_region(struct vm
  		up_write(&nommu_region_sem);
  
  		if (region->vm_file)
@@ -293,7 +271,7 @@ index 8b8faaf..5d26ed94 100644
  
  		/* IO memory and memory shared directly out of the pagecache
  		 * from ramfs/tmpfs mustn't be released here */
-@@ -794,7 +794,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -794,7 +794,7 @@ static void delete_vma(struct mm_struct
  	if (vma->vm_ops && vma->vm_ops->close)
  		vma->vm_ops->close(vma);
  	if (vma->vm_file)
@@ -311,7 +289,7 @@ index 8b8faaf..5d26ed94 100644
  			kmem_cache_free(vm_region_jar, region);
  			region = pregion;
  			result = start;
-@@ -1395,10 +1395,10 @@ unsigned long do_mmap(struct file *file,
+@@ -1395,10 +1395,10 @@ error_just_free:
  	up_write(&nommu_region_sem);
  error:
  	if (region->vm_file)
@@ -324,9 +302,6 @@ index 8b8faaf..5d26ed94 100644
  	kmem_cache_free(vm_area_cachep, vma);
  	return ret;
  
-diff --git a/mm/prfile.c b/mm/prfile.c
-new file mode 100644
-index 0000000..b323b8a
 --- /dev/null
 +++ b/mm/prfile.c
 @@ -0,0 +1,86 @@
diff --git a/debian/patches/features/all/aufs4/aufs4-standalone.patch b/debian/patches/features/all/aufs4/aufs4-standalone.patch
index de345e5..e6993e1 100644
--- a/debian/patches/features/all/aufs4/aufs4-standalone.patch
+++ b/debian/patches/features/all/aufs4/aufs4-standalone.patch
@@ -8,19 +8,17 @@ Patch headers added by debian/patches/features/all/aufs4/gen-patch
 
 aufs4.9 standalone patch
 
-diff --git a/fs/dcache.c b/fs/dcache.c
-index df0268c..755fea1 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
-@@ -1272,6 +1272,7 @@ void d_walk(struct dentry *parent, void *data,
+@@ -1272,6 +1272,7 @@ rename_retry:
  	seq = 1;
  	goto again;
  }
 +EXPORT_SYMBOL_GPL(d_walk);
  
- /*
-  * Search for at least 1 mount point in the dentry's subdirs.
-@@ -2855,6 +2856,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
+ struct check_mount {
+ 	struct vfsmount *mnt;
+@@ -2864,6 +2865,7 @@ void d_exchange(struct dentry *dentry1,
  
  	write_sequnlock(&rename_lock);
  }
@@ -28,11 +26,9 @@ index df0268c..755fea1 100644
  
  /**
   * d_ancestor - search for an ancestor
-diff --git a/fs/exec.c b/fs/exec.c
-index 4e497b9..e27d323 100644
 --- a/fs/exec.c
 +++ b/fs/exec.c
-@@ -104,6 +104,7 @@ bool path_noexec(const struct path *path)
+@@ -104,6 +104,7 @@ bool path_noexec(const struct path *path
  	return (path->mnt->mnt_flags & MNT_NOEXEC) ||
  	       (path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
  }
@@ -40,11 +36,9 @@ index 4e497b9..e27d323 100644
  
  #ifdef CONFIG_USELIB
  /*
-diff --git a/fs/fcntl.c b/fs/fcntl.c
-index 6f42279..04fd33c 100644
 --- a/fs/fcntl.c
 +++ b/fs/fcntl.c
-@@ -82,6 +82,7 @@ int setfl(int fd, struct file * filp, unsigned long arg)
+@@ -82,6 +82,7 @@ int setfl(int fd, struct file * filp, un
   out:
  	return error;
  }
@@ -52,11 +46,9 @@ index 6f42279..04fd33c 100644
  
  static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
                       int force)
-diff --git a/fs/file_table.c b/fs/file_table.c
-index ad17e05..ae9f267 100644
 --- a/fs/file_table.c
 +++ b/fs/file_table.c
-@@ -147,6 +147,7 @@ struct file *get_empty_filp(void)
+@@ -147,6 +147,7 @@ over:
  	}
  	return ERR_PTR(-ENFILE);
  }
@@ -88,11 +80,9 @@ index ad17e05..ae9f267 100644
  
  void __init files_init(void)
  { 
-diff --git a/fs/inode.c b/fs/inode.c
-index 9a9ba3a..a3a18d8 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
-@@ -1651,6 +1651,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags)
+@@ -1651,6 +1651,7 @@ int update_time(struct inode *inode, str
  
  	return update_time(inode, time, flags);
  }
@@ -100,11 +90,9 @@ index 9a9ba3a..a3a18d8 100644
  
  /**
   *	touch_atime	-	update the access time
-diff --git a/fs/namespace.c b/fs/namespace.c
-index e6c234b..8d13f7b 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
-@@ -466,6 +466,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
+@@ -462,6 +462,7 @@ void __mnt_drop_write(struct vfsmount *m
  	mnt_dec_writers(real_mount(mnt));
  	preempt_enable();
  }
@@ -112,7 +100,7 @@ index e6c234b..8d13f7b 100644
  
  /**
   * mnt_drop_write - give up write access to a mount
-@@ -1823,6 +1824,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+@@ -1872,6 +1873,7 @@ int iterate_mounts(int (*f)(struct vfsmo
  	}
  	return 0;
  }
@@ -120,8 +108,6 @@ index e6c234b..8d13f7b 100644
  
  static void cleanup_group_ids(struct mount *mnt, struct mount *end)
  {
-diff --git a/fs/notify/group.c b/fs/notify/group.c
-index fbe3cbe..bdfc61e 100644
 --- a/fs/notify/group.c
 +++ b/fs/notify/group.c
 @@ -22,6 +22,7 @@
@@ -132,7 +118,7 @@ index fbe3cbe..bdfc61e 100644
  
  #include <linux/fsnotify_backend.h>
  #include "fsnotify.h"
-@@ -100,6 +101,7 @@ void fsnotify_get_group(struct fsnotify_group *group)
+@@ -100,6 +101,7 @@ void fsnotify_get_group(struct fsnotify_
  {
  	atomic_inc(&group->refcnt);
  }
@@ -140,7 +126,7 @@ index fbe3cbe..bdfc61e 100644
  
  /*
   * Drop a reference to a group.  Free it if it's through.
-@@ -109,6 +111,7 @@ void fsnotify_put_group(struct fsnotify_group *group)
+@@ -109,6 +111,7 @@ void fsnotify_put_group(struct fsnotify_
  	if (atomic_dec_and_test(&group->refcnt))
  		fsnotify_final_destroy_group(group);
  }
@@ -148,7 +134,7 @@ index fbe3cbe..bdfc61e 100644
  
  /*
   * Create a new fsnotify_group and hold a reference for the group returned.
-@@ -137,6 +140,7 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
+@@ -137,6 +140,7 @@ struct fsnotify_group *fsnotify_alloc_gr
  
  	return group;
  }
@@ -156,11 +142,9 @@ index fbe3cbe..bdfc61e 100644
  
  int fsnotify_fasync(int fd, struct file *file, int on)
  {
-diff --git a/fs/notify/mark.c b/fs/notify/mark.c
-index d3fea0b..5fc06ad 100644
 --- a/fs/notify/mark.c
 +++ b/fs/notify/mark.c
-@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark)
+@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_m
  		mark->free_mark(mark);
  	}
  }
@@ -168,7 +152,7 @@ index d3fea0b..5fc06ad 100644
  
  /* Calculate mask of events for a list of marks */
  u32 fsnotify_recalc_mask(struct hlist_head *head)
-@@ -230,6 +231,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark,
+@@ -230,6 +231,7 @@ void fsnotify_destroy_mark(struct fsnoti
  	mutex_unlock(&group->mark_mutex);
  	fsnotify_free_mark(mark);
  }
@@ -176,7 +160,7 @@ index d3fea0b..5fc06ad 100644
  
  void fsnotify_destroy_marks(struct hlist_head *head, spinlock_t *lock)
  {
-@@ -415,6 +417,7 @@ int fsnotify_add_mark_locked(struct fsnotify_mark *mark,
+@@ -415,6 +417,7 @@ err:
  
  	return ret;
  }
@@ -184,7 +168,7 @@ index d3fea0b..5fc06ad 100644
  
  int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group,
  		      struct inode *inode, struct vfsmount *mnt, int allow_dups)
-@@ -533,6 +536,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark,
+@@ -521,6 +524,7 @@ void fsnotify_init_mark(struct fsnotify_
  	atomic_set(&mark->refcnt, 1);
  	mark->free_mark = free_mark;
  }
@@ -192,11 +176,9 @@ index d3fea0b..5fc06ad 100644
  
  /*
   * Destroy all marks in destroy_list, waits for SRCU period to finish before
-diff --git a/fs/open.c b/fs/open.c
-index d3ed817..20d2494 100644
 --- a/fs/open.c
 +++ b/fs/open.c
-@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
+@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, l
  	inode_unlock(dentry->d_inode);
  	return ret;
  }
@@ -212,8 +194,6 @@ index d3ed817..20d2494 100644
  
  static int do_dentry_open(struct file *f,
  			  struct inode *inode,
-diff --git a/fs/read_write.c b/fs/read_write.c
-index 4052813..7dfd732 100644
 --- a/fs/read_write.c
 +++ b/fs/read_write.c
 @@ -525,6 +525,7 @@ vfs_readf_t vfs_readf(struct file *file)
@@ -224,7 +204,7 @@ index 4052813..7dfd732 100644
  
  vfs_writef_t vfs_writef(struct file *file)
  {
-@@ -536,6 +537,7 @@ vfs_writef_t vfs_writef(struct file *file)
+@@ -536,6 +537,7 @@ vfs_writef_t vfs_writef(struct file *fil
  		return new_sync_write;
  	return ERR_PTR(-ENOSYS);
  }
@@ -232,11 +212,9 @@ index 4052813..7dfd732 100644
  
  ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
  {
-diff --git a/fs/splice.c b/fs/splice.c
-index 28160a7..98c1902 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -868,6 +868,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -869,6 +869,7 @@ long do_splice_from(struct pipe_inode_in
  
  	return splice_write(pipe, out, ppos, len, flags);
  }
@@ -244,7 +222,7 @@ index 28160a7..98c1902 100644
  
  /*
   * Attempt to initiate a splice from a file to a pipe.
-@@ -897,6 +898,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
+@@ -898,6 +899,7 @@ long do_splice_to(struct file *in, loff_
  
  	return splice_read(in, ppos, pipe, len, flags);
  }
@@ -252,11 +230,9 @@ index 28160a7..98c1902 100644
  
  /**
   * splice_direct_to_actor - splices data directly between two non-pipes
-diff --git a/fs/xattr.c b/fs/xattr.c
-index 2d13b4e..41c2bcd 100644
 --- a/fs/xattr.c
 +++ b/fs/xattr.c
-@@ -296,6 +296,7 @@ int __vfs_setxattr_noperm(struct dentry *dentry, const char *name,
+@@ -296,6 +296,7 @@ vfs_getxattr_alloc(struct dentry *dentry
  	*xattr_value = value;
  	return error;
  }
@@ -264,8 +240,6 @@ index 2d13b4e..41c2bcd 100644
  
  ssize_t
  __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
-diff --git a/kernel/task_work.c b/kernel/task_work.c
-index d513051..e056d54 100644
 --- a/kernel/task_work.c
 +++ b/kernel/task_work.c
 @@ -119,3 +119,4 @@ void task_work_run(void)
@@ -273,8 +247,6 @@ index d513051..e056d54 100644
  	}
  }
 +EXPORT_SYMBOL_GPL(task_work_run);
-diff --git a/security/commoncap.c b/security/commoncap.c
-index 8df676f..6b5cc07 100644
 --- a/security/commoncap.c
 +++ b/security/commoncap.c
 @@ -1061,12 +1061,14 @@ int cap_mmap_addr(unsigned long addr)
@@ -292,8 +264,6 @@ index 8df676f..6b5cc07 100644
  
  #ifdef CONFIG_SECURITY
  
-diff --git a/security/device_cgroup.c b/security/device_cgroup.c
-index 03c1652..f88c84b 100644
 --- a/security/device_cgroup.c
 +++ b/security/device_cgroup.c
 @@ -7,6 +7,7 @@
@@ -304,7 +274,7 @@ index 03c1652..f88c84b 100644
  #include <linux/list.h>
  #include <linux/uaccess.h>
  #include <linux/seq_file.h>
-@@ -849,6 +850,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask)
+@@ -849,6 +850,7 @@ int __devcgroup_inode_permission(struct
  	return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
  			access);
  }
@@ -312,11 +282,9 @@ index 03c1652..f88c84b 100644
  
  int devcgroup_inode_mknod(int mode, dev_t dev)
  {
-diff --git a/security/security.c b/security/security.c
-index f825304..8dd441d 100644
 --- a/security/security.c
 +++ b/security/security.c
-@@ -443,6 +443,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
+@@ -443,6 +443,7 @@ int security_path_rmdir(const struct pat
  		return 0;
  	return call_int_hook(path_rmdir, 0, dir, dentry);
  }
@@ -324,7 +292,7 @@ index f825304..8dd441d 100644
  
  int security_path_unlink(const struct path *dir, struct dentry *dentry)
  {
-@@ -459,6 +460,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
+@@ -459,6 +460,7 @@ int security_path_symlink(const struct p
  		return 0;
  	return call_int_hook(path_symlink, 0, dir, dentry, old_name);
  }
@@ -332,7 +300,7 @@ index f825304..8dd441d 100644
  
  int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
  		       struct dentry *new_dentry)
-@@ -467,6 +469,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
+@@ -467,6 +469,7 @@ int security_path_link(struct dentry *ol
  		return 0;
  	return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
  }
@@ -340,7 +308,7 @@ index f825304..8dd441d 100644
  
  int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
  			 const struct path *new_dir, struct dentry *new_dentry,
-@@ -494,6 +497,7 @@ int security_path_truncate(const struct path *path)
+@@ -494,6 +497,7 @@ int security_path_truncate(const struct
  		return 0;
  	return call_int_hook(path_truncate, 0, path);
  }
@@ -348,7 +316,7 @@ index f825304..8dd441d 100644
  
  int security_path_chmod(const struct path *path, umode_t mode)
  {
-@@ -501,6 +505,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
+@@ -501,6 +505,7 @@ int security_path_chmod(const struct pat
  		return 0;
  	return call_int_hook(path_chmod, 0, path, mode);
  }
@@ -356,7 +324,7 @@ index f825304..8dd441d 100644
  
  int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
  {
-@@ -508,6 +513,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
+@@ -508,6 +513,7 @@ int security_path_chown(const struct pat
  		return 0;
  	return call_int_hook(path_chown, 0, path, uid, gid);
  }
@@ -364,7 +332,7 @@ index f825304..8dd441d 100644
  
  int security_path_chroot(const struct path *path)
  {
-@@ -593,6 +599,7 @@ int security_inode_readlink(struct dentry *dentry)
+@@ -593,6 +599,7 @@ int security_inode_readlink(struct dentr
  		return 0;
  	return call_int_hook(inode_readlink, 0, dentry);
  }
@@ -372,7 +340,7 @@ index f825304..8dd441d 100644
  
  int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
  			       bool rcu)
-@@ -608,6 +615,7 @@ int security_inode_permission(struct inode *inode, int mask)
+@@ -608,6 +615,7 @@ int security_inode_permission(struct ino
  		return 0;
  	return call_int_hook(inode_permission, 0, inode, mask);
  }
@@ -380,7 +348,7 @@ index f825304..8dd441d 100644
  
  int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
  {
-@@ -779,6 +787,7 @@ int security_file_permission(struct file *file, int mask)
+@@ -779,6 +787,7 @@ int security_file_permission(struct file
  
  	return fsnotify_perm(file, mask);
  }
@@ -388,7 +356,7 @@ index f825304..8dd441d 100644
  
  int security_file_alloc(struct file *file)
  {
-@@ -838,6 +847,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
+@@ -838,6 +847,7 @@ int security_mmap_file(struct file *file
  		return ret;
  	return ima_file_mmap(file, prot);
  }
diff --git a/debian/patches/features/all/securelevel/acpi-ignore-acpi_rsdp-kernel-parameter-when-securele.patch b/debian/patches/features/all/securelevel/acpi-ignore-acpi_rsdp-kernel-parameter-when-securele.patch
index 8a26e52..728f7b2 100644
--- a/debian/patches/features/all/securelevel/acpi-ignore-acpi_rsdp-kernel-parameter-when-securele.patch
+++ b/debian/patches/features/all/securelevel/acpi-ignore-acpi_rsdp-kernel-parameter-when-securele.patch
@@ -13,8 +13,6 @@ Signed-off-by: Josh Boyer <jwboyer at redhat.com>
  drivers/acpi/osl.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
-diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
-index 814d5f83b75e..242ca81bb606 100644
 --- a/drivers/acpi/osl.c
 +++ b/drivers/acpi/osl.c
 @@ -40,6 +40,7 @@
@@ -24,10 +22,10 @@ index 814d5f83b75e..242ca81bb606 100644
 +#include <linux/security.h>
  
  #include <asm/io.h>
- #include <asm/uaccess.h>
-@@ -254,7 +255,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
- acpi_physical_address __init acpi_os_get_root_pointer(void)
- {
+ #include <linux/uaccess.h>
+@@ -192,7 +193,7 @@ acpi_physical_address __init acpi_os_get
+ 	acpi_physical_address pa = 0;
+ 
  #ifdef CONFIG_KEXEC
 -	if (acpi_rsdp)
 +	if (acpi_rsdp && (get_securelevel() <= 0))
diff --git a/debian/patches/features/all/securelevel/arm64-add-kernel-config-option-to-set-securelevel-wh.patch b/debian/patches/features/all/securelevel/arm64-add-kernel-config-option-to-set-securelevel-wh.patch
index 92f5057..d583775 100644
--- a/debian/patches/features/all/securelevel/arm64-add-kernel-config-option-to-set-securelevel-wh.patch
+++ b/debian/patches/features/all/securelevel/arm64-add-kernel-config-option-to-set-securelevel-wh.patch
@@ -10,6 +10,7 @@ Determine the state of Secure Boot in the EFI stub and pass this to the
 kernel using the FDT.
 
 Signed-off-by: Linn Crosetto <linn at hpe.com>
+[bwh: Forward-ported to 4.10: adjust context]
 ---
 v2:
 
@@ -26,7 +27,7 @@ v2:
 
 --- a/arch/arm64/Kconfig
 +++ b/arch/arm64/Kconfig
-@@ -972,6 +972,19 @@ config EFI
+@@ -990,6 +990,19 @@ config EFI
  	  allow the kernel to be booted as an EFI application. This
  	  is only useful on systems that have UEFI firmware.
  
@@ -56,7 +57,7 @@ v2:
  
  #include <asm/efi.h>
  
-@@ -243,6 +244,12 @@ void __init efi_init(void)
+@@ -244,6 +245,12 @@ void __init efi_init(void)
  	     "Unexpected EFI_MEMORY_DESCRIPTOR version %ld",
  	      efi.memmap.desc_version);
  
@@ -66,12 +67,12 @@ v2:
 +	}
 +#endif
 +
- 	if (uefi_init() < 0)
+ 	if (uefi_init() < 0) {
+ 		efi_memmap_unmap();
  		return;
- 
 --- a/drivers/firmware/efi/efi.c
 +++ b/drivers/firmware/efi/efi.c
-@@ -580,7 +580,8 @@ static __initdata struct params fdt_para
+@@ -612,7 +612,8 @@ static __initdata struct params fdt_para
  	UEFI_PARAM("MemMap Address", "linux,uefi-mmap-start", mmap),
  	UEFI_PARAM("MemMap Size", "linux,uefi-mmap-size", mmap_size),
  	UEFI_PARAM("MemMap Desc. Size", "linux,uefi-mmap-desc-size", desc_size),
@@ -94,15 +95,15 @@ v2:
  		'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0 };
 --- a/drivers/firmware/efi/libstub/efistub.h
 +++ b/drivers/firmware/efi/libstub/efistub.h
-@@ -62,4 +62,5 @@ efi_status_t efi_random_alloc(efi_system
+@@ -65,4 +65,5 @@ efi_status_t check_platform_features(efi
  
- efi_status_t check_platform_features(efi_system_table_t *sys_table_arg);
+ efi_status_t efi_random_get_seed(efi_system_table_t *sys_table_arg);
  
 +int efi_get_secureboot(efi_system_table_t *sys_table_arg);
  #endif
 --- a/drivers/firmware/efi/libstub/fdt.c
 +++ b/drivers/firmware/efi/libstub/fdt.c
-@@ -139,6 +139,13 @@ efi_status_t update_fdt(efi_system_table
+@@ -134,6 +134,13 @@ static efi_status_t update_fdt(efi_syste
  			return efi_status;
  		}
  	}
@@ -118,7 +119,7 @@ v2:
  fdt_set_fail:
 --- a/include/linux/efi.h
 +++ b/include/linux/efi.h
-@@ -687,6 +687,7 @@ struct efi_fdt_params {
+@@ -736,6 +736,7 @@ struct efi_fdt_params {
  	u32 mmap_size;
  	u32 desc_size;
  	u32 desc_ver;
diff --git a/debian/patches/features/all/securelevel/pci-lock-down-bar-access-when-securelevel-is-enabled.patch b/debian/patches/features/all/securelevel/pci-lock-down-bar-access-when-securelevel-is-enabled.patch
index 06e2136..800ef71 100644
--- a/debian/patches/features/all/securelevel/pci-lock-down-bar-access-when-securelevel-is-enabled.patch
+++ b/debian/patches/features/all/securelevel/pci-lock-down-bar-access-when-securelevel-is-enabled.patch
@@ -10,6 +10,7 @@ to paranoid - in future we can potentially relax this for sufficiently
 IOMMU-isolated devices.
 
 Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
+[bwh: Forward-ported to 4.10: adjust context]
 ---
  drivers/pci/pci-sysfs.c | 9 +++++++++
  drivers/pci/proc.c      | 9 ++++++++-
@@ -18,7 +19,7 @@ Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
 
 --- a/drivers/pci/pci-sysfs.c
 +++ b/drivers/pci/pci-sysfs.c
-@@ -716,6 +716,9 @@ static ssize_t pci_write_config(struct f
+@@ -718,6 +718,9 @@ static ssize_t pci_write_config(struct f
  	loff_t init_off = off;
  	u8 *data = (u8 *) buf;
  
@@ -28,7 +29,7 @@ Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
  	if (off > dev->cfg_size)
  		return 0;
  	if (off + count > dev->cfg_size) {
-@@ -1007,6 +1010,9 @@ static int pci_mmap_resource(struct kobj
+@@ -1009,6 +1012,9 @@ static int pci_mmap_resource(struct kobj
  	resource_size_t start, end;
  	int i;
  
@@ -38,7 +39,7 @@ Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
  	for (i = 0; i < PCI_ROM_RESOURCE; i++)
  		if (res == &pdev->resource[i])
  			break;
-@@ -1106,6 +1112,9 @@ static ssize_t pci_write_resource_io(str
+@@ -1108,6 +1114,9 @@ static ssize_t pci_write_resource_io(str
  				     struct bin_attribute *attr, char *buf,
  				     loff_t off, size_t count)
  {
@@ -50,14 +51,14 @@ Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
  
 --- a/drivers/pci/proc.c
 +++ b/drivers/pci/proc.c
-@@ -11,6 +11,7 @@
- #include <linux/proc_fs.h>
+@@ -12,6 +12,7 @@
  #include <linux/seq_file.h>
  #include <linux/capability.h>
+ #include <linux/uaccess.h>
 +#include <linux/security.h>
- #include <asm/uaccess.h>
  #include <asm/byteorder.h>
  #include "pci.h"
+ 
 @@ -116,6 +117,9 @@ static ssize_t proc_bus_pci_write(struct
  	int size = dev->cfg_size;
  	int cnt;
@@ -89,14 +90,14 @@ Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
  	/* Make sure the caller is mapping a real resource for this device */
 --- a/drivers/pci/syscall.c
 +++ b/drivers/pci/syscall.c
-@@ -10,6 +10,7 @@
- #include <linux/errno.h>
+@@ -11,6 +11,7 @@
  #include <linux/pci.h>
  #include <linux/syscalls.h>
+ #include <linux/uaccess.h>
 +#include <linux/security.h>
- #include <asm/uaccess.h>
  #include "pci.h"
  
+ SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,
 @@ -92,7 +93,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigne
  	u32 dword;
  	int err = 0;
diff --git a/debian/patches/features/all/securelevel/restrict-dev-mem-and-dev-kmem-when-securelevel-is-se.patch b/debian/patches/features/all/securelevel/restrict-dev-mem-and-dev-kmem-when-securelevel-is-se.patch
index dd8676d..5ce942a 100644
--- a/debian/patches/features/all/securelevel/restrict-dev-mem-and-dev-kmem-when-securelevel-is-se.patch
+++ b/debian/patches/features/all/securelevel/restrict-dev-mem-and-dev-kmem-when-securelevel-is-se.patch
@@ -8,7 +8,7 @@ modification of the kernel at runtime. Prevent this if securelevel has been
 set.
 
 Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
-[bwh: Forward-ported to 4.9: adjust context]
+[bwh: Forward-ported to 4.10: adjust context]
 ---
  drivers/char/mem.c | 6 ++++++
  1 file changed, 6 insertions(+)
@@ -25,13 +25,13 @@ Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
  	if (!valid_phys_addr_range(p, count))
  		return -EFAULT;
  
-@@ -513,6 +516,9 @@ static ssize_t write_kmem(struct file *f
+@@ -514,6 +517,9 @@ static ssize_t write_kmem(struct file *f
  	char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
  	int err = 0;
  
 +	if (get_securelevel() > 0)
 +		return -EPERM;
 +
- 	if (!pfn_valid(PFN_DOWN(p)))
- 		return -EIO;
- 
+ 	if (p < (unsigned long) high_memory) {
+ 		unsigned long to_write = min_t(unsigned long, count,
+ 					       (unsigned long)high_memory - p);
diff --git a/debian/patches/features/all/securelevel/uswsusp-disable-when-securelevel-is-set.patch b/debian/patches/features/all/securelevel/uswsusp-disable-when-securelevel-is-set.patch
index 88129ec..fc68a85 100644
--- a/debian/patches/features/all/securelevel/uswsusp-disable-when-securelevel-is-set.patch
+++ b/debian/patches/features/all/securelevel/uswsusp-disable-when-securelevel-is-set.patch
@@ -12,8 +12,6 @@ Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>
  kernel/power/user.c | 4 ++++
  1 file changed, 4 insertions(+)
 
-diff --git a/kernel/power/user.c b/kernel/power/user.c
-index 526e8911460a..40618bf41620 100644
 --- a/kernel/power/user.c
 +++ b/kernel/power/user.c
 @@ -24,6 +24,7 @@
@@ -22,9 +20,9 @@ index 526e8911460a..40618bf41620 100644
  #include <linux/freezer.h>
 +#include <linux/security.h>
  
- #include <asm/uaccess.h>
+ #include <linux/uaccess.h>
  
-@@ -52,6 +53,9 @@ static int snapshot_open(struct inode *inode, struct file *filp)
+@@ -52,6 +53,9 @@ static int snapshot_open(struct inode *i
  	if (!hibernation_available())
  		return -EPERM;
  
diff --git a/debian/patches/features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch b/debian/patches/features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch
deleted file mode 100644
index babf877..0000000
--- a/debian/patches/features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch
+++ /dev/null
@@ -1,207 +0,0 @@
-From: Ashley Hughes <ashley.hughes at blueyonder.co.uk>
-Date: Sat, 19 Nov 2016 08:10:27 +0100
-Subject: [PATCH] ARM: dts: orion5x: convert ls-chl to FDT
-Origin: https://git.kernel.org/linus/f94f268979a2aaeb5842c5b24ed7d44497f7753c
-
-This patch converts my orion5x ls-chl Linkstation device to device tree.
-
-[gregory.clement at free-electrons.com: fix title, add back the commit log,
-move the removal of the platform in an other patch]
-Signed-off-by: Ashley Hughes <ashley.hughes at blueyonder.co.uk>
-Reviewed-by: Andrew Lunn <andrew at lunn.ch>
-Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
----
- arch/arm/boot/dts/Makefile          |   1 +
- arch/arm/boot/dts/orion5x-lschl.dts | 171 ++++++++++++++++++++++++++++++++++++
- 2 files changed, 172 insertions(+)
- create mode 100644 arch/arm/boot/dts/orion5x-lschl.dts
-
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index befcd2619902..485304914916 100644
---- a/arch/arm/boot/dts/Makefile
-+++ b/arch/arm/boot/dts/Makefile
-@@ -597,6 +597,7 @@ dtb-$(CONFIG_ARCH_ORION5X) += \
- 	orion5x-lacie-ethernet-disk-mini-v2.dtb \
- 	orion5x-linkstation-lsgl.dtb \
- 	orion5x-linkstation-lswtgl.dtb \
-+	orion5x-lschl.dtb \
- 	orion5x-lswsgl.dtb \
- 	orion5x-maxtor-shared-storage-2.dtb \
- 	orion5x-netgear-wnr854t.dtb \
-diff --git a/arch/arm/boot/dts/orion5x-lschl.dts b/arch/arm/boot/dts/orion5x-lschl.dts
-new file mode 100644
-index 000000000000..947409252845
---- /dev/null
-+++ b/arch/arm/boot/dts/orion5x-lschl.dts
-@@ -0,0 +1,171 @@
-+/*
-+ * Device Tree file for Buffalo Linkstation LS-CHLv3
-+ *
-+ * Copyright (C) 2016 Ash Hughes <ashley.hughes at blueyonder.co.uk>
-+ * Copyright (C) 2015, 2016
-+ * Roger Shimizu <rogershimizu at gmail.com>
-+ *
-+ * This file is dual-licensed: you can use it either under the terms
-+ * of the GPL or the X11 license, at your option. Note that this dual
-+ * licensing only applies to this file, and not this project as a
-+ * whole.
-+ *
-+ *  a) This file is free software; you can redistribute it and/or
-+ *     modify it under the terms of the GNU General Public License as
-+ *     published by the Free Software Foundation; either version 2 of the
-+ *     License, or (at your option) any later version.
-+ *
-+ *     This file is distributed in the hope that it will be useful
-+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *     GNU General Public License for more details.
-+ *
-+ * Or, alternatively
-+ *
-+ *  b) Permission is hereby granted, free of charge, to any person
-+ *     obtaining a copy of this software and associated documentation
-+ *     files (the "Software"), to deal in the Software without
-+ *     restriction, including without limitation the rights to use
-+ *     copy, modify, merge, publish, distribute, sublicense, and/or
-+ *     sell copies of the Software, and to permit persons to whom the
-+ *     Software is furnished to do so, subject to the following
-+ *     conditions:
-+ *
-+ *     The above copyright notice and this permission notice shall be
-+ *     included in all copies or substantial portions of the Software.
-+ *
-+ *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
-+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
-+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ *     OTHER DEALINGS IN THE SOFTWARE.
-+ */
-+
-+/dts-v1/;
-+
-+#include "orion5x-linkstation.dtsi"
-+#include "mvebu-linkstation-gpio-simple.dtsi"
-+#include "mvebu-linkstation-fan.dtsi"
-+#include <dt-bindings/gpio/gpio.h>
-+
-+/ {
-+	model = "Buffalo Linkstation Live v3 (LS-CHL)";
-+	compatible = "buffalo,lschl", "marvell,orion5x-88f5182", "marvell,orion5x";
-+
-+	memory { /* 128 MB */
-+		device_type = "memory";
-+		reg = <0x00000000 0x8000000>;
-+	};
-+
-+	gpio_keys {
-+		func {
-+			label = "Function Button";
-+			linux,code = <KEY_OPTION>;
-+			gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
-+		};
-+
-+		power-on-switch {
-+			gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
-+		};
-+
-+		power-auto-switch {
-+			gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
-+		};
-+	};
-+
-+	gpio_leds {
-+		pinctrl-0 = <&pmx_led_power &pmx_led_alarm &pmx_led_info &pmx_led_func>;
-+		blue-power-led {
-+			gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
-+		};
-+
-+		red-alarm-led {
-+			gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
-+		};
-+
-+		amber-info-led {
-+			gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
-+		};
-+
-+		func {
-+			label = "lschl:func:blue:top";
-+			gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
-+		};
-+	};
-+
-+	gpio_fan {
-+		gpios = <&gpio0 14 GPIO_ACTIVE_LOW
-+			 &gpio0 16 GPIO_ACTIVE_LOW>;
-+
-+		alarm-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
-+	};
-+};
-+
-+&pinctrl {
-+	pmx_led_power: pmx-leds {
-+		marvell,pins = "mpp0";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_power_hdd: pmx-power-hdd {
-+		marvell,pins = "mpp1";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_led_alarm: pmx-leds {
-+		marvell,pins = "mpp2";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_led_info: pmx-leds {
-+		marvell,pins = "mpp3";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_fan_lock: pmx-fan-lock {
-+		marvell,pins = "mpp6";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_power_switch: pmx-power-switch {
-+		marvell,pins = "mpp8", "mpp10", "mpp15";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_power_usb: pmx-power-usb {
-+		marvell,pins = "mpp9";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_fan_high: pmx-fan-high {
-+		marvell,pins = "mpp14";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_fan_low: pmx-fan-low {
-+		marvell,pins = "mpp16";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_led_func: pmx-leds {
-+		marvell,pins = "mpp17";
-+		marvell,function = "gpio";
-+	};
-+
-+	pmx_sw_init: pmx-sw-init {
-+		marvell,pins = "mpp7";
-+		marvell,function = "gpio";
-+	};
-+};
-+
-+&hdd_power {
-+	gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
-+};
-+
-+&usb_power {
-+	gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
-+};
-+
diff --git a/debian/patches/features/arm/arm-dts-add-support-for-turris-omnia.patch b/debian/patches/features/arm/arm-dts-add-support-for-turris-omnia.patch
deleted file mode 100644
index 2650e51..0000000
--- a/debian/patches/features/arm/arm-dts-add-support-for-turris-omnia.patch
+++ /dev/null
@@ -1,376 +0,0 @@
-From: Uwe Kleine-König <uwe at kleine-koenig.org>
-Date: Fri, 25 Nov 2016 15:26:58 +0100
-Subject: ARM: dts: add support for Turris Omnia
-Origin: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=26ca8b52d6e18c10109cabda0f775dd9345bbfdf
-
-This machine is an open hardware router by cz.nic driven by a
-Marvell Armada 385.
-
-Signed-off-by: Uwe Kleine-König <uwe at kleine-koenig.org>
-Signed-off-by: Tomas Hlavacek <tmshlvck at gmail.com>
-Reviewed-by: Andrew Lunn <andrew at lunn.ch>
-Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
----
- arch/arm/boot/dts/Makefile                    |   1 +
- arch/arm/boot/dts/armada-385-turris-omnia.dts | 340 ++++++++++++++++++++++++++
- 2 files changed, 341 insertions(+)
- create mode 100644 arch/arm/boot/dts/armada-385-turris-omnia.dts
-
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index 485304914916..9a3f07e86a5a 100644
---- a/arch/arm/boot/dts/Makefile
-+++ b/arch/arm/boot/dts/Makefile
-@@ -921,6 +921,7 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \
- 	armada-385-db-ap.dtb \
- 	armada-385-linksys-caiman.dtb \
- 	armada-385-linksys-cobra.dtb \
-+	armada-385-turris-omnia.dtb \
- 	armada-388-clearfog.dtb \
- 	armada-388-db.dtb \
- 	armada-388-gp.dtb \
-diff --git a/arch/arm/boot/dts/armada-385-turris-omnia.dts b/arch/arm/boot/dts/armada-385-turris-omnia.dts
-new file mode 100644
-index 000000000000..ab49acb2d452
---- /dev/null
-+++ b/arch/arm/boot/dts/armada-385-turris-omnia.dts
-@@ -0,0 +1,340 @@
-+/*
-+ * Device Tree file for the Turris Omnia
-+ *
-+ * Copyright (C) 2016 Uwe Kleine-König <uwe at kleine-koenig.org>
-+ * Copyright (C) 2016 Tomas Hlavacek <tmshlvkc at gmail.com>
-+ *
-+ * This file is dual-licensed: you can use it either under the terms
-+ * of the GPL or the X11 license, at your option. Note that this dual
-+ * licensing only applies to this file, and not this project as a
-+ * whole.
-+ *
-+ *  a) This file is licensed under the terms of the GNU General Public
-+ *     License version 2.  This program is licensed "as is" without
-+ *     any warranty of any kind, whether express or implied.
-+ *
-+ * Or, alternatively,
-+ *
-+ *  b) Permission is hereby granted, free of charge, to any person
-+ *     obtaining a copy of this software and associated documentation
-+ *     files (the "Software"), to deal in the Software without
-+ *     restriction, including without limitation the rights to use,
-+ *     copy, modify, merge, publish, distribute, sublicense, and/or
-+ *     sell copies of the Software, and to permit persons to whom the
-+ *     Software is furnished to do so, subject to the following
-+ *     conditions:
-+ *
-+ *     The above copyright notice and this permission notice shall be
-+ *     included in all copies or substantial portions of the Software.
-+ *
-+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ *     OTHER DEALINGS IN THE SOFTWARE.
-+ */
-+
-+/*
-+ * Schematic available at https://www.turris.cz/doc/_media/rtrom01-schema.pdf
-+ */
-+
-+/dts-v1/;
-+
-+#include <dt-bindings/gpio/gpio.h>
-+#include <dt-bindings/input/input.h>
-+#include "armada-385.dtsi"
-+
-+/ {
-+	model = "Turris Omnia";
-+	compatible = "cznic,turris-omnia", "marvell,armada385", "marvell,armada380";
-+
-+	chosen {
-+		stdout-path = &uart0;
-+	};
-+
-+	memory {
-+		device_type = "memory";
-+		reg = <0x00000000 0x40000000>; /* 1024 MB */
-+	};
-+
-+	soc {
-+		ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
-+			  MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000
-+			  MBUS_ID(0x09, 0x19) 0 0xf1100000 0x10000
-+			  MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000>;
-+
-+		internal-regs {
-+
-+			/* USB part of the PCIe2/USB 2.0 port */
-+			usb at 58000 {
-+				status = "okay";
-+			};
-+
-+			sata at a8000 {
-+				status = "okay";
-+			};
-+
-+			sdhci at d8000 {
-+				pinctrl-names = "default";
-+				pinctrl-0 = <&sdhci_pins>;
-+				status = "okay";
-+
-+				bus-width = <8>;
-+				no-1-8-v;
-+				non-removable;
-+			};
-+
-+			usb3 at f0000 {
-+				status = "okay";
-+			};
-+
-+			usb3 at f8000 {
-+				status = "okay";
-+			};
-+		};
-+
-+		pcie-controller {
-+			status = "okay";
-+
-+			pcie at 1,0 {
-+				/* Port 0, Lane 0 */
-+				status = "okay";
-+			};
-+
-+			pcie at 2,0 {
-+				/* Port 1, Lane 0 */
-+				status = "okay";
-+			};
-+
-+			pcie at 3,0 {
-+				/* Port 2, Lane 0 */
-+				status = "okay";
-+			};
-+		};
-+	};
-+};
-+
-+/* Connected to 88E6176 switch, port 6 */
-+&eth0 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&ge0_rgmii_pins>;
-+	status = "okay";
-+	phy-mode = "rgmii-id";
-+
-+	fixed-link {
-+		speed = <1000>;
-+		full-duplex;
-+	};
-+};
-+
-+/* Connected to 88E6176 switch, port 5 */
-+&eth1 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&ge1_rgmii_pins>;
-+	status = "okay";
-+	phy-mode = "rgmii-id";
-+
-+	fixed-link {
-+		speed = <1000>;
-+		full-duplex;
-+	};
-+};
-+
-+/* WAN port */
-+&eth2 {
-+	status = "okay";
-+	phy-mode = "sgmii";
-+	phy = <&phy1>;
-+};
-+
-+&i2c0 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&i2c0_pins>;
-+	status = "okay";
-+
-+	i2cmux at 70 {
-+		compatible = "nxp,pca9547";
-+		#address-cells = <1>;
-+		#size-cells = <0>;
-+		reg = <0x70>;
-+		status = "okay";
-+
-+		i2c at 0 {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+			reg = <0>;
-+
-+			/* STM32F0 command interface at address 0x2a */
-+			/* leds device (in STM32F0) at address 0x2b */
-+
-+			eeprom at 54 {
-+				compatible = "at,24c64";
-+				reg = <0x54>;
-+
-+				/* The EEPROM contains data for bootloader.
-+				 * Contents:
-+				 * 	struct omnia_eeprom {
-+				 * 		u32 magic; (=0x0341a034 in LE)
-+				 *		u32 ramsize; (in GiB)
-+				 * 		char regdomain[4];
-+				 * 		u32 crc32;
-+				 * 	};
-+				 */
-+			};
-+		};
-+
-+		i2c at 1 {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+			reg = <1>;
-+
-+			/* routed to PCIe0/mSATA connector (CN7A) */
-+		};
-+
-+		i2c at 2 {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+			reg = <2>;
-+
-+			/* routed to PCIe1/USB2 connector (CN61A) */
-+		};
-+
-+		i2c at 3 {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+			reg = <3>;
-+
-+			/* routed to PCIe2 connector (CN62A) */
-+		};
-+
-+		i2c at 4 {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+			reg = <4>;
-+
-+			/* routed to SFP+ */
-+		};
-+
-+		i2c at 5 {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+			reg = <5>;
-+
-+			/* ATSHA204A at address 0x64 */
-+		};
-+
-+		i2c at 6 {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+			reg = <6>;
-+
-+			/* exposed on pin header */
-+		};
-+
-+		i2c at 7 {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+			reg = <7>;
-+
-+			pcawan: gpio at 71 {
-+				/*
-+				 * GPIO expander for SFP+ signals and
-+				 * and phy irq
-+				 */
-+				compatible = "nxp,pca9538";
-+				reg = <0x71>;
-+
-+				pinctrl-names = "default";
-+				pinctrl-0 = <&pcawan_pins>;
-+
-+				interrupt-parent = <&gpio1>;
-+				interrupts = <14 IRQ_TYPE_LEVEL_LOW>;
-+
-+				gpio-controller;
-+				#gpio-cells = <2>;
-+			};
-+		};
-+	};
-+};
-+
-+&mdio {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&mdio_pins>;
-+	status = "okay";
-+
-+	phy1: phy at 1 {
-+		status = "okay";
-+		compatible = "ethernet-phy-id0141.0DD1", "ethernet-phy-ieee802.3-c22";
-+		reg = <1>;
-+
-+		/* irq is connected to &pcawan pin 7 */
-+	};
-+
-+	/* Switch MV88E7176 at address 0x10 */
-+};
-+
-+&pinctrl {
-+	pcawan_pins: pcawan-pins {
-+		marvell,pins = "mpp46";
-+		marvell,function = "gpio";
-+	};
-+
-+	spi0cs0_pins: spi0cs0-pins {
-+		marvell,pins = "mpp25";
-+		marvell,function = "spi0";
-+	};
-+
-+	spi0cs1_pins: spi0cs1-pins {
-+		marvell,pins = "mpp26";
-+		marvell,function = "spi0";
-+	};
-+};
-+
-+&spi0 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&spi0_pins &spi0cs0_pins>;
-+	status = "okay";
-+
-+	spi-nor at 0 {
-+		compatible = "spansion,s25fl164k", "jedec,spi-nor";
-+		#address-cells = <1>;
-+		#size-cells = <1>;
-+		reg = <0>;
-+		spi-max-frequency = <40000000>;
-+
-+		partitions {
-+			compatible = "fixed-partitions";
-+			#address-cells = <1>;
-+			#size-cells = <1>;
-+
-+			partition at 0 {
-+				reg = <0x0 0x00100000>;
-+				label = "U-Boot";
-+			};
-+
-+			partition at 100000 {
-+				reg = <0x00100000 0x00700000>;
-+				label = "Rescue system";
-+			};
-+		};
-+	};
-+
-+	/* MISO, MOSI, SCLK and CS1 are routed to pin header CN11 */
-+};
-+
-+&uart0 {
-+	/* Pin header CN10 */
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&uart0_pins>;
-+	status = "okay";
-+};
-+
-+&uart1 {
-+	/* Pin header CN11 */
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&uart1_pins>;
-+	status = "okay";
-+};
diff --git a/debian/patches/features/x86/x86-make-x32-syscall-support-conditional.patch b/debian/patches/features/x86/x86-make-x32-syscall-support-conditional.patch
index d606fbf..e05cee0 100644
--- a/debian/patches/features/x86/x86-make-x32-syscall-support-conditional.patch
+++ b/debian/patches/features/x86/x86-make-x32-syscall-support-conditional.patch
@@ -19,16 +19,18 @@ version at boot time.  Add a Kconfig parameter to set the default.
 
 Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
 ---
- Documentation/kernel-parameters.txt |  4 ++++
- arch/x86/Kconfig                    |  8 +++++++
- arch/x86/include/asm/elf.h          |  8 ++++++-
- arch/x86/entry/entry_64.S           | 36 ++++++++++++++++++++++---------
- arch/x86/entry/syscall_64.c         | 43 +++++++++++++++++++++++++++++++++++++
- 5 files changed, 88 insertions(+), 11 deletions(-)
+ Documentation/admin-guide/kernel-parameters.txt |    4 ++
+ arch/x86/Kconfig                                |    8 ++++
+ arch/x86/entry/common.c                         |   16 ++++++++-
+ arch/x86/entry/entry_64.S                       |   18 +++++++++--
+ arch/x86/entry/syscall_64.c                     |   39 ++++++++++++++++++++++++
+ arch/x86/include/asm/elf.h                      |    3 +
+ arch/x86/include/asm/syscall.h                  |    6 +++
+ 7 files changed, 89 insertions(+), 5 deletions(-)
 
---- a/Documentation/kernel-parameters.txt
-+++ b/Documentation/kernel-parameters.txt
-@@ -4005,6 +4005,10 @@ bytes respectively. Such letter suffixes
+--- a/Documentation/admin-guide/kernel-parameters.txt
++++ b/Documentation/admin-guide/kernel-parameters.txt
+@@ -3829,6 +3829,10 @@
  
  	switches=	[HW,M68k]
  
@@ -41,9 +43,9 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
  			on older distributions. When this option is enabled
 --- a/arch/x86/Kconfig
 +++ b/arch/x86/Kconfig
-@@ -2721,6 +2721,14 @@ config X86_X32
- 	  elf32_x86_64 support enabled to compile a kernel with this
- 	  option set.
+@@ -2757,6 +2757,14 @@ config COMPAT_32
+ 	select HAVE_UID16
+ 	select OLD_SIGSUSPEND3
  
 +config X86_X32_DISABLED
 +	bool "x32 ABI disabled by default"
@@ -77,7 +79,7 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
  # error "The following code assumes __USER32_DS == __USER_DS"
 --- a/arch/x86/entry/entry_64.S
 +++ b/arch/x86/entry/entry_64.S
-@@ -195,8 +195,12 @@ entry_SYSCALL_64_fastpath:
+@@ -190,8 +190,12 @@ entry_SYSCALL_64_fastpath:
  #if __SYSCALL_MASK == ~0
  	cmpq	$__NR_syscall_max, %rax
  #else
@@ -92,7 +94,7 @@ Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
  #endif
  	ja	1f				/* return -ENOSYS (already in pt_regs->ax) */
  	movq	%r10, %rcx
-@@ -331,6 +335,16 @@ opportunistic_sysret_failed:
+@@ -326,6 +330,16 @@ opportunistic_sysret_failed:
  	jmp	restore_c_regs_and_iret
  END(entry_SYSCALL_64)
  
diff --git a/debian/patches/series b/debian/patches/series
index 9c81d22..afc3cfa 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -53,17 +53,13 @@ features/mips/MIPS-Loongson-3-Add-Loongson-LS3A-RS780E-1-way-machi.patch
 features/mips/MIPS-octeon-Add-support-for-the-UBNT-E200-board.patch
 features/x86/x86-memtest-WARN-if-bad-RAM-found.patch
 features/x86/x86-make-x32-syscall-support-conditional.patch
-features/arm/arm-dts-add-support-for-turris-omnia.patch
 features/arm/arm-dts-turris-omnia-add-support-for-ethernet-switch.patch
-features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch
 
 # Miscellaneous bug fixes
 bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch
 bugfix/all/disable-some-marvell-phys.patch
 bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch
 bugfix/all/kbuild-do-not-use-hyphen-in-exported-variable-name.patch
-bugfix/all/ext4-fix-bug-838544.patch
-bugfix/all/mm-memcontrol-use-special-workqueue-for-creating-per-memcg-caches.patch
 bugfix/all/partially-revert-usb-kconfig-using-select-for-usb_co.patch
 
 # Miscellaneous features
@@ -116,7 +112,6 @@ bugfix/all/lockdep-fix-soname.patch
 bugfix/all/tools-perf-remove-shebangs.patch
 bugfix/all/tools-lib-traceevent-use-ldflags.patch
 bugfix/all/tools-lib-lockdep-use-ldflags.patch
-bugfix/x86/tools-hv-fix-fortify-format-warning.patch
 bugfix/x86/revert-perf-build-fix-libunwind-feature-detection-on.patch
 bugfix/alpha/alpha-uapi-add-support-for-__sane_userspace_types__.patch
 bugfix/all/tools-build-remove-bpf-run-time-check-at-build-time.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list