Linux v3.7.5
This commit is contained in:
parent
70941191f8
commit
ccfa9cad08
|
@ -1,67 +0,0 @@
|
|||
commit 262b6d363fcff16359c93bd58c297f961f6e6273
|
||||
Author: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Date: Tue Jan 15 16:17:54 2013 +0000
|
||||
|
||||
drm/i915: Invalidate the relocation presumed_offsets along the slow path
|
||||
|
||||
In the slow path, we are forced to copy the relocations prior to
|
||||
acquiring the struct mutex in order to handle pagefaults. We forgo
|
||||
copying the new offsets back into the relocation entries in order to
|
||||
prevent a recursive locking bug should we trigger a pagefault whilst
|
||||
holding the mutex for the reservations of the execbuffer. Therefore, we
|
||||
need to reset the presumed_offsets just in case the objects are rebound
|
||||
back into their old locations after relocating for this exexbuffer - if
|
||||
that were to happen we would assume the relocations were valid and leave
|
||||
the actual pointers to the kernels dangling, instant hang.
|
||||
|
||||
Fixes regression from commit bcf50e2775bbc3101932d8e4ab8c7902aa4163b4
|
||||
Author: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Date: Sun Nov 21 22:07:12 2010 +0000
|
||||
|
||||
drm/i915: Handle pagefaults in execbuffer user relocations
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=55984
|
||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Cc: Daniel Vetter <daniel.vetter@fwll.ch>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
index d6a994a..26d08bb 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
@@ -539,6 +539,8 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
|
||||
total = 0;
|
||||
for (i = 0; i < count; i++) {
|
||||
struct drm_i915_gem_relocation_entry __user *user_relocs;
|
||||
+ u64 invalid_offset = (u64)-1;
|
||||
+ int j;
|
||||
|
||||
user_relocs = (void __user *)(uintptr_t)exec[i].relocs_ptr;
|
||||
|
||||
@@ -549,6 +551,25 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
|
||||
goto err;
|
||||
}
|
||||
|
||||
+ /* As we do not update the known relocation offsets after
|
||||
+ * relocating (due to the complexities in lock handling),
|
||||
+ * we need to mark them as invalid now so that we force the
|
||||
+ * relocation processing next time. Just in case the target
|
||||
+ * object is evicted and then rebound into its old
|
||||
+ * presumed_offset before the next execbuffer - if that
|
||||
+ * happened we would make the mistake of assuming that the
|
||||
+ * relocations were valid.
|
||||
+ */
|
||||
+ for (j = 0; j < exec[i].relocation_count; j++) {
|
||||
+ if (copy_to_user(&user_relocs[j].presumed_offset,
|
||||
+ &invalid_offset,
|
||||
+ sizeof(invalid_offset))) {
|
||||
+ ret = -EFAULT;
|
||||
+ mutex_lock(&dev->struct_mutex);
|
||||
+ goto err;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
reloc_offset[i] = total;
|
||||
total += exec[i].relocation_count;
|
||||
}
|
19
kernel.spec
19
kernel.spec
|
@ -54,7 +54,7 @@ Summary: The Linux kernel
|
|||
# For non-released -rc kernels, this will be appended after the rcX and
|
||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||
#
|
||||
%global baserelease 104
|
||||
%global baserelease 101
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
|
@ -66,7 +66,7 @@ Summary: The Linux kernel
|
|||
%if 0%{?released_kernel}
|
||||
|
||||
# Do we have a -stable update to apply?
|
||||
%define stable_update 4
|
||||
%define stable_update 5
|
||||
# Is it a -stable RC?
|
||||
%define stable_rc 0
|
||||
# Set rpm version accordingly
|
||||
|
@ -747,12 +747,6 @@ Patch21233: 8139cp-re-enable-interrupts-after-tx-timeout.patch
|
|||
#rhbz 886946
|
||||
Patch21241: iwlegacy-fix-IBSS-cleanup.patch
|
||||
|
||||
#rhbz 902523
|
||||
Patch21236: libata-replace-sata_settings-with-devslp_timing.patch
|
||||
|
||||
#i915 hang fixes
|
||||
Patch21237: drm-invalidate-relocation-presumed_offsets-along-slow-patch.patch
|
||||
|
||||
#rhbz 892428
|
||||
Patch21238: brcmsmac-updates-rhbz892428.patch
|
||||
|
||||
|
@ -1455,12 +1449,6 @@ ApplyPatch 8139cp-re-enable-interrupts-after-tx-timeout.patch
|
|||
#rhbz 886946
|
||||
ApplyPatch iwlegacy-fix-IBSS-cleanup.patch
|
||||
|
||||
#rhbz 902523
|
||||
ApplyPatch libata-replace-sata_settings-with-devslp_timing.patch
|
||||
|
||||
#i915
|
||||
ApplyPatch drm-invalidate-relocation-presumed_offsets-along-slow-patch.patch
|
||||
|
||||
#rhbz 892428
|
||||
ApplyPatch brcmsmac-updates-rhbz892428.patch
|
||||
|
||||
|
@ -2322,6 +2310,9 @@ fi
|
|||
# '-' | |
|
||||
# '-'
|
||||
%changelog
|
||||
* Mon Jan 28 2013 Justin M. Forbes <jforbes@redhat.com> - 3.7.5-101
|
||||
- Linux v3.7.5
|
||||
|
||||
* Mon Jan 28 2013 Josh Boyer <jwboyer@redhat.com>
|
||||
- Add patch to fix iwlwifi issues (rhbz 863424)
|
||||
|
||||
|
|
|
@ -1,131 +0,0 @@
|
|||
From 803739d25c2343da6d2f95eebdcbc08bf67097d4 Mon Sep 17 00:00:00 2001
|
||||
From: Shane Huang <shane.huang@amd.com>
|
||||
Date: Mon, 17 Dec 2012 23:18:59 +0800
|
||||
Subject: [PATCH] [libata] replace sata_settings with devslp_timing
|
||||
|
||||
NCQ capability was used to check availability of SATA Settings page
|
||||
from Identify Device Data Log, which contains DevSlp timing variables.
|
||||
It does not work on some HDDs and leads to error messages.
|
||||
|
||||
IDENTIFY word 78 bit 5(Hardware Feature Control) can't work either
|
||||
because it is only the sufficient condition of Identify Device data
|
||||
log, not the necessary condition.
|
||||
|
||||
This patch replaced ata_device->sata_settings with ->devslp_timing
|
||||
to only save DevSlp timing variables(8 bytes), instead of the whole
|
||||
SATA Settings page(512 bytes).
|
||||
|
||||
Addresses https://bugzilla.kernel.org/show_bug.cgi?id=51881
|
||||
|
||||
Reported-by: Borislav Petkov <bp@alien8.de>
|
||||
Signed-off-by: Shane Huang <shane.huang@amd.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
|
||||
---
|
||||
drivers/ata/libahci.c | 6 +++---
|
||||
drivers/ata/libata-core.c | 22 +++++++++++++---------
|
||||
include/linux/ata.h | 8 +++++---
|
||||
include/linux/libata.h | 4 ++--
|
||||
4 files changed, 23 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
|
||||
index 320712a..6cd7805 100644
|
||||
--- a/drivers/ata/libahci.c
|
||||
+++ b/drivers/ata/libahci.c
|
||||
@@ -1951,13 +1951,13 @@ static void ahci_set_aggressive_devslp(struct ata_port *ap, bool sleep)
|
||||
/* Use the nominal value 10 ms if the read MDAT is zero,
|
||||
* the nominal value of DETO is 20 ms.
|
||||
*/
|
||||
- if (dev->sata_settings[ATA_LOG_DEVSLP_VALID] &
|
||||
+ if (dev->devslp_timing[ATA_LOG_DEVSLP_VALID] &
|
||||
ATA_LOG_DEVSLP_VALID_MASK) {
|
||||
- mdat = dev->sata_settings[ATA_LOG_DEVSLP_MDAT] &
|
||||
+ mdat = dev->devslp_timing[ATA_LOG_DEVSLP_MDAT] &
|
||||
ATA_LOG_DEVSLP_MDAT_MASK;
|
||||
if (!mdat)
|
||||
mdat = 10;
|
||||
- deto = dev->sata_settings[ATA_LOG_DEVSLP_DETO];
|
||||
+ deto = dev->devslp_timing[ATA_LOG_DEVSLP_DETO];
|
||||
if (!deto)
|
||||
deto = 20;
|
||||
} else {
|
||||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
|
||||
index 9e8b99a..46cd3f4 100644
|
||||
--- a/drivers/ata/libata-core.c
|
||||
+++ b/drivers/ata/libata-core.c
|
||||
@@ -2325,24 +2325,28 @@ int ata_dev_configure(struct ata_device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
- /* check and mark DevSlp capability */
|
||||
- if (ata_id_has_devslp(dev->id))
|
||||
- dev->flags |= ATA_DFLAG_DEVSLP;
|
||||
-
|
||||
- /* Obtain SATA Settings page from Identify Device Data Log,
|
||||
- * which contains DevSlp timing variables etc.
|
||||
- * Exclude old devices with ata_id_has_ncq()
|
||||
+ /* Check and mark DevSlp capability. Get DevSlp timing variables
|
||||
+ * from SATA Settings page of Identify Device Data Log.
|
||||
*/
|
||||
- if (ata_id_has_ncq(dev->id)) {
|
||||
+ if (ata_id_has_devslp(dev->id)) {
|
||||
+ u8 sata_setting[ATA_SECT_SIZE];
|
||||
+ int i, j;
|
||||
+
|
||||
+ dev->flags |= ATA_DFLAG_DEVSLP;
|
||||
err_mask = ata_read_log_page(dev,
|
||||
ATA_LOG_SATA_ID_DEV_DATA,
|
||||
ATA_LOG_SATA_SETTINGS,
|
||||
- dev->sata_settings,
|
||||
+ sata_setting,
|
||||
1);
|
||||
if (err_mask)
|
||||
ata_dev_dbg(dev,
|
||||
"failed to get Identify Device Data, Emask 0x%x\n",
|
||||
err_mask);
|
||||
+ else
|
||||
+ for (i = 0; i < ATA_LOG_DEVSLP_SIZE; i++) {
|
||||
+ j = ATA_LOG_DEVSLP_OFFSET + i;
|
||||
+ dev->devslp_timing[i] = sata_setting[j];
|
||||
+ }
|
||||
}
|
||||
|
||||
dev->cdb_len = 16;
|
||||
diff --git a/include/linux/ata.h b/include/linux/ata.h
|
||||
index 408da95..8f7a3d6 100644
|
||||
--- a/include/linux/ata.h
|
||||
+++ b/include/linux/ata.h
|
||||
@@ -297,10 +297,12 @@ enum {
|
||||
ATA_LOG_SATA_NCQ = 0x10,
|
||||
ATA_LOG_SATA_ID_DEV_DATA = 0x30,
|
||||
ATA_LOG_SATA_SETTINGS = 0x08,
|
||||
- ATA_LOG_DEVSLP_MDAT = 0x30,
|
||||
+ ATA_LOG_DEVSLP_OFFSET = 0x30,
|
||||
+ ATA_LOG_DEVSLP_SIZE = 0x08,
|
||||
+ ATA_LOG_DEVSLP_MDAT = 0x00,
|
||||
ATA_LOG_DEVSLP_MDAT_MASK = 0x1F,
|
||||
- ATA_LOG_DEVSLP_DETO = 0x31,
|
||||
- ATA_LOG_DEVSLP_VALID = 0x37,
|
||||
+ ATA_LOG_DEVSLP_DETO = 0x01,
|
||||
+ ATA_LOG_DEVSLP_VALID = 0x07,
|
||||
ATA_LOG_DEVSLP_VALID_MASK = 0x80,
|
||||
|
||||
/* READ/WRITE LONG (obsolete) */
|
||||
diff --git a/include/linux/libata.h b/include/linux/libata.h
|
||||
index 83ba0ab..649e5f8 100644
|
||||
--- a/include/linux/libata.h
|
||||
+++ b/include/linux/libata.h
|
||||
@@ -652,8 +652,8 @@ struct ata_device {
|
||||
u32 gscr[SATA_PMP_GSCR_DWORDS]; /* PMP GSCR block */
|
||||
};
|
||||
|
||||
- /* Identify Device Data Log (30h), SATA Settings (page 08h) */
|
||||
- u8 sata_settings[ATA_SECT_SIZE];
|
||||
+ /* DEVSLP Timing Variables from Identify Device Data Log */
|
||||
+ u8 devslp_timing[ATA_LOG_DEVSLP_SIZE];
|
||||
|
||||
/* error history */
|
||||
int spdn_cnt;
|
||||
--
|
||||
1.7.7.6
|
||||
|
Loading…
Reference in New Issue