Merge branch 'f22' of ssh://pkgs.fedoraproject.org/kernel into f22-pf - Linux v4.0.7
This commit is contained in:
commit
8d24eb8e8d
|
@ -1,64 +0,0 @@
|
|||
From 9983ea5b8ff57286d625787ee8fd6ce5df430fbc Mon Sep 17 00:00:00 2001
|
||||
From: Laura Abbott <labbott@fedoraproject.org>
|
||||
Date: Wed, 13 May 2015 17:03:06 -0700
|
||||
Subject: [PATCH] n_tty: Fix auditing support for cannonical mode
|
||||
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
To: Jiri Slaby <jslaby@suse.cz>
|
||||
To: Peter Hurley <peter@hurleysoftware.com>
|
||||
To: Andy Lutomirski <luto@amacapital.net>
|
||||
Cc: linux-kernel@vger.kernel.org
|
||||
|
||||
Commit 32f13521ca68bc624ff6effc77f308a52b038bf0
|
||||
("n_tty: Line copy to user buffer in canonical mode")
|
||||
changed cannonical mode copying to use copy_to_user
|
||||
but missed adding the call to the audit framework.
|
||||
Add in the appropriate functions to get audit support.
|
||||
|
||||
Fixes: 32f13521ca68 ("n_tty: Line copy to user buffer in canonical mode")
|
||||
Reported-by: Miloslav Trmač <mitr@redhat.com>
|
||||
Signed-off-by: Laura Abbott <labbott@fedoraproject.org>
|
||||
---
|
||||
drivers/tty/n_tty.c | 17 ++++++++++++++---
|
||||
1 file changed, 14 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
|
||||
index cf6e0f2..1a3d39b 100644
|
||||
--- a/drivers/tty/n_tty.c
|
||||
+++ b/drivers/tty/n_tty.c
|
||||
@@ -162,6 +162,17 @@ static inline int tty_put_user(struct tty_struct *tty, unsigned char x,
|
||||
return put_user(x, ptr);
|
||||
}
|
||||
|
||||
+static inline int tty_copy_to_user(struct tty_struct *tty,
|
||||
+ void __user *to,
|
||||
+ const void *from,
|
||||
+ unsigned long n)
|
||||
+{
|
||||
+ struct n_tty_data *ldata = tty->disc_data;
|
||||
+
|
||||
+ tty_audit_add_data(tty, to, n, ldata->icanon);
|
||||
+ return copy_to_user(to, from, n);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* n_tty_kick_worker - start input worker (if required)
|
||||
* @tty: terminal
|
||||
@@ -2072,12 +2083,12 @@ static int canon_copy_from_read_buf(struct tty_struct *tty,
|
||||
__func__, eol, found, n, c, size, more);
|
||||
|
||||
if (n > size) {
|
||||
- ret = copy_to_user(*b, read_buf_addr(ldata, tail), size);
|
||||
+ ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), size);
|
||||
if (ret)
|
||||
return -EFAULT;
|
||||
- ret = copy_to_user(*b + size, ldata->read_buf, n - size);
|
||||
+ ret = tty_copy_to_user(tty, *b + size, ldata->read_buf, n - size);
|
||||
} else
|
||||
- ret = copy_to_user(*b, read_buf_addr(ldata, tail), n);
|
||||
+ ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), n);
|
||||
|
||||
if (ret)
|
||||
return -EFAULT;
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,126 +0,0 @@
|
|||
From: Filipe Manana <fdmanana@suse.com>
|
||||
Date: Tue, 31 Mar 2015 14:56:46 +0100
|
||||
Subject: [PATCH] Btrfs: fix range cloning when same inode used as source and
|
||||
destination
|
||||
|
||||
While searching for extents to clone we might find one where we only use
|
||||
a part of it coming from its tail. If our destination inode is the same
|
||||
the source inode, we end up removing the tail part of the extent item and
|
||||
insert after a new one that point to the same extent with an adjusted
|
||||
key file offset and data offset. After this we search for the next extent
|
||||
item in the fs/subvol tree with a key that has an offset incremented by
|
||||
one. But this second search leaves us at the new extent item we inserted
|
||||
previously, and since that extent item has a non-zero data offset, it
|
||||
it can make us call btrfs_drop_extents with an empty range (start == end)
|
||||
which causes the following warning:
|
||||
|
||||
[23978.537119] WARNING: CPU: 6 PID: 16251 at fs/btrfs/file.c:550 btrfs_drop_extent_cache+0x43/0x385 [btrfs]()
|
||||
(...)
|
||||
[23978.557266] Call Trace:
|
||||
[23978.557978] [<ffffffff81425fd9>] dump_stack+0x4c/0x65
|
||||
[23978.559191] [<ffffffff81045390>] warn_slowpath_common+0xa1/0xbb
|
||||
[23978.560699] [<ffffffffa047f0ea>] ? btrfs_drop_extent_cache+0x43/0x385 [btrfs]
|
||||
[23978.562389] [<ffffffff8104544d>] warn_slowpath_null+0x1a/0x1c
|
||||
[23978.563613] [<ffffffffa047f0ea>] btrfs_drop_extent_cache+0x43/0x385 [btrfs]
|
||||
[23978.565103] [<ffffffff810e3a18>] ? time_hardirqs_off+0x15/0x28
|
||||
[23978.566294] [<ffffffff81079ff8>] ? trace_hardirqs_off+0xd/0xf
|
||||
[23978.567438] [<ffffffffa047f73d>] __btrfs_drop_extents+0x6b/0x9e1 [btrfs]
|
||||
[23978.568702] [<ffffffff8107c03f>] ? trace_hardirqs_on+0xd/0xf
|
||||
[23978.569763] [<ffffffff811441c0>] ? ____cache_alloc+0x69/0x2eb
|
||||
[23978.570817] [<ffffffff81142269>] ? virt_to_head_page+0x9/0x36
|
||||
[23978.571872] [<ffffffff81143c15>] ? cache_alloc_debugcheck_after.isra.42+0x16c/0x1cb
|
||||
[23978.573466] [<ffffffff811420d5>] ? kmemleak_alloc_recursive.constprop.52+0x16/0x18
|
||||
[23978.574962] [<ffffffffa0480d07>] btrfs_drop_extents+0x66/0x7f [btrfs]
|
||||
[23978.576179] [<ffffffffa049aa35>] btrfs_clone+0x516/0xaf5 [btrfs]
|
||||
[23978.577311] [<ffffffffa04983dc>] ? lock_extent_range+0x7b/0xcd [btrfs]
|
||||
[23978.578520] [<ffffffffa049b2a2>] btrfs_ioctl_clone+0x28e/0x39f [btrfs]
|
||||
[23978.580282] [<ffffffffa049d9ae>] btrfs_ioctl+0xb51/0x219a [btrfs]
|
||||
(...)
|
||||
[23978.591887] ---[ end trace 988ec2a653d03ed3 ]---
|
||||
|
||||
Then we attempt to insert a new extent item with a key that already
|
||||
exists, which makes btrfs_insert_empty_item return -EEXIST resulting in
|
||||
abortion of the current transaction:
|
||||
|
||||
[23978.594355] WARNING: CPU: 6 PID: 16251 at fs/btrfs/super.c:260 __btrfs_abort_transaction+0x52/0x114 [btrfs]()
|
||||
(...)
|
||||
[23978.622589] Call Trace:
|
||||
[23978.623181] [<ffffffff81425fd9>] dump_stack+0x4c/0x65
|
||||
[23978.624359] [<ffffffff81045390>] warn_slowpath_common+0xa1/0xbb
|
||||
[23978.625573] [<ffffffffa044ab6c>] ? __btrfs_abort_transaction+0x52/0x114 [btrfs]
|
||||
[23978.626971] [<ffffffff810453f0>] warn_slowpath_fmt+0x46/0x48
|
||||
[23978.628003] [<ffffffff8108a6c8>] ? vprintk_default+0x1d/0x1f
|
||||
[23978.629138] [<ffffffffa044ab6c>] __btrfs_abort_transaction+0x52/0x114 [btrfs]
|
||||
[23978.630528] [<ffffffffa049ad1b>] btrfs_clone+0x7fc/0xaf5 [btrfs]
|
||||
[23978.631635] [<ffffffffa04983dc>] ? lock_extent_range+0x7b/0xcd [btrfs]
|
||||
[23978.632886] [<ffffffffa049b2a2>] btrfs_ioctl_clone+0x28e/0x39f [btrfs]
|
||||
[23978.634119] [<ffffffffa049d9ae>] btrfs_ioctl+0xb51/0x219a [btrfs]
|
||||
(...)
|
||||
[23978.647714] ---[ end trace 988ec2a653d03ed4 ]---
|
||||
|
||||
This is wrong because we should not process the extent item that we just
|
||||
inserted previously, and instead process the extent item that follows it
|
||||
in the tree
|
||||
|
||||
For example for the test case I wrote for fstests:
|
||||
|
||||
bs=$((64 * 1024))
|
||||
mkfs.btrfs -f -l $bs -O ^no-holes /dev/sdc
|
||||
mount /dev/sdc /mnt
|
||||
|
||||
xfs_io -f -c "pwrite -S 0xaa $(($bs * 2)) $(($bs * 2))" /mnt/foo
|
||||
|
||||
$CLONER_PROG -s $((3 * $bs)) -d $((267 * $bs)) -l 0 /mnt/foo /mnt/foo
|
||||
$CLONER_PROG -s $((217 * $bs)) -d $((95 * $bs)) -l 0 /mnt/foo /mnt/foo
|
||||
|
||||
The second clone call fails with -EEXIST, because when we process the
|
||||
first extent item (offset 262144), we drop part of it (counting from the
|
||||
end) and then insert a new extent item with a key greater then the key we
|
||||
found. The next time we search the tree we search for a key with offset
|
||||
262144 + 1, which leaves us at the new extent item we have just inserted
|
||||
but we think it refers to an extent that we need to clone.
|
||||
|
||||
Fix this by ensuring the next search key uses an offset corresponding to
|
||||
the offset of the key we found previously plus the data length of the
|
||||
corresponding extent item. This ensures we skip new extent items that we
|
||||
inserted and works for the case of implicit holes too (NO_HOLES feature).
|
||||
|
||||
A test case for fstests follows soon.
|
||||
|
||||
Signed-off-by: Filipe Manana <fdmanana@suse.com>
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
---
|
||||
fs/btrfs/ioctl.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
|
||||
index 2b4c5423672d..d79c599240a7 100644
|
||||
--- a/fs/btrfs/ioctl.c
|
||||
+++ b/fs/btrfs/ioctl.c
|
||||
@@ -3206,6 +3206,8 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
|
||||
key.offset = off;
|
||||
|
||||
while (1) {
|
||||
+ u64 next_key_min_offset;
|
||||
+
|
||||
/*
|
||||
* note the key will change type as we walk through the
|
||||
* tree.
|
||||
@@ -3286,7 +3288,7 @@ process_slot:
|
||||
} else if (key.offset >= off + len) {
|
||||
break;
|
||||
}
|
||||
-
|
||||
+ next_key_min_offset = key.offset + datal;
|
||||
size = btrfs_item_size_nr(leaf, slot);
|
||||
read_extent_buffer(leaf, buf,
|
||||
btrfs_item_ptr_offset(leaf, slot),
|
||||
@@ -3501,7 +3503,7 @@ process_slot:
|
||||
break;
|
||||
}
|
||||
btrfs_release_path(path);
|
||||
- key.offset++;
|
||||
+ key.offset = next_key_min_offset;
|
||||
}
|
||||
ret = 0;
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
From: Chris Mason <clm@fb.com>
|
||||
Date: Thu, 11 Jun 2015 18:06:51 +0200
|
||||
Subject: [PATCH] Btrfs: fix regression in raid level conversion
|
||||
|
||||
Commit 2f0810880f082fa8ba66ab2c33b02e4ff9770a5e changed
|
||||
btrfs_set_block_group_ro to avoid trying to allocate new chunks with the
|
||||
new raid profile during conversion. This fixed failures when there was
|
||||
no space on the drive to allocate a new chunk, but the metadata
|
||||
reserves were sufficient to continue the conversion.
|
||||
|
||||
But this ended up causing a regression when the drive had plenty of
|
||||
space to allocate new chunks, mostly because reduce_alloc_profile isn't
|
||||
using the new raid profile.
|
||||
|
||||
Fixing btrfs_reduce_alloc_profile is a bigger patch. For now, do a
|
||||
partial revert of 2f0810880, and don't error out if we hit ENOSPC.
|
||||
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
Tested-by: Dave Sterba <dsterba@suse.cz>
|
||||
Reported-by: Holger Hoffstaette <holger.hoffstaette@googlemail.com>
|
||||
[adapted for stable kernel branch, v4.0.5]
|
||||
Signed-off-by: David Sterba <dsterba@suse.cz>
|
||||
---
|
||||
fs/btrfs/extent-tree.c | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
|
||||
index 8b33da6ec3dd..63be2a96ed6a 100644
|
||||
--- a/fs/btrfs/extent-tree.c
|
||||
+++ b/fs/btrfs/extent-tree.c
|
||||
@@ -8535,6 +8535,24 @@ int btrfs_set_block_group_ro(struct btrfs_root *root,
|
||||
trans = btrfs_join_transaction(root);
|
||||
if (IS_ERR(trans))
|
||||
return PTR_ERR(trans);
|
||||
+ /*
|
||||
+ * if we are changing raid levels, try to allocate a corresponding
|
||||
+ * block group with the new raid level.
|
||||
+ */
|
||||
+ alloc_flags = update_block_group_flags(root, cache->flags);
|
||||
+ if (alloc_flags != cache->flags) {
|
||||
+ ret = do_chunk_alloc(trans, root, alloc_flags,
|
||||
+ CHUNK_ALLOC_FORCE);
|
||||
+ /*
|
||||
+ * ENOSPC is allowed here, we may have enough space
|
||||
+ * already allocated at the new raid level to
|
||||
+ * carry on
|
||||
+ */
|
||||
+ if (ret == -ENOSPC)
|
||||
+ ret = 0;
|
||||
+ if (ret < 0)
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
ret = set_block_group_ro(cache, 0);
|
||||
if (!ret)
|
|
@ -1,26 +0,0 @@
|
|||
From: Chris Mason <clm@fb.com>
|
||||
Date: Sat, 11 Apr 2015 05:09:06 -0700
|
||||
Subject: [PATCH] Btrfs: fix uninit variable in clone ioctl
|
||||
|
||||
Commit 0d97a64e0 creates a new variable but doesn't always set it up.
|
||||
This puts it back to the original method (key.offset + 1) for the cases
|
||||
not covered by Filipe's new logic.
|
||||
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
---
|
||||
fs/btrfs/ioctl.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
|
||||
index d79c599240a7..64e8fb639f72 100644
|
||||
--- a/fs/btrfs/ioctl.c
|
||||
+++ b/fs/btrfs/ioctl.c
|
||||
@@ -3206,7 +3206,7 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
|
||||
key.offset = off;
|
||||
|
||||
while (1) {
|
||||
- u64 next_key_min_offset;
|
||||
+ u64 next_key_min_offset = key.offset + 1;
|
||||
|
||||
/*
|
||||
* note the key will change type as we walk through the
|
|
@ -1,29 +0,0 @@
|
|||
From: Filipe Manana <fdmanana@suse.com>
|
||||
Date: Mon, 2 Mar 2015 20:53:52 +0000
|
||||
Subject: [PATCH] Btrfs: send, add missing check for dead clone root
|
||||
|
||||
After we locked the root's root item, a concurrent snapshot deletion
|
||||
call might have set the dead flag on it. So check if the dead flag
|
||||
is set and abort if it is, just like we do for the parent root.
|
||||
|
||||
Signed-off-by: Filipe Manana <fdmanana@suse.com>
|
||||
Reviewed-by: David Sterba <dsterba@suse.cz>
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
---
|
||||
fs/btrfs/send.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
|
||||
index d6033f540cc7..6ec28f13659e 100644
|
||||
--- a/fs/btrfs/send.c
|
||||
+++ b/fs/btrfs/send.c
|
||||
@@ -5855,7 +5855,8 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
|
||||
clone_sources_to_rollback = i + 1;
|
||||
spin_lock(&clone_root->root_item_lock);
|
||||
clone_root->send_in_progress++;
|
||||
- if (!btrfs_root_readonly(clone_root)) {
|
||||
+ if (!btrfs_root_readonly(clone_root) ||
|
||||
+ btrfs_root_dead(clone_root)) {
|
||||
spin_unlock(&clone_root->root_item_lock);
|
||||
srcu_read_unlock(&fs_info->subvol_srcu, index);
|
||||
ret = -EPERM;
|
|
@ -1,58 +0,0 @@
|
|||
From: Filipe Manana <fdmanana@suse.com>
|
||||
Date: Mon, 2 Mar 2015 20:53:53 +0000
|
||||
Subject: [PATCH] Btrfs: send, don't leave without decrementing clone root's
|
||||
send_progress
|
||||
|
||||
If the clone root was not readonly or the dead flag was set on it, we were
|
||||
leaving without decrementing the root's send_progress counter (and before
|
||||
we just incremented it). If a concurrent snapshot deletion was in progress
|
||||
and ended up being aborted, it would be impossible to later attempt to
|
||||
delete again the snapshot, since the root's send_in_progress counter could
|
||||
never go back to 0.
|
||||
|
||||
We were also setting clone_sources_to_rollback to i + 1 too early - if we
|
||||
bailed out because the clone root we got is not readonly or flagged as dead
|
||||
we ended up later derreferencing a null pointer because we didn't assign
|
||||
the clone root to sctx->clone_roots[i].root:
|
||||
|
||||
for (i = 0; sctx && i < clone_sources_to_rollback; i++)
|
||||
btrfs_root_dec_send_in_progress(
|
||||
sctx->clone_roots[i].root);
|
||||
|
||||
So just don't increment the send_in_progress counter if the root is readonly
|
||||
or flagged as dead.
|
||||
|
||||
Signed-off-by: Filipe Manana <fdmanana@suse.com>
|
||||
Reviewed-by: David Sterba <dsterba@suse.cz>
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
---
|
||||
fs/btrfs/send.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
|
||||
index 6ec28f13659e..571de5a08fe7 100644
|
||||
--- a/fs/btrfs/send.c
|
||||
+++ b/fs/btrfs/send.c
|
||||
@@ -5852,9 +5852,7 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
|
||||
ret = PTR_ERR(clone_root);
|
||||
goto out;
|
||||
}
|
||||
- clone_sources_to_rollback = i + 1;
|
||||
spin_lock(&clone_root->root_item_lock);
|
||||
- clone_root->send_in_progress++;
|
||||
if (!btrfs_root_readonly(clone_root) ||
|
||||
btrfs_root_dead(clone_root)) {
|
||||
spin_unlock(&clone_root->root_item_lock);
|
||||
@@ -5862,10 +5860,12 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
|
||||
ret = -EPERM;
|
||||
goto out;
|
||||
}
|
||||
+ clone_root->send_in_progress++;
|
||||
spin_unlock(&clone_root->root_item_lock);
|
||||
srcu_read_unlock(&fs_info->subvol_srcu, index);
|
||||
|
||||
sctx->clone_roots[i].root = clone_root;
|
||||
+ clone_sources_to_rollback = i + 1;
|
||||
}
|
||||
vfree(clone_sources_tmp);
|
||||
clone_sources_tmp = NULL;
|
|
@ -0,0 +1,44 @@
|
|||
From: Andrew Duggan <aduggan@synaptics.com>
|
||||
Date: Tue, 16 Jun 2015 14:08:41 -0700
|
||||
Subject: [PATCH] HID: rmi: Disable populating F30 when the touchpad has
|
||||
physical buttons
|
||||
|
||||
Physical buttons do not use F30 to report their state and in some cases the
|
||||
data reported in F30 is incorrect and inconsistent with what is reported by
|
||||
the HID descriptor. When physical buttons are present, ignore F30 and let
|
||||
hid-input report buttons based on what is defined in the HID descriptor.
|
||||
|
||||
Signed-off-by: Andrew Duggan <aduggan@synaptics.com>
|
||||
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
---
|
||||
drivers/hid/hid-rmi.c | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
|
||||
index 49d4fe4f5987..702aafe30d11 100644
|
||||
--- a/drivers/hid/hid-rmi.c
|
||||
+++ b/drivers/hid/hid-rmi.c
|
||||
@@ -850,6 +850,7 @@ static int rmi_populate_f30(struct hid_device *hdev)
|
||||
|
||||
static int rmi_populate(struct hid_device *hdev)
|
||||
{
|
||||
+ struct rmi_data *data = hid_get_drvdata(hdev);
|
||||
int ret;
|
||||
|
||||
ret = rmi_scan_pdt(hdev);
|
||||
@@ -864,9 +865,11 @@ static int rmi_populate(struct hid_device *hdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
- ret = rmi_populate_f30(hdev);
|
||||
- if (ret)
|
||||
- hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
|
||||
+ if (!(data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS)) {
|
||||
+ ret = rmi_populate_f30(hdev);
|
||||
+ if (ret)
|
||||
+ hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Mon, 8 Jun 2015 10:17:32 -0700
|
||||
Subject: [PATCH] Input: synaptics - add min/max quirk for Lenovo S540
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1223051#c2
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Tested-by: tommy.gagnes@gmail.com
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index 3b06c8a360b6..907ac9bdd763 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -148,6 +148,11 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
|
||||
1024, 5112, 2024, 4832
|
||||
},
|
||||
{
|
||||
+ (const char * const []){"LEN2000", NULL},
|
||||
+ {ANY_BOARD_ID, ANY_BOARD_ID},
|
||||
+ 1024, 5113, 2021, 4832
|
||||
+ },
|
||||
+ {
|
||||
(const char * const []){"LEN2001", NULL},
|
||||
{ANY_BOARD_ID, ANY_BOARD_ID},
|
||||
1024, 5022, 2508, 4832
|
||||
@@ -188,7 +193,7 @@ static const char * const topbuttonpad_pnp_ids[] = {
|
||||
"LEN0045",
|
||||
"LEN0047",
|
||||
"LEN0049",
|
||||
- "LEN2000",
|
||||
+ "LEN2000", /* S540 */
|
||||
"LEN2001", /* Edge E431 */
|
||||
"LEN2002", /* Edge E531 */
|
||||
"LEN2003",
|
|
@ -43,7 +43,7 @@ Signed-off-by: Josh Stone <jistone@redhat.com>
|
|||
2 files changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 1880cf77059b..f8fb68beeba5 100644
|
||||
index af6da040b952..2796a22bb0a4 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -706,7 +706,11 @@ KBUILD_CFLAGS += -fomit-frame-pointer
|
||||
|
|
|
@ -9,7 +9,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
|||
1 file changed, 21 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
index 9688dda39e7a..8e3e77f3121f 100644
|
||||
index 853079eb0080..645302a6ada4 100644
|
||||
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
@@ -109,6 +109,27 @@
|
||||
|
|
|
@ -8,7 +8,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
|||
1 file changed, 39 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
index c3255e0c90aa..1fd496fe1a68 100644
|
||||
index dbb3f4d2bf84..b2e14381dd1c 100644
|
||||
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
@@ -81,6 +81,13 @@
|
||||
|
|
|
@ -9,7 +9,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
|||
1 file changed, 222 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
index 1fd496fe1a68..9688dda39e7a 100644
|
||||
index b2e14381dd1c..853079eb0080 100644
|
||||
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
@@ -95,6 +95,20 @@
|
||||
|
@ -222,7 +222,7 @@ index 1fd496fe1a68..9688dda39e7a 100644
|
|||
/include/ "tps65217.dtsi"
|
||||
|
||||
&tps {
|
||||
@@ -347,4 +529,44 @@
|
||||
@@ -366,4 +548,44 @@
|
||||
|
||||
&sham {
|
||||
status = "okay";
|
||||
|
|
|
@ -1,117 +0,0 @@
|
|||
From: NeilBrown <neilb@suse.de>
|
||||
Date: Tue, 19 May 2015 15:58:37 +1000
|
||||
Subject: [PATCH] block: discard bdi_unregister() in favour of bdi_destroy()
|
||||
|
||||
bdi_unregister() now contains very little functionality.
|
||||
|
||||
It contains a "WARN_ON" if bdi->dev is NULL. This warning is of no
|
||||
real consequence as bdi->dev isn't needed by anything else in the function,
|
||||
and it triggers if
|
||||
blk_cleanup_queue() -> bdi_destroy()
|
||||
is called before bdi_unregister, which happens since
|
||||
Commit: 6cd18e711dd8 ("block: destroy bdi before blockdev is unregistered.")
|
||||
|
||||
So this isn't wanted.
|
||||
|
||||
It also calls bdi_set_min_ratio(). This needs to be called after
|
||||
writes through the bdi have all been flushed, and before the bdi is destroyed.
|
||||
Calling it early is better than calling it late as it frees up a global
|
||||
resource.
|
||||
|
||||
Calling it immediately after bdi_wb_shutdown() in bdi_destroy()
|
||||
perfectly fits these requirements.
|
||||
|
||||
So bdi_unregister() can be discarded with the important content moved to
|
||||
bdi_destroy(), as can the
|
||||
writeback_bdi_unregister
|
||||
event which is already not used.
|
||||
|
||||
Reported-by: Mike Snitzer <snitzer@redhat.com>
|
||||
Cc: stable@vger.kernel.org (v4.0)
|
||||
Fixes: c4db59d31e39 ("fs: don't reassign dirty inodes to default_backing_dev_info")
|
||||
Fixes: 6cd18e711dd8 ("block: destroy bdi before blockdev is unregistered.")
|
||||
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
||||
Acked-by: Dan Williams <dan.j.williams@intel.com>
|
||||
Tested-by: Nicholas Moulin <nicholas.w.moulin@linux.intel.com>
|
||||
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
---
|
||||
block/genhd.c | 1 -
|
||||
include/linux/backing-dev.h | 1 -
|
||||
include/trace/events/writeback.h | 1 -
|
||||
mm/backing-dev.c | 18 +-----------------
|
||||
4 files changed, 1 insertion(+), 20 deletions(-)
|
||||
|
||||
diff --git a/block/genhd.c b/block/genhd.c
|
||||
index 0a536dc05f3b..666e11b83983 100644
|
||||
--- a/block/genhd.c
|
||||
+++ b/block/genhd.c
|
||||
@@ -653,7 +653,6 @@ void del_gendisk(struct gendisk *disk)
|
||||
disk->flags &= ~GENHD_FL_UP;
|
||||
|
||||
sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
|
||||
- bdi_unregister(&disk->queue->backing_dev_info);
|
||||
blk_unregister_queue(disk);
|
||||
blk_unregister_region(disk_devt(disk), disk->minors);
|
||||
|
||||
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
|
||||
index aff923ae8c4b..d87d8eced064 100644
|
||||
--- a/include/linux/backing-dev.h
|
||||
+++ b/include/linux/backing-dev.h
|
||||
@@ -116,7 +116,6 @@ __printf(3, 4)
|
||||
int bdi_register(struct backing_dev_info *bdi, struct device *parent,
|
||||
const char *fmt, ...);
|
||||
int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
|
||||
-void bdi_unregister(struct backing_dev_info *bdi);
|
||||
int __must_check bdi_setup_and_register(struct backing_dev_info *, char *);
|
||||
void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
|
||||
enum wb_reason reason);
|
||||
diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h
|
||||
index 5a14ead59696..885d3a380451 100644
|
||||
--- a/include/trace/events/writeback.h
|
||||
+++ b/include/trace/events/writeback.h
|
||||
@@ -233,7 +233,6 @@ DEFINE_EVENT(writeback_class, name, \
|
||||
DEFINE_WRITEBACK_EVENT(writeback_nowork);
|
||||
DEFINE_WRITEBACK_EVENT(writeback_wake_background);
|
||||
DEFINE_WRITEBACK_EVENT(writeback_bdi_register);
|
||||
-DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister);
|
||||
|
||||
DECLARE_EVENT_CLASS(wbc_class,
|
||||
TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi),
|
||||
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
|
||||
index 6dc4580df2af..000e7b3b9896 100644
|
||||
--- a/mm/backing-dev.c
|
||||
+++ b/mm/backing-dev.c
|
||||
@@ -359,23 +359,6 @@ static void bdi_wb_shutdown(struct backing_dev_info *bdi)
|
||||
flush_delayed_work(&bdi->wb.dwork);
|
||||
}
|
||||
|
||||
-/*
|
||||
- * Called when the device behind @bdi has been removed or ejected.
|
||||
- *
|
||||
- * We can't really do much here except for reducing the dirty ratio at
|
||||
- * the moment. In the future we should be able to set a flag so that
|
||||
- * the filesystem can handle errors at mark_inode_dirty time instead
|
||||
- * of only at writeback time.
|
||||
- */
|
||||
-void bdi_unregister(struct backing_dev_info *bdi)
|
||||
-{
|
||||
- if (WARN_ON_ONCE(!bdi->dev))
|
||||
- return;
|
||||
-
|
||||
- bdi_set_min_ratio(bdi, 0);
|
||||
-}
|
||||
-EXPORT_SYMBOL(bdi_unregister);
|
||||
-
|
||||
static void bdi_wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi)
|
||||
{
|
||||
memset(wb, 0, sizeof(*wb));
|
||||
@@ -443,6 +426,7 @@ void bdi_destroy(struct backing_dev_info *bdi)
|
||||
int i;
|
||||
|
||||
bdi_wb_shutdown(bdi);
|
||||
+ bdi_set_min_ratio(bdi, 0);
|
||||
|
||||
WARN_ON(!list_empty(&bdi->work_list));
|
||||
WARN_ON(delayed_work_pending(&bdi->wb.dwork));
|
|
@ -1,38 +0,0 @@
|
|||
From: Jeff Mahoney <jeffm@suse.com>
|
||||
Date: Fri, 20 Mar 2015 14:02:09 -0400
|
||||
Subject: [PATCH] btrfs: cleanup orphans while looking up default subvolume
|
||||
|
||||
Orphans in the fs tree are cleaned up via open_ctree and subvolume
|
||||
orphans are cleaned via btrfs_lookup_dentry -- except when a default
|
||||
subvolume is in use. The name for the default subvolume uses a manual
|
||||
lookup that doesn't trigger orphan cleanup and needs to trigger it
|
||||
manually as well. This doesn't apply to the remount case since the
|
||||
subvolumes are cleaned up by walking the root radix tree.
|
||||
|
||||
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
|
||||
Reviewed-by: David Sterba <dsterba@suse.cz>
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
---
|
||||
fs/btrfs/super.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
|
||||
index 05fef198ff94..e477ed67a49a 100644
|
||||
--- a/fs/btrfs/super.c
|
||||
+++ b/fs/btrfs/super.c
|
||||
@@ -901,6 +901,15 @@ find_root:
|
||||
if (IS_ERR(new_root))
|
||||
return ERR_CAST(new_root);
|
||||
|
||||
+ if (!(sb->s_flags & MS_RDONLY)) {
|
||||
+ int ret;
|
||||
+ down_read(&fs_info->cleanup_work_sem);
|
||||
+ ret = btrfs_orphan_cleanup(new_root);
|
||||
+ up_read(&fs_info->cleanup_work_sem);
|
||||
+ if (ret)
|
||||
+ return ERR_PTR(ret);
|
||||
+ }
|
||||
+
|
||||
dir_id = btrfs_root_dirid(&new_root->root_item);
|
||||
setup_root:
|
||||
location.objectid = dir_id;
|
|
@ -1,34 +0,0 @@
|
|||
From: Chengyu Song <csong84@gatech.edu>
|
||||
Date: Tue, 24 Mar 2015 18:12:56 -0400
|
||||
Subject: [PATCH] btrfs: incorrect handling for fiemap_fill_next_extent return
|
||||
|
||||
fiemap_fill_next_extent returns 0 on success, -errno on error, 1 if this was
|
||||
the last extent that will fit in user array. If 1 is returned, the return
|
||||
value may eventually returned to user space, which should not happen, according
|
||||
to manpage of ioctl.
|
||||
|
||||
Signed-off-by: Chengyu Song <csong84@gatech.edu>
|
||||
Reviewed-by: David Sterba <dsterba@suse.cz>
|
||||
Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
---
|
||||
fs/btrfs/extent_io.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
|
||||
index d688cfe5d496..782f3bc4651d 100644
|
||||
--- a/fs/btrfs/extent_io.c
|
||||
+++ b/fs/btrfs/extent_io.c
|
||||
@@ -4514,8 +4514,11 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
||||
}
|
||||
ret = fiemap_fill_next_extent(fieinfo, em_start, disko,
|
||||
em_len, flags);
|
||||
- if (ret)
|
||||
+ if (ret) {
|
||||
+ if (ret == 1)
|
||||
+ ret = 0;
|
||||
goto out_free;
|
||||
+ }
|
||||
}
|
||||
out_free:
|
||||
free_extent_map(em);
|
|
@ -90,7 +90,7 @@ index 2a8ddfd12a5b..452ca53561fe 100644
|
|||
cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
|
||||
|
||||
diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
|
||||
index 7b9be9822724..c4c5d4ae3dad 100644
|
||||
index 8533c96bab13..b466047c2f53 100644
|
||||
--- a/arch/x86/vdso/Makefile
|
||||
+++ b/arch/x86/vdso/Makefile
|
||||
@@ -172,8 +172,9 @@ $(vdso32-images:%=$(obj)/%.dbg): $(obj)/vdso32-%.so.dbg: FORCE \
|
||||
|
|
57
kernel.spec
57
kernel.spec
|
@ -691,9 +691,6 @@ Patch26215: HID-lenovo-set-INPUT_PROP_POINTING_STICK.patch
|
|||
#rhbz 1218882
|
||||
Patch26216: 0001-target-use-vfs_iter_read-write-in-fd_do_rw.patch
|
||||
|
||||
#rhbz 1188695
|
||||
Patch26218: 0001-n_tty-Fix-auditing-support-for-cannonical-mode.patch
|
||||
|
||||
#rhbz 1133378
|
||||
Patch26219: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
|
||||
|
||||
|
@ -703,24 +700,6 @@ Patch26220: 0001-mwifiex-use-del_timer-variant-in-interrupt-context.patch
|
|||
#rhbz 1226743
|
||||
Patch26221: drm-i915-turn-off-wc-mmaps.patch
|
||||
|
||||
#rhbz 1227877
|
||||
Patch26222: powerpc-powernv-Restore-non-volatile-CRs-after-nap.patch
|
||||
|
||||
#rhbz 1226621
|
||||
Patch26223: block-discard-bdi_unregister-in-favour-of-bdi_destro.patch
|
||||
|
||||
#rhbz 1223051
|
||||
Patch26230: Input-synaptics-add-min-max-quirk-for-Lenovo-S540.patch
|
||||
|
||||
#rhbz 1217191
|
||||
Patch26231: Btrfs-send-add-missing-check-for-dead-clone-root.patch
|
||||
Patch26232: Btrfs-send-don-t-leave-without-decrementing-clone-ro.patch
|
||||
Patch26233: btrfs-incorrect-handling-for-fiemap_fill_next_extent.patch
|
||||
Patch26234: btrfs-cleanup-orphans-while-looking-up-default-subvo.patch
|
||||
Patch26235: Btrfs-fix-range-cloning-when-same-inode-used-as-sour.patch
|
||||
Patch26236: Btrfs-fix-uninit-variable-in-clone-ioctl.patch
|
||||
Patch26237: Btrfs-fix-regression-in-raid-level-conversion.patch
|
||||
|
||||
#rhbz 1212230
|
||||
Patch26238: Input-Revert-Revert-synaptics-use-dmax-in-input_mt_a.patch
|
||||
Patch26239: Input-synaptics-allocate-3-slots-to-keep-stability-i.patch
|
||||
|
@ -729,6 +708,9 @@ Patch26240: Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
|||
# CVE-2015-XXXX rhbz 1230770 1230774
|
||||
Patch26241: kvm-x86-fix-kvm_apic_has_events-to-check-for-NULL-po.patch
|
||||
|
||||
# rhbz 1227891
|
||||
Patch26250: HID-rmi-Disable-populating-F30-when-the-touchpad-has.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -1521,9 +1503,6 @@ ApplyPatch HID-lenovo-set-INPUT_PROP_POINTING_STICK.patch
|
|||
#rhbz 1218882
|
||||
ApplyPatch 0001-target-use-vfs_iter_read-write-in-fd_do_rw.patch
|
||||
|
||||
#rhbz 1188695
|
||||
ApplyPatch 0001-n_tty-Fix-auditing-support-for-cannonical-mode.patch
|
||||
|
||||
#rhbz 1133378
|
||||
ApplyPatch firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
|
||||
|
||||
|
@ -1533,24 +1512,6 @@ ApplyPatch 0001-mwifiex-use-del_timer-variant-in-interrupt-context.patch
|
|||
#rhbz 1226743
|
||||
ApplyPatch drm-i915-turn-off-wc-mmaps.patch
|
||||
|
||||
#rhbz 1227877
|
||||
ApplyPatch powerpc-powernv-Restore-non-volatile-CRs-after-nap.patch
|
||||
|
||||
#rhbz 1226621
|
||||
ApplyPatch block-discard-bdi_unregister-in-favour-of-bdi_destro.patch
|
||||
|
||||
#rhbz 1223051
|
||||
ApplyPatch Input-synaptics-add-min-max-quirk-for-Lenovo-S540.patch
|
||||
|
||||
#rhbz 1217191
|
||||
ApplyPatch Btrfs-send-add-missing-check-for-dead-clone-root.patch
|
||||
ApplyPatch Btrfs-send-don-t-leave-without-decrementing-clone-ro.patch
|
||||
ApplyPatch btrfs-incorrect-handling-for-fiemap_fill_next_extent.patch
|
||||
ApplyPatch btrfs-cleanup-orphans-while-looking-up-default-subvo.patch
|
||||
ApplyPatch Btrfs-fix-range-cloning-when-same-inode-used-as-sour.patch
|
||||
ApplyPatch Btrfs-fix-uninit-variable-in-clone-ioctl.patch
|
||||
ApplyPatch Btrfs-fix-regression-in-raid-level-conversion.patch
|
||||
|
||||
#rhbz 1212230
|
||||
ApplyPatch Input-Revert-Revert-synaptics-use-dmax-in-input_mt_a.patch
|
||||
ApplyPatch Input-synaptics-allocate-3-slots-to-keep-stability-i.patch
|
||||
|
@ -1559,6 +1520,9 @@ ApplyPatch Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
|||
# CVE-2015-XXXX rhbz 1230770 1230774
|
||||
ApplyPatch kvm-x86-fix-kvm_apic_has_events-to-check-for-NULL-po.patch
|
||||
|
||||
#rhbz 1227891
|
||||
ApplyPatch HID-rmi-Disable-populating-F30-when-the-touchpad-has.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
%endif
|
||||
|
@ -2408,6 +2372,15 @@ fi
|
|||
# and build.
|
||||
#
|
||||
%changelog
|
||||
* Mon Jun 29 2015 Laura Abbott <labbott@fedoraproject.org> - 4.0.7-300
|
||||
- Linux v4.0.7
|
||||
|
||||
* Tue Jun 23 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.6-300
|
||||
- Linux v4.0.6
|
||||
|
||||
* Thu Jun 18 2015 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Add patch to fix touchpad issues on Razer machines (rhbz 1227891)
|
||||
|
||||
* Sun Jun 14 2015 Pavel Alexeev <Pahan@Hubbitus.info> - 4.0.4-303.hu.1.pf6
|
||||
- Upgrade to Fedora 22. Start f22-pf branch for kernels. First attempt build. Port changes from f21.
|
||||
- 4.0.4-303.hu.1.pf6
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
From: Sam Bobroff <sam.bobroff@au1.ibm.com>
|
||||
Date: Fri, 1 May 2015 16:50:34 +1000
|
||||
Subject: [PATCH] powerpc/powernv: Restore non-volatile CRs after nap
|
||||
|
||||
Patches 7cba160ad "powernv/cpuidle: Redesign idle states management"
|
||||
and 77b54e9f2 "powernv/powerpc: Add winkle support for offline cpus"
|
||||
use non-volatile condition registers (cr2, cr3 and cr4) early in the system
|
||||
reset interrupt handler (system_reset_pSeries()) before it has been determined
|
||||
if state loss has occurred. If state loss has not occurred, control returns via
|
||||
the power7_wakeup_noloss() path which does not restore those condition
|
||||
registers, leaving them corrupted.
|
||||
|
||||
Fix this by restoring the condition registers in the power7_wakeup_noloss()
|
||||
case.
|
||||
|
||||
This is apparent when running a KVM guest on hardware that does not
|
||||
support winkle or sleep and the guest makes use of secondary threads. In
|
||||
practice this means Power7 machines, though some early unreleased Power8
|
||||
machines may also be susceptible.
|
||||
|
||||
The secondary CPUs are taken off line before the guest is started and
|
||||
they call pnv_smp_cpu_kill_self(). This checks support for sleep
|
||||
states (in this case there is no support) and power7_nap() is called.
|
||||
|
||||
When the CPU is woken, power7_nap() returns and because the CPU is
|
||||
still off line, the main while loop executes again. The sleep states
|
||||
support test is executed again, but because the tested values cannot
|
||||
have changed, the compiler has optimized the test away and instead we
|
||||
rely on the result of the first test, which has been left in cr3
|
||||
and/or cr4. With the result overwritten, the wrong branch is taken and
|
||||
power7_winkle() is called on a CPU that does not support it, leading
|
||||
to it stalling.
|
||||
|
||||
Fixes: 7cba160ad789 ("powernv/cpuidle: Redesign idle states management")
|
||||
Fixes: 77b54e9f213f ("powernv/powerpc: Add winkle support for offline cpus")
|
||||
[mpe: Massage change log a bit more]
|
||||
Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
|
||||
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
|
||||
---
|
||||
arch/powerpc/kernel/idle_power7.S | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/powerpc/kernel/idle_power7.S b/arch/powerpc/kernel/idle_power7.S
|
||||
index 05adc8bbdef8..401d8d0085aa 100644
|
||||
--- a/arch/powerpc/kernel/idle_power7.S
|
||||
+++ b/arch/powerpc/kernel/idle_power7.S
|
||||
@@ -500,9 +500,11 @@ BEGIN_FTR_SECTION
|
||||
CHECK_HMI_INTERRUPT
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
|
||||
ld r1,PACAR1(r13)
|
||||
+ ld r6,_CCR(r1)
|
||||
ld r4,_MSR(r1)
|
||||
ld r5,_NIP(r1)
|
||||
addi r1,r1,INT_FRAME_SIZE
|
||||
+ mtcr r6
|
||||
mtspr SPRN_SRR1,r4
|
||||
mtspr SPRN_SRR0,r5
|
||||
rfid
|
Loading…
Reference in New Issue