add new patches.in 4.1.6
This commit is contained in:
+62
@@ -0,0 +1,62 @@
|
||||
From 512255a2ad2c832ca7d4de9f31245f73781922d0 Mon Sep 17 00:00:00 2001
|
||||
From: Andy Lutomirski <luto@kernel.org>
|
||||
Date: Mon, 17 Aug 2015 12:22:50 -0700
|
||||
Subject: [PATCH] Revert "sched/x86_64: Don't save flags on context switch"
|
||||
|
||||
This reverts commit:
|
||||
|
||||
2c7577a75837 ("sched/x86_64: Don't save flags on context switch")
|
||||
|
||||
It was a nice speedup. It's also not quite correct: SYSENTER
|
||||
enables interrupts too early.
|
||||
|
||||
We can re-add this optimization once the SYSENTER code is beaten
|
||||
into shape, which should happen in 4.3 or 4.4.
|
||||
|
||||
Signed-off-by: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Cc: stable@vger.kernel.org # v3.19
|
||||
Link: http://lkml.kernel.org/r/85f56651f59f76624e80785a8fd3bdfdd089a818.1439838962.git.luto@kernel.org
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/include/asm/switch_to.h | 12 ++++--------
|
||||
1 file changed, 4 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h
|
||||
index 751bf4b..d7f3b3b 100644
|
||||
--- a/arch/x86/include/asm/switch_to.h
|
||||
+++ b/arch/x86/include/asm/switch_to.h
|
||||
@@ -79,12 +79,12 @@ do { \
|
||||
#else /* CONFIG_X86_32 */
|
||||
|
||||
/* frame pointer must be last for get_wchan */
|
||||
-#define SAVE_CONTEXT "pushq %%rbp ; movq %%rsi,%%rbp\n\t"
|
||||
-#define RESTORE_CONTEXT "movq %%rbp,%%rsi ; popq %%rbp\t"
|
||||
+#define SAVE_CONTEXT "pushf ; pushq %%rbp ; movq %%rsi,%%rbp\n\t"
|
||||
+#define RESTORE_CONTEXT "movq %%rbp,%%rsi ; popq %%rbp ; popf\t"
|
||||
|
||||
#define __EXTRA_CLOBBER \
|
||||
, "rcx", "rbx", "rdx", "r8", "r9", "r10", "r11", \
|
||||
- "r12", "r13", "r14", "r15", "flags"
|
||||
+ "r12", "r13", "r14", "r15"
|
||||
|
||||
#ifdef CONFIG_CC_STACKPROTECTOR
|
||||
#define __switch_canary \
|
||||
@@ -100,11 +100,7 @@ do { \
|
||||
#define __switch_canary_iparam
|
||||
#endif /* CC_STACKPROTECTOR */
|
||||
|
||||
-/*
|
||||
- * There is no need to save or restore flags, because flags are always
|
||||
- * clean in kernel mode, with the possible exception of IOPL. Kernel IOPL
|
||||
- * has no effect.
|
||||
- */
|
||||
+/* Save restore flags to clear handle leaking NT */
|
||||
#define switch_to(prev, next, last) \
|
||||
asm volatile(SAVE_CONTEXT \
|
||||
"movq %%rsp,%P[threadrsp](%[prev])\n\t" /* save RSP */ \
|
||||
--
|
||||
2.4.5
|
||||
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
From 49718f0fb8c9af192b33d8af3a2826db04025371 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Stern <stern@rowland.harvard.edu>
|
||||
Date: Mon, 17 Aug 2015 11:02:42 -0400
|
||||
Subject: [PATCH] SCSI: Fix NULL pointer dereference in runtime PM
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The routines in scsi_rpm.c assume that if a runtime-PM callback is
|
||||
invoked for a SCSI device, it can only mean that the device's driver
|
||||
has asked the block layer to handle the runtime power management (by
|
||||
calling blk_pm_runtime_init(), which among other things sets q->dev).
|
||||
|
||||
However, this assumption turns out to be wrong for things like the ses
|
||||
driver. Normally ses devices are not allowed to do runtime PM, but
|
||||
userspace can override this setting. If this happens, the kernel gets
|
||||
a NULL pointer dereference when blk_post_runtime_resume() tries to use
|
||||
the uninitialized q->dev pointer.
|
||||
|
||||
This patch fixes the problem by calling the block layer's runtime-PM
|
||||
routines only if the device's driver really does have a runtime-PM
|
||||
callback routine. Since ses doesn't define any such callbacks, the
|
||||
crash won't occur.
|
||||
|
||||
This fixes Bugzilla #101371.
|
||||
|
||||
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
Reported-by: Stanisław Pitucha <viraptor@gmail.com>
|
||||
Reported-by: Ilan Cohen <ilanco@gmail.com>
|
||||
Tested-by: Ilan Cohen <ilanco@gmail.com>
|
||||
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: James Bottomley <JBottomley@Odin.com>
|
||||
---
|
||||
drivers/scsi/scsi_pm.c | 22 +++++++++++-----------
|
||||
1 file changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c
|
||||
index 9e43ae1..e4b7998 100644
|
||||
--- a/drivers/scsi/scsi_pm.c
|
||||
+++ b/drivers/scsi/scsi_pm.c
|
||||
@@ -217,15 +217,15 @@ static int sdev_runtime_suspend(struct device *dev)
|
||||
{
|
||||
const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
- int err;
|
||||
+ int err = 0;
|
||||
|
||||
- err = blk_pre_runtime_suspend(sdev->request_queue);
|
||||
- if (err)
|
||||
- return err;
|
||||
- if (pm && pm->runtime_suspend)
|
||||
+ if (pm && pm->runtime_suspend) {
|
||||
+ err = blk_pre_runtime_suspend(sdev->request_queue);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
err = pm->runtime_suspend(dev);
|
||||
- blk_post_runtime_suspend(sdev->request_queue, err);
|
||||
-
|
||||
+ blk_post_runtime_suspend(sdev->request_queue, err);
|
||||
+ }
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -248,11 +248,11 @@ static int sdev_runtime_resume(struct device *dev)
|
||||
const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
||||
int err = 0;
|
||||
|
||||
- blk_pre_runtime_resume(sdev->request_queue);
|
||||
- if (pm && pm->runtime_resume)
|
||||
+ if (pm && pm->runtime_resume) {
|
||||
+ blk_pre_runtime_resume(sdev->request_queue);
|
||||
err = pm->runtime_resume(dev);
|
||||
- blk_post_runtime_resume(sdev->request_queue, err);
|
||||
-
|
||||
+ blk_post_runtime_resume(sdev->request_queue, err);
|
||||
+ }
|
||||
return err;
|
||||
}
|
||||
|
||||
--
|
||||
2.4.5
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
From 74a80d67b8316eb3fbeb73dafc060a5a0a708587 Mon Sep 17 00:00:00 2001
|
||||
From: Tejun Heo <tj@kernel.org>
|
||||
Date: Mon, 3 Aug 2015 11:46:39 -0400
|
||||
Subject: [PATCH] Revert "libata: Implement NCQ autosense"
|
||||
|
||||
This reverts commit 42b966fbf35da9c87f08d98f9b8978edf9e717cf.
|
||||
|
||||
As implemented, ACS-4 sense reporting for ATA devices bypasses error
|
||||
diagnosis and handling in libata degrading EH behavior significantly.
|
||||
Revert the related changes for now.
|
||||
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Cc: Hannes Reinecke <hare@suse.de>
|
||||
Cc: stable@vger.kernel.org #v4.1+
|
||||
---
|
||||
drivers/ata/libata-eh.c | 18 ------------------
|
||||
drivers/ata/libata-scsi.c | 9 ++-------
|
||||
drivers/ata/libata.h | 1 -
|
||||
include/linux/ata.h | 2 --
|
||||
4 files changed, 2 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
|
||||
index 16125be..cb0508a 100644
|
||||
--- a/drivers/ata/libata-eh.c
|
||||
+++ b/drivers/ata/libata-eh.c
|
||||
@@ -1592,8 +1592,6 @@ static int ata_eh_read_log_10h(struct ata_device *dev,
|
||||
tf->hob_lbah = buf[10];
|
||||
tf->nsect = buf[12];
|
||||
tf->hob_nsect = buf[13];
|
||||
- if (ata_id_has_ncq_autosense(dev->id))
|
||||
- tf->auxiliary = buf[14] << 16 | buf[15] << 8 | buf[16];
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1791,18 +1789,6 @@ void ata_eh_analyze_ncq_error(struct ata_link *link)
|
||||
memcpy(&qc->result_tf, &tf, sizeof(tf));
|
||||
qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
|
||||
qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ;
|
||||
- if (qc->result_tf.auxiliary) {
|
||||
- char sense_key, asc, ascq;
|
||||
-
|
||||
- sense_key = (qc->result_tf.auxiliary >> 16) & 0xff;
|
||||
- asc = (qc->result_tf.auxiliary >> 8) & 0xff;
|
||||
- ascq = qc->result_tf.auxiliary & 0xff;
|
||||
- ata_dev_dbg(dev, "NCQ Autosense %02x/%02x/%02x\n",
|
||||
- sense_key, asc, ascq);
|
||||
- ata_scsi_set_sense(qc->scsicmd, sense_key, asc, ascq);
|
||||
- qc->flags |= ATA_QCFLAG_SENSE_VALID;
|
||||
- }
|
||||
-
|
||||
ehc->i.err_mask &= ~AC_ERR_DEV;
|
||||
}
|
||||
|
||||
@@ -1832,10 +1818,6 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
|
||||
return ATA_EH_RESET;
|
||||
}
|
||||
|
||||
- /* Set by NCQ autosense */
|
||||
- if (qc->flags & ATA_QCFLAG_SENSE_VALID)
|
||||
- return 0;
|
||||
-
|
||||
if (stat & (ATA_ERR | ATA_DF))
|
||||
qc->err_mask |= AC_ERR_DEV;
|
||||
else
|
||||
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
|
||||
index e1ecd2a..0d7f0da 100644
|
||||
--- a/drivers/ata/libata-scsi.c
|
||||
+++ b/drivers/ata/libata-scsi.c
|
||||
@@ -270,11 +270,8 @@ DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR,
|
||||
ata_scsi_park_show, ata_scsi_park_store);
|
||||
EXPORT_SYMBOL_GPL(dev_attr_unload_heads);
|
||||
|
||||
-void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
|
||||
+static void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
|
||||
{
|
||||
- if (!cmd)
|
||||
- return;
|
||||
-
|
||||
cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
|
||||
|
||||
scsi_build_sense_buffer(0, cmd->sense_buffer, sk, asc, ascq);
|
||||
@@ -1780,9 +1777,7 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
|
||||
((cdb[2] & 0x20) || need_sense)) {
|
||||
ata_gen_passthru_sense(qc);
|
||||
} else {
|
||||
- if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
|
||||
- cmd->result = SAM_STAT_CHECK_CONDITION;
|
||||
- } else if (!need_sense) {
|
||||
+ if (!need_sense) {
|
||||
cmd->result = SAM_STAT_GOOD;
|
||||
} else {
|
||||
/* TODO: decide which descriptor format to use
|
||||
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
|
||||
index 8cfdd96..f840ca1 100644
|
||||
--- a/drivers/ata/libata.h
|
||||
+++ b/drivers/ata/libata.h
|
||||
@@ -137,7 +137,6 @@ extern int ata_scsi_add_hosts(struct ata_host *host,
|
||||
struct scsi_host_template *sht);
|
||||
extern void ata_scsi_scan_host(struct ata_port *ap, int sync);
|
||||
extern int ata_scsi_offline_dev(struct ata_device *dev);
|
||||
-extern void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq);
|
||||
extern void ata_scsi_media_change_notify(struct ata_device *dev);
|
||||
extern void ata_scsi_hotplug(struct work_struct *work);
|
||||
extern void ata_schedule_scsi_eh(struct Scsi_Host *shost);
|
||||
diff --git a/include/linux/ata.h b/include/linux/ata.h
|
||||
index 0e6a782..d2992bf 100644
|
||||
--- a/include/linux/ata.h
|
||||
+++ b/include/linux/ata.h
|
||||
@@ -528,8 +528,6 @@ struct ata_bmdma_prd {
|
||||
#define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20)
|
||||
#define ata_id_has_da(id) ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4))
|
||||
#define ata_id_has_devslp(id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8))
|
||||
-#define ata_id_has_ncq_autosense(id) \
|
||||
- ((id)[ATA_ID_FEATURE_SUPP] & (1 << 7))
|
||||
|
||||
static inline bool ata_id_has_hipm(const u16 *id)
|
||||
{
|
||||
--
|
||||
2.4.5
|
||||
|
||||
+212
@@ -0,0 +1,212 @@
|
||||
From 84ded2f8e7dda336fc2fb3570726ceb3b3b3590f Mon Sep 17 00:00:00 2001
|
||||
From: Tejun Heo <tj@kernel.org>
|
||||
Date: Mon, 3 Aug 2015 11:45:34 -0400
|
||||
Subject: [PATCH] Revert "libata: Implement support for sense data reporting"
|
||||
|
||||
This reverts commit fe7173c206de63fc28475ee6ae42ff95c05692de.
|
||||
|
||||
As implemented, ACS-4 sense reporting for ATA devices bypasses error
|
||||
diagnosis and handling in libata degrading EH behavior significantly.
|
||||
Revert the related changes for now.
|
||||
|
||||
ATA_ID_COMMAND_SET_3/4 constants are not reverted as they're used by
|
||||
later changes.
|
||||
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Cc: Hannes Reinecke <hare@suse.de>
|
||||
Cc: stable@vger.kernel.org #v4.1+
|
||||
---
|
||||
drivers/ata/libata-core.c | 20 +----------
|
||||
drivers/ata/libata-eh.c | 86 ++---------------------------------------------
|
||||
include/linux/ata.h | 16 ---------
|
||||
3 files changed, 4 insertions(+), 118 deletions(-)
|
||||
|
||||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
|
||||
index 426bc12..19bcb80 100644
|
||||
--- a/drivers/ata/libata-core.c
|
||||
+++ b/drivers/ata/libata-core.c
|
||||
@@ -2147,24 +2147,6 @@ static int ata_dev_config_ncq(struct ata_device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void ata_dev_config_sense_reporting(struct ata_device *dev)
|
||||
-{
|
||||
- unsigned int err_mask;
|
||||
-
|
||||
- if (!ata_id_has_sense_reporting(dev->id))
|
||||
- return;
|
||||
-
|
||||
- if (ata_id_sense_reporting_enabled(dev->id))
|
||||
- return;
|
||||
-
|
||||
- err_mask = ata_dev_set_feature(dev, SETFEATURE_SENSE_DATA, 0x1);
|
||||
- if (err_mask) {
|
||||
- ata_dev_dbg(dev,
|
||||
- "failed to enable Sense Data Reporting, Emask 0x%x\n",
|
||||
- err_mask);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* ata_dev_configure - Configure the specified ATA/ATAPI device
|
||||
* @dev: Target device to configure
|
||||
@@ -2387,7 +2369,7 @@ int ata_dev_configure(struct ata_device *dev)
|
||||
dev->devslp_timing[i] = sata_setting[j];
|
||||
}
|
||||
}
|
||||
- ata_dev_config_sense_reporting(dev);
|
||||
+
|
||||
dev->cdb_len = 16;
|
||||
}
|
||||
|
||||
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
|
||||
index af08d32..16125be 100644
|
||||
--- a/drivers/ata/libata-eh.c
|
||||
+++ b/drivers/ata/libata-eh.c
|
||||
@@ -1630,70 +1630,6 @@ unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key)
|
||||
}
|
||||
|
||||
/**
|
||||
- * ata_eh_request_sense - perform REQUEST_SENSE_DATA_EXT
|
||||
- * @dev: device to perform REQUEST_SENSE_SENSE_DATA_EXT to
|
||||
- * @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)
|
||||
- * @dfl_sense_key: default sense key to use
|
||||
- *
|
||||
- * Perform REQUEST_SENSE_DATA_EXT after the device reported CHECK
|
||||
- * SENSE. This function is EH helper.
|
||||
- *
|
||||
- * LOCKING:
|
||||
- * Kernel thread context (may sleep).
|
||||
- *
|
||||
- * RETURNS:
|
||||
- * encoded sense data on success, 0 on failure or if sense data
|
||||
- * is not available.
|
||||
- */
|
||||
-static u32 ata_eh_request_sense(struct ata_queued_cmd *qc,
|
||||
- struct scsi_cmnd *cmd)
|
||||
-{
|
||||
- struct ata_device *dev = qc->dev;
|
||||
- struct ata_taskfile tf;
|
||||
- unsigned int err_mask;
|
||||
-
|
||||
- if (!cmd)
|
||||
- return 0;
|
||||
-
|
||||
- DPRINTK("ATA request sense\n");
|
||||
- ata_dev_warn(dev, "request sense\n");
|
||||
- if (!ata_id_sense_reporting_enabled(dev->id)) {
|
||||
- ata_dev_warn(qc->dev, "sense data reporting disabled\n");
|
||||
- return 0;
|
||||
- }
|
||||
- ata_tf_init(dev, &tf);
|
||||
-
|
||||
- tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
|
||||
- tf.flags |= ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
|
||||
- tf.command = ATA_CMD_REQ_SENSE_DATA;
|
||||
- tf.protocol = ATA_PROT_NODATA;
|
||||
-
|
||||
- err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
|
||||
- /*
|
||||
- * ACS-4 states:
|
||||
- * The device may set the SENSE DATA AVAILABLE bit to one in the
|
||||
- * STATUS field and clear the ERROR bit to zero in the STATUS field
|
||||
- * to indicate that the command returned completion without an error
|
||||
- * and the sense data described in table 306 is available.
|
||||
- *
|
||||
- * IOW the 'ATA_SENSE' bit might not be set even though valid
|
||||
- * sense data is available.
|
||||
- * So check for both.
|
||||
- */
|
||||
- if ((tf.command & ATA_SENSE) ||
|
||||
- tf.lbah != 0 || tf.lbam != 0 || tf.lbal != 0) {
|
||||
- ata_scsi_set_sense(cmd, tf.lbah, tf.lbam, tf.lbal);
|
||||
- qc->flags |= ATA_QCFLAG_SENSE_VALID;
|
||||
- ata_dev_warn(dev, "sense data %02x/%02x/%02x\n",
|
||||
- tf.lbah, tf.lbam, tf.lbal);
|
||||
- } else {
|
||||
- ata_dev_warn(dev, "request sense failed stat %02x emask %x\n",
|
||||
- tf.command, err_mask);
|
||||
- }
|
||||
- return err_mask;
|
||||
-}
|
||||
-
|
||||
-/**
|
||||
* atapi_eh_request_sense - perform ATAPI REQUEST_SENSE
|
||||
* @dev: device to perform REQUEST_SENSE to
|
||||
* @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)
|
||||
@@ -1896,22 +1832,7 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
|
||||
return ATA_EH_RESET;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * Sense data reporting does not work if the
|
||||
- * device fault bit is set.
|
||||
- */
|
||||
- if ((stat & ATA_SENSE) && !(stat & ATA_DF) &&
|
||||
- !(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
|
||||
- if (!(qc->ap->pflags & ATA_PFLAG_FROZEN)) {
|
||||
- tmp = ata_eh_request_sense(qc, qc->scsicmd);
|
||||
- if (tmp)
|
||||
- qc->err_mask |= tmp;
|
||||
- } else {
|
||||
- ata_dev_warn(qc->dev, "sense data available but port frozen\n");
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- /* Set by NCQ autosense or request sense above */
|
||||
+ /* Set by NCQ autosense */
|
||||
if (qc->flags & ATA_QCFLAG_SENSE_VALID)
|
||||
return 0;
|
||||
|
||||
@@ -2658,15 +2579,14 @@ static void ata_eh_link_report(struct ata_link *link)
|
||||
|
||||
#ifdef CONFIG_ATA_VERBOSE_ERROR
|
||||
if (res->command & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ |
|
||||
- ATA_SENSE | ATA_ERR)) {
|
||||
+ ATA_ERR)) {
|
||||
if (res->command & ATA_BUSY)
|
||||
ata_dev_err(qc->dev, "status: { Busy }\n");
|
||||
else
|
||||
- ata_dev_err(qc->dev, "status: { %s%s%s%s%s}\n",
|
||||
+ ata_dev_err(qc->dev, "status: { %s%s%s%s}\n",
|
||||
res->command & ATA_DRDY ? "DRDY " : "",
|
||||
res->command & ATA_DF ? "DF " : "",
|
||||
res->command & ATA_DRQ ? "DRQ " : "",
|
||||
- res->command & ATA_SENSE ? "SENSE " : "",
|
||||
res->command & ATA_ERR ? "ERR " : "");
|
||||
}
|
||||
|
||||
diff --git a/include/linux/ata.h b/include/linux/ata.h
|
||||
index 6c78956..0e6a782 100644
|
||||
--- a/include/linux/ata.h
|
||||
+++ b/include/linux/ata.h
|
||||
@@ -385,8 +385,6 @@ enum {
|
||||
SATA_SSP = 0x06, /* Software Settings Preservation */
|
||||
SATA_DEVSLP = 0x09, /* Device Sleep */
|
||||
|
||||
- SETFEATURE_SENSE_DATA = 0xC3, /* Sense Data Reporting feature */
|
||||
-
|
||||
/* feature values for SET_MAX */
|
||||
ATA_SET_MAX_ADDR = 0x00,
|
||||
ATA_SET_MAX_PASSWD = 0x01,
|
||||
@@ -710,20 +708,6 @@ static inline bool ata_id_has_read_log_d
|
||||
return id[ATA_ID_COMMAND_SET_3] & (1 << 3);
|
||||
}
|
||||
|
||||
-static inline bool ata_id_has_sense_reporting(const u16 *id)
|
||||
-{
|
||||
- if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
|
||||
- return false;
|
||||
- return id[ATA_ID_COMMAND_SET_3] & (1 << 6);
|
||||
-}
|
||||
-
|
||||
-static inline bool ata_id_sense_reporting_enabled(const u16 *id)
|
||||
-{
|
||||
- if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
|
||||
- return false;
|
||||
- return id[ATA_ID_COMMAND_SET_4] & (1 << 6);
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* ata_id_major_version - get ATA level of drive
|
||||
* @id: Identify data
|
||||
+169
@@ -0,0 +1,169 @@
|
||||
From fe16d4f202c59a560533a223bc6375739ee30944 Mon Sep 17 00:00:00 2001
|
||||
From: Tejun Heo <tj@kernel.org>
|
||||
Date: Mon, 3 Aug 2015 11:41:33 -0400
|
||||
Subject: [PATCH] Revert "libata-eh: Set 'information' field for autosense"
|
||||
|
||||
This reverts commit a1524f226a02aa6edebd90ae0752e97cfd78b159.
|
||||
|
||||
As implemented, ACS-4 sense reporting for ATA devices bypasses error
|
||||
diagnosis and handling in libata degrading EH behavior significantly.
|
||||
Revert the related changes for now.
|
||||
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Cc: Hannes Reinecke <hare@suse.de>
|
||||
Cc: stable@vger.kernel.org #v4.1+
|
||||
---
|
||||
drivers/ata/libata-core.c | 4 ++--
|
||||
drivers/ata/libata-eh.c | 3 ---
|
||||
drivers/ata/libata-scsi.c | 12 ------------
|
||||
drivers/ata/libata.h | 5 +----
|
||||
drivers/scsi/scsi_error.c | 31 -------------------------------
|
||||
include/scsi/scsi_eh.h | 1 -
|
||||
6 files changed, 3 insertions(+), 53 deletions(-)
|
||||
|
||||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
|
||||
index db5d9f7..426bc12 100644
|
||||
--- a/drivers/ata/libata-core.c
|
||||
+++ b/drivers/ata/libata-core.c
|
||||
@@ -694,11 +694,11 @@ static int ata_rwcmd_protocol(struct ata_taskfile *tf, struct ata_device *dev)
|
||||
* RETURNS:
|
||||
* Block address read from @tf.
|
||||
*/
|
||||
-u64 ata_tf_read_block(const struct ata_taskfile *tf, struct ata_device *dev)
|
||||
+u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev)
|
||||
{
|
||||
u64 block = 0;
|
||||
|
||||
- if (!dev || tf->flags & ATA_TFLAG_LBA) {
|
||||
+ if (tf->flags & ATA_TFLAG_LBA) {
|
||||
if (tf->flags & ATA_TFLAG_LBA48) {
|
||||
block |= (u64)tf->hob_lbah << 40;
|
||||
block |= (u64)tf->hob_lbam << 32;
|
||||
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
|
||||
index 7465031..af08d32 100644
|
||||
--- a/drivers/ata/libata-eh.c
|
||||
+++ b/drivers/ata/libata-eh.c
|
||||
@@ -1864,7 +1864,6 @@ void ata_eh_analyze_ncq_error(struct ata_link *link)
|
||||
ata_dev_dbg(dev, "NCQ Autosense %02x/%02x/%02x\n",
|
||||
sense_key, asc, ascq);
|
||||
ata_scsi_set_sense(qc->scsicmd, sense_key, asc, ascq);
|
||||
- ata_scsi_set_sense_information(qc->scsicmd, &qc->result_tf);
|
||||
qc->flags |= ATA_QCFLAG_SENSE_VALID;
|
||||
}
|
||||
|
||||
@@ -1907,8 +1906,6 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
|
||||
tmp = ata_eh_request_sense(qc, qc->scsicmd);
|
||||
if (tmp)
|
||||
qc->err_mask |= tmp;
|
||||
- else
|
||||
- ata_scsi_set_sense_information(qc->scsicmd, tf);
|
||||
} else {
|
||||
ata_dev_warn(qc->dev, "sense data available but port frozen\n");
|
||||
}
|
||||
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
|
||||
index 641a61a..e1ecd2a 100644
|
||||
--- a/drivers/ata/libata-scsi.c
|
||||
+++ b/drivers/ata/libata-scsi.c
|
||||
@@ -280,18 +280,6 @@ void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
|
||||
scsi_build_sense_buffer(0, cmd->sense_buffer, sk, asc, ascq);
|
||||
}
|
||||
|
||||
-void ata_scsi_set_sense_information(struct scsi_cmnd *cmd,
|
||||
- const struct ata_taskfile *tf)
|
||||
-{
|
||||
- u64 information;
|
||||
-
|
||||
- if (!cmd)
|
||||
- return;
|
||||
-
|
||||
- information = ata_tf_read_block(tf, NULL);
|
||||
- scsi_set_sense_information(cmd->sense_buffer, information);
|
||||
-}
|
||||
-
|
||||
static ssize_t
|
||||
ata_scsi_em_message_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
|
||||
index a998a17..8cfdd96 100644
|
||||
--- a/drivers/ata/libata.h
|
||||
+++ b/drivers/ata/libata.h
|
||||
@@ -67,8 +67,7 @@ extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev, int tag);
|
||||
extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
|
||||
u64 block, u32 n_block, unsigned int tf_flags,
|
||||
unsigned int tag);
|
||||
-extern u64 ata_tf_read_block(const struct ata_taskfile *tf,
|
||||
- struct ata_device *dev);
|
||||
+extern u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev);
|
||||
extern unsigned ata_exec_internal(struct ata_device *dev,
|
||||
struct ata_taskfile *tf, const u8 *cdb,
|
||||
int dma_dir, void *buf, unsigned int buflen,
|
||||
@@ -139,8 +138,6 @@ extern int ata_scsi_add_hosts(struct ata_host *host,
|
||||
extern void ata_scsi_scan_host(struct ata_port *ap, int sync);
|
||||
extern int ata_scsi_offline_dev(struct ata_device *dev);
|
||||
extern void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq);
|
||||
-extern void ata_scsi_set_sense_information(struct scsi_cmnd *cmd,
|
||||
- const struct ata_taskfile *tf);
|
||||
extern void ata_scsi_media_change_notify(struct ata_device *dev);
|
||||
extern void ata_scsi_hotplug(struct work_struct *work);
|
||||
extern void ata_schedule_scsi_eh(struct Scsi_Host *shost);
|
||||
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
|
||||
index 106884a..b79bbea 100644
|
||||
--- a/drivers/scsi/scsi_error.c
|
||||
+++ b/drivers/scsi/scsi_error.c
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/jiffies.h>
|
||||
-#include <asm/unaligned.h>
|
||||
|
||||
#include <scsi/scsi.h>
|
||||
#include <scsi/scsi_cmnd.h>
|
||||
@@ -2523,33 +2522,3 @@ void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq)
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(scsi_build_sense_buffer);
|
||||
-
|
||||
-/**
|
||||
- * scsi_set_sense_information - set the information field in a
|
||||
- * formatted sense data buffer
|
||||
- * @buf: Where to build sense data
|
||||
- * @info: 64-bit information value to be set
|
||||
- *
|
||||
- **/
|
||||
-void scsi_set_sense_information(u8 *buf, u64 info)
|
||||
-{
|
||||
- if ((buf[0] & 0x7f) == 0x72) {
|
||||
- u8 *ucp, len;
|
||||
-
|
||||
- len = buf[7];
|
||||
- ucp = (char *)scsi_sense_desc_find(buf, len + 8, 0);
|
||||
- if (!ucp) {
|
||||
- buf[7] = len + 0xa;
|
||||
- ucp = buf + 8 + len;
|
||||
- }
|
||||
- ucp[0] = 0;
|
||||
- ucp[1] = 0xa;
|
||||
- ucp[2] = 0x80; /* Valid bit */
|
||||
- ucp[3] = 0;
|
||||
- put_unaligned_be64(info, &ucp[4]);
|
||||
- } else if ((buf[0] & 0x7f) == 0x70) {
|
||||
- buf[0] |= 0x80;
|
||||
- put_unaligned_be64(info, &buf[3]);
|
||||
- }
|
||||
-}
|
||||
-EXPORT_SYMBOL(scsi_set_sense_information);
|
||||
diff --git a/include/scsi/scsi_eh.h b/include/scsi/scsi_eh.h
|
||||
index 4942710..8d1d7fa 100644
|
||||
--- a/include/scsi/scsi_eh.h
|
||||
+++ b/include/scsi/scsi_eh.h
|
||||
@@ -28,7 +28,6 @@ extern int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len,
|
||||
u64 * info_out);
|
||||
|
||||
extern void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq);
|
||||
-extern void scsi_set_sense_information(u8 *buf, u64 info);
|
||||
|
||||
extern int scsi_ioctl_reset(struct scsi_device *, int __user *);
|
||||
|
||||
--
|
||||
2.4.5
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
From 42378f40dd5bbe59fa41b0499f10789eb5d44d89 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Backlund <tmb@mageia.org>
|
||||
Date: Tue, 18 Aug 2015 22:24:50 +0300
|
||||
Subject: [PATCH] Revert "ext4: remove block_device_ejected"
|
||||
|
||||
This reverts commit 08439fec266c3cc5702953b4f54bdf5649357de0.
|
||||
|
||||
its reported on stable@ ml to break usb storage
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
---
|
||||
fs/ext4/super.c | 18 +++++++++++++++++-
|
||||
1 file changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
|
||||
index ca9d4a2..9829003 100644
|
||||
--- a/fs/ext4/super.c
|
||||
+++ b/fs/ext4/super.c
|
||||
@@ -324,6 +324,22 @@ static void save_error_info(struct super_block *sb, const char *func,
|
||||
ext4_commit_super(sb, 1);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * The del_gendisk() function uninitializes the disk-specific data
|
||||
+ * structures, including the bdi structure, without telling anyone
|
||||
+ * else. Once this happens, any attempt to call mark_buffer_dirty()
|
||||
+ * (for example, by ext4_commit_super), will cause a kernel OOPS.
|
||||
+ * This is a kludge to prevent these oops until we can put in a proper
|
||||
+ * hook in del_gendisk() to inform the VFS and file system layers.
|
||||
+ */
|
||||
+static int block_device_ejected(struct super_block *sb)
|
||||
+{
|
||||
+ struct inode *bd_inode = sb->s_bdev->bd_inode;
|
||||
+ struct backing_dev_info *bdi = inode_to_bdi(bd_inode);
|
||||
+
|
||||
+ return bdi->dev == NULL;
|
||||
+}
|
||||
+
|
||||
static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
|
||||
{
|
||||
struct super_block *sb = journal->j_private;
|
||||
@@ -4590,7 +4606,7 @@ static int ext4_commit_super(struct super_block *sb, int sync)
|
||||
struct buffer_head *sbh = EXT4_SB(sb)->s_sbh;
|
||||
int error = 0;
|
||||
|
||||
- if (!sbh)
|
||||
+ if (!sbh || block_device_ejected(sb))
|
||||
return error;
|
||||
if (buffer_write_io_error(sbh)) {
|
||||
/*
|
||||
--
|
||||
2.4.5
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
From ed63baaf849e91c84ac3e042b1fd6a0af07c16f3 Mon Sep 17 00:00:00 2001
|
||||
From: "Thulasimani,Sivakumar" <sivakumar.thulasimani@intel.com>
|
||||
Date: Tue, 18 Aug 2015 15:30:37 +0530
|
||||
Subject: [PATCH] drm/i915: Avoid TP3 on CHV
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This patch removes TP3 support on CHV since there is no support
|
||||
for HBR2 on this platform.
|
||||
|
||||
v2: rename the function to indicate it checks source rates (Jani)
|
||||
v3: update comment to indicate TP3 dependency on HBR2 supported
|
||||
hardware (Jani)
|
||||
|
||||
Cc: stable@vger.kernel.org # v4.1+
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com>
|
||||
[Jani: fixed a couple of checkpatch warnings.]
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 7ad0e0b..1df0e1f 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -1166,6 +1166,19 @@ intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
|
||||
return (intel_dp_max_link_bw(intel_dp) >> 3) + 1;
|
||||
}
|
||||
|
||||
+static bool intel_dp_source_supports_hbr2(struct drm_device *dev)
|
||||
+{
|
||||
+ /* WaDisableHBR2:skl */
|
||||
+ if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) ||
|
||||
+ (INTEL_INFO(dev)->gen >= 9))
|
||||
+ return true;
|
||||
+ else
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
intel_dp_source_rates(struct drm_device *dev, const int **source_rates)
|
||||
{
|
||||
@@ -1176,12 +1189,8 @@ intel_dp_source_rates(struct drm_device *dev, const int **source_rates)
|
||||
|
||||
*source_rates = default_rates;
|
||||
|
||||
- /* WaDisableHBR2:skl */
|
||||
- if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0)
|
||||
- return (DP_LINK_BW_2_7 >> 3) + 1;
|
||||
-
|
||||
- if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) ||
|
||||
- (INTEL_INFO(dev)->gen >= 9))
|
||||
+ /* This depends on the fact that 5.4 is last value in the array */
|
||||
+ if (intel_dp_source_supports_hbr2(dev))
|
||||
return (DP_LINK_BW_5_4 >> 3) + 1;
|
||||
else
|
||||
return (DP_LINK_BW_2_7 >> 3) + 1;
|
||||
@@ -3936,10 +3945,15 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
|
||||
}
|
||||
}
|
||||
|
||||
- /* Training Pattern 3 support, both source and sink */
|
||||
+ /* Training Pattern 3 support, Intel platforms that support HBR2 alone
|
||||
+ * have support for TP3 hence that check is used along with dpcd check
|
||||
+ * to ensure TP3 can be enabled.
|
||||
+ * SKL < B0: due it's WaDisableHBR2 is the only exception where TP3 is
|
||||
+ * supported but still not enabled.
|
||||
+ */
|
||||
if (intel_dp->dpcd[DP_DPCD_REV] >= 0x12 &&
|
||||
intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_TPS3_SUPPORTED &&
|
||||
- (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8)) {
|
||||
+ intel_dp_source_supports_hbr2(dev)) {
|
||||
intel_dp->use_tps3 = true;
|
||||
DRM_DEBUG_KMS("Displayport TPS3 supported\n");
|
||||
} else
|
||||
--
|
||||
2.4.5
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
From 5e86dfe39f54ab13fd8079ac3d6cb100318909a3 Mon Sep 17 00:00:00 2001
|
||||
From: "Thulasimani,Sivakumar" <sivakumar.thulasimani@intel.com>
|
||||
Date: Tue, 18 Aug 2015 11:07:57 +0530
|
||||
Subject: [PATCH] drm/i915: remove HBR2 from chv supported list
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This patch removes 5.4Gbps from supported link rate for CHV since
|
||||
it is not supported in it.
|
||||
|
||||
v2: change the ordering for better readability (Ville)
|
||||
|
||||
Cc: stable@vger.kernel.org # v4.1+
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_dp.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 6c8bf34..7ad0e0b 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -1176,11 +1176,12 @@ intel_dp_source_rates(struct drm_device *dev, const int **source_rates)
|
||||
|
||||
*source_rates = default_rates;
|
||||
|
||||
+ /* WaDisableHBR2:skl */
|
||||
if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0)
|
||||
- /* WaDisableHBR2:skl */
|
||||
return (DP_LINK_BW_2_7 >> 3) + 1;
|
||||
- else if (INTEL_INFO(dev)->gen >= 8 ||
|
||||
- (IS_HASWELL(dev) && !IS_HSW_ULX(dev)))
|
||||
+
|
||||
+ if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) ||
|
||||
+ (INTEL_INFO(dev)->gen >= 9))
|
||||
return (DP_LINK_BW_5_4 >> 3) + 1;
|
||||
else
|
||||
return (DP_LINK_BW_2_7 >> 3) + 1;
|
||||
--
|
||||
2.4.5
|
||||
|
||||
@@ -14,6 +14,33 @@
|
||||
###
|
||||
### Stable Queue
|
||||
###
|
||||
stable-ipc-sem-fix-use-after-free-on-ipc_rmid-after-a-task-using-same-semaphore-set-exits.patch
|
||||
stable-ipc-sem.c-update-correct-memory-barriers.patch
|
||||
stable-mm-hwpoison-fix-page-refcount-of-unknown-non-lru-page.patch
|
||||
stable-mm-hwpoison-fix-fail-isolate-hugetlbfs-page-w-refcount-held.patch
|
||||
stable-clk-pxa-pxa3xx-fix-cken-register-access.patch
|
||||
stable-xen-blkfront-don-t-add-indirect-pages-to-list-when.patch
|
||||
stable-xen-blkback-replace-work_pending-with-work_busy-in-purge_persistent_gnt.patch
|
||||
stable-rsi-fix-failure-to-load-firmware-after-memory-leak-fix-and-fix-the-leak.patch
|
||||
stable-perf-fix-fasync-handling-on-inherited-events.patch
|
||||
stable-perf-fix-running-time-accounting.patch
|
||||
stable-perf-fix-double-free-of-the-aux-buffer.patch
|
||||
stable-perf-fix-perf_event_ioc_period-migration-race.patch
|
||||
stable-iwlwifi-pcie-fix-prepare-card-flow.patch
|
||||
stable-rtlwifi-rtl8723be-add-module-parameter-for-msi-interrupts.patch
|
||||
stable-rtlwifi-fix-null-dereference-when-pci-driver-used-as-an-ap.patch
|
||||
stable-x86-xen-build-xen-pv-apic-driver-for-domu-as-well.patch
|
||||
stable-xen-xenbus-don-t-leak-memory-when-unmapping-the-ring-on-hvm-backend.patch
|
||||
stable-dm-thin-metadata-delete-btrees-when-releasing-metadata-snapshot.patch
|
||||
stable-localmodconfig-use-kbuild-files-too.patch
|
||||
stable-edac-ppc4xx-access-mci-csrows-array-elements-properly.patch
|
||||
stable-hid-hid-input-fix-accessing-freed-memory-during-device-disconnect.patch
|
||||
stable-hid-uclogic-fix-limit-in-uclogic_tablet_enable.patch
|
||||
stable-drm-radeon-add-new-oland-pci-id.patch
|
||||
stable-drm-vmwgfx-fix-execbuf-locking-issues.patch
|
||||
|
||||
# DaveM
|
||||
stable-net_41.mbox.patch
|
||||
|
||||
###
|
||||
### Arch x86
|
||||
@@ -38,6 +65,15 @@ x86-increase-default-minimum-vmalloc-area-by-64MB-to-192MB.patch
|
||||
# slows down boot
|
||||
Revert-cpufreq-pcc-Enable-autoload-of-pcc-cpufreq-fo.patch
|
||||
|
||||
# wrong optimization
|
||||
Revert-sched-x86_64-Don-t-save-flags-on-context-swit.patch
|
||||
|
||||
# fix unbootable systems
|
||||
x86-apic-Fix-fallout-from-x2apic-cleanup.patch
|
||||
|
||||
# fixes powertop
|
||||
x86-idle-Restore-trace_cpu_idle-to-mwait_idle-calls.patch
|
||||
|
||||
###
|
||||
### Core
|
||||
###
|
||||
@@ -120,6 +156,14 @@ ata-jmicron-disable-broken-async_suspend.patch
|
||||
block-Make-CFQ-default-to-IOPS-mode-on-SSDs.patch
|
||||
block-cfq-iosched-fix-the-setting-of-IOPS-mode-on-SSDs.patch
|
||||
|
||||
# libata eh breakage
|
||||
ata-Revert-libata-eh-Set-information-field-for-autosense.patch
|
||||
ata-Revert-libata-Implement-support-for-sense-data-repor.patch
|
||||
ata-Revert-libata-Implement-NCQ-autosense.patch
|
||||
|
||||
# ses driver crash
|
||||
SCSI-Fix-NULL-pointer-dereference-in-runtime-PM.patch
|
||||
|
||||
###
|
||||
### File-system
|
||||
###
|
||||
@@ -128,6 +172,9 @@ block-cfq-iosched-fix-the-setting-of-IOPS-mode-on-SSDs.patch
|
||||
fs-aufs4.patch
|
||||
fs-aufs4-modular.patch
|
||||
|
||||
# ext4
|
||||
fs-Revert-ext4-remove-block_device_ejected.patch
|
||||
|
||||
###
|
||||
### FireWire
|
||||
###
|
||||
@@ -161,6 +208,10 @@ gpu-drm-mach64-linux-3.14-buildfix.patch
|
||||
gpu-drm-mach64-3.17-buildfix.patch
|
||||
gpu-drm-mach64-3.18-buildfix.patch
|
||||
|
||||
# i915
|
||||
gpu-drm-i915-remove-HBR2-from-chv-supported-list.patch
|
||||
gpu-drm-i915-Avoid-TP3-on-CHV.patch
|
||||
|
||||
###
|
||||
### Hardware Monitoring
|
||||
###
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
From b93028c9af807b9474789e6aba34a6135b6cb708 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Jarzmik <robert.jarzmik@free.fr>
|
||||
Date: Tue, 4 Aug 2015 08:21:33 +0200
|
||||
Subject: clk: pxa: pxa3xx: fix CKEN register access
|
||||
|
||||
From: Robert Jarzmik <robert.jarzmik@free.fr>
|
||||
|
||||
commit b93028c9af807b9474789e6aba34a6135b6cb708 upstream.
|
||||
|
||||
Clocks 0 to 31 are on CKENA, and not CKENB. The clock register names
|
||||
were inadequately inverted. As a consequence, all clock operations were
|
||||
happening on CKENB, because almost all but 2 clocks are on CKENA.
|
||||
|
||||
As the clocks were activated by the bootloader in the former tests, it
|
||||
escaped the testing that the wrong clock gate was manipulated. The error
|
||||
was revealed by changing the pxa3xx-nand driver to a module, where upon
|
||||
unloading, the wrong clock was disabled in CKENB.
|
||||
|
||||
Fixes: 9bbb8a338fb2 ("clk: pxa: add pxa3xx clock driver")
|
||||
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
|
||||
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/clk/pxa/clk-pxa3xx.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/clk/pxa/clk-pxa3xx.c
|
||||
+++ b/drivers/clk/pxa/clk-pxa3xx.c
|
||||
@@ -126,7 +126,7 @@ PARENTS(pxa3xx_ac97_bus) = { "ring_osc_6
|
||||
PARENTS(pxa3xx_sbus) = { "ring_osc_60mhz", "system_bus" };
|
||||
PARENTS(pxa3xx_smemcbus) = { "ring_osc_60mhz", "smemc" };
|
||||
|
||||
-#define CKEN_AB(bit) ((CKEN_ ## bit > 31) ? &CKENA : &CKENB)
|
||||
+#define CKEN_AB(bit) ((CKEN_ ## bit > 31) ? &CKENB : &CKENA)
|
||||
#define PXA3XX_CKEN(dev_id, con_id, parents, mult_lp, div_lp, mult_hp, \
|
||||
div_hp, bit, is_lp, flags) \
|
||||
PXA_CKEN(dev_id, con_id, bit, parents, mult_lp, div_lp, \
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
From 7f518ad0a212e2a6fd68630e176af1de395070a7 Mon Sep 17 00:00:00 2001
|
||||
From: Joe Thornber <ejt@redhat.com>
|
||||
Date: Wed, 12 Aug 2015 15:10:21 +0100
|
||||
Subject: dm thin metadata: delete btrees when releasing metadata snapshot
|
||||
|
||||
From: Joe Thornber <ejt@redhat.com>
|
||||
|
||||
commit 7f518ad0a212e2a6fd68630e176af1de395070a7 upstream.
|
||||
|
||||
The device details and mapping trees were just being decremented
|
||||
before. Now btree_del() is called to do a deep delete.
|
||||
|
||||
Signed-off-by: Joe Thornber <ejt@redhat.com>
|
||||
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/md/dm-thin-metadata.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/md/dm-thin-metadata.c
|
||||
+++ b/drivers/md/dm-thin-metadata.c
|
||||
@@ -1295,8 +1295,8 @@ static int __release_metadata_snap(struc
|
||||
return r;
|
||||
|
||||
disk_super = dm_block_data(copy);
|
||||
- dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->data_mapping_root));
|
||||
- dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->device_details_root));
|
||||
+ dm_btree_del(&pmd->info, le64_to_cpu(disk_super->data_mapping_root));
|
||||
+ dm_btree_del(&pmd->details_info, le64_to_cpu(disk_super->device_details_root));
|
||||
dm_sm_dec_block(pmd->metadata_sm, held_root);
|
||||
|
||||
return dm_tm_unlock(pmd->tm, copy);
|
||||
@@ -0,0 +1,26 @@
|
||||
From e037239e5e7b61007763984aa35a8329596d8c88 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Mon, 10 Aug 2015 15:28:49 -0400
|
||||
Subject: drm/radeon: add new OLAND pci id
|
||||
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
|
||||
commit e037239e5e7b61007763984aa35a8329596d8c88 upstream.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
include/drm/drm_pciids.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/include/drm/drm_pciids.h
|
||||
+++ b/include/drm/drm_pciids.h
|
||||
@@ -172,6 +172,7 @@
|
||||
{0x1002, 0x6610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
+ {0x1002, 0x6617, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6620, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6621, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6623, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
@@ -0,0 +1,60 @@
|
||||
From 3e04e2fe6d87807d27521ad6ebb9e7919d628f25 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Date: Tue, 11 Aug 2015 22:31:17 -0700
|
||||
Subject: drm/vmwgfx: Fix execbuf locking issues
|
||||
|
||||
From: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
|
||||
commit 3e04e2fe6d87807d27521ad6ebb9e7919d628f25 upstream.
|
||||
|
||||
This addresses two issues that cause problems with viewperf maya-03 in
|
||||
situation with memory pressure.
|
||||
|
||||
The first issue causes attempts to unreserve buffers if batched
|
||||
reservation fails due to, for example, a signal pending. While previously
|
||||
the ttm_eu api was resistant against this type of error, it is no longer
|
||||
and the lockdep code will complain about attempting to unreserve buffers
|
||||
that are not reserved. The issue is resolved by avoid calling
|
||||
ttm_eu_backoff_reservation in the buffer reserve error path.
|
||||
|
||||
The second issue is that the binding_mutex may be held when user-space
|
||||
fence objects are created and hence during memory reclaims. This may cause
|
||||
recursive attempts to grab the binding mutex. The issue is resolved by not
|
||||
holding the binding mutex across fence creation and submission.
|
||||
|
||||
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Reviewed-by: Sinclair Yeh <syeh@vmware.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
|
||||
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
|
||||
@@ -2492,7 +2492,7 @@ int vmw_execbuf_process(struct drm_file
|
||||
ret = ttm_eu_reserve_buffers(&ticket, &sw_context->validate_nodes,
|
||||
true, NULL);
|
||||
if (unlikely(ret != 0))
|
||||
- goto out_err;
|
||||
+ goto out_err_nores;
|
||||
|
||||
ret = vmw_validate_buffers(dev_priv, sw_context);
|
||||
if (unlikely(ret != 0))
|
||||
@@ -2536,6 +2536,7 @@ int vmw_execbuf_process(struct drm_file
|
||||
vmw_resource_relocations_free(&sw_context->res_relocations);
|
||||
|
||||
vmw_fifo_commit(dev_priv, command_size);
|
||||
+ mutex_unlock(&dev_priv->binding_mutex);
|
||||
|
||||
vmw_query_bo_switch_commit(dev_priv, sw_context);
|
||||
ret = vmw_execbuf_fence_commands(file_priv, dev_priv,
|
||||
@@ -2551,7 +2552,6 @@ int vmw_execbuf_process(struct drm_file
|
||||
DRM_ERROR("Fence submission error. Syncing.\n");
|
||||
|
||||
vmw_resource_list_unreserve(&sw_context->resource_list, false);
|
||||
- mutex_unlock(&dev_priv->binding_mutex);
|
||||
|
||||
ttm_eu_fence_buffer_objects(&ticket, &sw_context->validate_nodes,
|
||||
(void *) fence);
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
From 5c16179b550b9fd8114637a56b153c9768ea06a5 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Walle <michael@walle.cc>
|
||||
Date: Tue, 21 Jul 2015 11:00:53 +0200
|
||||
Subject: EDAC, ppc4xx: Access mci->csrows array elements properly
|
||||
|
||||
From: Michael Walle <michael@walle.cc>
|
||||
|
||||
commit 5c16179b550b9fd8114637a56b153c9768ea06a5 upstream.
|
||||
|
||||
The commit
|
||||
|
||||
de3910eb79ac ("edac: change the mem allocation scheme to
|
||||
make Documentation/kobject.txt happy")
|
||||
|
||||
changed the memory allocation for the csrows member. But ppc4xx_edac was
|
||||
forgotten in the patch. Fix it.
|
||||
|
||||
Signed-off-by: Michael Walle <michael@walle.cc>
|
||||
Cc: linux-edac <linux-edac@vger.kernel.org>
|
||||
Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
|
||||
Link: http://lkml.kernel.org/r/1437469253-8611-1-git-send-email-michael@walle.cc
|
||||
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/edac/ppc4xx_edac.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/edac/ppc4xx_edac.c
|
||||
+++ b/drivers/edac/ppc4xx_edac.c
|
||||
@@ -920,7 +920,7 @@ static int ppc4xx_edac_init_csrows(struc
|
||||
*/
|
||||
|
||||
for (row = 0; row < mci->nr_csrows; row++) {
|
||||
- struct csrow_info *csi = &mci->csrows[row];
|
||||
+ struct csrow_info *csi = mci->csrows[row];
|
||||
|
||||
/*
|
||||
* Get the configuration settings for this
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
From 0621809e37936e7c2b3eac9165cf2aad7f9189eb Mon Sep 17 00:00:00 2001
|
||||
From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
||||
Date: Mon, 3 Aug 2015 14:57:30 +0900
|
||||
Subject: HID: hid-input: Fix accessing freed memory during device disconnect
|
||||
|
||||
From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
||||
|
||||
commit 0621809e37936e7c2b3eac9165cf2aad7f9189eb upstream.
|
||||
|
||||
During unbinding the driver was dereferencing a pointer to memory
|
||||
already freed by power_supply_unregister().
|
||||
|
||||
Driver was freeing its internal description of battery through pointers
|
||||
stored in power_supply structure. However, because the core owns the
|
||||
power supply instance, after calling power_supply_unregister() this
|
||||
memory is freed and the driver cannot access these members.
|
||||
|
||||
Fix this by storing the pointer to internal description of battery in a
|
||||
local variable before calling power_supply_unregister(), so the pointer
|
||||
remains valid.
|
||||
|
||||
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
||||
Reported-by: H.J. Lu <hjl.tools@gmail.com>
|
||||
Fixes: 297d716f6260 ("power_supply: Change ownership from driver to core")
|
||||
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/hid/hid-input.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/hid/hid-input.c
|
||||
+++ b/drivers/hid/hid-input.c
|
||||
@@ -462,12 +462,15 @@ out:
|
||||
|
||||
static void hidinput_cleanup_battery(struct hid_device *dev)
|
||||
{
|
||||
+ const struct power_supply_desc *psy_desc;
|
||||
+
|
||||
if (!dev->battery)
|
||||
return;
|
||||
|
||||
+ psy_desc = dev->battery->desc;
|
||||
power_supply_unregister(dev->battery);
|
||||
- kfree(dev->battery->desc->name);
|
||||
- kfree(dev->battery->desc);
|
||||
+ kfree(psy_desc->name);
|
||||
+ kfree(psy_desc);
|
||||
dev->battery = NULL;
|
||||
}
|
||||
#else /* !CONFIG_HID_BATTERY_STRENGTH */
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
From 4a8e70f5d0d80675fc17b9ba1e62db8ca6b91775 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Date: Wed, 29 Jul 2015 13:16:06 +0300
|
||||
Subject: HID: uclogic: fix limit in uclogic_tablet_enable()
|
||||
|
||||
From: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
|
||||
commit 4a8e70f5d0d80675fc17b9ba1e62db8ca6b91775 upstream.
|
||||
|
||||
The limit should be ARRAY_SIZE(params) (5 elements) here instead of
|
||||
sizeof(params) (20 bytes).
|
||||
|
||||
Fixes: 08177f40bd00 ('HID: uclogic: merge hid-huion driver in hid-uclogic')
|
||||
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Reviewed-by: Nikolai Kondrashov <spbnick@gmail.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/hid/hid-uclogic.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/hid/hid-uclogic.c
|
||||
+++ b/drivers/hid/hid-uclogic.c
|
||||
@@ -858,7 +858,7 @@ static int uclogic_tablet_enable(struct
|
||||
for (p = drvdata->rdesc;
|
||||
p <= drvdata->rdesc + drvdata->rsize - 4;) {
|
||||
if (p[0] == 0xFE && p[1] == 0xED && p[2] == 0x1D &&
|
||||
- p[3] < sizeof(params)) {
|
||||
+ p[3] < ARRAY_SIZE(params)) {
|
||||
v = params[p[3]];
|
||||
put_unaligned(cpu_to_le32(v), (s32 *)p);
|
||||
p += 4;
|
||||
+254
@@ -0,0 +1,254 @@
|
||||
From 602b8593d2b4138c10e922eeaafe306f6b51817b Mon Sep 17 00:00:00 2001
|
||||
From: "Herton R. Krzesinski" <herton@redhat.com>
|
||||
Date: Fri, 14 Aug 2015 15:35:02 -0700
|
||||
Subject: ipc,sem: fix use after free on IPC_RMID after a task using same semaphore set exits
|
||||
|
||||
From: "Herton R. Krzesinski" <herton@redhat.com>
|
||||
|
||||
commit 602b8593d2b4138c10e922eeaafe306f6b51817b upstream.
|
||||
|
||||
The current semaphore code allows a potential use after free: in
|
||||
exit_sem we may free the task's sem_undo_list while there is still
|
||||
another task looping through the same semaphore set and cleaning the
|
||||
sem_undo list at freeary function (the task called IPC_RMID for the same
|
||||
semaphore set).
|
||||
|
||||
For example, with a test program [1] running which keeps forking a lot
|
||||
of processes (which then do a semop call with SEM_UNDO flag), and with
|
||||
the parent right after removing the semaphore set with IPC_RMID, and a
|
||||
kernel built with CONFIG_SLAB, CONFIG_SLAB_DEBUG and
|
||||
CONFIG_DEBUG_SPINLOCK, you can easily see something like the following
|
||||
in the kernel log:
|
||||
|
||||
Slab corruption (Not tainted): kmalloc-64 start=ffff88003b45c1c0, len=64
|
||||
000: 6b 6b 6b 6b 6b 6b 6b 6b 00 6b 6b 6b 6b 6b 6b 6b kkkkkkkk.kkkkkkk
|
||||
010: ff ff ff ff 6b 6b 6b 6b ff ff ff ff ff ff ff ff ....kkkk........
|
||||
Prev obj: start=ffff88003b45c180, len=64
|
||||
000: 00 00 00 00 ad 4e ad de ff ff ff ff 5a 5a 5a 5a .....N......ZZZZ
|
||||
010: ff ff ff ff ff ff ff ff c0 fb 01 37 00 88 ff ff ...........7....
|
||||
Next obj: start=ffff88003b45c200, len=64
|
||||
000: 00 00 00 00 ad 4e ad de ff ff ff ff 5a 5a 5a 5a .....N......ZZZZ
|
||||
010: ff ff ff ff ff ff ff ff 68 29 a7 3c 00 88 ff ff ........h).<....
|
||||
BUG: spinlock wrong CPU on CPU#2, test/18028
|
||||
general protection fault: 0000 [#1] SMP
|
||||
Modules linked in: 8021q mrp garp stp llc nf_conntrack_ipv4 nf_defrag_ipv4 ip6t_REJECT nf_reject_ipv6 nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter ip6_tables binfmt_misc ppdev input_leds joydev parport_pc parport floppy serio_raw virtio_balloon virtio_rng virtio_console virtio_net iosf_mbi crct10dif_pclmul crc32_pclmul ghash_clmulni_intel pcspkr qxl ttm drm_kms_helper drm snd_hda_codec_generic i2c_piix4 snd_hda_intel snd_hda_codec snd_hda_core snd_hwdep snd_seq snd_seq_device snd_pcm snd_timer snd soundcore crc32c_intel virtio_pci virtio_ring virtio pata_acpi ata_generic [last unloaded: speedstep_lib]
|
||||
CPU: 2 PID: 18028 Comm: test Not tainted 4.2.0-rc5+ #1
|
||||
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.8.1-20150318_183358- 04/01/2014
|
||||
RIP: spin_dump+0x53/0xc0
|
||||
Call Trace:
|
||||
spin_bug+0x30/0x40
|
||||
do_raw_spin_unlock+0x71/0xa0
|
||||
_raw_spin_unlock+0xe/0x10
|
||||
freeary+0x82/0x2a0
|
||||
? _raw_spin_lock+0xe/0x10
|
||||
semctl_down.clone.0+0xce/0x160
|
||||
? __do_page_fault+0x19a/0x430
|
||||
? __audit_syscall_entry+0xa8/0x100
|
||||
SyS_semctl+0x236/0x2c0
|
||||
? syscall_trace_leave+0xde/0x130
|
||||
entry_SYSCALL_64_fastpath+0x12/0x71
|
||||
Code: 8b 80 88 03 00 00 48 8d 88 60 05 00 00 48 c7 c7 a0 2c a4 81 31 c0 65 8b 15 eb 40 f3 7e e8 08 31 68 00 4d 85 e4 44 8b 4b 08 74 5e <45> 8b 84 24 88 03 00 00 49 8d 8c 24 60 05 00 00 8b 53 04 48 89
|
||||
RIP [<ffffffff810d6053>] spin_dump+0x53/0xc0
|
||||
RSP <ffff88003750fd68>
|
||||
---[ end trace 783ebb76612867a0 ]---
|
||||
NMI watchdog: BUG: soft lockup - CPU#3 stuck for 22s! [test:18053]
|
||||
Modules linked in: 8021q mrp garp stp llc nf_conntrack_ipv4 nf_defrag_ipv4 ip6t_REJECT nf_reject_ipv6 nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter ip6_tables binfmt_misc ppdev input_leds joydev parport_pc parport floppy serio_raw virtio_balloon virtio_rng virtio_console virtio_net iosf_mbi crct10dif_pclmul crc32_pclmul ghash_clmulni_intel pcspkr qxl ttm drm_kms_helper drm snd_hda_codec_generic i2c_piix4 snd_hda_intel snd_hda_codec snd_hda_core snd_hwdep snd_seq snd_seq_device snd_pcm snd_timer snd soundcore crc32c_intel virtio_pci virtio_ring virtio pata_acpi ata_generic [last unloaded: speedstep_lib]
|
||||
CPU: 3 PID: 18053 Comm: test Tainted: G D 4.2.0-rc5+ #1
|
||||
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.8.1-20150318_183358- 04/01/2014
|
||||
RIP: native_read_tsc+0x0/0x20
|
||||
Call Trace:
|
||||
? delay_tsc+0x40/0x70
|
||||
__delay+0xf/0x20
|
||||
do_raw_spin_lock+0x96/0x140
|
||||
_raw_spin_lock+0xe/0x10
|
||||
sem_lock_and_putref+0x11/0x70
|
||||
SYSC_semtimedop+0x7bf/0x960
|
||||
? handle_mm_fault+0xbf6/0x1880
|
||||
? dequeue_task_fair+0x79/0x4a0
|
||||
? __do_page_fault+0x19a/0x430
|
||||
? kfree_debugcheck+0x16/0x40
|
||||
? __do_page_fault+0x19a/0x430
|
||||
? __audit_syscall_entry+0xa8/0x100
|
||||
? do_audit_syscall_entry+0x66/0x70
|
||||
? syscall_trace_enter_phase1+0x139/0x160
|
||||
SyS_semtimedop+0xe/0x10
|
||||
SyS_semop+0x10/0x20
|
||||
entry_SYSCALL_64_fastpath+0x12/0x71
|
||||
Code: 47 10 83 e8 01 85 c0 89 47 10 75 08 65 48 89 3d 1f 74 ff 7e c9 c3 0f 1f 44 00 00 55 48 89 e5 e8 87 17 04 00 66 90 c9 c3 0f 1f 00 <55> 48 89 e5 0f 31 89 c1 48 89 d0 48 c1 e0 20 89 c9 48 09 c8 c9
|
||||
Kernel panic - not syncing: softlockup: hung tasks
|
||||
|
||||
I wasn't able to trigger any badness on a recent kernel without the
|
||||
proper config debugs enabled, however I have softlockup reports on some
|
||||
kernel versions, in the semaphore code, which are similar as above (the
|
||||
scenario is seen on some servers running IBM DB2 which uses semaphore
|
||||
syscalls).
|
||||
|
||||
The patch here fixes the race against freeary, by acquiring or waiting
|
||||
on the sem_undo_list lock as necessary (exit_sem can race with freeary,
|
||||
while freeary sets un->semid to -1 and removes the same sem_undo from
|
||||
list_proc or when it removes the last sem_undo).
|
||||
|
||||
After the patch I'm unable to reproduce the problem using the test case
|
||||
[1].
|
||||
|
||||
[1] Test case used below:
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/sem.h>
|
||||
#include <sys/wait.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define NSEM 1
|
||||
#define NSET 5
|
||||
|
||||
int sid[NSET];
|
||||
|
||||
void thread()
|
||||
{
|
||||
struct sembuf op;
|
||||
int s;
|
||||
uid_t pid = getuid();
|
||||
|
||||
s = rand() % NSET;
|
||||
op.sem_num = pid % NSEM;
|
||||
op.sem_op = 1;
|
||||
op.sem_flg = SEM_UNDO;
|
||||
|
||||
semop(sid[s], &op, 1);
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
void create_set()
|
||||
{
|
||||
int i, j;
|
||||
pid_t p;
|
||||
union {
|
||||
int val;
|
||||
struct semid_ds *buf;
|
||||
unsigned short int *array;
|
||||
struct seminfo *__buf;
|
||||
} un;
|
||||
|
||||
/* Create and initialize semaphore set */
|
||||
for (i = 0; i < NSET; i++) {
|
||||
sid[i] = semget(IPC_PRIVATE , NSEM, 0644 | IPC_CREAT);
|
||||
if (sid[i] < 0) {
|
||||
perror("semget");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
un.val = 0;
|
||||
for (i = 0; i < NSET; i++) {
|
||||
for (j = 0; j < NSEM; j++) {
|
||||
if (semctl(sid[i], j, SETVAL, un) < 0)
|
||||
perror("semctl");
|
||||
}
|
||||
}
|
||||
|
||||
/* Launch threads that operate on semaphore set */
|
||||
for (i = 0; i < NSEM * NSET * NSET; i++) {
|
||||
p = fork();
|
||||
if (p < 0)
|
||||
perror("fork");
|
||||
if (p == 0)
|
||||
thread();
|
||||
}
|
||||
|
||||
/* Free semaphore set */
|
||||
for (i = 0; i < NSET; i++) {
|
||||
if (semctl(sid[i], NSEM, IPC_RMID))
|
||||
perror("IPC_RMID");
|
||||
}
|
||||
|
||||
/* Wait for forked processes to exit */
|
||||
while (wait(NULL)) {
|
||||
if (errno == ECHILD)
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
pid_t p;
|
||||
|
||||
srand(time(NULL));
|
||||
|
||||
while (1) {
|
||||
p = fork();
|
||||
if (p < 0) {
|
||||
perror("fork");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (p == 0) {
|
||||
create_set();
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Wait for forked processes to exit */
|
||||
while (wait(NULL)) {
|
||||
if (errno == ECHILD)
|
||||
break;
|
||||
};
|
||||
}
|
||||
end:
|
||||
return 0;
|
||||
}
|
||||
|
||||
[akpm@linux-foundation.org: use normal comment layout]
|
||||
Signed-off-by: Herton R. Krzesinski <herton@redhat.com>
|
||||
Acked-by: Manfred Spraul <manfred@colorfullife.com>
|
||||
Cc: Davidlohr Bueso <dave@stgolabs.net>
|
||||
Cc: Rafael Aquini <aquini@redhat.com>
|
||||
CC: Aristeu Rozanski <aris@redhat.com>
|
||||
Cc: David Jeffery <djeffery@redhat.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
|
||||
---
|
||||
ipc/sem.c | 23 +++++++++++++++++------
|
||||
1 file changed, 17 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/ipc/sem.c
|
||||
+++ b/ipc/sem.c
|
||||
@@ -2074,17 +2074,28 @@ void exit_sem(struct task_struct *tsk)
|
||||
rcu_read_lock();
|
||||
un = list_entry_rcu(ulp->list_proc.next,
|
||||
struct sem_undo, list_proc);
|
||||
- if (&un->list_proc == &ulp->list_proc)
|
||||
- semid = -1;
|
||||
- else
|
||||
- semid = un->semid;
|
||||
+ if (&un->list_proc == &ulp->list_proc) {
|
||||
+ /*
|
||||
+ * We must wait for freeary() before freeing this ulp,
|
||||
+ * in case we raced with last sem_undo. There is a small
|
||||
+ * possibility where we exit while freeary() didn't
|
||||
+ * finish unlocking sem_undo_list.
|
||||
+ */
|
||||
+ spin_unlock_wait(&ulp->lock);
|
||||
+ rcu_read_unlock();
|
||||
+ break;
|
||||
+ }
|
||||
+ spin_lock(&ulp->lock);
|
||||
+ semid = un->semid;
|
||||
+ spin_unlock(&ulp->lock);
|
||||
|
||||
+ /* exit_sem raced with IPC_RMID, nothing to do */
|
||||
if (semid == -1) {
|
||||
rcu_read_unlock();
|
||||
- break;
|
||||
+ continue;
|
||||
}
|
||||
|
||||
- sma = sem_obtain_object_check(tsk->nsproxy->ipc_ns, un->semid);
|
||||
+ sma = sem_obtain_object_check(tsk->nsproxy->ipc_ns, semid);
|
||||
/* exit_sem raced with IPC_RMID, nothing to do */
|
||||
if (IS_ERR(sma)) {
|
||||
rcu_read_unlock();
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
From 3ed1f8a99d70ea1cd1508910eb107d0edcae5009 Mon Sep 17 00:00:00 2001
|
||||
From: Manfred Spraul <manfred@colorfullife.com>
|
||||
Date: Fri, 14 Aug 2015 15:35:10 -0700
|
||||
Subject: ipc/sem.c: update/correct memory barriers
|
||||
|
||||
From: Manfred Spraul <manfred@colorfullife.com>
|
||||
|
||||
commit 3ed1f8a99d70ea1cd1508910eb107d0edcae5009 upstream.
|
||||
|
||||
sem_lock() did not properly pair memory barriers:
|
||||
|
||||
!spin_is_locked() and spin_unlock_wait() are both only control barriers.
|
||||
The code needs an acquire barrier, otherwise the cpu might perform read
|
||||
operations before the lock test.
|
||||
|
||||
As no primitive exists inside <include/spinlock.h> and since it seems
|
||||
noone wants another primitive, the code creates a local primitive within
|
||||
ipc/sem.c.
|
||||
|
||||
With regards to -stable:
|
||||
|
||||
The change of sem_wait_array() is a bugfix, the change to sem_lock() is a
|
||||
nop (just a preprocessor redefinition to improve the readability). The
|
||||
bugfix is necessary for all kernels that use sem_wait_array() (i.e.:
|
||||
starting from 3.10).
|
||||
|
||||
Signed-off-by: Manfred Spraul <manfred@colorfullife.com>
|
||||
Reported-by: Oleg Nesterov <oleg@redhat.com>
|
||||
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
||||
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
||||
Cc: Kirill Tkhai <ktkhai@parallels.com>
|
||||
Cc: Ingo Molnar <mingo@redhat.com>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Davidlohr Bueso <dave@stgolabs.net>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
ipc/sem.c | 18 ++++++++++++++----
|
||||
1 file changed, 14 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/ipc/sem.c
|
||||
+++ b/ipc/sem.c
|
||||
@@ -253,6 +253,16 @@ static void sem_rcu_free(struct rcu_head
|
||||
}
|
||||
|
||||
/*
|
||||
+ * spin_unlock_wait() and !spin_is_locked() are not memory barriers, they
|
||||
+ * are only control barriers.
|
||||
+ * The code must pair with spin_unlock(&sem->lock) or
|
||||
+ * spin_unlock(&sem_perm.lock), thus just the control barrier is insufficient.
|
||||
+ *
|
||||
+ * smp_rmb() is sufficient, as writes cannot pass the control barrier.
|
||||
+ */
|
||||
+#define ipc_smp_acquire__after_spin_is_unlocked() smp_rmb()
|
||||
+
|
||||
+/*
|
||||
* Wait until all currently ongoing simple ops have completed.
|
||||
* Caller must own sem_perm.lock.
|
||||
* New simple ops cannot start, because simple ops first check
|
||||
@@ -275,6 +285,7 @@ static void sem_wait_array(struct sem_ar
|
||||
sem = sma->sem_base + i;
|
||||
spin_unlock_wait(&sem->lock);
|
||||
}
|
||||
+ ipc_smp_acquire__after_spin_is_unlocked();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -327,13 +338,12 @@ static inline int sem_lock(struct sem_ar
|
||||
/* Then check that the global lock is free */
|
||||
if (!spin_is_locked(&sma->sem_perm.lock)) {
|
||||
/*
|
||||
- * The ipc object lock check must be visible on all
|
||||
- * cores before rechecking the complex count. Otherwise
|
||||
- * we can race with another thread that does:
|
||||
+ * We need a memory barrier with acquire semantics,
|
||||
+ * otherwise we can race with another thread that does:
|
||||
* complex_count++;
|
||||
* spin_unlock(sem_perm.lock);
|
||||
*/
|
||||
- smp_rmb();
|
||||
+ ipc_smp_acquire__after_spin_is_unlocked();
|
||||
|
||||
/*
|
||||
* Now repeat the test of complex_count:
|
||||
@@ -0,0 +1,83 @@
|
||||
From c9fdec9f3970eeaa1b176422f46167f5f5158804 Mon Sep 17 00:00:00 2001
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Date: Mon, 20 Jul 2015 12:14:39 +0300
|
||||
Subject: iwlwifi: pcie: fix prepare card flow
|
||||
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
|
||||
commit c9fdec9f3970eeaa1b176422f46167f5f5158804 upstream.
|
||||
|
||||
When the card is not owned by the PCIe bus, we need to
|
||||
acquire ownership first. This flow is implemented in
|
||||
iwl_pcie_prepare_card_hw. Because of a hardware bug, we
|
||||
need to disable link power management before we can
|
||||
request ownership otherwise the other user of the device
|
||||
won't get notified that we are requesting the device which
|
||||
will prevent us from acquire ownership.
|
||||
|
||||
Same holds for the down flow where we need to make sure
|
||||
that any other potential user is notified that the driver
|
||||
is going down.
|
||||
|
||||
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/pcie/trans.c | 22 +++++++++++++++++++---
|
||||
1 file changed, 19 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
|
||||
@@ -457,10 +457,16 @@ static void iwl_pcie_apm_stop(struct iwl
|
||||
if (trans->cfg->device_family == IWL_DEVICE_FAMILY_7000)
|
||||
iwl_set_bits_prph(trans, APMG_PCIDEV_STT_REG,
|
||||
APMG_PCIDEV_STT_VAL_WAKE_ME);
|
||||
- else if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000)
|
||||
+ else if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
|
||||
+ iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
+ CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
||||
CSR_HW_IF_CONFIG_REG_PREPARE |
|
||||
CSR_HW_IF_CONFIG_REG_ENABLE_PME);
|
||||
+ mdelay(1);
|
||||
+ iwl_clear_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
+ CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
+ }
|
||||
mdelay(5);
|
||||
}
|
||||
|
||||
@@ -555,6 +561,10 @@ static int iwl_pcie_prepare_card_hw(stru
|
||||
if (ret >= 0)
|
||||
return 0;
|
||||
|
||||
+ iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
+ CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
+ msleep(1);
|
||||
+
|
||||
for (iter = 0; iter < 10; iter++) {
|
||||
/* If HW is not ready, prepare the conditions to check again */
|
||||
iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
||||
@@ -562,8 +572,10 @@ static int iwl_pcie_prepare_card_hw(stru
|
||||
|
||||
do {
|
||||
ret = iwl_pcie_set_hw_ready(trans);
|
||||
- if (ret >= 0)
|
||||
- return 0;
|
||||
+ if (ret >= 0) {
|
||||
+ ret = 0;
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
usleep_range(200, 1000);
|
||||
t += 200;
|
||||
@@ -573,6 +585,10 @@ static int iwl_pcie_prepare_card_hw(stru
|
||||
|
||||
IWL_ERR(trans, "Couldn't prepare the card\n");
|
||||
|
||||
+out:
|
||||
+ iwl_clear_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
+ CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
From c0ddc8c745b7f89c50385fd7aa03c78dc543fa7a Mon Sep 17 00:00:00 2001
|
||||
From: Richard Weinberger <richard@nod.at>
|
||||
Date: Mon, 27 Jul 2015 00:06:55 +0200
|
||||
Subject: localmodconfig: Use Kbuild files too
|
||||
|
||||
From: Richard Weinberger <richard@nod.at>
|
||||
|
||||
commit c0ddc8c745b7f89c50385fd7aa03c78dc543fa7a upstream.
|
||||
|
||||
In kbuild it is allowed to define objects in files named "Makefile"
|
||||
and "Kbuild".
|
||||
Currently localmodconfig reads objects only from "Makefile"s and misses
|
||||
modules like nouveau.
|
||||
|
||||
Link: http://lkml.kernel.org/r/1437948415-16290-1-git-send-email-richard@nod.at
|
||||
|
||||
Reported-and-tested-by: Leonidas Spyropoulos <artafinde@gmail.com>
|
||||
Signed-off-by: Richard Weinberger <richard@nod.at>
|
||||
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
scripts/kconfig/streamline_config.pl | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/scripts/kconfig/streamline_config.pl
|
||||
+++ b/scripts/kconfig/streamline_config.pl
|
||||
@@ -137,7 +137,7 @@ my $ksource = ($ARGV[0] ? $ARGV[0] : '.'
|
||||
my $kconfig = $ARGV[1];
|
||||
my $lsmod_file = $ENV{'LSMOD'};
|
||||
|
||||
-my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
|
||||
+my @makefiles = `find $ksource -name Makefile -or -name Kbuild 2>/dev/null`;
|
||||
chomp @makefiles;
|
||||
|
||||
my %depends;
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
From 036138080a4376e5f3e5d0cca8ac99084c5cf06e Mon Sep 17 00:00:00 2001
|
||||
From: Wanpeng Li <wanpeng.li@hotmail.com>
|
||||
Date: Fri, 14 Aug 2015 15:34:59 -0700
|
||||
Subject: mm/hwpoison: fix fail isolate hugetlbfs page w/ refcount held
|
||||
|
||||
From: Wanpeng Li <wanpeng.li@hotmail.com>
|
||||
|
||||
commit 036138080a4376e5f3e5d0cca8ac99084c5cf06e upstream.
|
||||
|
||||
Hugetlbfs pages will get a refcount in get_any_page() or
|
||||
madvise_hwpoison() if soft offlining through madvise. The refcount which
|
||||
is held by the soft offline path should be released if we fail to isolate
|
||||
hugetlbfs pages.
|
||||
|
||||
Fix it by reducing the refcount for both isolation success and failure.
|
||||
|
||||
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
|
||||
Acked-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
mm/memory-failure.c | 13 ++++++-------
|
||||
1 file changed, 6 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/mm/memory-failure.c
|
||||
+++ b/mm/memory-failure.c
|
||||
@@ -1589,13 +1589,12 @@ static int soft_offline_huge_page(struct
|
||||
unlock_page(hpage);
|
||||
|
||||
ret = isolate_huge_page(hpage, &pagelist);
|
||||
- if (ret) {
|
||||
- /*
|
||||
- * get_any_page() and isolate_huge_page() takes a refcount each,
|
||||
- * so need to drop one here.
|
||||
- */
|
||||
- put_page(hpage);
|
||||
- } else {
|
||||
+ /*
|
||||
+ * get_any_page() and isolate_huge_page() takes a refcount each,
|
||||
+ * so need to drop one here.
|
||||
+ */
|
||||
+ put_page(hpage);
|
||||
+ if (!ret) {
|
||||
pr_info("soft offline: %#lx hugepage failed to isolate\n", pfn);
|
||||
return -EBUSY;
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 4f32be677b124a49459e2603321c7a5605ceb9f8 Mon Sep 17 00:00:00 2001
|
||||
From: Wanpeng Li <wanpeng.li@hotmail.com>
|
||||
Date: Fri, 14 Aug 2015 15:34:56 -0700
|
||||
Subject: mm/hwpoison: fix page refcount of unknown non LRU page
|
||||
|
||||
From: Wanpeng Li <wanpeng.li@hotmail.com>
|
||||
|
||||
commit 4f32be677b124a49459e2603321c7a5605ceb9f8 upstream.
|
||||
|
||||
After trying to drain pages from pagevec/pageset, we try to get reference
|
||||
count of the page again, however, the reference count of the page is not
|
||||
reduced if the page is still not on LRU list.
|
||||
|
||||
Fix it by adding the put_page() to drop the page reference which is from
|
||||
__get_any_page().
|
||||
|
||||
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
|
||||
Acked-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
mm/memory-failure.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
--- a/mm/memory-failure.c
|
||||
+++ b/mm/memory-failure.c
|
||||
@@ -1558,6 +1558,8 @@ static int get_any_page(struct page *pag
|
||||
*/
|
||||
ret = __get_any_page(page, pfn, 0);
|
||||
if (!PageLRU(page)) {
|
||||
+ /* Drop page reference which is from __get_any_page() */
|
||||
+ put_page(page);
|
||||
pr_info("soft_offline: %#lx: unknown non LRU page type %lx\n",
|
||||
pfn, page->flags);
|
||||
return -EIO;
|
||||
File diff suppressed because it is too large
Load Diff
+49
@@ -0,0 +1,49 @@
|
||||
From ee9397a6fb9bc4e52677f5e33eed4abee0f515e6 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Mon, 27 Jul 2015 00:31:08 +0100
|
||||
Subject: perf: Fix double-free of the AUX buffer
|
||||
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
|
||||
commit ee9397a6fb9bc4e52677f5e33eed4abee0f515e6 upstream.
|
||||
|
||||
If rb->aux_refcount is decremented to zero before rb->refcount,
|
||||
__rb_free_aux() may be called twice resulting in a double free of
|
||||
rb->aux_pages. Fix this by adding a check to __rb_free_aux().
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
||||
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
||||
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Fixes: 57ffc5ca679f ("perf: Fix AUX buffer refcounting")
|
||||
Link: http://lkml.kernel.org/r/1437953468.12842.17.camel@decadent.org.uk
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
kernel/events/ring_buffer.c | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/kernel/events/ring_buffer.c
|
||||
+++ b/kernel/events/ring_buffer.c
|
||||
@@ -547,11 +547,13 @@ static void __rb_free_aux(struct ring_bu
|
||||
rb->aux_priv = NULL;
|
||||
}
|
||||
|
||||
- for (pg = 0; pg < rb->aux_nr_pages; pg++)
|
||||
- rb_free_aux_page(rb, pg);
|
||||
+ if (rb->aux_nr_pages) {
|
||||
+ for (pg = 0; pg < rb->aux_nr_pages; pg++)
|
||||
+ rb_free_aux_page(rb, pg);
|
||||
|
||||
- kfree(rb->aux_pages);
|
||||
- rb->aux_nr_pages = 0;
|
||||
+ kfree(rb->aux_pages);
|
||||
+ rb->aux_nr_pages = 0;
|
||||
+ }
|
||||
}
|
||||
|
||||
void rb_free_aux(struct ring_buffer *rb)
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
From fed66e2cdd4f127a43fd11b8d92a99bdd429528c Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
Date: Thu, 11 Jun 2015 10:32:01 +0200
|
||||
Subject: perf: Fix fasync handling on inherited events
|
||||
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
|
||||
commit fed66e2cdd4f127a43fd11b8d92a99bdd429528c upstream.
|
||||
|
||||
Vince reported that the fasync signal stuff doesn't work proper for
|
||||
inherited events. So fix that.
|
||||
|
||||
Installing fasync allocates memory and sets filp->f_flags |= FASYNC,
|
||||
which upon the demise of the file descriptor ensures the allocation is
|
||||
freed and state is updated.
|
||||
|
||||
Now for perf, we can have the events stick around for a while after the
|
||||
original FD is dead because of references from child events. So we
|
||||
cannot copy the fasync pointer around. We can however consistently use
|
||||
the parent's fasync, as that will be updated.
|
||||
|
||||
Reported-and-Tested-by: Vince Weaver <vincent.weaver@maine.edu>
|
||||
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
||||
Cc: Arnaldo Carvalho deMelo <acme@kernel.org>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Cc: eranian@google.com
|
||||
Link: http://lkml.kernel.org/r/1434011521.1495.71.camel@twins
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
kernel/events/core.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/kernel/events/core.c
|
||||
+++ b/kernel/events/core.c
|
||||
@@ -4766,12 +4766,20 @@ static const struct file_operations perf
|
||||
* to user-space before waking everybody up.
|
||||
*/
|
||||
|
||||
+static inline struct fasync_struct **perf_event_fasync(struct perf_event *event)
|
||||
+{
|
||||
+ /* only the parent has fasync state */
|
||||
+ if (event->parent)
|
||||
+ event = event->parent;
|
||||
+ return &event->fasync;
|
||||
+}
|
||||
+
|
||||
void perf_event_wakeup(struct perf_event *event)
|
||||
{
|
||||
ring_buffer_wakeup(event);
|
||||
|
||||
if (event->pending_kill) {
|
||||
- kill_fasync(&event->fasync, SIGIO, event->pending_kill);
|
||||
+ kill_fasync(perf_event_fasync(event), SIGIO, event->pending_kill);
|
||||
event->pending_kill = 0;
|
||||
}
|
||||
}
|
||||
@@ -6117,7 +6125,7 @@ static int __perf_event_overflow(struct
|
||||
else
|
||||
perf_event_output(event, data, regs);
|
||||
|
||||
- if (event->fasync && event->pending_kill) {
|
||||
+ if (*perf_event_fasync(event) && event->pending_kill) {
|
||||
event->pending_wakeup = 1;
|
||||
irq_work_queue(&event->pending);
|
||||
}
|
||||
+125
@@ -0,0 +1,125 @@
|
||||
From c7999c6f3fed9e383d3131474588f282ae6d56b9 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
Date: Tue, 4 Aug 2015 19:22:49 +0200
|
||||
Subject: perf: Fix PERF_EVENT_IOC_PERIOD migration race
|
||||
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
|
||||
commit c7999c6f3fed9e383d3131474588f282ae6d56b9 upstream.
|
||||
|
||||
I ran the perf fuzzer, which triggered some WARN()s which are due to
|
||||
trying to stop/restart an event on the wrong CPU.
|
||||
|
||||
Use the normal IPI pattern to ensure we run the code on the correct CPU.
|
||||
|
||||
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
||||
Cc: Vince Weaver <vincent.weaver@maine.edu>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Fixes: bad7192b842c ("perf: Fix PERF_EVENT_IOC_PERIOD to force-reset the period")
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
kernel/events/core.c | 75 +++++++++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 55 insertions(+), 20 deletions(-)
|
||||
|
||||
--- a/kernel/events/core.c
|
||||
+++ b/kernel/events/core.c
|
||||
@@ -3976,28 +3976,21 @@ static void perf_event_for_each(struct p
|
||||
perf_event_for_each_child(sibling, func);
|
||||
}
|
||||
|
||||
-static int perf_event_period(struct perf_event *event, u64 __user *arg)
|
||||
-{
|
||||
- struct perf_event_context *ctx = event->ctx;
|
||||
- int ret = 0, active;
|
||||
+struct period_event {
|
||||
+ struct perf_event *event;
|
||||
u64 value;
|
||||
+};
|
||||
|
||||
- if (!is_sampling_event(event))
|
||||
- return -EINVAL;
|
||||
-
|
||||
- if (copy_from_user(&value, arg, sizeof(value)))
|
||||
- return -EFAULT;
|
||||
-
|
||||
- if (!value)
|
||||
- return -EINVAL;
|
||||
+static int __perf_event_period(void *info)
|
||||
+{
|
||||
+ struct period_event *pe = info;
|
||||
+ struct perf_event *event = pe->event;
|
||||
+ struct perf_event_context *ctx = event->ctx;
|
||||
+ u64 value = pe->value;
|
||||
+ bool active;
|
||||
|
||||
- raw_spin_lock_irq(&ctx->lock);
|
||||
+ raw_spin_lock(&ctx->lock);
|
||||
if (event->attr.freq) {
|
||||
- if (value > sysctl_perf_event_sample_rate) {
|
||||
- ret = -EINVAL;
|
||||
- goto unlock;
|
||||
- }
|
||||
-
|
||||
event->attr.sample_freq = value;
|
||||
} else {
|
||||
event->attr.sample_period = value;
|
||||
@@ -4016,11 +4009,53 @@ static int perf_event_period(struct perf
|
||||
event->pmu->start(event, PERF_EF_RELOAD);
|
||||
perf_pmu_enable(ctx->pmu);
|
||||
}
|
||||
+ raw_spin_unlock(&ctx->lock);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int perf_event_period(struct perf_event *event, u64 __user *arg)
|
||||
+{
|
||||
+ struct period_event pe = { .event = event, };
|
||||
+ struct perf_event_context *ctx = event->ctx;
|
||||
+ struct task_struct *task;
|
||||
+ u64 value;
|
||||
+
|
||||
+ if (!is_sampling_event(event))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (copy_from_user(&value, arg, sizeof(value)))
|
||||
+ return -EFAULT;
|
||||
+
|
||||
+ if (!value)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (event->attr.freq && value > sysctl_perf_event_sample_rate)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ task = ctx->task;
|
||||
+ pe.value = value;
|
||||
+
|
||||
+ if (!task) {
|
||||
+ cpu_function_call(event->cpu, __perf_event_period, &pe);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+retry:
|
||||
+ if (!task_function_call(task, __perf_event_period, &pe))
|
||||
+ return 0;
|
||||
+
|
||||
+ raw_spin_lock_irq(&ctx->lock);
|
||||
+ if (ctx->is_active) {
|
||||
+ raw_spin_unlock_irq(&ctx->lock);
|
||||
+ task = ctx->task;
|
||||
+ goto retry;
|
||||
+ }
|
||||
|
||||
-unlock:
|
||||
+ __perf_event_period(&pe);
|
||||
raw_spin_unlock_irq(&ctx->lock);
|
||||
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations perf_fops;
|
||||
@@ -0,0 +1,49 @@
|
||||
From 00a2916f7f82c348a2a94dbb572874173bc308a3 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
Date: Mon, 27 Jul 2015 10:35:07 +0200
|
||||
Subject: perf: Fix running time accounting
|
||||
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
|
||||
commit 00a2916f7f82c348a2a94dbb572874173bc308a3 upstream.
|
||||
|
||||
A recent fix to the shadow timestamp inadvertly broke the running time
|
||||
accounting.
|
||||
|
||||
We must not update the running timestamp if we fail to schedule the
|
||||
event, the event will not have ran. This can (and did) result in
|
||||
negative total runtime because the stopped timestamp was before the
|
||||
running timestamp (we 'started' but never stopped the event -- because
|
||||
it never really started we didn't have to stop it either).
|
||||
|
||||
Reported-and-Tested-by: Vince Weaver <vincent.weaver@maine.edu>
|
||||
Fixes: 72f669c0086f ("perf: Update shadow timestamp before add event")
|
||||
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
||||
Cc: Shaohua Li <shli@fb.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
kernel/events/core.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/kernel/events/core.c
|
||||
+++ b/kernel/events/core.c
|
||||
@@ -1886,8 +1886,6 @@ event_sched_in(struct perf_event *event,
|
||||
|
||||
perf_pmu_disable(event->pmu);
|
||||
|
||||
- event->tstamp_running += tstamp - event->tstamp_stopped;
|
||||
-
|
||||
perf_set_shadow_time(event, ctx, tstamp);
|
||||
|
||||
perf_log_itrace_start(event);
|
||||
@@ -1899,6 +1897,8 @@ event_sched_in(struct perf_event *event,
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ event->tstamp_running += tstamp - event->tstamp_stopped;
|
||||
+
|
||||
if (!is_software_event(event))
|
||||
cpuctx->active_oncpu++;
|
||||
if (!ctx->nr_active++)
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
From 5d5cd85ff441534a52f23f821d0a7c644d3b6cce Mon Sep 17 00:00:00 2001
|
||||
From: Mike Looijmans <mike.looijmans@topic.nl>
|
||||
Date: Tue, 28 Jul 2015 07:51:01 +0200
|
||||
Subject: rsi: Fix failure to load firmware after memory leak fix and fix the leak
|
||||
|
||||
From: Mike Looijmans <mike.looijmans@topic.nl>
|
||||
|
||||
commit 5d5cd85ff441534a52f23f821d0a7c644d3b6cce upstream.
|
||||
|
||||
Fixes commit eae79b4f3e82 ("rsi: fix memory leak in rsi_load_ta_instructions()")
|
||||
which stopped the driver from functioning.
|
||||
|
||||
Firmware data has been allocated using vmalloc(), resulting in memory
|
||||
that cannot be used for DMA. Hence the firmware was first copied to a
|
||||
buffer allocated with kmalloc() in the original code. This patch reverts
|
||||
the commit and only calls "kfree()" to release the buffer after sending
|
||||
the data. This fixes the memory leak without breaking the driver.
|
||||
|
||||
Add a comment to the kmemdup() calls to explain why this is done, and abort
|
||||
if memory allocation fails.
|
||||
|
||||
Tested on a Topic Miami-Florida board which contains the rsi SDIO chip.
|
||||
|
||||
Also added the same kfree() call to the USB glue driver. This was not
|
||||
tested on actual hardware though, as I only have the SDIO version.
|
||||
|
||||
Fixes: eae79b4f3e82 ("rsi: fix memory leak in rsi_load_ta_instructions()")
|
||||
Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/net/wireless/rsi/rsi_91x_sdio_ops.c | 8 +++++++-
|
||||
drivers/net/wireless/rsi/rsi_91x_usb_ops.c | 4 ++++
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
|
||||
+++ b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
|
||||
@@ -172,6 +172,7 @@ static int rsi_load_ta_instructions(stru
|
||||
(struct rsi_91x_sdiodev *)adapter->rsi_dev;
|
||||
u32 len;
|
||||
u32 num_blocks;
|
||||
+ const u8 *fw;
|
||||
const struct firmware *fw_entry = NULL;
|
||||
u32 block_size = dev->tx_blk_size;
|
||||
int status = 0;
|
||||
@@ -200,6 +201,10 @@ static int rsi_load_ta_instructions(stru
|
||||
return status;
|
||||
}
|
||||
|
||||
+ /* Copy firmware into DMA-accessible memory */
|
||||
+ fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
|
||||
+ if (!fw)
|
||||
+ return -ENOMEM;
|
||||
len = fw_entry->size;
|
||||
|
||||
if (len % 4)
|
||||
@@ -210,7 +215,8 @@ static int rsi_load_ta_instructions(stru
|
||||
rsi_dbg(INIT_ZONE, "%s: Instruction size:%d\n", __func__, len);
|
||||
rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
|
||||
|
||||
- status = rsi_copy_to_card(common, fw_entry->data, len, num_blocks);
|
||||
+ status = rsi_copy_to_card(common, fw, len, num_blocks);
|
||||
+ kfree(fw);
|
||||
release_firmware(fw_entry);
|
||||
return status;
|
||||
}
|
||||
--- a/drivers/net/wireless/rsi/rsi_91x_usb_ops.c
|
||||
+++ b/drivers/net/wireless/rsi/rsi_91x_usb_ops.c
|
||||
@@ -146,7 +146,10 @@ static int rsi_load_ta_instructions(stru
|
||||
return status;
|
||||
}
|
||||
|
||||
+ /* Copy firmware into DMA-accessible memory */
|
||||
fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
|
||||
+ if (!fw)
|
||||
+ return -ENOMEM;
|
||||
len = fw_entry->size;
|
||||
|
||||
if (len % 4)
|
||||
@@ -158,6 +161,7 @@ static int rsi_load_ta_instructions(stru
|
||||
rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
|
||||
|
||||
status = rsi_copy_to_card(common, fw, len, num_blocks);
|
||||
+ kfree(fw);
|
||||
release_firmware(fw_entry);
|
||||
return status;
|
||||
}
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
From 7c62940165e9ae4004ce4e6b5117330bab94df68 Mon Sep 17 00:00:00 2001
|
||||
From: Luis Felipe Dominguez Vega <lfdominguez@nauta.cu>
|
||||
Date: Wed, 29 Jul 2015 21:11:20 -0500
|
||||
Subject: rtlwifi: Fix NULL dereference when PCI driver used as an AP
|
||||
|
||||
From: Luis Felipe Dominguez Vega <lfdominguez@nauta.cu>
|
||||
|
||||
commit 7c62940165e9ae4004ce4e6b5117330bab94df68 upstream.
|
||||
|
||||
In commit 33511b157bbcebaef853cc1811992b664a2e5862 ("rtlwifi: add support to
|
||||
send beacon frame"), the mechanism for sending beacons was established. That
|
||||
patch works correctly for rtl8192cu, but there is a possibility of getting
|
||||
the following warnings in the PCI drivers:
|
||||
|
||||
WARNING: CPU: 1 PID: 2439 at net/mac80211/driver-ops.h:12
|
||||
ieee80211_bss_info_change_notify+0x179/0x1d0 [mac80211]()
|
||||
wlp5s0: Failed check-sdata-in-driver check, flags: 0x0
|
||||
|
||||
The warning is followed by a NULL pointer dereference as follows:
|
||||
|
||||
BUG: unable to handle kernel NULL pointer dereference at 0000000000000006
|
||||
IP: [<ffffffffc073998e>] rtl_get_tcb_desc+0x5e/0x760 [rtlwifi]
|
||||
|
||||
This problem was reported at http://thread.gmane.org/gmane.linux.kernel.wireless.general/138645,
|
||||
but no solution was found at that time.
|
||||
|
||||
The problem was also reported at https://bugzilla.kernel.org/show_bug.cgi?id=9744
|
||||
and this solution was developed and tested there.
|
||||
|
||||
The USB driver works with a NULL final argument in the adapter_tx() callback;
|
||||
however, the PCI drivers need a struct rtl_tcb_desc in that position.
|
||||
|
||||
Fixes: 33511b157bbc ("rtlwifi: add support to send beacon frame.")
|
||||
Signed-off-by: Luis Felipe Dominguez Vega <lfdominguez@nauta.cu>
|
||||
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/net/wireless/rtlwifi/core.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/rtlwifi/core.c
|
||||
@@ -1015,9 +1015,12 @@ static void send_beacon_frame(struct iee
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct sk_buff *skb = ieee80211_beacon_get(hw, vif);
|
||||
+ struct rtl_tcb_desc tcb_desc;
|
||||
|
||||
- if (skb)
|
||||
- rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, NULL);
|
||||
+ if (skb) {
|
||||
+ memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc));
|
||||
+ rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, &tcb_desc);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void rtl_op_bss_info_changed(struct ieee80211_hw *hw,
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
From 741e3b9902d11585e18bfc7f8d47e913616bb070 Mon Sep 17 00:00:00 2001
|
||||
From: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Date: Sun, 2 Aug 2015 13:24:13 -0500
|
||||
Subject: rtlwifi: rtl8723be: Add module parameter for MSI interrupts
|
||||
|
||||
From: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
|
||||
commit 741e3b9902d11585e18bfc7f8d47e913616bb070 upstream.
|
||||
|
||||
The driver code allows for the disabling of MSI interrupts; however the
|
||||
module_parm line was missed and the option fails to show with modinfo.
|
||||
|
||||
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/net/wireless/rtlwifi/rtl8723be/sw.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/net/wireless/rtlwifi/rtl8723be/sw.c
|
||||
+++ b/drivers/net/wireless/rtlwifi/rtl8723be/sw.c
|
||||
@@ -385,6 +385,7 @@ module_param_named(debug, rtl8723be_mod_
|
||||
module_param_named(ips, rtl8723be_mod_params.inactiveps, bool, 0444);
|
||||
module_param_named(swlps, rtl8723be_mod_params.swctrl_lps, bool, 0444);
|
||||
module_param_named(fwlps, rtl8723be_mod_params.fwctrl_lps, bool, 0444);
|
||||
+module_param_named(msi, rtl8723be_mod_params.msi_support, bool, 0444);
|
||||
module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog,
|
||||
bool, 0444);
|
||||
MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
From fc5fee86bdd3d720e2d1d324e4fae0c35845fa63 Mon Sep 17 00:00:00 2001
|
||||
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
|
||||
Date: Mon, 10 Aug 2015 15:40:27 +0200
|
||||
Subject: x86/xen: build "Xen PV" APIC driver for domU as well
|
||||
|
||||
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
|
||||
|
||||
commit fc5fee86bdd3d720e2d1d324e4fae0c35845fa63 upstream.
|
||||
|
||||
It turns out that a PV domU also requires the "Xen PV" APIC
|
||||
driver. Otherwise, the flat driver is used and we get stuck in busy
|
||||
loops that never exit, such as in this stack trace:
|
||||
|
||||
(gdb) target remote localhost:9999
|
||||
Remote debugging using localhost:9999
|
||||
__xapic_wait_icr_idle () at ./arch/x86/include/asm/ipi.h:56
|
||||
56 while (native_apic_mem_read(APIC_ICR) & APIC_ICR_BUSY)
|
||||
(gdb) bt
|
||||
#0 __xapic_wait_icr_idle () at ./arch/x86/include/asm/ipi.h:56
|
||||
#1 __default_send_IPI_shortcut (shortcut=<optimized out>,
|
||||
dest=<optimized out>, vector=<optimized out>) at
|
||||
./arch/x86/include/asm/ipi.h:75
|
||||
#2 apic_send_IPI_self (vector=246) at arch/x86/kernel/apic/probe_64.c:54
|
||||
#3 0xffffffff81011336 in arch_irq_work_raise () at
|
||||
arch/x86/kernel/irq_work.c:47
|
||||
#4 0xffffffff8114990c in irq_work_queue (work=0xffff88000fc0e400) at
|
||||
kernel/irq_work.c:100
|
||||
#5 0xffffffff8110c29d in wake_up_klogd () at kernel/printk/printk.c:2633
|
||||
#6 0xffffffff8110ca60 in vprintk_emit (facility=0, level=<optimized
|
||||
out>, dict=0x0 <irq_stack_union>, dictlen=<optimized out>,
|
||||
fmt=<optimized out>, args=<optimized out>)
|
||||
at kernel/printk/printk.c:1778
|
||||
#7 0xffffffff816010c8 in printk (fmt=<optimized out>) at
|
||||
kernel/printk/printk.c:1868
|
||||
#8 0xffffffffc00013ea in ?? ()
|
||||
#9 0x0000000000000000 in ?? ()
|
||||
|
||||
Mailing-list-thread: https://lkml.org/lkml/2015/8/4/755
|
||||
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
|
||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
arch/x86/xen/Makefile | 4 ++--
|
||||
arch/x86/xen/xen-ops.h | 6 ++----
|
||||
2 files changed, 4 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/arch/x86/xen/Makefile
|
||||
+++ b/arch/x86/xen/Makefile
|
||||
@@ -13,13 +13,13 @@ CFLAGS_mmu.o := $(nostackp)
|
||||
obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \
|
||||
time.o xen-asm.o xen-asm_$(BITS).o \
|
||||
grant-table.o suspend.o platform-pci-unplug.o \
|
||||
- p2m.o
|
||||
+ p2m.o apic.o
|
||||
|
||||
obj-$(CONFIG_EVENT_TRACING) += trace.o
|
||||
|
||||
obj-$(CONFIG_SMP) += smp.o
|
||||
obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
|
||||
obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o
|
||||
-obj-$(CONFIG_XEN_DOM0) += apic.o vga.o
|
||||
+obj-$(CONFIG_XEN_DOM0) += vga.o
|
||||
obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o
|
||||
obj-$(CONFIG_XEN_EFI) += efi.o
|
||||
--- a/arch/x86/xen/xen-ops.h
|
||||
+++ b/arch/x86/xen/xen-ops.h
|
||||
@@ -101,17 +101,15 @@ struct dom0_vga_console_info;
|
||||
|
||||
#ifdef CONFIG_XEN_DOM0
|
||||
void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size);
|
||||
-void __init xen_init_apic(void);
|
||||
#else
|
||||
static inline void __init xen_init_vga(const struct dom0_vga_console_info *info,
|
||||
size_t size)
|
||||
{
|
||||
}
|
||||
-static inline void __init xen_init_apic(void)
|
||||
-{
|
||||
-}
|
||||
#endif
|
||||
|
||||
+void __init xen_init_apic(void);
|
||||
+
|
||||
#ifdef CONFIG_XEN_EFI
|
||||
extern void xen_efi_init(void);
|
||||
#else
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
From 53bc7dc004fecf39e0ba70f2f8d120a1444315d3 Mon Sep 17 00:00:00 2001
|
||||
From: Bob Liu <bob.liu@oracle.com>
|
||||
Date: Wed, 22 Jul 2015 14:40:10 +0800
|
||||
Subject: xen-blkback: replace work_pending with work_busy in purge_persistent_gnt()
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
From: Bob Liu <bob.liu@oracle.com>
|
||||
|
||||
commit 53bc7dc004fecf39e0ba70f2f8d120a1444315d3 upstream.
|
||||
|
||||
The BUG_ON() in purge_persistent_gnt() will be triggered when previous purge
|
||||
work haven't finished.
|
||||
|
||||
There is a work_pending() before this BUG_ON, but it doesn't account if the work
|
||||
is still currently running.
|
||||
|
||||
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
|
||||
Signed-off-by: Bob Liu <bob.liu@oracle.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/block/xen-blkback/blkback.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/block/xen-blkback/blkback.c
|
||||
+++ b/drivers/block/xen-blkback/blkback.c
|
||||
@@ -362,8 +362,8 @@ static void purge_persistent_gnt(struct
|
||||
return;
|
||||
}
|
||||
|
||||
- if (work_pending(&blkif->persistent_purge_work)) {
|
||||
- pr_alert_ratelimited("Scheduled work from previous purge is still pending, cannot purge list\n");
|
||||
+ if (work_busy(&blkif->persistent_purge_work)) {
|
||||
+ pr_alert_ratelimited("Scheduled work from previous purge is still busy, cannot purge list\n");
|
||||
return;
|
||||
}
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
From 7b0767502b5db11cb1f0daef2d01f6d71b1192dc Mon Sep 17 00:00:00 2001
|
||||
From: Bob Liu <bob.liu@oracle.com>
|
||||
Date: Wed, 22 Jul 2015 14:40:09 +0800
|
||||
Subject: xen-blkfront: don't add indirect pages to list when
|
||||
!feature_persistent
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
From: Bob Liu <bob.liu@oracle.com>
|
||||
|
||||
commit 7b0767502b5db11cb1f0daef2d01f6d71b1192dc upstream.
|
||||
|
||||
We should consider info->feature_persistent when adding indirect page to list
|
||||
info->indirect_pages, else the BUG_ON() in blkif_free() would be triggered.
|
||||
|
||||
When we are using persistent grants the indirect_pages list
|
||||
should always be empty because blkfront has pre-allocated enough
|
||||
persistent pages to fill all requests on the ring.
|
||||
|
||||
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
|
||||
Signed-off-by: Bob Liu <bob.liu@oracle.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/block/xen-blkfront.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/block/xen-blkfront.c
|
||||
+++ b/drivers/block/xen-blkfront.c
|
||||
@@ -1118,8 +1118,10 @@ static void blkif_completion(struct blk_
|
||||
* Add the used indirect page back to the list of
|
||||
* available pages for indirect grefs.
|
||||
*/
|
||||
- indirect_page = pfn_to_page(s->indirect_grants[i]->pfn);
|
||||
- list_add(&indirect_page->lru, &info->indirect_pages);
|
||||
+ if (!info->feature_persistent) {
|
||||
+ indirect_page = pfn_to_page(s->indirect_grants[i]->pfn);
|
||||
+ list_add(&indirect_page->lru, &info->indirect_pages);
|
||||
+ }
|
||||
s->indirect_grants[i]->gref = GRANT_INVALID_REF;
|
||||
list_add_tail(&s->indirect_grants[i]->node, &info->grants);
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
From c22fe519e7e2b94ad173e0ea3b89c1a7d8be8d00 Mon Sep 17 00:00:00 2001
|
||||
From: Julien Grall <julien.grall@citrix.com>
|
||||
Date: Mon, 10 Aug 2015 19:10:38 +0100
|
||||
Subject: xen/xenbus: Don't leak memory when unmapping the ring on HVM backend
|
||||
|
||||
From: Julien Grall <julien.grall@citrix.com>
|
||||
|
||||
commit c22fe519e7e2b94ad173e0ea3b89c1a7d8be8d00 upstream.
|
||||
|
||||
The commit ccc9d90a9a8b5c4ad7e9708ec41f75ff9e98d61d "xenbus_client:
|
||||
Extend interface to support multi-page ring" removes the call to
|
||||
free_xenballooned_pages() in xenbus_unmap_ring_vfree_hvm(), leaking a
|
||||
page for every shared ring.
|
||||
|
||||
Only with backends running in HVM domains were affected.
|
||||
|
||||
Signed-off-by: Julien Grall <julien.grall@citrix.com>
|
||||
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
|
||||
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
|
||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/xen/xenbus/xenbus_client.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/xen/xenbus/xenbus_client.c
|
||||
+++ b/drivers/xen/xenbus/xenbus_client.c
|
||||
@@ -814,8 +814,10 @@ static int xenbus_unmap_ring_vfree_hvm(s
|
||||
|
||||
rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles,
|
||||
addrs);
|
||||
- if (!rv)
|
||||
+ if (!rv) {
|
||||
vunmap(vaddr);
|
||||
+ free_xenballooned_pages(node->nr_handles, node->hvm.pages);
|
||||
+ }
|
||||
else
|
||||
WARN(1, "Leaking %p, size %u page(s)\n", vaddr,
|
||||
node->nr_handles);
|
||||
@@ -0,0 +1,81 @@
|
||||
From a57e456a7b28431b55e407e5ab78ebd5b378d19e Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 22 Aug 2015 16:41:17 +0200
|
||||
Subject: [PATCH] x86/apic: Fix fallout from x2apic cleanup
|
||||
|
||||
In the recent x2apic cleanup I got two things really wrong:
|
||||
1) The safety check in __disable_x2apic which allows the function to
|
||||
be called unconditionally is backwards. The check is there to
|
||||
prevent access to the apic MSR in case that the machine has no
|
||||
apic. Though right now it returns if the machine has an apic and
|
||||
therefor the disabling of x2apic is never invoked.
|
||||
|
||||
2) x2apic_disable() sets x2apic_mode to 0 after registering the local
|
||||
apic. That's wrong, because register_lapic_address() checks x2apic
|
||||
mode and therefor takes the wrong code path.
|
||||
|
||||
This results in boot failures on machines with x2apic preenabled by
|
||||
BIOS and can also lead to an fatal MSR access on machines without
|
||||
apic.
|
||||
|
||||
The solutions are simple:
|
||||
1) Correct the sanity check for apic availability
|
||||
2) Clear x2apic_mode _before_ calling register_lapic_address()
|
||||
|
||||
Fixes: 659006bf3ae3 'x86/x2apic: Split enable and setup function'
|
||||
Reported-and-tested-by: Javier Monteagudo <javiermon@gmail.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: https://bugzilla.redhat.com/show_bug.cgi?id=1224764
|
||||
Cc: stable@vger.kernel.org # 4.0+
|
||||
Cc: Laura Abbott <labbott@redhat.com>
|
||||
Cc: Jiang Liu <jiang.liu@linux.intel.com>
|
||||
Cc: Joerg Roedel <joro@8bytes.org>
|
||||
Cc: Tony Luck <tony.luck@intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
---
|
||||
arch/x86/kernel/apic/apic.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
|
||||
index dcb5285..cde732c 100644
|
||||
--- a/arch/x86/kernel/apic/apic.c
|
||||
+++ b/arch/x86/kernel/apic/apic.c
|
||||
@@ -1424,7 +1424,7 @@ static inline void __x2apic_disable(void)
|
||||
{
|
||||
u64 msr;
|
||||
|
||||
- if (cpu_has_apic)
|
||||
+ if (!cpu_has_apic)
|
||||
return;
|
||||
|
||||
rdmsrl(MSR_IA32_APICBASE, msr);
|
||||
@@ -1483,10 +1483,13 @@ void x2apic_setup(void)
|
||||
|
||||
static __init void x2apic_disable(void)
|
||||
{
|
||||
- u32 x2apic_id;
|
||||
+ u32 x2apic_id, state = x2apic_state;
|
||||
|
||||
- if (x2apic_state != X2APIC_ON)
|
||||
- goto out;
|
||||
+ x2apic_mode = 0;
|
||||
+ x2apic_state = X2APIC_DISABLED;
|
||||
+
|
||||
+ if (state != X2APIC_ON)
|
||||
+ return;
|
||||
|
||||
x2apic_id = read_apic_id();
|
||||
if (x2apic_id >= 255)
|
||||
@@ -1494,9 +1497,6 @@ static __init void x2apic_disable(void)
|
||||
|
||||
__x2apic_disable();
|
||||
register_lapic_address(mp_lapic_addr);
|
||||
-out:
|
||||
- x2apic_state = X2APIC_DISABLED;
|
||||
- x2apic_mode = 0;
|
||||
}
|
||||
|
||||
static __init void x2apic_enable(void)
|
||||
--
|
||||
2.4.5
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
From e43d0189ac02415fe4487f79fc35e8f147e9ea0d Mon Sep 17 00:00:00 2001
|
||||
From: Jisheng Zhang <jszhang@marvell.com>
|
||||
Date: Thu, 20 Aug 2015 12:54:39 +0800
|
||||
Subject: [PATCH] x86/idle: Restore trace_cpu_idle to mwait_idle() calls
|
||||
|
||||
Commit b253149b843f ("sched/idle/x86: Restore mwait_idle() to fix boot
|
||||
hangs, to improve power savings and to improve performance") restores
|
||||
mwait_idle(), but the trace_cpu_idle related calls are missing. This
|
||||
causes powertop on my old desktop powered by Intel Core2 E6550 to
|
||||
report zero wakeups and zero events.
|
||||
|
||||
Add them back to restore the proper behaviour.
|
||||
|
||||
Fixes: b253149b843f ("sched/idle/x86: Restore mwait_idle() to ...")
|
||||
Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
|
||||
Cc: <len.brown@intel.com>
|
||||
Cc: stable@vger.kernel.org # 4.1
|
||||
Link: http://lkml.kernel.org/r/1440046479-4262-1-git-send-email-jszhang@marvell.com
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
arch/x86/kernel/process.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
|
||||
index 397688b..c27cad7 100644
|
||||
--- a/arch/x86/kernel/process.c
|
||||
+++ b/arch/x86/kernel/process.c
|
||||
@@ -408,6 +408,7 @@ static int prefer_mwait_c1_over_halt(const struct cpuinfo_x86 *c)
|
||||
static void mwait_idle(void)
|
||||
{
|
||||
if (!current_set_polling_and_test()) {
|
||||
+ trace_cpu_idle_rcuidle(1, smp_processor_id());
|
||||
if (this_cpu_has(X86_BUG_CLFLUSH_MONITOR)) {
|
||||
smp_mb(); /* quirk */
|
||||
clflush((void *)¤t_thread_info()->flags);
|
||||
@@ -419,6 +420,7 @@ static void mwait_idle(void)
|
||||
__sti_mwait(0, 0);
|
||||
else
|
||||
local_irq_enable();
|
||||
+ trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
|
||||
} else {
|
||||
local_irq_enable();
|
||||
}
|
||||
--
|
||||
2.4.5
|
||||
|
||||
+21
-2
@@ -13,6 +13,7 @@ i<?xml version="1.0" ?>
|
||||
<Summary>The Linux kernel (the core of the Linux operating system) for Pisi Linux</Summary>
|
||||
<Description>kernel contains the Linux kernel, the core of any Linux operating system. The kernel handles the basic functions of the operating system: memory allocation, process allocation, device input and output, etc.</Description>
|
||||
<Archive sha1sum="dce24ac1874f362000e40027075e7d24ba123b73" type="targz">https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.tar.gz</Archive>
|
||||
<!--Archive sha1sum="70db3c22960e3da16b7d7b0a55066154b8d92900" type="targz">https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.2.tar.gz</Archive-->
|
||||
<AdditionalFiles>
|
||||
<AdditionalFile target="configs/kernel-i686-config">configs/kernel-i686-config</AdditionalFile>
|
||||
<AdditionalFile target="configs/kernel-x86_64-config">configs/kernel-x86_64-config</AdditionalFile>
|
||||
@@ -123,6 +124,16 @@ i<?xml version="1.0" ?>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs-updates.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-sched-x86_64-Don-t-save-flags-on-context-swit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/SCSI-Fix-NULL-pointer-dereference-in-runtime-PM.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ata-Revert-libata-eh-Set-information-field-for-autosense.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ata-Revert-libata-Implement-support-for-sense-data-repor.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ata-Revert-libata-Implement-NCQ-autosense.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-Revert-ext4-remove-block_device_ejected.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-remove-HBR2-from-chv-supported-list.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-Avoid-TP3-on-CHV.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-apic-Fix-fallout-from-x2apic-cleanup.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-idle-Restore-trace_cpu_idle-to-mwait_idle-calls.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -177,7 +188,15 @@ i<?xml version="1.0" ?>
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="59">
|
||||
<!--Update release="60">
|
||||
<Date>2015-08-18</Date>
|
||||
<Version>4.2.0</Version>
|
||||
<Comment>Version bump to 4.2.0 https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.2.0</Comment>
|
||||
<Type package="kernel">security</Type>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update-->
|
||||
<Update release="59">
|
||||
<Date>2015-08-18</Date>
|
||||
<Version>4.1.6</Version>
|
||||
<Comment>Version bump to 4.1.6 https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.6</Comment>
|
||||
@@ -185,7 +204,7 @@ i<?xml version="1.0" ?>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="58">
|
||||
<Update release="58">
|
||||
<Date>2015-08-13</Date>
|
||||
<Version>4.1.5</Version>
|
||||
<Comment>Version bump to 4.1.5 https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.5</Comment>
|
||||
|
||||
Reference in New Issue
Block a user