Linux v4.14.15
This commit is contained in:
parent
81a9ddcc39
commit
81c5cae063
|
@ -1,49 +0,0 @@
|
|||
From patchwork Sat Jan 6 15:59:41 2018
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
Subject: drm/nouveau/disp/gf119: add missing drive vfunc ptr
|
||||
From: Rob Clark <robdclark@gmail.com>
|
||||
X-Patchwork-Id: 196301
|
||||
Message-Id: <20180106155951.8416-1-robdclark@gmail.com>
|
||||
To: dri-devel@lists.freedesktop.org
|
||||
Cc: David Airlie <airlied@linux.ie>, nouveau@lists.freedesktop.org,
|
||||
Ben Skeggs <bskeggs@redhat.com>, linux-kernel@vger.kernel.org
|
||||
Date: Sat, 6 Jan 2018 10:59:41 -0500
|
||||
|
||||
Fixes broken dp on GF119:
|
||||
|
||||
Call Trace:
|
||||
? nvkm_dp_train_drive+0x183/0x2c0 [nouveau]
|
||||
nvkm_dp_acquire+0x4f3/0xcd0 [nouveau]
|
||||
nv50_disp_super_2_2+0x5d/0x470 [nouveau]
|
||||
? nvkm_devinit_pll_set+0xf/0x20 [nouveau]
|
||||
gf119_disp_super+0x19c/0x2f0 [nouveau]
|
||||
process_one_work+0x193/0x3c0
|
||||
worker_thread+0x35/0x3b0
|
||||
kthread+0x125/0x140
|
||||
? process_one_work+0x3c0/0x3c0
|
||||
? kthread_park+0x60/0x60
|
||||
ret_from_fork+0x25/0x30
|
||||
Code: Bad RIP value.
|
||||
RIP: (null) RSP: ffffb1e243e4bc38
|
||||
CR2: 0000000000000000
|
||||
|
||||
Fixes: af85389c614a drm/nouveau/disp: shuffle functions around
|
||||
Signed-off-by: Rob Clark <robdclark@gmail.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
|
||||
index a2978a37b4f3..700fc754f28a 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
|
||||
@@ -174,6 +174,7 @@ gf119_sor = {
|
||||
.links = gf119_sor_dp_links,
|
||||
.power = g94_sor_dp_power,
|
||||
.pattern = gf119_sor_dp_pattern,
|
||||
+ .drive = gf119_sor_dp_drive,
|
||||
.vcpi = gf119_sor_dp_vcpi,
|
||||
.audio = gf119_sor_dp_audio,
|
||||
.audio_sym = gf119_sor_dp_audio_sym,
|
|
@ -22,7 +22,7 @@ Signed-off-by: Lyude <lyude@redhat.com>
|
|||
3 files changed, 75 insertions(+), 112 deletions(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
|
||||
index 5b40c26..4aa882c 100644
|
||||
index 0f43c42..3f38872 100644
|
||||
--- a/drivers/hid/hid-rmi.c
|
||||
+++ b/drivers/hid/hid-rmi.c
|
||||
@@ -316,19 +316,12 @@ static int rmi_input_event(struct hid_device *hdev, u8 *data, int size)
|
||||
|
@ -30,25 +30,25 @@ index 5b40c26..4aa882c 100644
|
|||
struct rmi_data *hdata = hid_get_drvdata(hdev);
|
||||
struct rmi_device *rmi_dev = hdata->xport.rmi_dev;
|
||||
- unsigned long flags;
|
||||
|
||||
|
||||
if (!(test_bit(RMI_STARTED, &hdata->flags)))
|
||||
return 0;
|
||||
|
||||
|
||||
- local_irq_save(flags);
|
||||
-
|
||||
rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2);
|
||||
|
||||
|
||||
- generic_handle_irq(hdata->rmi_irq);
|
||||
-
|
||||
- local_irq_restore(flags);
|
||||
-
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -556,56 +549,6 @@ static const struct rmi_transport_ops hid_rmi_ops = {
|
||||
|
||||
@@ -568,56 +561,6 @@ static const struct rmi_transport_ops hid_rmi_ops = {
|
||||
.reset = rmi_hid_reset,
|
||||
};
|
||||
|
||||
|
||||
-static void rmi_irq_teardown(void *data)
|
||||
-{
|
||||
- struct rmi_data *hdata = data;
|
||||
|
@ -102,10 +102,10 @@ index 5b40c26..4aa882c 100644
|
|||
static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
{
|
||||
struct rmi_data *data = NULL;
|
||||
@@ -677,18 +620,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
|
||||
@@ -689,18 +632,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
|
||||
mutex_init(&data->page_mutex);
|
||||
|
||||
|
||||
- ret = rmi_setup_irq_domain(hdev);
|
||||
- if (ret) {
|
||||
- hid_err(hdev, "failed to allocate IRQ domain\n");
|
||||
|
@ -114,26 +114,26 @@ index 5b40c26..4aa882c 100644
|
|||
-
|
||||
if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS)
|
||||
rmi_hid_pdata.f30_data.disable = true;
|
||||
|
||||
|
||||
data->xport.dev = hdev->dev.parent;
|
||||
data->xport.pdata = rmi_hid_pdata;
|
||||
- data->xport.pdata.irq = data->rmi_irq;
|
||||
data->xport.proto_name = "hid";
|
||||
data->xport.ops = &hid_rmi_ops;
|
||||
|
||||
|
||||
diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
|
||||
index 4f2bb59..6d7da84 100644
|
||||
index 141ea22..15b22db 100644
|
||||
--- a/drivers/input/rmi4/rmi_driver.c
|
||||
+++ b/drivers/input/rmi4/rmi_driver.c
|
||||
@@ -209,32 +209,46 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status,
|
||||
@@ -209,34 +209,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status,
|
||||
attn_data.data = fifo_data;
|
||||
|
||||
|
||||
kfifo_put(&drvdata->attn_fifo, attn_data);
|
||||
+
|
||||
+ schedule_work(&drvdata->attn_work);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rmi_set_attn_data);
|
||||
|
||||
|
||||
-static irqreturn_t rmi_irq_fn(int irq, void *dev_id)
|
||||
+static void attn_callback(struct work_struct *work)
|
||||
{
|
||||
|
@ -144,7 +144,7 @@ index 4f2bb59..6d7da84 100644
|
|||
+ attn_work);
|
||||
struct rmi4_attn_data attn_data = {0};
|
||||
int ret, count;
|
||||
|
||||
|
||||
count = kfifo_get(&drvdata->attn_fifo, &attn_data);
|
||||
- if (count) {
|
||||
- *(drvdata->irq_status) = attn_data.irq_status;
|
||||
|
@ -152,7 +152,7 @@ index 4f2bb59..6d7da84 100644
|
|||
- }
|
||||
+ if (!count)
|
||||
+ return;
|
||||
|
||||
|
||||
- ret = rmi_process_interrupt_requests(rmi_dev);
|
||||
+ *(drvdata->irq_status) = attn_data.irq_status;
|
||||
+ drvdata->attn_data = attn_data;
|
||||
|
@ -162,11 +162,14 @@ index 4f2bb59..6d7da84 100644
|
|||
- rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev,
|
||||
+ rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev,
|
||||
"Failed to process interrupt request: %d\n", ret);
|
||||
|
||||
- if (count)
|
||||
|
||||
- if (count) {
|
||||
- kfree(attn_data.data);
|
||||
- attn_data.data = NULL;
|
||||
- }
|
||||
+ kfree(attn_data.data);
|
||||
|
||||
+ attn_data.data = NULL;
|
||||
|
||||
if (!kfifo_is_empty(&drvdata->attn_fifo))
|
||||
- return rmi_irq_fn(irq, dev_id);
|
||||
+ schedule_work(&drvdata->attn_work);
|
||||
|
@ -181,30 +184,30 @@ index 4f2bb59..6d7da84 100644
|
|||
+ if (ret)
|
||||
+ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev,
|
||||
+ "Failed to process interrupt request: %d\n", ret);
|
||||
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
@@ -242,7 +256,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id)
|
||||
@@ -244,7 +257,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id)
|
||||
static int rmi_irq_init(struct rmi_device *rmi_dev)
|
||||
{
|
||||
struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev);
|
||||
- struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
|
||||
int irq_flags = irq_get_trigger_type(pdata->irq);
|
||||
int ret;
|
||||
|
||||
@@ -260,8 +273,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev)
|
||||
|
||||
@@ -262,8 +274,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
- data->enabled = true;
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -910,23 +921,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake)
|
||||
|
||||
@@ -912,23 +922,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake)
|
||||
if (data->enabled)
|
||||
goto out;
|
||||
|
||||
|
||||
- enable_irq(irq);
|
||||
- data->enabled = true;
|
||||
- if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) {
|
||||
|
@ -224,7 +227,7 @@ index 4f2bb59..6d7da84 100644
|
|||
+ "Failed to disable irq for wake: %d\n",
|
||||
+ retval);
|
||||
+ }
|
||||
|
||||
|
||||
- /*
|
||||
- * Call rmi_process_interrupt_requests() after enabling irq,
|
||||
- * otherwise we may lose interrupt on edge-triggered systems.
|
||||
|
@ -242,12 +245,12 @@ index 4f2bb59..6d7da84 100644
|
|||
+ } else {
|
||||
+ data->enabled = true;
|
||||
+ }
|
||||
|
||||
|
||||
out:
|
||||
mutex_unlock(&data->enabled_mutex);
|
||||
@@ -946,20 +961,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake)
|
||||
@@ -948,20 +962,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake)
|
||||
goto out;
|
||||
|
||||
|
||||
data->enabled = false;
|
||||
- disable_irq(irq);
|
||||
- if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) {
|
||||
|
@ -280,25 +283,25 @@ index 4f2bb59..6d7da84 100644
|
|||
+ kfree(attn_data.data);
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
out:
|
||||
@@ -998,9 +1015,12 @@ EXPORT_SYMBOL_GPL(rmi_driver_resume);
|
||||
@@ -1000,9 +1016,12 @@ EXPORT_SYMBOL_GPL(rmi_driver_resume);
|
||||
static int rmi_driver_remove(struct device *dev)
|
||||
{
|
||||
struct rmi_device *rmi_dev = to_rmi_device(dev);
|
||||
+ struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
|
||||
|
||||
|
||||
rmi_disable_irq(rmi_dev, false);
|
||||
|
||||
|
||||
+ cancel_work_sync(&data->attn_work);
|
||||
+
|
||||
rmi_f34_remove_sysfs(rmi_dev);
|
||||
rmi_free_function_list(rmi_dev);
|
||||
|
||||
@@ -1230,9 +1250,15 @@ static int rmi_driver_probe(struct device *dev)
|
||||
|
||||
@@ -1232,9 +1251,15 @@ static int rmi_driver_probe(struct device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- retval = rmi_irq_init(rmi_dev);
|
||||
- if (retval < 0)
|
||||
- goto err_destroy_functions;
|
||||
|
@ -311,21 +314,18 @@ index 4f2bb59..6d7da84 100644
|
|||
+ data->enabled = true;
|
||||
+
|
||||
+ INIT_WORK(&data->attn_work, attn_callback);
|
||||
|
||||
|
||||
if (data->f01_container->dev.driver) {
|
||||
/* Driver already bound, so enable ATTN now. */
|
||||
diff --git a/include/linux/rmi.h b/include/linux/rmi.h
|
||||
index 64125443..dc90178 100644
|
||||
index 6412544..dc90178 100644
|
||||
--- a/include/linux/rmi.h
|
||||
+++ b/include/linux/rmi.h
|
||||
@@ -364,6 +364,7 @@ struct rmi_driver_data {
|
||||
|
||||
|
||||
struct rmi4_attn_data attn_data;
|
||||
DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16);
|
||||
+ struct work_struct attn_work;
|
||||
};
|
||||
|
||||
int rmi_register_transport_device(struct rmi_transport_dev *xport);
|
||||
--
|
||||
2.9.4
|
||||
|
||||
int rmi_register_transport_device(struct rmi_transport_dev *xport);
|
||||
|
|
11
kernel.spec
11
kernel.spec
|
@ -54,7 +54,7 @@ Summary: The Linux kernel
|
|||
%if 0%{?released_kernel}
|
||||
|
||||
# Do we have a -stable update to apply?
|
||||
%define stable_update 14
|
||||
%define stable_update 15
|
||||
# Set rpm version accordingly
|
||||
%if 0%{?stable_update}
|
||||
%define stablerev %{stable_update}
|
||||
|
@ -634,7 +634,6 @@ Patch507: loop-fix-concurrent-lo_open-lo_release.patch
|
|||
|
||||
# 550-600 Meltdown and Spectre Fixes
|
||||
Patch550: prevent-bounds-check-bypass-via-speculative-execution.patch
|
||||
Patch551: ppc-mitigations.patch
|
||||
|
||||
# 600 - Patches for improved Bay and Cherry Trail device support
|
||||
# Below patches are submitted upstream, awaiting review / merging
|
||||
|
@ -663,8 +662,8 @@ Patch628: HID-rmi-Check-that-a-device-is-a-RMI-device-before-c.patch
|
|||
# rhbz 1514969
|
||||
Patch633: 0001-platform-x86-dell-laptop-Filter-out-spurious-keyboar.patch
|
||||
|
||||
# rhbz 1513150
|
||||
Patch634: drm-nouveau-disp-gf119-add-missing-drive-vfunc-ptr.patch
|
||||
# Fix crash on Xwayland using nouveau
|
||||
Patch634: dma-buf-fix-reservation_object_wait_timeout_rcu-once-more-v2.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
|
@ -2243,6 +2242,10 @@ fi
|
|||
#
|
||||
#
|
||||
%changelog
|
||||
* Wed Jan 24 2018 Justin M. Forbes <jforbes@fedoraproject.org> - 4.14.15-200
|
||||
- Linux v4.14.15
|
||||
- Fix CVE-2018-1000004 (rhbz 1535315 1535316)
|
||||
|
||||
* Tue Jan 23 2018 Laura Abbott <labbott@fedoraproject.org>
|
||||
- Fix for nouveau crash (rhbz 1513150)
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
2
sources
2
sources
|
@ -1,3 +1,3 @@
|
|||
SHA512 (linux-4.14.tar.xz) = 77e43a02d766c3d73b7e25c4aafb2e931d6b16e870510c22cef0cdb05c3acb7952b8908ebad12b10ef982c6efbe286364b1544586e715cf38390e483927904d8
|
||||
SHA512 (perf-man-4.14.tar.gz) = 76a9d8adc284cdffd4b3fbb060e7f9a14109267707ce1d03f4c3239cd70d8d164f697da3a0f90a363fbcac42a61d3c378afbcc2a86f112c501b9cb5ce74ef9f8
|
||||
SHA512 (patch-4.14.14.xz) = abc13c99eb85b2bd25f3ac07fccdad52a801118a86d3cd153a8ca6254730e5604e34261e98945352b23cf0e0a0317074a5008701d1240cc958ef4199bffd1ab6
|
||||
SHA512 (patch-4.14.15.xz) = faf165072fcff9f6f8cec76f0c35cf422afc453dfa2fc9ab5bc918eb177ebefd1e305f2c994a90c9dff073151762d79359789d118307ba15f53a020426c291a8
|
||||
|
|
Loading…
Reference in New Issue