Merge branch 'f23' of ssh://pkgs.fedoraproject.org/kernel into f23-pf - kernel 4.3.3-301
This commit is contained in:
commit
9b3a0cf909
|
@ -0,0 +1,133 @@
|
|||
From 84ac7d370783d4819c5986da1c5d5c62d360dc8f Mon Sep 17 00:00:00 2001
|
||||
From: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
Date: Wed, 7 Oct 2015 15:33:43 +0300
|
||||
Subject: [PATCH] HID: multitouch: Fetch feature reports on demand for Win8
|
||||
devices
|
||||
|
||||
Some newer Intel Skylake based Dell laptops with Win8 precision touchpad
|
||||
fail when initial feature reports are fetched from it. Below is an example
|
||||
output with some additional debug included:
|
||||
|
||||
i2c_hid i2c-DLL0704:01: Fetching the HID descriptor
|
||||
i2c_hid i2c-DLL0704:01: __i2c_hid_command: cmd=20 00
|
||||
i2c_hid i2c-DLL0704:01: HID Descriptor: 1e 00 00 01 99 02 21 00 24 ...
|
||||
...
|
||||
i2c_hid i2c-DLL0704:01: i2c_hid_get_report
|
||||
i2c_hid i2c-DLL0704:01: __i2c_hid_command: cmd=22 00 38 02 23 00
|
||||
i2c_hid i2c-DLL0704:01: report (len=4): 04 00 08 05
|
||||
i2c_hid i2c-DLL0704:01: report id 13
|
||||
i2c_hid i2c-DLL0704:01: i2c_hid_get_report
|
||||
i2c_hid i2c-DLL0704:01: __i2c_hid_command: cmd=22 00 3d 02 23 00
|
||||
i2c_hid i2c-DLL0704:01: failed to retrieve report from device.
|
||||
i2c_hid i2c-DLL0704:01: report id 7
|
||||
i2c_hid i2c-DLL0704:01: i2c_hid_get_report
|
||||
i2c_hid i2c-DLL0704:01: __i2c_hid_command: cmd=22 00 37 02 23 00
|
||||
i2c_hid i2c-DLL0704:01: report (len=259): 03 01 07 fc 28 fe 84 40 ...
|
||||
i2c_hid i2c-DLL0704:01: report id 4
|
||||
i2c_hid i2c-DLL0704:01: i2c_hid_get_report
|
||||
i2c_hid i2c-DLL0704:01: __i2c_hid_command: cmd=22 00 34 02 23 00
|
||||
|
||||
We manage to fetch few reports but then the touchpad dies:
|
||||
|
||||
i2c_designware i2c_designware.1: i2c_dw_handle_tx_abort: lost arbitration
|
||||
i2c_hid i2c-DLL0704:01: failed to retrieve report from device.
|
||||
|
||||
it eventually pulls the whole I2C bus low:
|
||||
|
||||
i2c_designware i2c_designware.1: controller timed out
|
||||
i2c_hid i2c-DLL0704:01: failed to set a report to device.
|
||||
|
||||
Fix this by preventing initial feature report retrieval for Win8 devices.
|
||||
Instead we fetch reports as needed in mt_feature_mapping(). This prevents
|
||||
fetching reports which might cause problems with the device in question.
|
||||
|
||||
Suggested-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Tested-by: Seth Forshee <seth.forshee@canonical.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
---
|
||||
drivers/hid/hid-multitouch.c | 45 +++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 44 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index 426b2f1a3450..4afe8d78b366 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -309,6 +309,41 @@ static struct attribute_group mt_attribute_group = {
|
||||
.attrs = sysfs_attrs
|
||||
};
|
||||
|
||||
+static void mt_get_feature(struct hid_device *hdev, struct hid_report *report)
|
||||
+{
|
||||
+ struct mt_device *td = hid_get_drvdata(hdev);
|
||||
+ int ret, size = hid_report_len(report);
|
||||
+ u8 *buf;
|
||||
+
|
||||
+ /*
|
||||
+ * Only fetch the feature report if initial reports are not already
|
||||
+ * been retrieved. Currently this is only done for Windows 8 touch
|
||||
+ * devices.
|
||||
+ */
|
||||
+ if (!(hdev->quirks & HID_QUIRK_NO_INIT_REPORTS))
|
||||
+ return;
|
||||
+ if (td->mtclass.name != MT_CLS_WIN_8)
|
||||
+ return;
|
||||
+
|
||||
+ buf = hid_alloc_report_buf(report, GFP_KERNEL);
|
||||
+ if (!buf)
|
||||
+ return;
|
||||
+
|
||||
+ ret = hid_hw_raw_request(hdev, report->id, buf, size,
|
||||
+ HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
|
||||
+ if (ret < 0) {
|
||||
+ dev_warn(&hdev->dev, "failed to fetch feature %d\n",
|
||||
+ report->id);
|
||||
+ } else {
|
||||
+ ret = hid_report_raw_event(hdev, HID_FEATURE_REPORT, buf,
|
||||
+ size, 0);
|
||||
+ if (ret)
|
||||
+ dev_warn(&hdev->dev, "failed to report feature\n");
|
||||
+ }
|
||||
+
|
||||
+ kfree(buf);
|
||||
+}
|
||||
+
|
||||
static void mt_feature_mapping(struct hid_device *hdev,
|
||||
struct hid_field *field, struct hid_usage *usage)
|
||||
{
|
||||
@@ -327,6 +362,8 @@ static void mt_feature_mapping(struct hid_device *hdev,
|
||||
|
||||
break;
|
||||
case HID_DG_CONTACTMAX:
|
||||
+ mt_get_feature(hdev, field->report);
|
||||
+
|
||||
td->maxcontact_report_id = field->report->id;
|
||||
td->maxcontacts = field->value[0];
|
||||
if (!td->maxcontacts &&
|
||||
@@ -343,6 +380,7 @@ static void mt_feature_mapping(struct hid_device *hdev,
|
||||
break;
|
||||
}
|
||||
|
||||
+ mt_get_feature(hdev, field->report);
|
||||
if (field->value[usage->usage_index] == MT_BUTTONTYPE_CLICKPAD)
|
||||
td->is_buttonpad = true;
|
||||
|
||||
@@ -1026,8 +1064,13 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
* reports. Fortunately, the Win8 spec says that all touches
|
||||
* should be sent during each report, making the initialization
|
||||
* of input reports unnecessary.
|
||||
+ *
|
||||
+ * In addition some touchpads do not behave well if we read
|
||||
+ * all feature reports from them. Instead we prevent
|
||||
+ * initial report fetching and then selectively fetch each
|
||||
+ * report we are interested in.
|
||||
*/
|
||||
- hdev->quirks |= HID_QUIRK_NO_INIT_INPUT_REPORTS;
|
||||
+ hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
|
||||
|
||||
td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
|
||||
if (!td) {
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
From f3b9db45027a40369fe13c4661c4249d1df8c8d0 Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Honig <ahonig@google.com>
|
||||
Date: Wed, 18 Nov 2015 14:50:23 -0800
|
||||
Subject: [PATCH] KVM: x86: Reload pit counters for all channels when restoring
|
||||
state
|
||||
|
||||
Currently if userspace restores the pit counters with a count of 0
|
||||
on channels 1 or 2 and the guest attempts to read the count on those
|
||||
channels, then KVM will perform a mod of 0 and crash. This will ensure
|
||||
that 0 values are converted to 65536 as per the spec.
|
||||
|
||||
This is CVE-2015-7513.
|
||||
|
||||
Signed-off-by: Andy Honig <ahonig@google.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
[Backported to 4.3.y by Josh Boyer <jwboyer@fedoraproject.org>]
|
||||
---
|
||||
arch/x86/kvm/x86.c | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 43609af03283..e124f9c8391e 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -3437,10 +3437,11 @@ static int kvm_vm_ioctl_get_pit(struct kvm *kvm, struct kvm_pit_state *ps)
|
||||
static int kvm_vm_ioctl_set_pit(struct kvm *kvm, struct kvm_pit_state *ps)
|
||||
{
|
||||
int r = 0;
|
||||
-
|
||||
+ int i;
|
||||
mutex_lock(&kvm->arch.vpit->pit_state.lock);
|
||||
memcpy(&kvm->arch.vpit->pit_state, ps, sizeof(struct kvm_pit_state));
|
||||
- kvm_pit_load_count(kvm, 0, ps->channels[0].count, 0);
|
||||
+ for (i = 0; i < 3; i++)
|
||||
+ kvm_pit_load_count(kvm, i, ps->channels[i].count, 0);
|
||||
mutex_unlock(&kvm->arch.vpit->pit_state.lock);
|
||||
return r;
|
||||
}
|
||||
@@ -3461,6 +3462,7 @@ static int kvm_vm_ioctl_get_pit2(struct kvm *kvm, struct kvm_pit_state2 *ps)
|
||||
static int kvm_vm_ioctl_set_pit2(struct kvm *kvm, struct kvm_pit_state2 *ps)
|
||||
{
|
||||
int r = 0, start = 0;
|
||||
+ int i;
|
||||
u32 prev_legacy, cur_legacy;
|
||||
mutex_lock(&kvm->arch.vpit->pit_state.lock);
|
||||
prev_legacy = kvm->arch.vpit->pit_state.flags & KVM_PIT_FLAGS_HPET_LEGACY;
|
||||
@@ -3470,7 +3472,8 @@ static int kvm_vm_ioctl_set_pit2(struct kvm *kvm, struct kvm_pit_state2 *ps)
|
||||
memcpy(&kvm->arch.vpit->pit_state.channels, &ps->channels,
|
||||
sizeof(kvm->arch.vpit->pit_state.channels));
|
||||
kvm->arch.vpit->pit_state.flags = ps->flags;
|
||||
- kvm_pit_load_count(kvm, 0, kvm->arch.vpit->pit_state.channels[0].count, start);
|
||||
+ for (i = 0; i < 3; i++)
|
||||
+ kvm_pit_load_count(kvm, i, kvm->arch.vpit->pit_state.channels[i].count, start);
|
||||
mutex_unlock(&kvm->arch.vpit->pit_state.lock);
|
||||
return r;
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
From 61feb31b0dfecfd7949e672a54ac7256f4dd2c3d Mon Sep 17 00:00:00 2001
|
||||
From: Christophe Le Roy <christophe.fish@gmail.com>
|
||||
Date: Fri, 11 Dec 2015 09:13:42 +0100
|
||||
Subject: [PATCH] PNP: Add Broadwell to Intel MCH size workaround
|
||||
|
||||
Add device ID 0x1604 for Broadwell to commit cb171f7abb9a ("PNP:
|
||||
Work around BIOS defects in Intel MCH area reporting").
|
||||
|
||||
>From a Lenovo ThinkPad T550:
|
||||
|
||||
system 00:01: [io 0x1800-0x189f] could not be reserved
|
||||
system 00:01: [io 0x0800-0x087f] has been reserved
|
||||
system 00:01: [io 0x0880-0x08ff] has been reserved
|
||||
system 00:01: [io 0x0900-0x097f] has been reserved
|
||||
system 00:01: [io 0x0980-0x09ff] has been reserved
|
||||
system 00:01: [io 0x0a00-0x0a7f] has been reserved
|
||||
system 00:01: [io 0x0a80-0x0aff] has been reserved
|
||||
system 00:01: [io 0x0b00-0x0b7f] has been reserved
|
||||
system 00:01: [io 0x0b80-0x0bff] has been reserved
|
||||
system 00:01: [io 0x15e0-0x15ef] has been reserved
|
||||
system 00:01: [io 0x1600-0x167f] has been reserved
|
||||
system 00:01: [io 0x1640-0x165f] has been reserved
|
||||
system 00:01: [mem 0xf8000000-0xfbffffff] could not be reserved
|
||||
system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved
|
||||
system 00:01: [mem 0xfed10000-0xfed13fff] has been reserved
|
||||
system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved
|
||||
system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved
|
||||
system 00:01: [mem 0xfed45000-0xfed4bfff] has been reserved
|
||||
system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active)
|
||||
[...]
|
||||
resource sanity check: requesting [mem 0xfed10000-0xfed15fff], which spans more than pnp 00:01 [mem 0xfed10000-0xfed13fff]
|
||||
------------[ cut here ]------------
|
||||
WARNING: CPU: 2 PID: 1 at /build/linux-CrHvZ_/linux-4.2.6/arch/x86/mm/ioremap.c:198 __ioremap_caller+0x2ee/0x360()
|
||||
Info: mapping multiple BARs. Your kernel is fine.
|
||||
Modules linked in:
|
||||
CPU: 2 PID: 1 Comm: swapper/0 Not tainted 4.2.0-1-amd64 #1 Debian 4.2.6-1
|
||||
Hardware name: LENOVO 20CKCTO1WW/20CKCTO1WW, BIOS N11ET34W (1.10 ) 08/20/2015
|
||||
0000000000000000 ffffffff817e6868 ffffffff8154e2f6 ffff8802241efbf8
|
||||
ffffffff8106e5b1 ffffc90000e98000 0000000000006000 ffffc90000e98000
|
||||
0000000000006000 0000000000000000 ffffffff8106e62a ffffffff817e68c8
|
||||
Call Trace:
|
||||
[<ffffffff8154e2f6>] ? dump_stack+0x40/0x50
|
||||
[<ffffffff8106e5b1>] ? warn_slowpath_common+0x81/0xb0
|
||||
[<ffffffff8106e62a>] ? warn_slowpath_fmt+0x4a/0x50
|
||||
[<ffffffff810742a3>] ? iomem_map_sanity_check+0xb3/0xc0
|
||||
[<ffffffff8105dade>] ? __ioremap_caller+0x2ee/0x360
|
||||
[<ffffffff81036ae6>] ? snb_uncore_imc_init_box+0x66/0x90
|
||||
[<ffffffff810351a8>] ? uncore_pci_probe+0xc8/0x1a0
|
||||
[<ffffffff81302d7f>] ? local_pci_probe+0x3f/0xa0
|
||||
[<ffffffff81303ea4>] ? pci_device_probe+0xc4/0x110
|
||||
[<ffffffff813d9b1e>] ? driver_probe_device+0x1ee/0x450
|
||||
[<ffffffff813d9dfb>] ? __driver_attach+0x7b/0x80
|
||||
[<ffffffff813d9d80>] ? driver_probe_device+0x450/0x450
|
||||
[<ffffffff813d796a>] ? bus_for_each_dev+0x5a/0x90
|
||||
[<ffffffff813d9091>] ? bus_add_driver+0x1f1/0x290
|
||||
[<ffffffff81b37fa8>] ? uncore_cpu_setup+0xc/0xc
|
||||
[<ffffffff813da73f>] ? driver_register+0x5f/0xe0
|
||||
[<ffffffff81b38074>] ? intel_uncore_init+0xcc/0x2b0
|
||||
[<ffffffff81b37fa8>] ? uncore_cpu_setup+0xc/0xc
|
||||
[<ffffffff8100213e>] ? do_one_initcall+0xce/0x200
|
||||
[<ffffffff8108a100>] ? parse_args+0x140/0x4e0
|
||||
[<ffffffff81b2b0cb>] ? kernel_init_freeable+0x162/0x1e8
|
||||
[<ffffffff815443f0>] ? rest_init+0x80/0x80
|
||||
[<ffffffff815443fe>] ? kernel_init+0xe/0xf0
|
||||
[<ffffffff81553e5f>] ? ret_from_fork+0x3f/0x70
|
||||
[<ffffffff815443f0>] ? rest_init+0x80/0x80
|
||||
---[ end trace 472e7959536abf12 ]---
|
||||
|
||||
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
|
||||
Subsystem: Lenovo Device 2223
|
||||
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
|
||||
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ >SERR- <PERR- INTx-
|
||||
Latency: 0
|
||||
Capabilities: [e0] Vendor Specific Information: Len=0c <?>
|
||||
Kernel driver in use: bdw_uncore
|
||||
00: 86 80 04 16 06 00 90 20 09 00 00 06 00 00 00 00
|
||||
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
20: 00 00 00 00 00 00 00 00 00 00 00 00 aa 17 23 22
|
||||
30: 00 00 00 00 e0 00 00 00 00 00 00 00 00 00 00 00
|
||||
|
||||
Signed-off-by: Christophe Le Roy <christophe.fish@gmail.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/pnp/quirks.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c
|
||||
index 943c1cb9566c..f700723ca5d6 100644
|
||||
--- a/drivers/pnp/quirks.c
|
||||
+++ b/drivers/pnp/quirks.c
|
||||
@@ -343,6 +343,7 @@ static void quirk_amd_mmconfig_area(struct pnp_dev *dev)
|
||||
static const unsigned int mch_quirk_devices[] = {
|
||||
0x0154, /* Ivy Bridge */
|
||||
0x0c00, /* Haswell */
|
||||
+ 0x1604, /* Broadwell */
|
||||
};
|
||||
|
||||
static struct pci_dev *get_intel_host(void)
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
From 23688bf4f830a89866fd0ed3501e342a7360fe4f Mon Sep 17 00:00:00 2001
|
||||
From: Junichi Nomura <j-nomura@ce.jp.nec.com>
|
||||
Date: Tue, 22 Dec 2015 10:23:44 -0700
|
||||
Subject: [PATCH] block: ensure to split after potentially bouncing a bio
|
||||
|
||||
blk_queue_bio() does split then bounce, which makes the segment
|
||||
counting based on pages before bouncing and could go wrong. Move
|
||||
the split to after bouncing, like we do for blk-mq, and the we
|
||||
fix the issue of having the bio count for segments be wrong.
|
||||
|
||||
Fixes: 54efd50bfd87 ("block: make generic_make_request handle arbitrarily sized bios")
|
||||
Cc: stable@vger.kernel.org
|
||||
Tested-by: Artem S. Tashkinov <t.artem@lycos.com>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
---
|
||||
block/blk-core.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/block/blk-core.c b/block/blk-core.c
|
||||
index 3636be469fa2..c487b94c59e3 100644
|
||||
--- a/block/blk-core.c
|
||||
+++ b/block/blk-core.c
|
||||
@@ -1689,8 +1689,6 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
|
||||
struct request *req;
|
||||
unsigned int request_count = 0;
|
||||
|
||||
- blk_queue_split(q, &bio, q->bio_split);
|
||||
-
|
||||
/*
|
||||
* low level driver can indicate that it wants pages above a
|
||||
* certain limit bounced to low memory (ie for highmem, or even
|
||||
@@ -1698,6 +1696,8 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
|
||||
*/
|
||||
blk_queue_bounce(q, &bio);
|
||||
|
||||
+ blk_queue_split(q, &bio, q->bio_split);
|
||||
+
|
||||
if (bio_integrity_enabled(bio) && bio_integrity_prep(bio)) {
|
||||
bio->bi_error = -EIO;
|
||||
bio_endio(bio);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
From d271283fd90da8cc5a4c659b1854c0d3a34b1929 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
|
||||
Date: Mon, 23 Nov 2015 10:25:28 +0100
|
||||
Subject: [PATCH] drm/i915: Do a better job at disabling primary plane in the
|
||||
noatomic case.
|
||||
|
||||
When disable_noatomic is called plane_mask is not correct yet, and
|
||||
plane_state->visible = true is left as true after disabling the primary
|
||||
plane.
|
||||
|
||||
Other planes are already disabled as part of crtc sanitization, only the
|
||||
primary is left active. But the plane_mask is not updated here. It gets
|
||||
updated during fb takeover in modeset_gem_init, or set to the new value
|
||||
on resume.
|
||||
|
||||
This means that to disable the primary plane 1 << drm_plane_index(primary)
|
||||
needs to be used.
|
||||
|
||||
Afterwards because the crtc is no longer active it's forbidden to keep
|
||||
plane_state->visible set, or a WARN_ON in
|
||||
intel_plane_atomic_calc_changes triggers. There are other code points
|
||||
that rely on accurate plane_state->visible too, so make sure the bool is
|
||||
cleared.
|
||||
|
||||
The other planes are already disabled in intel_sanitize_crtc, so they
|
||||
don't have to be handled here.
|
||||
|
||||
Cc: stable@vger.kernel.org #v4.3, v4.2?
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92655
|
||||
Tested-by: Tomas Mezzadra <tmezzadra@gmail.com>
|
||||
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
|
||||
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/5652DB88.9070208@linux.intel.com
|
||||
(cherry picked from commit 54a4196188eab82e6f0a5f05716626e9f18b8fb6)
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_display.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index b2270d576979..84eda179e3ff 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -6225,9 +6225,11 @@ static void intel_crtc_disable_noatomic(struct drm_crtc *crtc)
|
||||
if (to_intel_plane_state(crtc->primary->state)->visible) {
|
||||
intel_crtc_wait_for_pending_flips(crtc);
|
||||
intel_pre_disable_primary(crtc);
|
||||
+
|
||||
+ intel_crtc_disable_planes(crtc, 1 << drm_plane_index(crtc->primary));
|
||||
+ to_intel_plane_state(crtc->primary->state)->visible = false;
|
||||
}
|
||||
|
||||
- intel_crtc_disable_planes(crtc, crtc->state->plane_mask);
|
||||
dev_priv->display.crtc_disable(crtc);
|
||||
intel_disable_shared_dpll(intel_crtc);
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
From 951660dcf5d09f7040ab1d56817ae952a1076978 Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Thu, 7 Jan 2016 10:29:10 +0200
|
||||
Subject: [PATCH] drm/i915: shut up gen8+ SDE irq dmesg noise, again
|
||||
|
||||
We still keep getting
|
||||
|
||||
[ 4.249930] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
|
||||
|
||||
This reverts
|
||||
|
||||
commit 820da7ae46332fa709b171eb7ba57cbd023fa6df
|
||||
Author: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Wed Nov 25 16:47:23 2015 +0200
|
||||
|
||||
Revert "drm/i915: shut up gen8+ SDE irq dmesg noise"
|
||||
|
||||
which in itself is a revert, so this is just doing
|
||||
|
||||
commit 97e5ed1111dcc5300a0f59a55248cd243937a8ab
|
||||
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Date: Fri Oct 23 10:56:12 2015 +0200
|
||||
|
||||
drm/i915: shut up gen8+ SDE irq dmesg noise
|
||||
|
||||
all over again. I'll stop pretending I understand what's going on like I
|
||||
did when I thought I'd fixed this for good in
|
||||
|
||||
commit 6a39d7c986be4fd18eb019e9cdbf774ec36c9f77
|
||||
Author: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Wed Nov 25 16:47:22 2015 +0200
|
||||
|
||||
drm/i915: fix the SDE irq dmesg warnings properly
|
||||
|
||||
Reported-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Reference: http://mid.gmane.org/20151213124945.GA5715@nuc-i3427.alporthouse.com
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92084
|
||||
Cc: drm-intel-fixes@lists.freedesktop.org
|
||||
Fixes: 820da7ae4633 ("Revert "drm/i915: shut up gen8+ SDE irq dmesg noise"")
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
|
||||
[Backported to 4.3.y by Josh Boyer <jwboyer@fedoraproject.org>]
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_irq.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
|
||||
index 39d73dbc1c47..fa7f82d54762 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_irq.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_irq.c
|
||||
@@ -2168,8 +2168,13 @@ static irqreturn_t gen8_irq_handler(int irq, void *arg)
|
||||
I915_WRITE(SDEIIR, pch_iir);
|
||||
ret = IRQ_HANDLED;
|
||||
cpt_irq_handler(dev, pch_iir);
|
||||
- } else
|
||||
- DRM_ERROR("The master control interrupt lied (SDE)!\n");
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * Like on previous PCH there seems to be something
|
||||
+ * fishy going on with forwarding PCH interrupts.
|
||||
+ */
|
||||
+ DRM_DEBUG_DRIVER("The master control interrupt lied (SDE)!\n");
|
||||
+ }
|
||||
|
||||
}
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,204 @@
|
|||
From 424f582d0ec7f206dcc59d34c9a2fa1c8087a8aa Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Date: Tue, 10 Nov 2015 17:37:31 +0100
|
||||
Subject: [PATCH] drm/nouveau: Fix pre-nv50 pageflip events (v4)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Apparently pre-nv50 pageflip events happen before the actual vblank
|
||||
period. Therefore that functionality got semi-disabled in
|
||||
|
||||
commit af4870e406126b7ac0ae7c7ce5751f25ebe60f28
|
||||
Author: Mario Kleiner <mario.kleiner.de@gmail.com>
|
||||
Date: Tue May 13 00:42:08 2014 +0200
|
||||
|
||||
drm/nouveau/kms/nv04-nv40: fix pageflip events via special case.
|
||||
|
||||
Unfortunately that hack got uprooted in
|
||||
|
||||
commit cc1ef118fc099295ae6aabbacc8af94d8d8885eb
|
||||
Author: Thierry Reding <treding@nvidia.com>
|
||||
Date: Wed Aug 12 17:00:31 2015 +0200
|
||||
|
||||
drm/irq: Make pipe unsigned and name consistent
|
||||
|
||||
Triggering a warning when trying to sample the vblank timestamp for a
|
||||
non-existing pipe. There's a few ways to fix this:
|
||||
|
||||
- Open-code the old behaviour, which just enshrines this slight
|
||||
breakage of the userspace ABI.
|
||||
|
||||
- Revert Mario's commit and again inflict broken timestamps, again not
|
||||
pretty.
|
||||
|
||||
- Fix this for real by delaying the pageflip TS until the next vblank
|
||||
interrupt, thereby making it accurate.
|
||||
|
||||
This patch implements the third option. Since having a page flip
|
||||
interrupt that happens when the pageflip gets armed and not when it
|
||||
completes in the next vblank seems to be fairly common (older i915 hw
|
||||
works very similarly) create a new helper to arm vblank events for
|
||||
such drivers.
|
||||
|
||||
v2 (Mario Kleiner):
|
||||
- Fix function prototypes in drmP.h
|
||||
- Add missing vblank_put() for pageflip completion without
|
||||
pageflip event.
|
||||
- Initialize sequence number for queued pageflip event to avoid
|
||||
trouble in drm_handle_vblank_events().
|
||||
- Remove dead code and spelling fix.
|
||||
|
||||
v3 (Mario Kleiner):
|
||||
- Add a signed-off-by and cc stable tag per Ilja's advice.
|
||||
|
||||
v4 (Thierry Reding):
|
||||
- Fix kerneldoc typo, discovered by Michel Dänzer
|
||||
- Rearrange tags and changelog
|
||||
|
||||
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=106431
|
||||
Cc: Thierry Reding <treding@nvidia.com>
|
||||
Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
|
||||
Acked-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
Cc: Ilia Mirkin <imirkin@alum.mit.edu>
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
|
||||
Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
|
||||
Cc: stable@vger.kernel.org # v4.3
|
||||
Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
|
||||
Signed-off-by: Thierry Reding <treding@nvidia.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/drm_irq.c | 54 ++++++++++++++++++++++++++++++-
|
||||
drivers/gpu/drm/nouveau/nouveau_display.c | 19 ++++++-----
|
||||
include/drm/drmP.h | 4 +++
|
||||
3 files changed, 68 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
|
||||
index 22d207e211e7..c5f20e41dcc6 100644
|
||||
--- a/drivers/gpu/drm/drm_irq.c
|
||||
+++ b/drivers/gpu/drm/drm_irq.c
|
||||
@@ -944,7 +944,8 @@ static void send_vblank_event(struct drm_device *dev,
|
||||
struct drm_pending_vblank_event *e,
|
||||
unsigned long seq, struct timeval *now)
|
||||
{
|
||||
- WARN_ON_SMP(!spin_is_locked(&dev->event_lock));
|
||||
+ assert_spin_locked(&dev->event_lock);
|
||||
+
|
||||
e->event.sequence = seq;
|
||||
e->event.tv_sec = now->tv_sec;
|
||||
e->event.tv_usec = now->tv_usec;
|
||||
@@ -957,6 +958,57 @@ static void send_vblank_event(struct drm_device *dev,
|
||||
}
|
||||
|
||||
/**
|
||||
+ * drm_arm_vblank_event - arm vblank event after pageflip
|
||||
+ * @dev: DRM device
|
||||
+ * @pipe: CRTC index
|
||||
+ * @e: the event to prepare to send
|
||||
+ *
|
||||
+ * A lot of drivers need to generate vblank events for the very next vblank
|
||||
+ * interrupt. For example when the page flip interrupt happens when the page
|
||||
+ * flip gets armed, but not when it actually executes within the next vblank
|
||||
+ * period. This helper function implements exactly the required vblank arming
|
||||
+ * behaviour.
|
||||
+ *
|
||||
+ * Caller must hold event lock. Caller must also hold a vblank reference for
|
||||
+ * the event @e, which will be dropped when the next vblank arrives.
|
||||
+ *
|
||||
+ * This is the legacy version of drm_crtc_arm_vblank_event().
|
||||
+ */
|
||||
+void drm_arm_vblank_event(struct drm_device *dev, unsigned int pipe,
|
||||
+ struct drm_pending_vblank_event *e)
|
||||
+{
|
||||
+ assert_spin_locked(&dev->event_lock);
|
||||
+
|
||||
+ e->pipe = pipe;
|
||||
+ e->event.sequence = drm_vblank_count(dev, pipe);
|
||||
+ list_add_tail(&e->base.link, &dev->vblank_event_list);
|
||||
+}
|
||||
+EXPORT_SYMBOL(drm_arm_vblank_event);
|
||||
+
|
||||
+/**
|
||||
+ * drm_crtc_arm_vblank_event - arm vblank event after pageflip
|
||||
+ * @crtc: the source CRTC of the vblank event
|
||||
+ * @e: the event to send
|
||||
+ *
|
||||
+ * A lot of drivers need to generate vblank events for the very next vblank
|
||||
+ * interrupt. For example when the page flip interrupt happens when the page
|
||||
+ * flip gets armed, but not when it actually executes within the next vblank
|
||||
+ * period. This helper function implements exactly the required vblank arming
|
||||
+ * behaviour.
|
||||
+ *
|
||||
+ * Caller must hold event lock. Caller must also hold a vblank reference for
|
||||
+ * the event @e, which will be dropped when the next vblank arrives.
|
||||
+ *
|
||||
+ * This is the native KMS version of drm_arm_vblank_event().
|
||||
+ */
|
||||
+void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
|
||||
+ struct drm_pending_vblank_event *e)
|
||||
+{
|
||||
+ drm_arm_vblank_event(crtc->dev, drm_crtc_index(crtc), e);
|
||||
+}
|
||||
+EXPORT_SYMBOL(drm_crtc_arm_vblank_event);
|
||||
+
|
||||
+/**
|
||||
* drm_send_vblank_event - helper to send vblank event after pageflip
|
||||
* @dev: DRM device
|
||||
* @pipe: CRTC index
|
||||
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
|
||||
index e905c00acf1a..54183bcca48f 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
|
||||
@@ -827,7 +827,6 @@ nouveau_finish_page_flip(struct nouveau_channel *chan,
|
||||
struct drm_device *dev = drm->dev;
|
||||
struct nouveau_page_flip_state *s;
|
||||
unsigned long flags;
|
||||
- int crtcid = -1;
|
||||
|
||||
spin_lock_irqsave(&dev->event_lock, flags);
|
||||
|
||||
@@ -839,15 +838,19 @@ nouveau_finish_page_flip(struct nouveau_channel *chan,
|
||||
|
||||
s = list_first_entry(&fctx->flip, struct nouveau_page_flip_state, head);
|
||||
if (s->event) {
|
||||
- /* Vblank timestamps/counts are only correct on >= NV-50 */
|
||||
- if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA)
|
||||
- crtcid = s->crtc;
|
||||
+ if (drm->device.info.family < NV_DEVICE_INFO_V0_TESLA) {
|
||||
+ drm_arm_vblank_event(dev, s->crtc, s->event);
|
||||
+ } else {
|
||||
+ drm_send_vblank_event(dev, s->crtc, s->event);
|
||||
|
||||
- drm_send_vblank_event(dev, crtcid, s->event);
|
||||
+ /* Give up ownership of vblank for page-flipped crtc */
|
||||
+ drm_vblank_put(dev, s->crtc);
|
||||
+ }
|
||||
+ }
|
||||
+ else {
|
||||
+ /* Give up ownership of vblank for page-flipped crtc */
|
||||
+ drm_vblank_put(dev, s->crtc);
|
||||
}
|
||||
-
|
||||
- /* Give up ownership of vblank for page-flipped crtc */
|
||||
- drm_vblank_put(dev, s->crtc);
|
||||
|
||||
list_del(&s->head);
|
||||
if (ps)
|
||||
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
|
||||
index 8b5ce7c5d9bb..c98f01046bd0 100644
|
||||
--- a/include/drm/drmP.h
|
||||
+++ b/include/drm/drmP.h
|
||||
@@ -932,6 +932,10 @@ extern void drm_send_vblank_event(struct drm_device *dev, unsigned int pipe,
|
||||
struct drm_pending_vblank_event *e);
|
||||
extern void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
|
||||
struct drm_pending_vblank_event *e);
|
||||
+extern void drm_arm_vblank_event(struct drm_device *dev, unsigned int pipe,
|
||||
+ struct drm_pending_vblank_event *e);
|
||||
+extern void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
|
||||
+ struct drm_pending_vblank_event *e);
|
||||
extern bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe);
|
||||
extern bool drm_crtc_handle_vblank(struct drm_crtc *crtc);
|
||||
extern int drm_vblank_get(struct drm_device *dev, unsigned int pipe);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From 65fbb05cbbf9ef7f531712634c3e914b54171707 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Courbot <acourbot@nvidia.com>
|
||||
Date: Thu, 3 Sep 2015 17:39:52 +0900
|
||||
Subject: [PATCH] drm/nouveau/pmu: do not assume a PMU is present
|
||||
|
||||
Some devices may not have a PMU. Avoid a NULL pointer dereference in
|
||||
such cases by checking whether the pointer given to nvkm_pmu_pgob() is
|
||||
valid.
|
||||
|
||||
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c
|
||||
index 27a79c0c3888..d95eb8659d1b 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c
|
||||
@@ -28,7 +28,7 @@
|
||||
void
|
||||
nvkm_pmu_pgob(struct nvkm_pmu *pmu, bool enable)
|
||||
{
|
||||
- if (pmu->func->pgob)
|
||||
+ if (pmu && pmu->func->pgob)
|
||||
pmu->func->pgob(pmu, enable);
|
||||
}
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
47
kernel.spec
47
kernel.spec
|
@ -40,7 +40,7 @@ Summary: The Linux kernel
|
|||
# For non-released -rc kernels, this will be appended after the rcX and
|
||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||
#
|
||||
%global baserelease 300
|
||||
%global baserelease 301
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
|
@ -654,6 +654,32 @@ Patch602: bluetooth-Validate-socket-address-length-in-sco_sock.patch
|
|||
#CVE-2015-8709 rhbz 1295287 1295288
|
||||
Patch603: ptrace-being-capable-wrt-a-process-requires-mapped-u.patch
|
||||
|
||||
Patch604: drm-i915-shut-up-gen8-SDE-irq-dmesg-noise-again.patch
|
||||
|
||||
#CVE-2015-7513 rhbz 1284847 1296142
|
||||
Patch605: KVM-x86-Reload-pit-counters-for-all-channels-when-re.patch
|
||||
|
||||
#rhbz 1296677
|
||||
Patch606: HID-multitouch-Fetch-feature-reports-on-demand-for-W.patch
|
||||
|
||||
#rhbz 1281368
|
||||
Patch607: drm-nouveau-Fix-pre-nv50-pageflip-events-v4.patch
|
||||
|
||||
#rhbz 1296820
|
||||
Patch608: drm-nouveau-pmu-do-not-assume-a-PMU-is-present.patch
|
||||
|
||||
#rhbz 1083853
|
||||
Patch610: PNP-Add-Broadwell-to-Intel-MCH-size-workaround.patch
|
||||
|
||||
#CVE-2015-7566 rhbz 1296466 1297517
|
||||
Patch623: usb-serial-visor-fix-crash-on-detecting-device-witho.patch
|
||||
|
||||
#rhbz 1298309
|
||||
Patch624: drm-i915-Do-a-better-job-at-disabling-primary-plane-.patch
|
||||
|
||||
#rhbz 1298996
|
||||
Patch625: block-ensure-to-split-after-potentially-bouncing-a-b.patch
|
||||
|
||||
|
||||
################# Hubbitus patches
|
||||
# My patch to resolve compile problem:
|
||||
|
@ -2126,6 +2152,25 @@ fi
|
|||
# and build.
|
||||
#
|
||||
%changelog
|
||||
* Fri Jan 16 2016 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Fix block errors on PAE machines (rhbz 1298996)
|
||||
|
||||
* Wed Jan 13 2016 Josh Boyer <jwboyer@fedoraproject.org> - 4.3.3-301
|
||||
- Fix garbled video on some i915 machines (rhbz 1298309)
|
||||
|
||||
* Tue Jan 12 2016 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- CVE-2015-7566 usb: visor: Crash on invalid USB dev descriptors (rhbz 1296466 1297517)
|
||||
- Fix backtrace from PNP conflict on Broadwell (rhbz 1083853)
|
||||
|
||||
* Fri Jan 08 2016 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Fix oops in nouveau driver for devices that don't have a PMU (rhbz 1296820)
|
||||
- Fix warnings from pre-nv50 cards (rhbz 1281368)
|
||||
- Fix touchpad on Dell XPS 13 9350 (rhbz 1296677)
|
||||
|
||||
* Thu Jan 07 2016 Josh Boyer <jwboyer@fedorparoject.org>
|
||||
- CVE-2015-7513 kvm: divide by zero DoS (rhbz 1284847 1296142)
|
||||
- Quiet i915 gen8 irq messages (rhbz 1297143)
|
||||
|
||||
* Thu Jan 07 2016 Pavel Alexeev <Pahan@Hubbitus.info> - 4.3.3-300.hu.1.pf3
|
||||
- Merge Fedora 23 kernel 4.3.3, aply new v4.3-pf3 - https://pf.natalenko.name/news/?p=111.
|
||||
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
From b2476fe4c16be5c2b7ee950e50677cfaa9ab9bae Mon Sep 17 00:00:00 2001
|
||||
From: Vladis Dronov <vdronov@redhat.com>
|
||||
Date: Tue, 12 Jan 2016 14:10:50 -0500
|
||||
Subject: [PATCH] usb: serial: visor: fix crash on detecting device without
|
||||
write_urbs
|
||||
|
||||
The visor driver crashes in clie_5_attach() when a specially crafted USB
|
||||
device without bulk-out endpoint is detected. This fix adds a check that
|
||||
the device has proper configuration expected by the driver.
|
||||
|
||||
Reported-by: Ralf Spenneberg <ralf@spenneberg.net>
|
||||
Signed-off-by: Vladis Dronov <vdronov@redhat.com>
|
||||
---
|
||||
drivers/usb/serial/visor.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
|
||||
index 60afb39eb73c..bbc90c059002 100644
|
||||
--- a/drivers/usb/serial/visor.c
|
||||
+++ b/drivers/usb/serial/visor.c
|
||||
@@ -597,8 +597,10 @@ static int clie_5_attach(struct usb_serial *serial)
|
||||
*/
|
||||
|
||||
/* some sanity check */
|
||||
- if (serial->num_ports < 2)
|
||||
- return -1;
|
||||
+ if (serial->num_bulk_out < 2) {
|
||||
+ dev_err(&serial->interface->dev, "missing bulk out endpoints\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
|
||||
/* port 0 now uses the modified endpoint Address */
|
||||
port = serial->port[0];
|
||||
--
|
||||
2.5.0
|
||||
|
Loading…
Reference in New Issue