Update to 4.10-rc5
Drop/refresh patches as appropriate. [rt] Disable until it is updated for 4.10 or later
This commit is contained in:
parent
7db3a7935f
commit
601b9e92a1
|
@ -1,9 +1,11 @@
|
||||||
linux (4.9.2-3) UNRELEASED; urgency=medium
|
linux (4.10~rc5-1~exp1) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
[ Roger Shimizu ]
|
* New upstream release candidate
|
||||||
* [armel] Add DT support of Buffalo Linkstation Live v3 (LS-CHL)
|
|
||||||
|
|
||||||
-- Roger Shimizu <rogershimizu@gmail.com> Thu, 19 Jan 2017 01:06:58 +0900
|
[ Ben Hutchings ]
|
||||||
|
* [rt] Disable until it is updated for 4.10 or later
|
||||||
|
|
||||||
|
-- Ben Hutchings <ben@decadent.org.uk> Tue, 24 Jan 2017 19:08:03 +0000
|
||||||
|
|
||||||
linux (4.9.2-2) unstable; urgency=medium
|
linux (4.9.2-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ debug-info: true
|
||||||
signed-modules: true
|
signed-modules: true
|
||||||
|
|
||||||
[featureset-rt_base]
|
[featureset-rt_base]
|
||||||
enabled: true
|
enabled: false
|
||||||
|
|
||||||
[description]
|
[description]
|
||||||
part-long-up: This kernel is not suitable for SMP (multi-processor,
|
part-long-up: This kernel is not suitable for SMP (multi-processor,
|
||||||
|
|
|
@ -1,218 +0,0 @@
|
||||||
From: "Darrick J. Wong" <darrick.wong@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;
|
|
|
@ -53,7 +53,7 @@ upstream submission.
|
||||||
/* disable MPU */
|
/* disable MPU */
|
||||||
--- a/arch/x86/kernel/cpu/microcode/amd.c
|
--- a/arch/x86/kernel/cpu/microcode/amd.c
|
||||||
+++ b/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)
|
if (c->x86 >= 0x15)
|
||||||
snprintf(fw_name, sizeof(fw_name), "amd-ucode/microcode_amd_fam%.2xh.bin", c->x86);
|
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);
|
fw->size, fw_name);
|
||||||
--- a/drivers/dma/imx-sdma.c
|
--- a/drivers/dma/imx-sdma.c
|
||||||
+++ b/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;
|
const struct sdma_script_start_addrs *addr;
|
||||||
unsigned short *ram_code;
|
unsigned short *ram_code;
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ upstream submission.
|
||||||
where = 0;
|
where = 0;
|
||||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
|
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
|
||||||
+++ b/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) {
|
if (ret) {
|
||||||
snprintf(f, sizeof(f), "nouveau/%s", fwname);
|
snprintf(f, sizeof(f), "nouveau/%s", fwname);
|
||||||
ret = request_firmware(&fw, f, device->dev);
|
ret = request_firmware(&fw, f, device->dev);
|
||||||
|
@ -345,7 +345,7 @@ upstream submission.
|
||||||
card->name, firmware->size);
|
card->name, firmware->size);
|
||||||
--- a/drivers/media/tuners/tuner-xc2028.c
|
--- a/drivers/media/tuners/tuner-xc2028.c
|
||||||
+++ b/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");
|
tuner_dbg("request_firmware_nowait(): %s\n", fw ? "OK" : "error");
|
||||||
if (!fw) {
|
if (!fw) {
|
||||||
|
@ -355,7 +355,7 @@ upstream submission.
|
||||||
}
|
}
|
||||||
--- a/drivers/media/usb/dvb-usb/dib0700_devices.c
|
--- a/drivers/media/usb/dvb-usb/dib0700_devices.c
|
||||||
+++ b/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);
|
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_size = state->frontend_firmware->size;
|
||||||
stk9090m_config.microcode_B_fe_buffer = state->frontend_firmware->data;
|
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);
|
msleep(20);
|
||||||
dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1);
|
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;
|
nim9090md_config[1].microcode_B_fe_size = state->frontend_firmware->size;
|
||||||
--- a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c
|
--- a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c
|
||||||
+++ b/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;
|
int ret;
|
||||||
const struct firmware *fw = NULL;
|
const struct firmware *fw = NULL;
|
||||||
|
|
||||||
- if ((ret = request_firmware(&fw, props->firmware, &udev->dev)) != 0) {
|
- if ((ret = request_firmware(&fw, props->firmware, &udev->dev)) != 0) {
|
||||||
- err("did not find the firmware file. (%s) "
|
- err("did not find the firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
|
||||||
- "Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
|
|
||||||
- props->firmware,ret);
|
- props->firmware,ret);
|
||||||
+ ret = request_firmware(&fw, props->firmware, &udev->dev);
|
+ ret = request_firmware(&fw, props->firmware, &udev->dev);
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
|
@ -406,13 +405,12 @@ upstream submission.
|
||||||
case CYPRESS_AN2135:
|
case CYPRESS_AN2135:
|
||||||
--- a/drivers/media/usb/dvb-usb/gp8psk.c
|
--- a/drivers/media/usb/dvb-usb/gp8psk.c
|
||||||
+++ b/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;
|
const u8 *ptr;
|
||||||
u8 *buf;
|
u8 *buf;
|
||||||
if ((ret = request_firmware(&fw, bcm4500_firmware,
|
if ((ret = request_firmware(&fw, bcm4500_firmware,
|
||||||
- &d->udev->dev)) != 0) {
|
- &d->udev->dev)) != 0) {
|
||||||
- err("did not find the bcm4500 firmware file. (%s) "
|
- err("did not find the bcm4500 firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
|
||||||
- "Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
|
|
||||||
- bcm4500_firmware,ret);
|
- bcm4500_firmware,ret);
|
||||||
+ &d->udev->dev)) != 0)
|
+ &d->udev->dev)) != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -430,12 +428,11 @@ upstream submission.
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
--- a/drivers/media/usb/dvb-usb/opera1.c
|
--- a/drivers/media/usb/dvb-usb/opera1.c
|
||||||
+++ b/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);
|
info("start downloading fpga firmware %s",filename);
|
||||||
|
|
||||||
if ((ret = request_firmware(&fw, filename, &dev->dev)) != 0) {
|
if ((ret = request_firmware(&fw, filename, &dev->dev)) != 0) {
|
||||||
- err("did not find the firmware file. (%s) "
|
- err("did not find the firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems.",
|
||||||
- "Please see linux/Documentation/dvb/ for more details on firmware-problems.",
|
|
||||||
- filename);
|
- filename);
|
||||||
return ret;
|
return ret;
|
||||||
} else {
|
} else {
|
||||||
|
@ -484,8 +481,8 @@ upstream submission.
|
||||||
- printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n",
|
- printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n",
|
||||||
- __func__);
|
- __func__);
|
||||||
- if (ret) {
|
- if (ret) {
|
||||||
- printk(KERN_ERR "%s: No firmware uploaded "
|
- printk(KERN_ERR "%s: No firmware uploaded (timeout or file not found?)\n",
|
||||||
- "(timeout or file not found?)\n", __func__);
|
- __func__);
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
- }
|
- }
|
||||||
|
@ -527,8 +524,8 @@ upstream submission.
|
||||||
state->i2c->dev.parent);
|
state->i2c->dev.parent);
|
||||||
- printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
|
- printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
|
||||||
- if (ret) {
|
- if (ret) {
|
||||||
- printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
|
- printk(KERN_ERR "%s: No firmware uploaded (timeout or file not found?)\n",
|
||||||
- "found?)\n", __func__);
|
- __func__);
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
- }
|
- }
|
||||||
|
@ -537,28 +534,28 @@ upstream submission.
|
||||||
if (ret)
|
if (ret)
|
||||||
--- a/drivers/media/dvb-frontends/nxt200x.c
|
--- a/drivers/media/dvb-frontends/nxt200x.c
|
||||||
+++ b/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);
|
__func__, NXT2002_DEFAULT_FIRMWARE);
|
||||||
ret = request_firmware(&fw, NXT2002_DEFAULT_FIRMWARE,
|
ret = request_firmware(&fw, NXT2002_DEFAULT_FIRMWARE,
|
||||||
state->i2c->dev.parent);
|
state->i2c->dev.parent);
|
||||||
- pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
|
- pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
|
||||||
- if (ret) {
|
- if (ret) {
|
||||||
- pr_err("%s: No firmware uploaded (timeout or file not found?)"
|
- pr_err("%s: No firmware uploaded (timeout or file not found?)\n",
|
||||||
- "\n", __func__);
|
- __func__);
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
- }
|
- }
|
||||||
|
|
||||||
ret = nxt2002_load_firmware(fe, fw);
|
ret = nxt2002_load_firmware(fe, fw);
|
||||||
release_firmware(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);
|
__func__, NXT2004_DEFAULT_FIRMWARE);
|
||||||
ret = request_firmware(&fw, NXT2004_DEFAULT_FIRMWARE,
|
ret = request_firmware(&fw, NXT2004_DEFAULT_FIRMWARE,
|
||||||
state->i2c->dev.parent);
|
state->i2c->dev.parent);
|
||||||
- pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
|
- pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
|
||||||
- if (ret) {
|
- if (ret) {
|
||||||
- pr_err("%s: No firmware uploaded (timeout or file not found?)"
|
- pr_err("%s: No firmware uploaded (timeout or file not found?)\n",
|
||||||
- "\n", __func__);
|
- __func__);
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
- }
|
- }
|
||||||
|
@ -567,13 +564,12 @@ upstream submission.
|
||||||
release_firmware(fw);
|
release_firmware(fw);
|
||||||
--- a/drivers/media/dvb-frontends/or51132.c
|
--- a/drivers/media/dvb-frontends/or51132.c
|
||||||
+++ b/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",
|
printk("or51132: Waiting for firmware upload(%s)...\n",
|
||||||
fwname);
|
fwname);
|
||||||
ret = request_firmware(&fw, fwname, state->i2c->dev.parent);
|
ret = request_firmware(&fw, fwname, state->i2c->dev.parent);
|
||||||
- if (ret) {
|
- if (ret) {
|
||||||
- printk(KERN_WARNING "or51132: No firmware up"
|
- printk(KERN_WARNING "or51132: No firmware uploaded(timeout or file not found?)\n");
|
||||||
- "loaded(timeout or file not found?)\n");
|
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
- }
|
- }
|
||||||
|
@ -582,14 +578,13 @@ upstream submission.
|
||||||
if (ret) {
|
if (ret) {
|
||||||
--- a/drivers/media/dvb-frontends/or51211.c
|
--- a/drivers/media/dvb-frontends/or51211.c
|
||||||
+++ b/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);
|
OR51211_DEFAULT_FIRMWARE);
|
||||||
ret = config->request_firmware(fe, &fw,
|
ret = config->request_firmware(fe, &fw,
|
||||||
OR51211_DEFAULT_FIRMWARE);
|
OR51211_DEFAULT_FIRMWARE);
|
||||||
- pr_info("Got Hotplug firmware\n");
|
- pr_info("Got Hotplug firmware\n");
|
||||||
- if (ret) {
|
- if (ret) {
|
||||||
- pr_warn("No firmware uploaded "
|
- pr_warn("No firmware uploaded (timeout or file not found?)\n");
|
||||||
- "(timeout or file not found?)\n");
|
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
- }
|
- }
|
||||||
|
@ -612,7 +607,7 @@ upstream submission.
|
||||||
printk("sp8870: writing firmware to device failed\n");
|
printk("sp8870: writing firmware to device failed\n");
|
||||||
--- a/drivers/media/dvb-frontends/sp887x.c
|
--- a/drivers/media/dvb-frontends/sp887x.c
|
||||||
+++ b/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 */
|
/* request the firmware, this will block until someone uploads it */
|
||||||
printk("sp887x: waiting for firmware upload (%s)...\n", SP887X_DEFAULT_FIRMWARE);
|
printk("sp887x: waiting for firmware upload (%s)...\n", SP887X_DEFAULT_FIRMWARE);
|
||||||
ret = state->config->request_firmware(fe, &fw, 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);
|
SMS_ALLOC_ALIGNMENT), GFP_KERNEL | GFP_DMA);
|
||||||
--- a/drivers/media/pci/ttpci/av7110.c
|
--- a/drivers/media/pci/ttpci/av7110.c
|
||||||
+++ b/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 */
|
/* request the av7110 firmware, this will block until someone uploads it */
|
||||||
ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
|
ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
- if (ret == -ENOENT) {
|
- if (ret == -ENOENT) {
|
||||||
- printk(KERN_ERR "dvb-ttpci: could not load firmware,"
|
- printk(KERN_ERR "dvb-ttpci: could not load firmware, file not found: dvb-ttpci-01.fw\n");
|
||||||
- " 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: usually this should be in "
|
- printk(KERN_ERR "dvb-ttpci: and can be downloaded from https://linuxtv.org/download/dvb/firmware/\n");
|
||||||
- "/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");
|
|
||||||
- } else
|
- } else
|
||||||
- printk(KERN_ERR "dvb-ttpci: cannot request firmware"
|
- printk(KERN_ERR "dvb-ttpci: cannot request firmware (error %i)\n",
|
||||||
- " (error %i)\n", ret);
|
- ret);
|
||||||
|
+ if (ret == -ENOENT)
|
||||||
|
+ printk(KERN_ERR "dvb-ttpci: firmware can be downloaded from https://linuxtv.org/download/dvb/firmware/\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
--- a/drivers/media/pci/ttpci/av7110_hw.c
|
--- a/drivers/media/pci/ttpci/av7110_hw.c
|
||||||
+++ b/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);
|
//saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT);
|
||||||
|
|
||||||
ret = request_firmware(&fw, fw_name, &dev->pci->dev);
|
ret = request_firmware(&fw, fw_name, &dev->pci->dev);
|
||||||
|
@ -765,7 +757,7 @@ upstream submission.
|
||||||
b[0] = 0xaa;
|
b[0] = 0xaa;
|
||||||
--- a/drivers/media/usb/ttusb-dec/ttusb_dec.c
|
--- a/drivers/media/usb/ttusb-dec/ttusb_dec.c
|
||||||
+++ b/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__);
|
dprintk("%s\n", __func__);
|
||||||
|
|
||||||
result = request_firmware(&fw_entry, dec->firmware_name, &dec->udev->dev);
|
result = request_firmware(&fw_entry, dec->firmware_name, &dec->udev->dev);
|
||||||
|
@ -795,7 +787,7 @@ upstream submission.
|
||||||
packet_num = ptr[0];
|
packet_num = ptr[0];
|
||||||
--- a/drivers/media/radio/wl128x/fmdrv_common.c
|
--- a/drivers/media/radio/wl128x/fmdrv_common.c
|
||||||
+++ b/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,
|
ret = request_firmware(&fw_entry, fw_name,
|
||||||
&fmdev->radio_dev->dev);
|
&fmdev->radio_dev->dev);
|
||||||
|
@ -809,7 +801,7 @@ upstream submission.
|
||||||
fw_data = (void *)fw_entry->data;
|
fw_data = (void *)fw_entry->data;
|
||||||
--- a/drivers/media/pci/bt8xx/bttv-cards.c
|
--- a/drivers/media/pci/bt8xx/bttv-cards.c
|
||||||
+++ b/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;
|
int rc;
|
||||||
|
|
||||||
rc = request_firmware(&fw_entry, "hcwamc.rbf", &btv->c.pci->dev);
|
rc = request_firmware(&fw_entry, "hcwamc.rbf", &btv->c.pci->dev);
|
||||||
|
@ -838,7 +830,7 @@ upstream submission.
|
||||||
cmd.direction = TRANSFER_WRITE;
|
cmd.direction = TRANSFER_WRITE;
|
||||||
--- a/drivers/media/pci/cx18/cx18-av-firmware.c
|
--- a/drivers/media/pci/cx18/cx18-av-firmware.c
|
||||||
+++ b/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 i;
|
||||||
int retries1 = 0;
|
int retries1 = 0;
|
||||||
|
|
||||||
|
@ -863,15 +855,6 @@ upstream submission.
|
||||||
size_t sz = (*fw)->size;
|
size_t sz = (*fw)->size;
|
||||||
if (sz < 2 || sz > 64 || (sz % 2) != 0) {
|
if (sz < 2 || sz > 64 || (sz % 2) != 0) {
|
||||||
CX18_ERR("Firmware %s has a bad size: %lu bytes\n",
|
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
|
--- a/drivers/media/pci/cx18/cx18-firmware.c
|
||||||
+++ b/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
|
@@ -106,11 +106,8 @@ static int load_cpu_fw_direct(const char
|
||||||
|
@ -912,32 +895,29 @@ upstream submission.
|
||||||
return retval;
|
return retval;
|
||||||
--- a/drivers/media/pci/cx23885/cx23885-417.c
|
--- a/drivers/media/pci/cx23885/cx23885-417.c
|
||||||
+++ b/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,
|
retval = request_firmware(&firmware, CX23885_FIRM_IMAGE_NAME,
|
||||||
&dev->pci->dev);
|
&dev->pci->dev);
|
||||||
|
|
||||||
- if (retval != 0) {
|
- if (retval != 0) {
|
||||||
- printk(KERN_ERR
|
- pr_err("ERROR: Hotplug firmware request failed (%s).\n",
|
||||||
- "ERROR: Hotplug firmware request failed (%s).\n",
|
- CX23885_FIRM_IMAGE_NAME);
|
||||||
- CX23885_FIRM_IMAGE_NAME);
|
- pr_err("Please fix your hotplug setup, the board will not work without firmware loaded!\n");
|
||||||
- printk(KERN_ERR "Please fix your hotplug setup, the board will "
|
|
||||||
- "not work without firmware loaded!\n");
|
|
||||||
+ if (retval != 0)
|
+ if (retval != 0)
|
||||||
return -1;
|
return -1;
|
||||||
- }
|
- }
|
||||||
|
|
||||||
if (firmware->size != CX23885_FIRM_IMAGE_SIZE) {
|
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
|
--- a/drivers/media/pci/cx23885/cx23885-cards.c
|
||||||
+++ b/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
|
@@ -2339,10 +2339,7 @@ void cx23885_card_setup(struct cx23885_d
|
||||||
cinfo.rev, filename);
|
cinfo.rev, filename);
|
||||||
|
|
||||||
ret = request_firmware(&fw, filename, &dev->pci->dev);
|
ret = request_firmware(&fw, filename, &dev->pci->dev);
|
||||||
- if (ret != 0)
|
- if (ret != 0)
|
||||||
- printk(KERN_ERR "did not find the firmware file. (%s) "
|
- pr_err("did not find the firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems.",
|
||||||
- "Please see linux/Documentation/dvb/ for more details "
|
- filename);
|
||||||
- "on firmware-problems.", filename);
|
|
||||||
- else
|
- else
|
||||||
+ if (ret == 0)
|
+ if (ret == 0)
|
||||||
altera_init(&netup_config, fw);
|
altera_init(&netup_config, fw);
|
||||||
|
@ -959,13 +939,13 @@ upstream submission.
|
||||||
|
|
||||||
--- a/drivers/media/pci/cx88/cx88-blackbird.c
|
--- a/drivers/media/pci/cx88/cx88-blackbird.c
|
||||||
+++ b/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);
|
&dev->pci->dev);
|
||||||
|
|
||||||
|
|
||||||
- if (retval != 0) {
|
- if (retval != 0) {
|
||||||
- pr_err("Hotplug firmware request failed (%s).\n",
|
- 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");
|
- pr_err("Please fix your hotplug setup, the board will not work without firmware loaded!\n");
|
||||||
+ if (retval != 0)
|
+ if (retval != 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
@ -1000,26 +980,22 @@ upstream submission.
|
||||||
|
|
||||||
--- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
|
--- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
|
||||||
+++ b/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);
|
"request_firmware fatal error with code=%d",ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
||||||
- "***WARNING***"
|
- "***WARNING*** Device %s firmware seems to be missing.",
|
||||||
- " Device %s firmware"
|
|
||||||
- " seems to be missing.",
|
|
||||||
- fwtypename);
|
- fwtypename);
|
||||||
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
||||||
- "Did you install the pvrusb2 firmware files"
|
- "Did you install the pvrusb2 firmware files in their proper location?");
|
||||||
- " in their proper location?");
|
|
||||||
- if (fwcount == 1) {
|
- if (fwcount == 1) {
|
||||||
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
||||||
- "request_firmware unable to locate %s file %s",
|
- "request_firmware unable to locate %s file %s",
|
||||||
- fwtypename,fwnames[0]);
|
- fwtypename,fwnames[0]);
|
||||||
- } else {
|
- } else {
|
||||||
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
||||||
- "request_firmware unable to locate"
|
- "request_firmware unable to locate one of the following %s files:",
|
||||||
- " one of the following %s files:",
|
|
||||||
- fwtypename);
|
- fwtypename);
|
||||||
- for (idx = 0; idx < fwcount; idx++) {
|
- for (idx = 0; idx < fwcount; idx++) {
|
||||||
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
- pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
||||||
|
@ -1065,8 +1041,8 @@ upstream submission.
|
||||||
|
|
||||||
ret = request_firmware(&fw, fwname, &dev->pci->dev);
|
ret = request_firmware(&fw, fwname, &dev->pci->dev);
|
||||||
- if (ret) {
|
- if (ret) {
|
||||||
- printk(KERN_ERR "%s() Upload failed. "
|
- printk(KERN_ERR "%s() Upload failed. (file not found?)\n",
|
||||||
- "(file not found?)\n", __func__);
|
- __func__);
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
- }
|
- }
|
||||||
|
@ -1105,7 +1081,7 @@ upstream submission.
|
||||||
/* parse the firmware */
|
/* parse the firmware */
|
||||||
--- a/drivers/net/ethernet/3com/typhoon.c
|
--- a/drivers/net/ethernet/3com/typhoon.c
|
||||||
+++ b/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;
|
return 0;
|
||||||
|
|
||||||
err = request_firmware(&typhoon_fw, FIRMWARE_NAME, &tp->pdev->dev);
|
err = request_firmware(&typhoon_fw, FIRMWARE_NAME, &tp->pdev->dev);
|
||||||
|
@ -1120,7 +1096,7 @@ upstream submission.
|
||||||
remaining = typhoon_fw->size;
|
remaining = typhoon_fw->size;
|
||||||
--- a/drivers/net/ethernet/adaptec/starfire.c
|
--- a/drivers/net/ethernet/adaptec/starfire.c
|
||||||
+++ b/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 */
|
#endif /* VLAN_SUPPORT */
|
||||||
|
|
||||||
retval = request_firmware(&fw_rx, FIRMWARE_RX, &np->pci_dev->dev);
|
retval = request_firmware(&fw_rx, FIRMWARE_RX, &np->pci_dev->dev);
|
||||||
|
@ -1133,7 +1109,7 @@ upstream submission.
|
||||||
if (fw_rx->size % 4) {
|
if (fw_rx->size % 4) {
|
||||||
printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n",
|
printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n",
|
||||||
fw_rx->size, FIRMWARE_RX);
|
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;
|
goto out_rx;
|
||||||
}
|
}
|
||||||
retval = request_firmware(&fw_tx, FIRMWARE_TX, &np->pci_dev->dev);
|
retval = request_firmware(&fw_tx, FIRMWARE_TX, &np->pci_dev->dev);
|
||||||
|
@ -1148,7 +1124,7 @@ upstream submission.
|
||||||
fw_tx->size, FIRMWARE_TX);
|
fw_tx->size, FIRMWARE_TX);
|
||||||
--- a/drivers/net/ethernet/alteon/acenic.c
|
--- a/drivers/net/ethernet/alteon/acenic.c
|
||||||
+++ b/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";
|
fw_name = "acenic/tg1.bin";
|
||||||
|
|
||||||
ret = request_firmware(&fw, fw_name, &ap->pdev->dev);
|
ret = request_firmware(&fw, fw_name, &ap->pdev->dev);
|
||||||
|
@ -1163,7 +1139,7 @@ upstream submission.
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/broadcom/bnx2.c
|
--- a/drivers/net/ethernet/broadcom/bnx2.c
|
||||||
+++ b/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);
|
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) ||
|
if (bp->mips_firmware->size < sizeof(*mips_fw) ||
|
||||||
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
|
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
|
||||||
+++ b/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);
|
BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
|
||||||
|
|
||||||
rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
|
rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
|
||||||
|
@ -1200,7 +1176,7 @@ upstream submission.
|
||||||
if (rc) {
|
if (rc) {
|
||||||
--- a/drivers/net/ethernet/broadcom/tg3.c
|
--- a/drivers/net/ethernet/broadcom/tg3.c
|
||||||
+++ b/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;
|
const struct tg3_firmware_hdr *fw_hdr;
|
||||||
|
|
||||||
|
@ -1294,7 +1270,7 @@ upstream submission.
|
||||||
}
|
}
|
||||||
--- a/drivers/net/ethernet/smsc/smc91c92_cs.c
|
--- a/drivers/net/ethernet/smsc/smc91c92_cs.c
|
||||||
+++ b/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;
|
int i, err;
|
||||||
|
|
||||||
err = request_firmware(&fw, FIRMWARE_NAME, &link->dev);
|
err = request_firmware(&fw, FIRMWARE_NAME, &link->dev);
|
||||||
|
@ -1393,7 +1369,7 @@ upstream submission.
|
||||||
fwh = (struct at76_fw_header *)(fwe->fw->data);
|
fwh = (struct at76_fw_header *)(fwe->fw->data);
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
|
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
|
||||||
+++ b/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)
|
if (!ret)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1415,7 +1391,7 @@ upstream submission.
|
||||||
|
|
||||||
--- a/drivers/net/wireless/atmel/atmel.c
|
--- a/drivers/net/wireless/atmel/atmel.c
|
||||||
+++ b/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");
|
strcpy(priv->firmware_id, "atmel_at76c502.bin");
|
||||||
}
|
}
|
||||||
err = request_firmware(&fw_entry, priv->firmware_id, priv->sys_dev);
|
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
|
--- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
|
||||||
+++ b/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);
|
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
|
--- a/drivers/net/wireless/marvell/mwifiex/main.c
|
||||||
+++ b/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
|
@@ -524,11 +524,8 @@ static void mwifiex_fw_dpc(const struct
|
||||||
bool init_failed = false;
|
|
||||||
struct wireless_dev *wdev;
|
struct wireless_dev *wdev;
|
||||||
|
struct completion *fw_done = adapter->fw_done;
|
||||||
|
|
||||||
- if (!firmware) {
|
- if (!firmware) {
|
||||||
- mwifiex_dbg(adapter, ERROR,
|
- mwifiex_dbg(adapter, ERROR,
|
||||||
|
@ -1737,7 +1713,7 @@ upstream submission.
|
||||||
}
|
}
|
||||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||||||
+++ b/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");
|
"Firmware callback routine entered!\n");
|
||||||
complete(&rtlpriv->firmware_loading_complete);
|
complete(&rtlpriv->firmware_loading_complete);
|
||||||
if (!firmware) {
|
if (!firmware) {
|
||||||
|
@ -1930,7 +1906,7 @@ upstream submission.
|
||||||
}
|
}
|
||||||
--- a/drivers/scsi/qla2xxx/qla_init.c
|
--- a/drivers/scsi/qla2xxx/qla_init.c
|
||||||
+++ b/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. */
|
/* Load firmware blob. */
|
||||||
blob = qla2x00_request_firmware(vha);
|
blob = qla2x00_request_firmware(vha);
|
||||||
if (!blob) {
|
if (!blob) {
|
||||||
|
@ -1939,7 +1915,7 @@ upstream submission.
|
||||||
ql_log(ql_log_info, vha, 0x0084,
|
ql_log(ql_log_info, vha, 0x0084,
|
||||||
"Firmware images can be retrieved from: "QLA_FW_URL ".\n");
|
"Firmware images can be retrieved from: "QLA_FW_URL ".\n");
|
||||||
return QLA_FUNCTION_FAILED;
|
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. */
|
/* Load firmware blob. */
|
||||||
blob = qla2x00_request_firmware(vha);
|
blob = qla2x00_request_firmware(vha);
|
||||||
if (!blob) {
|
if (!blob) {
|
||||||
|
@ -1950,7 +1926,7 @@ upstream submission.
|
||||||
QLA_FW_URL ".\n");
|
QLA_FW_URL ".\n");
|
||||||
--- a/drivers/scsi/qla2xxx/qla_nx.c
|
--- a/drivers/scsi/qla2xxx/qla_nx.c
|
||||||
+++ b/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. */
|
/* Load firmware blob. */
|
||||||
blob = ha->hablob = qla2x00_request_firmware(vha);
|
blob = ha->hablob = qla2x00_request_firmware(vha);
|
||||||
|
@ -1965,7 +1941,7 @@ upstream submission.
|
||||||
if (qla82xx_validate_firmware_blob(vha,
|
if (qla82xx_validate_firmware_blob(vha,
|
||||||
--- a/drivers/scsi/qla2xxx/qla_os.c
|
--- a/drivers/scsi/qla2xxx/qla_os.c
|
||||||
+++ b/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;
|
goto out;
|
||||||
|
|
||||||
if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
|
if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
|
||||||
|
@ -2084,34 +2060,33 @@ upstream submission.
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
MODULE_FIRMWARE("rtlwifi/rtl8712u.bin");
|
MODULE_FIRMWARE("rtlwifi/rtl8712u.bin");
|
||||||
--- a/drivers/staging/slicoss/slicoss.c
|
--- a/drivers/net/ethernet/alacritech/slicoss.c
|
||||||
+++ b/drivers/staging/slicoss/slicoss.c
|
+++ b/drivers/net/ethernet/alacritech/slicoss.c
|
||||||
@@ -376,11 +376,8 @@ static int slic_card_download_gbrcv(stru
|
@@ -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;
|
||||||
ret = request_firmware(&fw, file, &adapter->pcidev->dev);
|
err = request_firmware(&fw, file, &sdev->pdev->dev);
|
||||||
- if (ret) {
|
- if (err) {
|
||||||
- dev_err(&adapter->pcidev->dev,
|
- dev_err(&sdev->pdev->dev,
|
||||||
- "Failed to load firmware %s\n", file);
|
- "failed to load receive sequencer firmware %s\n", file);
|
||||||
+ if (ret)
|
+ if (err)
|
||||||
return ret;
|
return err;
|
||||||
- }
|
- }
|
||||||
|
/* Do an initial sanity check concerning firmware size now. A further
|
||||||
rcvucodelen = *(u32 *)(fw->data + index);
|
* check follows below.
|
||||||
index += 4;
|
*/
|
||||||
@@ -454,11 +451,8 @@ static int slic_card_download(struct ada
|
@@ -1138,10 +1135,8 @@ static int slic_load_firmware(struct sli
|
||||||
return -ENOENT;
|
file = (sdev->model == SLIC_MODEL_OASIS) ? SLIC_FIRMWARE_OASIS :
|
||||||
}
|
SLIC_FIRMWARE_MOJAVE;
|
||||||
ret = request_firmware(&fw, file, &adapter->pcidev->dev);
|
err = request_firmware(&fw, file, &sdev->pdev->dev);
|
||||||
- if (ret) {
|
- if (err) {
|
||||||
- dev_err(&adapter->pcidev->dev,
|
- dev_err(&sdev->pdev->dev, "failed to load firmware %s\n", file);
|
||||||
- "Failed to load firmware %s\n", file);
|
+ if (err)
|
||||||
+ if (ret)
|
return err;
|
||||||
return ret;
|
|
||||||
- }
|
- }
|
||||||
numsects = *(u32 *)(fw->data + index);
|
/* Do an initial sanity check concerning firmware size now. A further
|
||||||
index += 4;
|
* check follows below.
|
||||||
for (i = 0; i < numsects; i++) {
|
*/
|
||||||
--- a/drivers/staging/vt6656/firmware.c
|
--- a/drivers/staging/vt6656/firmware.c
|
||||||
+++ b/drivers/staging/vt6656/firmware.c
|
+++ b/drivers/staging/vt6656/firmware.c
|
||||||
@@ -49,11 +49,8 @@ int vnt_download_firmware(struct vnt_pri
|
@@ -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
|
--- a/drivers/usb/serial/ti_usb_3410_5052.c
|
||||||
+++ b/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:
|
check_firmware:
|
||||||
|
@ -2510,20 +2485,18 @@ upstream submission.
|
||||||
return err;
|
return err;
|
||||||
--- a/sound/pci/emu10k1/emu10k1_main.c
|
--- a/sound/pci/emu10k1/emu10k1_main.c
|
||||||
+++ b/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);
|
err = snd_emu1010_load_firmware(emu, 0, &emu->firmware);
|
||||||
- if (err != 0) {
|
- if (err < 0) {
|
||||||
- dev_info(emu->card->dev,
|
- dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n");
|
||||||
- "emu1010: firmware: %s not found. Err = %d\n",
|
+ if (err < 0)
|
||||||
- filename, err);
|
return err;
|
||||||
+ if (err != 0)
|
- }
|
||||||
return err;
|
|
||||||
- }
|
/* ID, should read & 0x7f = 0x55 when FPGA programmed. */
|
||||||
dev_info(emu->card->dev,
|
snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®);
|
||||||
"emu1010: firmware file = %s, size = 0x%zx\n",
|
|
||||||
filename, emu->firmware->size);
|
|
||||||
--- a/sound/pci/hda/hda_intel.c
|
--- a/sound/pci/hda/hda_intel.c
|
||||||
+++ b/sound/pci/hda/hda_intel.c
|
+++ b/sound/pci/hda/hda_intel.c
|
||||||
@@ -1815,10 +1815,8 @@ static void azx_firmware_cb(const struct
|
@@ -1815,10 +1815,8 @@ static void azx_firmware_cb(const struct
|
||||||
|
|
|
@ -23,7 +23,7 @@ format to detect missing firmware.
|
||||||
---
|
---
|
||||||
--- a/drivers/base/firmware_class.c
|
--- a/drivers/base/firmware_class.c
|
||||||
+++ b/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,
|
rc = kernel_read_file_from_path(path, &buf->data, &size, msize,
|
||||||
id);
|
id);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
|
@ -41,7 +41,7 @@ format to detect missing firmware.
|
||||||
+ dev_info(device, "firmware: direct-loading firmware %s\n",
|
+ dev_info(device, "firmware: direct-loading firmware %s\n",
|
||||||
+ buf->fw_id);
|
+ buf->fw_id);
|
||||||
buf->size = size;
|
buf->size = size;
|
||||||
fw_finish_direct_load(device, buf);
|
fw_state_done(&buf->fw_st);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
__putname(path);
|
__putname(path);
|
||||||
|
@ -53,7 +53,7 @@ format to detect missing firmware.
|
||||||
return rc;
|
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) {
|
if (opt_flags & FW_OPT_NOWAIT) {
|
||||||
timeout = usermodehelper_read_lock_wait(timeout);
|
timeout = usermodehelper_read_lock_wait(timeout);
|
||||||
if (!timeout) {
|
if (!timeout) {
|
||||||
|
|
|
@ -11,14 +11,14 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
---
|
---
|
||||||
--- a/fs/btrfs/super.c
|
--- a/fs/btrfs/super.c
|
||||||
+++ b/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_exit(exit_btrfs_fs)
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
+MODULE_SOFTDEP("pre: crypto-crc32c");
|
+MODULE_SOFTDEP("pre: crypto-crc32c");
|
||||||
--- a/fs/cifs/cifsfs.c
|
--- a/fs/cifs/cifsfs.c
|
||||||
+++ b/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 "
|
("VFS to access servers complying with the SNIA CIFS Specification "
|
||||||
"e.g. Samba and Windows");
|
"e.g. Samba and Windows");
|
||||||
MODULE_VERSION(CIFS_VERSION);
|
MODULE_VERSION(CIFS_VERSION);
|
||||||
|
@ -34,14 +34,14 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
module_exit(exit_cifs)
|
module_exit(exit_cifs)
|
||||||
--- a/fs/crypto/crypto.c
|
--- a/fs/crypto/crypto.c
|
||||||
+++ b/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_exit(fscrypt_exit);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
+MODULE_SOFTDEP("pre: crypto-aes crypto-ecb");
|
+MODULE_SOFTDEP("pre: crypto-aes crypto-ecb");
|
||||||
--- a/fs/ext4/super.c
|
--- a/fs/ext4/super.c
|
||||||
+++ b/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_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
|
||||||
MODULE_DESCRIPTION("Fourth Extended Filesystem");
|
MODULE_DESCRIPTION("Fourth Extended Filesystem");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
@ -57,14 +57,15 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
module_exit(ext4_exit_fs)
|
module_exit(ext4_exit_fs)
|
||||||
--- a/fs/f2fs/super.c
|
--- a/fs/f2fs/super.c
|
||||||
+++ b/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_AUTHOR("Samsung Electronics's Praesto Team");
|
||||||
MODULE_DESCRIPTION("Flash Friendly File System");
|
MODULE_DESCRIPTION("Flash Friendly File System");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
+MODULE_SOFTDEP("pre: crypto-crc32c");
|
+MODULE_SOFTDEP("pre: crypto-crc32c");
|
||||||
|
|
||||||
--- a/fs/jbd2/journal.c
|
--- a/fs/jbd2/journal.c
|
||||||
+++ b/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");
|
MODULE_LICENSE("GPL");
|
||||||
|
@ -74,7 +75,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
|
|
||||||
--- a/fs/nfsd/nfsctl.c
|
--- a/fs/nfsd/nfsctl.c
|
||||||
+++ b/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@monad.swb.de>");
|
MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
From: Vladimir Davydov <vdavydov.dev@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@gmail.com>
|
|
||||||
Reported-by: Doug Smythies <dsmythies@telus.net>
|
|
||||||
Cc: Christoph Lameter <cl@linux.com>
|
|
||||||
Cc: David Rientjes <rientjes@google.com>
|
|
||||||
Cc: Johannes Weiner <hannes@cmpxchg.org>
|
|
||||||
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
|
|
||||||
Cc: Michal Hocko <mhocko@kernel.org>
|
|
||||||
Cc: Pekka Enberg <penberg@kernel.org>
|
|
||||||
Acked-by: Michal Hocko <mhocko@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)
|
|
|
@ -7,16 +7,16 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
---
|
---
|
||||||
--- a/tools/lib/traceevent/Makefile
|
--- a/tools/lib/traceevent/Makefile
|
||||||
+++ b/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
|
$(Q)$(MAKE) $(build)=libtraceevent
|
||||||
|
|
||||||
$(OUTPUT)libtraceevent.so: $(TE_IN)
|
$(OUTPUT)libtraceevent.so.$(EVENT_PARSE_VERSION): $(TE_IN)
|
||||||
- $(QUIET_LINK)$(CC) --shared $^ -o $@
|
- $(QUIET_LINK)$(CC) --shared $^ -Wl,-soname,libtraceevent.so.$(EP_VERSION) -o $@
|
||||||
+ $(QUIET_LINK)$(CC) $(LDFLAGS) --shared $^ -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)
|
@@ -192,7 +192,7 @@ $(PLUGINS_IN): force
|
||||||
$(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
|
|
||||||
@@ -189,7 +189,7 @@ $(PLUGINS_IN): force
|
|
||||||
$(Q)$(MAKE) $(build)=$(plugin_obj)
|
$(Q)$(MAKE) $(build)=$(plugin_obj)
|
||||||
|
|
||||||
$(OUTPUT)%.so: $(OUTPUT)%-in.o
|
$(OUTPUT)%.so: $(OUTPUT)%-in.o
|
||||||
|
|
|
@ -12,13 +12,11 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
arch/powerpc/include/asm/asm-prototypes.h | 2 ++
|
arch/powerpc/include/asm/asm-prototypes.h | 2 ++
|
||||||
1 file changed, 2 insertions(+)
|
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
|
--- a/arch/powerpc/include/asm/asm-prototypes.h
|
||||||
+++ b/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/checksum.h>
|
||||||
#include <asm/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/epapr_hcalls.h>
|
#include <asm/epapr_hcalls.h>
|
||||||
+#include <asm/dcr.h>
|
+#include <asm/dcr.h>
|
||||||
+#include <asm/mmu_context.h>
|
+#include <asm/mmu_context.h>
|
||||||
|
|
|
@ -16,23 +16,19 @@ hashes).
|
||||||
6 files changed, 16 insertions(+), 14 deletions(-)
|
6 files changed, 16 insertions(+), 14 deletions(-)
|
||||||
create mode 100644 arch/s390/kernel/s390_ksyms.c
|
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
|
--- a/arch/s390/include/asm/Kbuild
|
||||||
+++ b/arch/s390/include/asm/Kbuild
|
+++ b/arch/s390/include/asm/Kbuild
|
||||||
@@ -1,7 +1,6 @@
|
@@ -1,7 +1,6 @@
|
||||||
|
generic-y += asm-offsets.h
|
||||||
|
|
||||||
generic-y += clkdev.h
|
generic-y += clkdev.h
|
||||||
|
generic-y += dma-contiguous.h
|
||||||
-generic-y += export.h
|
-generic-y += export.h
|
||||||
generic-y += irq_work.h
|
generic-y += irq_work.h
|
||||||
generic-y += mcs_spinlock.h
|
generic-y += mcs_spinlock.h
|
||||||
generic-y += mm-arch-hooks.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
|
--- a/arch/s390/kernel/Makefile
|
||||||
+++ b/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
|
extra-y += head.o head64.o vmlinux.lds
|
||||||
|
|
||||||
|
@ -41,8 +37,6 @@ index 1f0fe98f6db9..72ccc41444dc 100644
|
||||||
obj-$(CONFIG_SMP) += smp.o
|
obj-$(CONFIG_SMP) += smp.o
|
||||||
obj-$(CONFIG_SCHED_TOPOLOGY) += topology.o
|
obj-$(CONFIG_SCHED_TOPOLOGY) += topology.o
|
||||||
obj-$(CONFIG_HIBERNATION) += suspend.o swsusp.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
|
--- a/arch/s390/kernel/entry.S
|
||||||
+++ b/arch/s390/kernel/entry.S
|
+++ b/arch/s390/kernel/entry.S
|
||||||
@@ -23,7 +23,6 @@
|
@@ -23,7 +23,6 @@
|
||||||
|
@ -53,7 +47,7 @@ index 49a30737adde..c51650a1ed16 100644
|
||||||
|
|
||||||
__PT_R0 = __PT_GPRS
|
__PT_R0 = __PT_GPRS
|
||||||
__PT_R1 = __PT_GPRS + 8
|
__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(.Lrewind_pad,.Lsie_fault)
|
||||||
EX_TABLE(sie_exit,.Lsie_fault)
|
EX_TABLE(sie_exit,.Lsie_fault)
|
||||||
|
@ -62,7 +56,7 @@ index 49a30737adde..c51650a1ed16 100644
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -828,9 +825,6 @@ ENTRY(save_fpu_regs)
|
@@ -835,9 +832,6 @@ ENTRY(save_fpu_regs)
|
||||||
oi __LC_CPU_FLAGS+7,_CIF_FPU
|
oi __LC_CPU_FLAGS+7,_CIF_FPU
|
||||||
br %r14
|
br %r14
|
||||||
.Lsave_fpu_regs_end:
|
.Lsave_fpu_regs_end:
|
||||||
|
@ -72,8 +66,6 @@ index 49a30737adde..c51650a1ed16 100644
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Load floating-point controls and floating-point or vector registers.
|
* 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
|
--- a/arch/s390/kernel/mcount.S
|
||||||
+++ b/arch/s390/kernel/mcount.S
|
+++ b/arch/s390/kernel/mcount.S
|
||||||
@@ -9,7 +9,6 @@
|
@@ -9,7 +9,6 @@
|
||||||
|
@ -93,9 +85,6 @@ index 9a17e4475d27..e499370fbccb 100644
|
||||||
ENTRY(ftrace_caller)
|
ENTRY(ftrace_caller)
|
||||||
.globl ftrace_regs_caller
|
.globl ftrace_regs_caller
|
||||||
.set ftrace_regs_caller,ftrace_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
|
--- /dev/null
|
||||||
+++ b/arch/s390/kernel/s390_ksyms.c
|
+++ b/arch/s390/kernel/s390_ksyms.c
|
||||||
@@ -0,0 +1,15 @@
|
@@ -0,0 +1,15 @@
|
||||||
|
@ -114,8 +103,6 @@ index 000000000000..e67453b73c3c
|
||||||
+#endif
|
+#endif
|
||||||
+EXPORT_SYMBOL(memcpy);
|
+EXPORT_SYMBOL(memcpy);
|
||||||
+EXPORT_SYMBOL(memset);
|
+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
|
--- a/arch/s390/lib/mem.S
|
||||||
+++ b/arch/s390/lib/mem.S
|
+++ b/arch/s390/lib/mem.S
|
||||||
@@ -5,7 +5,6 @@
|
@@ -5,7 +5,6 @@
|
||||||
|
@ -125,8 +112,8 @@ index be9fa65bfac4..c6d553e85ab1 100644
|
||||||
-#include <asm/export.h>
|
-#include <asm/export.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* memset implementation
|
* void *memmove(void *dest, const void *src, size_t n)
|
||||||
@@ -61,7 +60,6 @@ ENTRY(memset)
|
@@ -100,7 +99,6 @@ ENTRY(memset)
|
||||||
xc 0(1,%r1),0(%r1)
|
xc 0(1,%r1),0(%r1)
|
||||||
.Lmemset_mvc:
|
.Lmemset_mvc:
|
||||||
mvc 1(1,%r1),0(%r1)
|
mvc 1(1,%r1),0(%r1)
|
||||||
|
@ -134,7 +121,7 @@ index be9fa65bfac4..c6d553e85ab1 100644
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* memcpy implementation
|
* memcpy implementation
|
||||||
@@ -88,4 +86,3 @@ ENTRY(memcpy)
|
@@ -127,4 +125,3 @@ ENTRY(memcpy)
|
||||||
j .Lmemcpy_rest
|
j .Lmemcpy_rest
|
||||||
.Lmemcpy_mvc:
|
.Lmemcpy_mvc:
|
||||||
mvc 0(1,%r1),0(%r3)
|
mvc 0(1,%r1),0(%r3)
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
From: Ben Hutchings <ben@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@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)
|
|
|
@ -7,7 +7,7 @@ Forwarded: no
|
||||||
|
|
||||||
--- a/tools/perf/Makefile.perf
|
--- a/tools/perf/Makefile.perf
|
||||||
+++ b/tools/perf/Makefile.perf
|
+++ b/tools/perf/Makefile.perf
|
||||||
@@ -563,8 +563,8 @@ endif
|
@@ -677,8 +677,8 @@ endif
|
||||||
ifndef NO_LIBPERL
|
ifndef NO_LIBPERL
|
||||||
$(call QUIET_INSTALL, perl-scripts) \
|
$(call QUIET_INSTALL, perl-scripts) \
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
|
$(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) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
|
||||||
$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
|
$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
|
||||||
endif
|
endif
|
||||||
@@ -572,23 +572,23 @@ ifndef NO_LIBPYTHON
|
@@ -686,23 +686,23 @@ ifndef NO_LIBPYTHON
|
||||||
$(call QUIET_INSTALL, python-scripts) \
|
$(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/Perf-Trace-Util/lib/Perf/Trace'; \
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'; \
|
$(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) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'
|
||||||
+ $(INSTALL) -m 644 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
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ version-dependent name. And do the same for trace.]
|
||||||
|
|
||||||
--- a/tools/perf/Makefile.perf
|
--- a/tools/perf/Makefile.perf
|
||||||
+++ b/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
|
install-tools: all install-gtk
|
||||||
$(call QUIET_INSTALL, binaries) \
|
$(call QUIET_INSTALL, binaries) \
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'; \
|
$(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)$(bindir_SQ)';
|
||||||
+ $(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
|
+ $(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
|
||||||
endif
|
endif
|
||||||
|
ifndef NO_JVMTI
|
||||||
|
$(call QUIET_INSTALL, $(LIBJVMTI)) \
|
||||||
|
$(INSTALL) $(OUTPUT)$(LIBJVMTI) '$(DESTDIR_SQ)$(libdir_SQ)';
|
||||||
|
endif
|
||||||
- $(call QUIET_INSTALL, libexec) \
|
- $(call QUIET_INSTALL, libexec) \
|
||||||
- $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
- $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
||||||
$(call QUIET_INSTALL, perf-archive) \
|
$(call QUIET_INSTALL, perf-archive) \
|
||||||
$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
||||||
$(call QUIET_INSTALL, perf-with-kcore) \
|
$(call QUIET_INSTALL, perf-with-kcore) \
|
||||||
@@ -578,7 +578,7 @@ ifndef NO_LIBPYTHON
|
@@ -692,7 +692,7 @@ ifndef NO_LIBPYTHON
|
||||||
endif
|
endif
|
||||||
$(call QUIET_INSTALL, perf_completion-script) \
|
$(call QUIET_INSTALL, perf_completion-script) \
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
|
$(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) \
|
$(call QUIET_INSTALL, perf-tip) \
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
|
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
|
||||||
$(INSTALL) Documentation/tips.txt -t '$(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'
|
# 'make install-doc' should call 'make -C Documentation install'
|
||||||
$(INSTALL_DOC_TARGETS):
|
$(INSTALL_DOC_TARGETS):
|
||||||
|
@ -79,7 +83,7 @@ version-dependent name. And do the same for trace.]
|
||||||
|
|
||||||
--- a/tools/perf/util/Build
|
--- a/tools/perf/util/Build
|
||||||
+++ b/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_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_hweight.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
||||||
CFLAGS_parse-events.o += -Wno-redundant-decls
|
CFLAGS_parse-events.o += -Wno-redundant-decls
|
||||||
|
|
|
@ -99,7 +99,7 @@ are set.
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/io.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",
|
printk("NIP: "REG" LR: "REG" CTR: "REG"\n",
|
||||||
regs->nip, regs->link, regs->ctr);
|
regs->nip, regs->link, regs->ctr);
|
||||||
|
@ -119,9 +119,9 @@ are set.
|
||||||
#include <linux/uio.h>
|
#include <linux/uio.h>
|
||||||
+#include <generated/package.h>
|
+#include <generated/package.h>
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/sections.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)
|
void dump_stack_print_info(const char *log_lvl)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,11 +8,9 @@ Patch headers added by debian/patches/features/all/aufs4/gen-patch
|
||||||
|
|
||||||
aufs4.9 base patch
|
aufs4.9 base patch
|
||||||
|
|
||||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
|
||||||
index 63cefa6..d78b954 100644
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/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: include/uapi/linux/audit.h
|
||||||
F: kernel/audit*
|
F: kernel/audit*
|
||||||
|
|
||||||
|
@ -32,11 +30,9 @@ index 63cefa6..d78b954 100644
|
||||||
AUXILIARY DISPLAY DRIVERS
|
AUXILIARY DISPLAY DRIVERS
|
||||||
M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
|
M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
|
||||||
W: http://miguelojeda.es/auxdisplay.htm
|
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
|
--- a/drivers/block/loop.c
|
||||||
+++ b/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;
|
return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,8 +57,6 @@ index fa1b7a9..6ee9235 100644
|
||||||
/* loop sysfs attributes */
|
/* loop sysfs attributes */
|
||||||
|
|
||||||
static ssize_t loop_attr_show(struct device *dev, char *page,
|
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
|
--- a/fs/dcache.c
|
||||||
+++ b/fs/dcache.c
|
+++ b/fs/dcache.c
|
||||||
@@ -1164,7 +1164,7 @@ enum d_walk_ret {
|
@@ -1164,7 +1164,7 @@ enum d_walk_ret {
|
||||||
|
@ -74,8 +68,6 @@ index 5c7cc95..df0268c 100644
|
||||||
enum d_walk_ret (*enter)(void *, struct dentry *),
|
enum d_walk_ret (*enter)(void *, struct dentry *),
|
||||||
void (*finish)(void *))
|
void (*finish)(void *))
|
||||||
{
|
{
|
||||||
diff --git a/fs/fcntl.c b/fs/fcntl.c
|
|
||||||
index 350a2c8..6f42279 100644
|
|
||||||
--- a/fs/fcntl.c
|
--- a/fs/fcntl.c
|
||||||
+++ b/fs/fcntl.c
|
+++ b/fs/fcntl.c
|
||||||
@@ -29,7 +29,7 @@
|
@@ -29,7 +29,7 @@
|
||||||
|
@ -87,7 +79,7 @@ index 350a2c8..6f42279 100644
|
||||||
{
|
{
|
||||||
struct inode * inode = file_inode(filp);
|
struct inode * inode = file_inode(filp);
|
||||||
int error = 0;
|
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)
|
if (filp->f_op->check_flags)
|
||||||
error = filp->f_op->check_flags(arg);
|
error = filp->f_op->check_flags(arg);
|
||||||
|
@ -96,11 +88,9 @@ index 350a2c8..6f42279 100644
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
diff --git a/fs/inode.c b/fs/inode.c
|
|
||||||
index 88110fd..9a9ba3a 100644
|
|
||||||
--- a/fs/inode.c
|
--- a/fs/inode.c
|
||||||
+++ b/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
|
* This does the actual work of updating an inodes time or version. Must have
|
||||||
* had called mnt_want_write() before calling this.
|
* had called mnt_want_write() before calling this.
|
||||||
*/
|
*/
|
||||||
|
@ -109,11 +99,9 @@ index 88110fd..9a9ba3a 100644
|
||||||
{
|
{
|
||||||
int (*update_time)(struct inode *, struct timespec *, int);
|
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
|
--- a/fs/read_write.c
|
||||||
+++ b/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);
|
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)
|
ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
|
||||||
{
|
{
|
||||||
mm_segment_t old_fs;
|
mm_segment_t old_fs;
|
||||||
diff --git a/fs/splice.c b/fs/splice.c
|
|
||||||
index 5a7750b..28160a7 100644
|
|
||||||
--- a/fs/splice.c
|
--- a/fs/splice.c
|
||||||
+++ b/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.
|
* 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 *,
|
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
|
||||||
loff_t *, size_t, unsigned int);
|
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.
|
* 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 *,
|
ssize_t (*splice_read)(struct file *, loff_t *,
|
||||||
struct pipe_inode_info *, size_t, unsigned int);
|
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
|
--- a/include/linux/file.h
|
||||||
+++ b/include/linux/file.h
|
+++ b/include/linux/file.h
|
||||||
@@ -19,6 +19,7 @@
|
@@ -19,6 +19,7 @@ struct dentry;
|
||||||
struct path;
|
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);
|
const struct file_operations *fop);
|
||||||
+extern struct file *get_empty_filp(void);
|
+extern struct file *get_empty_filp(void);
|
||||||
|
|
||||||
static inline void fput_light(struct file *file, int fput_needed)
|
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
|
--- a/include/linux/fs.h
|
||||||
+++ b/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 */
|
/* can be called from interrupts */
|
||||||
extern void kill_fasync(struct fasync_struct **, int, int);
|
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, struct pid *, enum pid_type, int force);
|
||||||
extern void f_setown(struct file *filp, unsigned long arg, int force);
|
extern void f_setown(struct file *filp, unsigned long arg, int force);
|
||||||
extern void f_delown(struct file *filp);
|
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);
|
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);
|
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
|
||||||
int (*check_flags)(int);
|
int (*check_flags)(int);
|
||||||
|
@ -202,7 +184,7 @@ index dc0478c..27c05e7 100644
|
||||||
int (*flock) (struct file *, int, struct file_lock *);
|
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_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);
|
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 *fast_pointer,
|
||||||
struct iovec **ret_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_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_write(struct file *, const char __user *, size_t, loff_t *);
|
||||||
extern ssize_t vfs_read(struct file *, 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 ihold(struct inode * inode);
|
||||||
extern void iput(struct inode *);
|
extern void iput(struct inode *);
|
||||||
extern int generic_update_time(struct inode *, struct timespec *, int);
|
extern int generic_update_time(struct inode *, struct timespec *, int);
|
||||||
|
@ -223,11 +205,9 @@ index dc0478c..27c05e7 100644
|
||||||
|
|
||||||
/* /sys/fs */
|
/* /sys/fs */
|
||||||
extern struct kobject *fs_kobj;
|
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
|
--- a/include/linux/splice.h
|
||||||
+++ b/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 page_cache_pipe_buf_ops;
|
||||||
extern const struct pipe_buf_operations default_pipe_buf_ops;
|
extern const struct pipe_buf_operations default_pipe_buf_ops;
|
||||||
|
|
|
@ -8,11 +8,11 @@ Patch headers added by debian/patches/features/all/aufs4/gen-patch
|
||||||
|
|
||||||
aufs4.9 mmap patch
|
aufs4.9 mmap patch
|
||||||
|
|
||||||
diff --git a/fs/proc/base.c b/fs/proc/base.c
|
[bwh: Forward-ported to 4.10: adjust indentation]
|
||||||
index ca651ac..0e8551a 100644
|
|
||||||
--- a/fs/proc/base.c
|
--- a/fs/proc/base.c
|
||||||
+++ b/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);
|
down_read(&mm->mmap_sem);
|
||||||
vma = find_exact_vma(mm, vm_start, vm_end);
|
vma = find_exact_vma(mm, vm_start, vm_end);
|
||||||
if (vma && vma->vm_file) {
|
if (vma && vma->vm_file) {
|
||||||
|
@ -21,11 +21,9 @@ index ca651ac..0e8551a 100644
|
||||||
path_get(path);
|
path_get(path);
|
||||||
rc = 0;
|
rc = 0;
|
||||||
}
|
}
|
||||||
diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
|
|
||||||
index f8595e8..cb8eda0 100644
|
|
||||||
--- a/fs/proc/nommu.c
|
--- a/fs/proc/nommu.c
|
||||||
+++ b/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;
|
file = region->vm_file;
|
||||||
|
|
||||||
if (file) {
|
if (file) {
|
||||||
|
@ -37,11 +35,9 @@ index f8595e8..cb8eda0 100644
|
||||||
dev = inode->i_sb->s_dev;
|
dev = inode->i_sb->s_dev;
|
||||||
ino = inode->i_ino;
|
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
|
--- a/fs/proc/task_mmu.c
|
||||||
+++ b/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;
|
const char *name = NULL;
|
||||||
|
|
||||||
if (file) {
|
if (file) {
|
||||||
|
@ -53,7 +49,7 @@ index 35b92d8..5b981db 100644
|
||||||
dev = inode->i_sb->s_dev;
|
dev = inode->i_sb->s_dev;
|
||||||
ino = inode->i_ino;
|
ino = inode->i_ino;
|
||||||
pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
|
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 proc_maps_private *proc_priv = &numa_priv->proc_maps;
|
||||||
struct vm_area_struct *vma = v;
|
struct vm_area_struct *vma = v;
|
||||||
struct numa_maps *md = &numa_priv->md;
|
struct numa_maps *md = &numa_priv->md;
|
||||||
|
@ -62,11 +58,9 @@ index 35b92d8..5b981db 100644
|
||||||
struct mm_struct *mm = vma->vm_mm;
|
struct mm_struct *mm = vma->vm_mm;
|
||||||
struct mm_walk walk = {
|
struct mm_walk walk = {
|
||||||
.hugetlb_entry = gather_hugetlb_stats,
|
.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
|
--- a/fs/proc/task_nommu.c
|
||||||
+++ b/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;
|
file = vma->vm_file;
|
||||||
|
|
||||||
if (file) {
|
if (file) {
|
||||||
|
@ -78,11 +72,9 @@ index 3717562..6a328f1 100644
|
||||||
dev = inode->i_sb->s_dev;
|
dev = inode->i_sb->s_dev;
|
||||||
ino = inode->i_ino;
|
ino = inode->i_ino;
|
||||||
pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
|
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
|
--- a/include/linux/mm.h
|
||||||
+++ b/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
|
#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,
|
extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len,
|
||||||
unsigned int gup_flags);
|
unsigned int gup_flags);
|
||||||
extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
|
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
|
--- a/include/linux/mm_types.h
|
||||||
+++ b/include/linux/mm_types.h
|
+++ b/include/linux/mm_types.h
|
||||||
@@ -275,6 +275,7 @@ struct vm_region {
|
@@ -275,6 +275,7 @@ struct vm_region {
|
||||||
|
@ -131,11 +121,9 @@ index 4a8aced..badd16b 100644
|
||||||
void * vm_private_data; /* was vm_pte (shared mem) */
|
void * vm_private_data; /* was vm_pte (shared mem) */
|
||||||
|
|
||||||
#ifndef CONFIG_MMU
|
#ifndef CONFIG_MMU
|
||||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
|
||||||
index 997ac1d..4d0131b 100644
|
|
||||||
--- a/kernel/fork.c
|
--- a/kernel/fork.c
|
||||||
+++ b/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 inode *inode = file_inode(file);
|
||||||
struct address_space *mapping = file->f_mapping;
|
struct address_space *mapping = file->f_mapping;
|
||||||
|
|
||||||
|
@ -144,11 +132,9 @@ index 997ac1d..4d0131b 100644
|
||||||
if (tmp->vm_flags & VM_DENYWRITE)
|
if (tmp->vm_flags & VM_DENYWRITE)
|
||||||
atomic_dec(&inode->i_writecount);
|
atomic_dec(&inode->i_writecount);
|
||||||
i_mmap_lock_write(mapping);
|
i_mmap_lock_write(mapping);
|
||||||
diff --git a/mm/Makefile b/mm/Makefile
|
|
||||||
index 295bd7a..14fa1c8 100644
|
|
||||||
--- a/mm/Makefile
|
--- a/mm/Makefile
|
||||||
+++ b/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 \
|
mm_init.o mmu_context.o percpu.o slab_common.o \
|
||||||
compaction.o vmacache.o \
|
compaction.o vmacache.o \
|
||||||
interval_tree.o list_lru.o workingset.o \
|
interval_tree.o list_lru.o workingset.o \
|
||||||
|
@ -157,11 +143,9 @@ index 295bd7a..14fa1c8 100644
|
||||||
|
|
||||||
obj-y += init-mm.o
|
obj-y += init-mm.o
|
||||||
|
|
||||||
diff --git a/mm/filemap.c b/mm/filemap.c
|
|
||||||
index 50b52fe..9e607f9 100644
|
|
||||||
--- a/mm/filemap.c
|
--- a/mm/filemap.c
|
||||||
+++ b/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;
|
int ret = VM_FAULT_LOCKED;
|
||||||
|
|
||||||
sb_start_pagefault(inode->i_sb);
|
sb_start_pagefault(inode->i_sb);
|
||||||
|
@ -170,24 +154,20 @@ index 50b52fe..9e607f9 100644
|
||||||
lock_page(page);
|
lock_page(page);
|
||||||
if (page->mapping != inode->i_mapping) {
|
if (page->mapping != inode->i_mapping) {
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
diff --git a/mm/memory.c b/mm/memory.c
|
|
||||||
index e18c57b..7be4a39 100644
|
|
||||||
--- a/mm/memory.c
|
--- a/mm/memory.c
|
||||||
+++ b/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,
|
@@ -2091,7 +2091,7 @@ static void fault_dirty_shared_page(stru
|
||||||
}
|
|
||||||
|
|
||||||
if (!page_mkwrite)
|
|
||||||
- file_update_time(vma->vm_file);
|
|
||||||
+ vma_file_update_time(vma);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return VM_FAULT_WRITE;
|
if (!page_mkwrite)
|
||||||
diff --git a/mm/mmap.c b/mm/mmap.c
|
- file_update_time(vma->vm_file);
|
||||||
index 1af87c1..95b0ff4 100644
|
+ vma_file_update_time(vma);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
--- a/mm/mmap.c
|
--- a/mm/mmap.c
|
||||||
+++ b/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)
|
if (vma->vm_ops && vma->vm_ops->close)
|
||||||
vma->vm_ops->close(vma);
|
vma->vm_ops->close(vma);
|
||||||
if (vma->vm_file)
|
if (vma->vm_file)
|
||||||
|
@ -196,7 +176,7 @@ index 1af87c1..95b0ff4 100644
|
||||||
mpol_put(vma_policy(vma));
|
mpol_put(vma_policy(vma));
|
||||||
kmem_cache_free(vm_area_cachep, vma);
|
kmem_cache_free(vm_area_cachep, vma);
|
||||||
return next;
|
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 (remove_next) {
|
||||||
if (file) {
|
if (file) {
|
||||||
uprobe_munmap(next, next->vm_start, next->vm_end);
|
uprobe_munmap(next, next->vm_start, next->vm_end);
|
||||||
|
@ -205,7 +185,7 @@ index 1af87c1..95b0ff4 100644
|
||||||
}
|
}
|
||||||
if (next->anon_vma)
|
if (next->anon_vma)
|
||||||
anon_vma_merge(vma, next);
|
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;
|
return addr;
|
||||||
|
|
||||||
unmap_and_free_vma:
|
unmap_and_free_vma:
|
||||||
|
@ -215,7 +195,7 @@ index 1af87c1..95b0ff4 100644
|
||||||
|
|
||||||
/* Undo any partial mapping done by a device driver. */
|
/* Undo any partial mapping done by a device driver. */
|
||||||
unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end);
|
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;
|
goto out_free_mpol;
|
||||||
|
|
||||||
if (new->vm_file)
|
if (new->vm_file)
|
||||||
|
@ -224,7 +204,7 @@ index 1af87c1..95b0ff4 100644
|
||||||
|
|
||||||
if (new->vm_ops && new->vm_ops->open)
|
if (new->vm_ops && new->vm_ops->open)
|
||||||
new->vm_ops->open(new);
|
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)
|
if (new->vm_ops && new->vm_ops->close)
|
||||||
new->vm_ops->close(new);
|
new->vm_ops->close(new);
|
||||||
if (new->vm_file)
|
if (new->vm_file)
|
||||||
|
@ -233,7 +213,7 @@ index 1af87c1..95b0ff4 100644
|
||||||
unlink_anon_vmas(new);
|
unlink_anon_vmas(new);
|
||||||
out_free_mpol:
|
out_free_mpol:
|
||||||
mpol_put(vma_policy(new));
|
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;
|
struct vm_area_struct *vma;
|
||||||
unsigned long populate = 0;
|
unsigned long populate = 0;
|
||||||
unsigned long ret = -EINVAL;
|
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",
|
pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.txt.\n",
|
||||||
current->comm, current->pid);
|
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:
|
out:
|
||||||
up_write(&mm->mmap_sem);
|
up_write(&mm->mmap_sem);
|
||||||
if (populate)
|
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))
|
if (anon_vma_clone(new_vma, vma))
|
||||||
goto out_free_mempol;
|
goto out_free_mempol;
|
||||||
if (new_vma->vm_file)
|
if (new_vma->vm_file)
|
||||||
|
@ -280,11 +260,9 @@ index 1af87c1..95b0ff4 100644
|
||||||
if (new_vma->vm_ops && new_vma->vm_ops->open)
|
if (new_vma->vm_ops && new_vma->vm_ops->open)
|
||||||
new_vma->vm_ops->open(new_vma);
|
new_vma->vm_ops->open(new_vma);
|
||||||
vma_link(mm, new_vma, prev, rb_link, rb_parent);
|
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
|
--- a/mm/nommu.c
|
||||||
+++ b/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);
|
up_write(&nommu_region_sem);
|
||||||
|
|
||||||
if (region->vm_file)
|
if (region->vm_file)
|
||||||
|
@ -293,7 +271,7 @@ index 8b8faaf..5d26ed94 100644
|
||||||
|
|
||||||
/* IO memory and memory shared directly out of the pagecache
|
/* IO memory and memory shared directly out of the pagecache
|
||||||
* from ramfs/tmpfs mustn't be released here */
|
* 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)
|
if (vma->vm_ops && vma->vm_ops->close)
|
||||||
vma->vm_ops->close(vma);
|
vma->vm_ops->close(vma);
|
||||||
if (vma->vm_file)
|
if (vma->vm_file)
|
||||||
|
@ -311,7 +289,7 @@ index 8b8faaf..5d26ed94 100644
|
||||||
kmem_cache_free(vm_region_jar, region);
|
kmem_cache_free(vm_region_jar, region);
|
||||||
region = pregion;
|
region = pregion;
|
||||||
result = start;
|
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);
|
up_write(&nommu_region_sem);
|
||||||
error:
|
error:
|
||||||
if (region->vm_file)
|
if (region->vm_file)
|
||||||
|
@ -324,9 +302,6 @@ index 8b8faaf..5d26ed94 100644
|
||||||
kmem_cache_free(vm_area_cachep, vma);
|
kmem_cache_free(vm_area_cachep, vma);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
diff --git a/mm/prfile.c b/mm/prfile.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..b323b8a
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/mm/prfile.c
|
+++ b/mm/prfile.c
|
||||||
@@ -0,0 +1,86 @@
|
@@ -0,0 +1,86 @@
|
||||||
|
|
|
@ -8,19 +8,17 @@ Patch headers added by debian/patches/features/all/aufs4/gen-patch
|
||||||
|
|
||||||
aufs4.9 standalone patch
|
aufs4.9 standalone patch
|
||||||
|
|
||||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
|
||||||
index df0268c..755fea1 100644
|
|
||||||
--- a/fs/dcache.c
|
--- a/fs/dcache.c
|
||||||
+++ b/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;
|
seq = 1;
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
+EXPORT_SYMBOL_GPL(d_walk);
|
+EXPORT_SYMBOL_GPL(d_walk);
|
||||||
|
|
||||||
/*
|
struct check_mount {
|
||||||
* Search for at least 1 mount point in the dentry's subdirs.
|
struct vfsmount *mnt;
|
||||||
@@ -2855,6 +2856,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
|
@@ -2864,6 +2865,7 @@ void d_exchange(struct dentry *dentry1,
|
||||||
|
|
||||||
write_sequnlock(&rename_lock);
|
write_sequnlock(&rename_lock);
|
||||||
}
|
}
|
||||||
|
@ -28,11 +26,9 @@ index df0268c..755fea1 100644
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* d_ancestor - search for an ancestor
|
* d_ancestor - search for an ancestor
|
||||||
diff --git a/fs/exec.c b/fs/exec.c
|
|
||||||
index 4e497b9..e27d323 100644
|
|
||||||
--- a/fs/exec.c
|
--- a/fs/exec.c
|
||||||
+++ b/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) ||
|
return (path->mnt->mnt_flags & MNT_NOEXEC) ||
|
||||||
(path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
|
(path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
|
||||||
}
|
}
|
||||||
|
@ -40,11 +36,9 @@ index 4e497b9..e27d323 100644
|
||||||
|
|
||||||
#ifdef CONFIG_USELIB
|
#ifdef CONFIG_USELIB
|
||||||
/*
|
/*
|
||||||
diff --git a/fs/fcntl.c b/fs/fcntl.c
|
|
||||||
index 6f42279..04fd33c 100644
|
|
||||||
--- a/fs/fcntl.c
|
--- a/fs/fcntl.c
|
||||||
+++ b/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:
|
out:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -52,11 +46,9 @@ index 6f42279..04fd33c 100644
|
||||||
|
|
||||||
static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
|
static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
|
||||||
int force)
|
int force)
|
||||||
diff --git a/fs/file_table.c b/fs/file_table.c
|
|
||||||
index ad17e05..ae9f267 100644
|
|
||||||
--- a/fs/file_table.c
|
--- a/fs/file_table.c
|
||||||
+++ b/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);
|
return ERR_PTR(-ENFILE);
|
||||||
}
|
}
|
||||||
|
@ -88,11 +80,9 @@ index ad17e05..ae9f267 100644
|
||||||
|
|
||||||
void __init files_init(void)
|
void __init files_init(void)
|
||||||
{
|
{
|
||||||
diff --git a/fs/inode.c b/fs/inode.c
|
|
||||||
index 9a9ba3a..a3a18d8 100644
|
|
||||||
--- a/fs/inode.c
|
--- a/fs/inode.c
|
||||||
+++ b/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);
|
return update_time(inode, time, flags);
|
||||||
}
|
}
|
||||||
|
@ -100,11 +90,9 @@ index 9a9ba3a..a3a18d8 100644
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* touch_atime - update the access time
|
* touch_atime - update the access time
|
||||||
diff --git a/fs/namespace.c b/fs/namespace.c
|
|
||||||
index e6c234b..8d13f7b 100644
|
|
||||||
--- a/fs/namespace.c
|
--- a/fs/namespace.c
|
||||||
+++ b/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));
|
mnt_dec_writers(real_mount(mnt));
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
}
|
}
|
||||||
|
@ -112,7 +100,7 @@ index e6c234b..8d13f7b 100644
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mnt_drop_write - give up write access to a mount
|
* 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -120,8 +108,6 @@ index e6c234b..8d13f7b 100644
|
||||||
|
|
||||||
static void cleanup_group_ids(struct mount *mnt, struct mount *end)
|
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
|
--- a/fs/notify/group.c
|
||||||
+++ b/fs/notify/group.c
|
+++ b/fs/notify/group.c
|
||||||
@@ -22,6 +22,7 @@
|
@@ -22,6 +22,7 @@
|
||||||
|
@ -132,7 +118,7 @@ index fbe3cbe..bdfc61e 100644
|
||||||
|
|
||||||
#include <linux/fsnotify_backend.h>
|
#include <linux/fsnotify_backend.h>
|
||||||
#include "fsnotify.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);
|
atomic_inc(&group->refcnt);
|
||||||
}
|
}
|
||||||
|
@ -140,7 +126,7 @@ index fbe3cbe..bdfc61e 100644
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Drop a reference to a group. Free it if it's through.
|
* 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))
|
if (atomic_dec_and_test(&group->refcnt))
|
||||||
fsnotify_final_destroy_group(group);
|
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.
|
* 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;
|
return group;
|
||||||
}
|
}
|
||||||
|
@ -156,11 +142,9 @@ index fbe3cbe..bdfc61e 100644
|
||||||
|
|
||||||
int fsnotify_fasync(int fd, struct file *file, int on)
|
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
|
--- a/fs/notify/mark.c
|
||||||
+++ b/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);
|
mark->free_mark(mark);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,7 +152,7 @@ index d3fea0b..5fc06ad 100644
|
||||||
|
|
||||||
/* Calculate mask of events for a list of marks */
|
/* Calculate mask of events for a list of marks */
|
||||||
u32 fsnotify_recalc_mask(struct hlist_head *head)
|
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);
|
mutex_unlock(&group->mark_mutex);
|
||||||
fsnotify_free_mark(mark);
|
fsnotify_free_mark(mark);
|
||||||
}
|
}
|
||||||
|
@ -176,7 +160,7 @@ index d3fea0b..5fc06ad 100644
|
||||||
|
|
||||||
void fsnotify_destroy_marks(struct hlist_head *head, spinlock_t *lock)
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -184,7 +168,7 @@ index d3fea0b..5fc06ad 100644
|
||||||
|
|
||||||
int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group,
|
int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group,
|
||||||
struct inode *inode, struct vfsmount *mnt, int allow_dups)
|
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);
|
atomic_set(&mark->refcnt, 1);
|
||||||
mark->free_mark = free_mark;
|
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
|
* 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
|
--- a/fs/open.c
|
||||||
+++ b/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);
|
inode_unlock(dentry->d_inode);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -212,8 +194,6 @@ index d3ed817..20d2494 100644
|
||||||
|
|
||||||
static int do_dentry_open(struct file *f,
|
static int do_dentry_open(struct file *f,
|
||||||
struct inode *inode,
|
struct inode *inode,
|
||||||
diff --git a/fs/read_write.c b/fs/read_write.c
|
|
||||||
index 4052813..7dfd732 100644
|
|
||||||
--- a/fs/read_write.c
|
--- a/fs/read_write.c
|
||||||
+++ b/fs/read_write.c
|
+++ b/fs/read_write.c
|
||||||
@@ -525,6 +525,7 @@ vfs_readf_t vfs_readf(struct file *file)
|
@@ -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)
|
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 new_sync_write;
|
||||||
return ERR_PTR(-ENOSYS);
|
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)
|
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
|
--- a/fs/splice.c
|
||||||
+++ b/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);
|
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.
|
* 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);
|
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
|
* 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
|
--- a/fs/xattr.c
|
||||||
+++ b/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;
|
*xattr_value = value;
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -264,8 +240,6 @@ index 2d13b4e..41c2bcd 100644
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
__vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
|
__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
|
--- a/kernel/task_work.c
|
||||||
+++ b/kernel/task_work.c
|
+++ b/kernel/task_work.c
|
||||||
@@ -119,3 +119,4 @@ void task_work_run(void)
|
@@ -119,3 +119,4 @@ void task_work_run(void)
|
||||||
|
@ -273,8 +247,6 @@ index d513051..e056d54 100644
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+EXPORT_SYMBOL_GPL(task_work_run);
|
+EXPORT_SYMBOL_GPL(task_work_run);
|
||||||
diff --git a/security/commoncap.c b/security/commoncap.c
|
|
||||||
index 8df676f..6b5cc07 100644
|
|
||||||
--- a/security/commoncap.c
|
--- a/security/commoncap.c
|
||||||
+++ b/security/commoncap.c
|
+++ b/security/commoncap.c
|
||||||
@@ -1061,12 +1061,14 @@ int cap_mmap_addr(unsigned long addr)
|
@@ -1061,12 +1061,14 @@ int cap_mmap_addr(unsigned long addr)
|
||||||
|
@ -292,8 +264,6 @@ index 8df676f..6b5cc07 100644
|
||||||
|
|
||||||
#ifdef CONFIG_SECURITY
|
#ifdef CONFIG_SECURITY
|
||||||
|
|
||||||
diff --git a/security/device_cgroup.c b/security/device_cgroup.c
|
|
||||||
index 03c1652..f88c84b 100644
|
|
||||||
--- a/security/device_cgroup.c
|
--- a/security/device_cgroup.c
|
||||||
+++ b/security/device_cgroup.c
|
+++ b/security/device_cgroup.c
|
||||||
@@ -7,6 +7,7 @@
|
@@ -7,6 +7,7 @@
|
||||||
|
@ -304,7 +274,7 @@ index 03c1652..f88c84b 100644
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/seq_file.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),
|
return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
|
||||||
access);
|
access);
|
||||||
}
|
}
|
||||||
|
@ -312,11 +282,9 @@ index 03c1652..f88c84b 100644
|
||||||
|
|
||||||
int devcgroup_inode_mknod(int mode, dev_t dev)
|
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
|
--- a/security/security.c
|
||||||
+++ b/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 0;
|
||||||
return call_int_hook(path_rmdir, 0, dir, dentry);
|
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)
|
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 0;
|
||||||
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
|
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,
|
int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
|
||||||
struct dentry *new_dentry)
|
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 0;
|
||||||
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
|
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,
|
int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
|
||||||
const struct path *new_dir, struct dentry *new_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 0;
|
||||||
return call_int_hook(path_truncate, 0, path);
|
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)
|
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 0;
|
||||||
return call_int_hook(path_chmod, 0, path, mode);
|
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)
|
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 0;
|
||||||
return call_int_hook(path_chown, 0, path, uid, gid);
|
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)
|
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 0;
|
||||||
return call_int_hook(inode_readlink, 0, dentry);
|
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,
|
int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
|
||||||
bool rcu)
|
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 0;
|
||||||
return call_int_hook(inode_permission, 0, inode, mask);
|
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)
|
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);
|
return fsnotify_perm(file, mask);
|
||||||
}
|
}
|
||||||
|
@ -388,7 +356,7 @@ index f825304..8dd441d 100644
|
||||||
|
|
||||||
int security_file_alloc(struct file *file)
|
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 ret;
|
||||||
return ima_file_mmap(file, prot);
|
return ima_file_mmap(file, prot);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,6 @@ Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||||
drivers/acpi/osl.c | 3 ++-
|
drivers/acpi/osl.c | 3 ++-
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
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
|
--- a/drivers/acpi/osl.c
|
||||||
+++ b/drivers/acpi/osl.c
|
+++ b/drivers/acpi/osl.c
|
||||||
@@ -40,6 +40,7 @@
|
@@ -40,6 +40,7 @@
|
||||||
|
@ -24,10 +22,10 @@ index 814d5f83b75e..242ca81bb606 100644
|
||||||
+#include <linux/security.h>
|
+#include <linux/security.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
@@ -254,7 +255,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
|
@@ -192,7 +193,7 @@ acpi_physical_address __init acpi_os_get
|
||||||
acpi_physical_address __init acpi_os_get_root_pointer(void)
|
acpi_physical_address pa = 0;
|
||||||
{
|
|
||||||
#ifdef CONFIG_KEXEC
|
#ifdef CONFIG_KEXEC
|
||||||
- if (acpi_rsdp)
|
- if (acpi_rsdp)
|
||||||
+ if (acpi_rsdp && (get_securelevel() <= 0))
|
+ if (acpi_rsdp && (get_securelevel() <= 0))
|
||||||
|
|
|
@ -10,6 +10,7 @@ Determine the state of Secure Boot in the EFI stub and pass this to the
|
||||||
kernel using the FDT.
|
kernel using the FDT.
|
||||||
|
|
||||||
Signed-off-by: Linn Crosetto <linn@hpe.com>
|
Signed-off-by: Linn Crosetto <linn@hpe.com>
|
||||||
|
[bwh: Forward-ported to 4.10: adjust context]
|
||||||
---
|
---
|
||||||
v2:
|
v2:
|
||||||
|
|
||||||
|
@ -26,7 +27,7 @@ v2:
|
||||||
|
|
||||||
--- a/arch/arm64/Kconfig
|
--- a/arch/arm64/Kconfig
|
||||||
+++ b/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
|
allow the kernel to be booted as an EFI application. This
|
||||||
is only useful on systems that have UEFI firmware.
|
is only useful on systems that have UEFI firmware.
|
||||||
|
|
||||||
|
@ -56,7 +57,7 @@ v2:
|
||||||
|
|
||||||
#include <asm/efi.h>
|
#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",
|
"Unexpected EFI_MEMORY_DESCRIPTOR version %ld",
|
||||||
efi.memmap.desc_version);
|
efi.memmap.desc_version);
|
||||||
|
|
||||||
|
@ -66,12 +67,12 @@ v2:
|
||||||
+ }
|
+ }
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
if (uefi_init() < 0)
|
if (uefi_init() < 0) {
|
||||||
|
efi_memmap_unmap();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
--- a/drivers/firmware/efi/efi.c
|
--- a/drivers/firmware/efi/efi.c
|
||||||
+++ b/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 Address", "linux,uefi-mmap-start", mmap),
|
||||||
UEFI_PARAM("MemMap Size", "linux,uefi-mmap-size", mmap_size),
|
UEFI_PARAM("MemMap Size", "linux,uefi-mmap-size", mmap_size),
|
||||||
UEFI_PARAM("MemMap Desc. Size", "linux,uefi-mmap-desc-size", desc_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 };
|
'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0 };
|
||||||
--- a/drivers/firmware/efi/libstub/efistub.h
|
--- a/drivers/firmware/efi/libstub/efistub.h
|
||||||
+++ b/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);
|
+int efi_get_secureboot(efi_system_table_t *sys_table_arg);
|
||||||
#endif
|
#endif
|
||||||
--- a/drivers/firmware/efi/libstub/fdt.c
|
--- a/drivers/firmware/efi/libstub/fdt.c
|
||||||
+++ b/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;
|
return efi_status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,7 +119,7 @@ v2:
|
||||||
fdt_set_fail:
|
fdt_set_fail:
|
||||||
--- a/include/linux/efi.h
|
--- a/include/linux/efi.h
|
||||||
+++ b/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 mmap_size;
|
||||||
u32 desc_size;
|
u32 desc_size;
|
||||||
u32 desc_ver;
|
u32 desc_ver;
|
||||||
|
|
|
@ -10,6 +10,7 @@ to paranoid - in future we can potentially relax this for sufficiently
|
||||||
IOMMU-isolated devices.
|
IOMMU-isolated devices.
|
||||||
|
|
||||||
Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
|
[bwh: Forward-ported to 4.10: adjust context]
|
||||||
---
|
---
|
||||||
drivers/pci/pci-sysfs.c | 9 +++++++++
|
drivers/pci/pci-sysfs.c | 9 +++++++++
|
||||||
drivers/pci/proc.c | 9 ++++++++-
|
drivers/pci/proc.c | 9 ++++++++-
|
||||||
|
@ -18,7 +19,7 @@ Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
|
|
||||||
--- a/drivers/pci/pci-sysfs.c
|
--- a/drivers/pci/pci-sysfs.c
|
||||||
+++ b/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;
|
loff_t init_off = off;
|
||||||
u8 *data = (u8 *) buf;
|
u8 *data = (u8 *) buf;
|
||||||
|
|
||||||
|
@ -28,7 +29,7 @@ Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
if (off > dev->cfg_size)
|
if (off > dev->cfg_size)
|
||||||
return 0;
|
return 0;
|
||||||
if (off + count > dev->cfg_size) {
|
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;
|
resource_size_t start, end;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -38,7 +39,7 @@ Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
for (i = 0; i < PCI_ROM_RESOURCE; i++)
|
for (i = 0; i < PCI_ROM_RESOURCE; i++)
|
||||||
if (res == &pdev->resource[i])
|
if (res == &pdev->resource[i])
|
||||||
break;
|
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,
|
struct bin_attribute *attr, char *buf,
|
||||||
loff_t off, size_t count)
|
loff_t off, size_t count)
|
||||||
{
|
{
|
||||||
|
@ -50,14 +51,14 @@ Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
|
|
||||||
--- a/drivers/pci/proc.c
|
--- a/drivers/pci/proc.c
|
||||||
+++ b/drivers/pci/proc.c
|
+++ b/drivers/pci/proc.c
|
||||||
@@ -11,6 +11,7 @@
|
@@ -12,6 +12,7 @@
|
||||||
#include <linux/proc_fs.h>
|
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/capability.h>
|
#include <linux/capability.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
+#include <linux/security.h>
|
+#include <linux/security.h>
|
||||||
#include <asm/uaccess.h>
|
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
#include "pci.h"
|
#include "pci.h"
|
||||||
|
|
||||||
@@ -116,6 +117,9 @@ static ssize_t proc_bus_pci_write(struct
|
@@ -116,6 +117,9 @@ static ssize_t proc_bus_pci_write(struct
|
||||||
int size = dev->cfg_size;
|
int size = dev->cfg_size;
|
||||||
int cnt;
|
int cnt;
|
||||||
|
@ -89,14 +90,14 @@ Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
/* Make sure the caller is mapping a real resource for this device */
|
/* Make sure the caller is mapping a real resource for this device */
|
||||||
--- a/drivers/pci/syscall.c
|
--- a/drivers/pci/syscall.c
|
||||||
+++ b/drivers/pci/syscall.c
|
+++ b/drivers/pci/syscall.c
|
||||||
@@ -10,6 +10,7 @@
|
@@ -11,6 +11,7 @@
|
||||||
#include <linux/errno.h>
|
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/syscalls.h>
|
#include <linux/syscalls.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
+#include <linux/security.h>
|
+#include <linux/security.h>
|
||||||
#include <asm/uaccess.h>
|
|
||||||
#include "pci.h"
|
#include "pci.h"
|
||||||
|
|
||||||
|
SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,
|
||||||
@@ -92,7 +93,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigne
|
@@ -92,7 +93,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigne
|
||||||
u32 dword;
|
u32 dword;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
|
@ -8,7 +8,7 @@ modification of the kernel at runtime. Prevent this if securelevel has been
|
||||||
set.
|
set.
|
||||||
|
|
||||||
Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
[bwh: Forward-ported to 4.9: adjust context]
|
[bwh: Forward-ported to 4.10: adjust context]
|
||||||
---
|
---
|
||||||
drivers/char/mem.c | 6 ++++++
|
drivers/char/mem.c | 6 ++++++
|
||||||
1 file changed, 6 insertions(+)
|
1 file changed, 6 insertions(+)
|
||||||
|
@ -25,13 +25,13 @@ Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
if (!valid_phys_addr_range(p, count))
|
if (!valid_phys_addr_range(p, count))
|
||||||
return -EFAULT;
|
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 */
|
char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
+ if (get_securelevel() > 0)
|
+ if (get_securelevel() > 0)
|
||||||
+ return -EPERM;
|
+ return -EPERM;
|
||||||
+
|
+
|
||||||
if (!pfn_valid(PFN_DOWN(p)))
|
if (p < (unsigned long) high_memory) {
|
||||||
return -EIO;
|
unsigned long to_write = min_t(unsigned long, count,
|
||||||
|
(unsigned long)high_memory - p);
|
||||||
|
|
|
@ -12,8 +12,6 @@ Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
kernel/power/user.c | 4 ++++
|
kernel/power/user.c | 4 ++++
|
||||||
1 file changed, 4 insertions(+)
|
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
|
--- a/kernel/power/user.c
|
||||||
+++ b/kernel/power/user.c
|
+++ b/kernel/power/user.c
|
||||||
@@ -24,6 +24,7 @@
|
@@ -24,6 +24,7 @@
|
||||||
|
@ -22,9 +20,9 @@ index 526e8911460a..40618bf41620 100644
|
||||||
#include <linux/freezer.h>
|
#include <linux/freezer.h>
|
||||||
+#include <linux/security.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())
|
if (!hibernation_available())
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
|
|
|
@ -1,207 +0,0 @@
|
||||||
From: Ashley Hughes <ashley.hughes@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@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@blueyonder.co.uk>
|
|
||||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
||||||
Signed-off-by: Gregory CLEMENT <gregory.clement@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@blueyonder.co.uk>
|
|
||||||
+ * Copyright (C) 2015, 2016
|
|
||||||
+ * Roger Shimizu <rogershimizu@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>;
|
|
||||||
+};
|
|
||||||
+
|
|
|
@ -1,376 +0,0 @@
|
||||||
From: Uwe Kleine-König <uwe@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@kleine-koenig.org>
|
|
||||||
Signed-off-by: Tomas Hlavacek <tmshlvck@gmail.com>
|
|
||||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
||||||
Signed-off-by: Gregory CLEMENT <gregory.clement@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@kleine-koenig.org>
|
|
||||||
+ * Copyright (C) 2016 Tomas Hlavacek <tmshlvkc@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@58000 {
|
|
||||||
+ status = "okay";
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ sata@a8000 {
|
|
||||||
+ status = "okay";
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ sdhci@d8000 {
|
|
||||||
+ pinctrl-names = "default";
|
|
||||||
+ pinctrl-0 = <&sdhci_pins>;
|
|
||||||
+ status = "okay";
|
|
||||||
+
|
|
||||||
+ bus-width = <8>;
|
|
||||||
+ no-1-8-v;
|
|
||||||
+ non-removable;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ usb3@f0000 {
|
|
||||||
+ status = "okay";
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ usb3@f8000 {
|
|
||||||
+ status = "okay";
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ pcie-controller {
|
|
||||||
+ status = "okay";
|
|
||||||
+
|
|
||||||
+ pcie@1,0 {
|
|
||||||
+ /* Port 0, Lane 0 */
|
|
||||||
+ status = "okay";
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ pcie@2,0 {
|
|
||||||
+ /* Port 1, Lane 0 */
|
|
||||||
+ status = "okay";
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ pcie@3,0 {
|
|
||||||
+ /* Port 2, Lane 0 */
|
|
||||||
+ status = "okay";
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+/* Connected to 88E6176 switch, port 6 */
|
|
||||||
+ð0 {
|
|
||||||
+ 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 */
|
|
||||||
+ð1 {
|
|
||||||
+ pinctrl-names = "default";
|
|
||||||
+ pinctrl-0 = <&ge1_rgmii_pins>;
|
|
||||||
+ status = "okay";
|
|
||||||
+ phy-mode = "rgmii-id";
|
|
||||||
+
|
|
||||||
+ fixed-link {
|
|
||||||
+ speed = <1000>;
|
|
||||||
+ full-duplex;
|
|
||||||
+ };
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+/* WAN port */
|
|
||||||
+ð2 {
|
|
||||||
+ status = "okay";
|
|
||||||
+ phy-mode = "sgmii";
|
|
||||||
+ phy = <&phy1>;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+&i2c0 {
|
|
||||||
+ pinctrl-names = "default";
|
|
||||||
+ pinctrl-0 = <&i2c0_pins>;
|
|
||||||
+ status = "okay";
|
|
||||||
+
|
|
||||||
+ i2cmux@70 {
|
|
||||||
+ compatible = "nxp,pca9547";
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <0x70>;
|
|
||||||
+ status = "okay";
|
|
||||||
+
|
|
||||||
+ i2c@0 {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <0>;
|
|
||||||
+
|
|
||||||
+ /* STM32F0 command interface at address 0x2a */
|
|
||||||
+ /* leds device (in STM32F0) at address 0x2b */
|
|
||||||
+
|
|
||||||
+ eeprom@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@1 {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <1>;
|
|
||||||
+
|
|
||||||
+ /* routed to PCIe0/mSATA connector (CN7A) */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ i2c@2 {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <2>;
|
|
||||||
+
|
|
||||||
+ /* routed to PCIe1/USB2 connector (CN61A) */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ i2c@3 {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <3>;
|
|
||||||
+
|
|
||||||
+ /* routed to PCIe2 connector (CN62A) */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ i2c@4 {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <4>;
|
|
||||||
+
|
|
||||||
+ /* routed to SFP+ */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ i2c@5 {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <5>;
|
|
||||||
+
|
|
||||||
+ /* ATSHA204A at address 0x64 */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ i2c@6 {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <6>;
|
|
||||||
+
|
|
||||||
+ /* exposed on pin header */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ i2c@7 {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ reg = <7>;
|
|
||||||
+
|
|
||||||
+ pcawan: gpio@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@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@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@0 {
|
|
||||||
+ reg = <0x0 0x00100000>;
|
|
||||||
+ label = "U-Boot";
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ partition@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";
|
|
||||||
+};
|
|
|
@ -19,16 +19,18 @@ version at boot time. Add a Kconfig parameter to set the default.
|
||||||
|
|
||||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
---
|
---
|
||||||
Documentation/kernel-parameters.txt | 4 ++++
|
Documentation/admin-guide/kernel-parameters.txt | 4 ++
|
||||||
arch/x86/Kconfig | 8 +++++++
|
arch/x86/Kconfig | 8 ++++
|
||||||
arch/x86/include/asm/elf.h | 8 ++++++-
|
arch/x86/entry/common.c | 16 ++++++++-
|
||||||
arch/x86/entry/entry_64.S | 36 ++++++++++++++++++++++---------
|
arch/x86/entry/entry_64.S | 18 +++++++++--
|
||||||
arch/x86/entry/syscall_64.c | 43 +++++++++++++++++++++++++++++++++++++
|
arch/x86/entry/syscall_64.c | 39 ++++++++++++++++++++++++
|
||||||
5 files changed, 88 insertions(+), 11 deletions(-)
|
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
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -4005,6 +4005,10 @@ bytes respectively. Such letter suffixes
|
@@ -3829,6 +3829,10 @@
|
||||||
|
|
||||||
switches= [HW,M68k]
|
switches= [HW,M68k]
|
||||||
|
|
||||||
|
@ -41,9 +43,9 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
on older distributions. When this option is enabled
|
on older distributions. When this option is enabled
|
||||||
--- a/arch/x86/Kconfig
|
--- a/arch/x86/Kconfig
|
||||||
+++ b/arch/x86/Kconfig
|
+++ b/arch/x86/Kconfig
|
||||||
@@ -2721,6 +2721,14 @@ config X86_X32
|
@@ -2757,6 +2757,14 @@ config COMPAT_32
|
||||||
elf32_x86_64 support enabled to compile a kernel with this
|
select HAVE_UID16
|
||||||
option set.
|
select OLD_SIGSUSPEND3
|
||||||
|
|
||||||
+config X86_X32_DISABLED
|
+config X86_X32_DISABLED
|
||||||
+ bool "x32 ABI disabled by default"
|
+ bool "x32 ABI disabled by default"
|
||||||
|
@ -77,7 +79,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
# error "The following code assumes __USER32_DS == __USER_DS"
|
# error "The following code assumes __USER32_DS == __USER_DS"
|
||||||
--- a/arch/x86/entry/entry_64.S
|
--- a/arch/x86/entry/entry_64.S
|
||||||
+++ b/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
|
#if __SYSCALL_MASK == ~0
|
||||||
cmpq $__NR_syscall_max, %rax
|
cmpq $__NR_syscall_max, %rax
|
||||||
#else
|
#else
|
||||||
|
@ -92,7 +94,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
#endif
|
#endif
|
||||||
ja 1f /* return -ENOSYS (already in pt_regs->ax) */
|
ja 1f /* return -ENOSYS (already in pt_regs->ax) */
|
||||||
movq %r10, %rcx
|
movq %r10, %rcx
|
||||||
@@ -331,6 +335,16 @@ opportunistic_sysret_failed:
|
@@ -326,6 +330,16 @@ opportunistic_sysret_failed:
|
||||||
jmp restore_c_regs_and_iret
|
jmp restore_c_regs_and_iret
|
||||||
END(entry_SYSCALL_64)
|
END(entry_SYSCALL_64)
|
||||||
|
|
||||||
|
|
|
@ -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/mips/MIPS-octeon-Add-support-for-the-UBNT-E200-board.patch
|
||||||
features/x86/x86-memtest-WARN-if-bad-RAM-found.patch
|
features/x86/x86-memtest-WARN-if-bad-RAM-found.patch
|
||||||
features/x86/x86-make-x32-syscall-support-conditional.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-turris-omnia-add-support-for-ethernet-switch.patch
|
||||||
features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch
|
|
||||||
|
|
||||||
# Miscellaneous bug fixes
|
# Miscellaneous bug fixes
|
||||||
bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch
|
bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch
|
||||||
bugfix/all/disable-some-marvell-phys.patch
|
bugfix/all/disable-some-marvell-phys.patch
|
||||||
bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.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/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
|
bugfix/all/partially-revert-usb-kconfig-using-select-for-usb_co.patch
|
||||||
|
|
||||||
# Miscellaneous features
|
# Miscellaneous features
|
||||||
|
@ -116,7 +112,6 @@ bugfix/all/lockdep-fix-soname.patch
|
||||||
bugfix/all/tools-perf-remove-shebangs.patch
|
bugfix/all/tools-perf-remove-shebangs.patch
|
||||||
bugfix/all/tools-lib-traceevent-use-ldflags.patch
|
bugfix/all/tools-lib-traceevent-use-ldflags.patch
|
||||||
bugfix/all/tools-lib-lockdep-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/x86/revert-perf-build-fix-libunwind-feature-detection-on.patch
|
||||||
bugfix/alpha/alpha-uapi-add-support-for-__sane_userspace_types__.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
|
bugfix/all/tools-build-remove-bpf-run-time-check-at-build-time.patch
|
||||||
|
|
Loading…
Reference in New Issue