[kernel] r22417 - in dists/wheezy/linux/debian: . config patches patches/bugfix/all patches/bugfix/s390 patches/bugfix/x86 patches/debian patches/features/all/drm
Ben Hutchings
benh at moszumanska.debian.org
Tue Feb 24 00:12:40 UTC 2015
Author: benh
Date: Tue Feb 24 00:12:40 2015
New Revision: 22417
Log:
Update to 3.2.67
- Drop/refresh patches as necessary
- drm, agp: Update to 3.4.106
- PCI: quirks: Fix backport of quirk_io()
Added:
dists/wheezy/linux/debian/patches/bugfix/all/pci-quirks-fix-backport-of-quirk_io.patch
dists/wheezy/linux/debian/patches/debian/rmap-fix-abi-change-in-3.2.67.patch
dists/wheezy/linux/debian/patches/debian/sock-fix-abi-change-in-3.2.67.patch
Deleted:
dists/wheezy/linux/debian/patches/bugfix/all/crypto-add-missing-crypto-module-aliases.patch
dists/wheezy/linux/debian/patches/bugfix/all/crypto-include-crypto-module-prefix-in-template.patch
dists/wheezy/linux/debian/patches/bugfix/all/crypto-prefix-module-autoloading-with-crypto.patch
dists/wheezy/linux/debian/patches/bugfix/all/dcache-fix-locking-bugs-in-backported-deal-with-deadlock-in-d_walk.patch
dists/wheezy/linux/debian/patches/bugfix/all/deal-with-deadlock-in-d_walk.patch
dists/wheezy/linux/debian/patches/bugfix/all/drivers-net-disable-ufo-through-virtio.patch
dists/wheezy/linux/debian/patches/bugfix/all/drivers-net-ipv6-select-ipv6-fragment-idents-for-vir.patch
dists/wheezy/linux/debian/patches/bugfix/all/ecryptfs-remove-buggy-and-unnecessary-write-in-file-name-decode.patch
dists/wheezy/linux/debian/patches/bugfix/all/ext4-make-orphan-functions-be-no-op-in-no-journal-mo.patch
dists/wheezy/linux/debian/patches/bugfix/all/isofs-fix-infinite-looping-over-ce-entries.patch
dists/wheezy/linux/debian/patches/bugfix/all/isofs-fix-unchecked-printing-of-er-records.patch
dists/wheezy/linux/debian/patches/bugfix/all/keys-close-race-between-key-lookup-and-freeing.patch
dists/wheezy/linux/debian/patches/bugfix/all/media-ttusb-dec-buffer-overflow-in-ioctl.patch
dists/wheezy/linux/debian/patches/bugfix/all/move-d_rcu-from-overlapping-d_child-to-overlapping-d_alias.patch
dists/wheezy/linux/debian/patches/bugfix/all/net-sctp-fix-NULL-pointer-dereference-in-af-from_add.patch
dists/wheezy/linux/debian/patches/bugfix/all/net-sctp-fix-slab-corruption-from-use-after-free-on-init-collisions.patch
dists/wheezy/linux/debian/patches/bugfix/all/netfilter-conntrack-disable-generic-tracking-for-kno.patch
dists/wheezy/linux/debian/patches/bugfix/all/revert-drivers-net-disable-ufo-through-virtio-in-macvtap-and-tun.patch
dists/wheezy/linux/debian/patches/bugfix/all/splice-apply-generic-position-and-size-checks-to-eac.patch
dists/wheezy/linux/debian/patches/bugfix/all/udf-Avoid-infinite-loop-when-processing-indirect-ICB.patch
dists/wheezy/linux/debian/patches/bugfix/all/vfs-fix-vfsmount_lock-imbalance-in-path_init.patch
dists/wheezy/linux/debian/patches/bugfix/s390/s390-revert-clockevent.patch
dists/wheezy/linux/debian/patches/bugfix/x86/crypto-ghash-clmulni-intel-use-C-implementation-for-.patch
dists/wheezy/linux/debian/patches/bugfix/x86/kvm-x86-don-t-report-guest-userspace-emulation-error-to-userspace.patch
dists/wheezy/linux/debian/patches/bugfix/x86/kvm-x86-emulator-reject-sysenter-in-compatibility-mo.patch
dists/wheezy/linux/debian/patches/bugfix/x86/kvm-x86-sysenter-emulation-is-broken.patch
dists/wheezy/linux/debian/patches/bugfix/x86/revert-x86-64bit-mm-mark-data-bss-brk-to-nx.patch
dists/wheezy/linux/debian/patches/bugfix/x86/revert-x86-mm-set-nx-across-entire-pmd-at-boot.patch
dists/wheezy/linux/debian/patches/bugfix/x86/x86-cpu-amd-add-workaround-for-family-16h-erratum-79.patch
dists/wheezy/linux/debian/patches/bugfix/x86/x86-kvm-clear-paravirt_enabled-on-kvm-guests-for-espfix32-s-benefit.patch
dists/wheezy/linux/debian/patches/bugfix/x86/x86-tls-interpret-an-all-zero-struct-user_desc-as-no-segment.patch
dists/wheezy/linux/debian/patches/bugfix/x86/x86-tls-ldt-stop-checking-lm-in-ldt_empty.patch
dists/wheezy/linux/debian/patches/bugfix/x86/x86-tls-validate-tls-entries-to-protect-espfix.patch
dists/wheezy/linux/debian/patches/bugfix/x86/x86_64-switch_to-load-tls-descriptors-before-switchi.patch
dists/wheezy/linux/debian/patches/bugfix/x86/x86_64-vdso-fix-the-vdso-address-randomization-algor.patch
Modified:
dists/wheezy/linux/debian/changelog
dists/wheezy/linux/debian/config/defines
dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch
dists/wheezy/linux/debian/patches/series
Modified: dists/wheezy/linux/debian/changelog
==============================================================================
--- dists/wheezy/linux/debian/changelog Sun Feb 22 17:06:56 2015 (r22416)
+++ dists/wheezy/linux/debian/changelog Tue Feb 24 00:12:40 2015 (r22417)
@@ -1,3 +1,77 @@
+linux (3.2.67-1) UNRELEASED; urgency=medium
+
+ * New upstream stable update:
+ http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.66
+ - net: sctp: fix memory leak in auth key management
+ - tcp: md5: remove spinlock usage in fast path
+ - tcp: md5: do not use alloc_percpu()
+ - ipv4: dst_entry leak in ip_send_unicast_reply()
+ - net: sctp: use MAX_HEADER for headroom reserve in output path
+ http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.67
+ - eCryptfs: Force RO mount when encrypted view is enabled
+ - ipv4: Remove all uses of LL_ALLOCATED_SPACE
+ - ipv6: Remove all uses of LL_ALLOCATED_SPACE
+ - ipv6: mld: fix add_grhead skb_over_panic for devs with large MTUs
+ - [s390*] KVM: flush CPU on load control
+ - UBI: Fix invalid vfree()
+ - drbd: merge_bvec_fn: properly remap bvm->bi_bdev
+ - PCI: Restore detection of read-only BARs
+ - genhd: check for int overflow in disk_expand_part_tbl()
+ - USB: cdc-acm: check for valid interfaces
+ - dm space map metadata: fix sm_bootstrap_get_nr_blocks()
+ - [x86] iommu/vt-d: Fix an off-by-one bug in __domain_mapping()
+ - KEYS: Fix stale key registration at error path
+ - Btrfs: fix fs corruption on transaction abort if device supports discard
+ - ncpfs: return proper error from NCP_IOC_SETROOT ioctl
+ - mac80211: fix multicast LED blinking and counter (regression in 3.2.65)
+ - genirq: Prevent proc race against freeing of irq descriptors
+ - decompress_bunzip2: off by one in get_next_block()
+ - [x86] tls: Disallow unusual TLS segments
+ - iscsi-target: Fail connection on short sendmsg writes
+ - ceph: introduce global empty snap context
+ - [x86] tls: Don't validate lm in set_thread_area() after all
+ - ocfs2: fix journal commit deadlock
+ - udf: Verify i_size when loading inode
+ - udf: Verify symlink size before loading it
+ - udf: Treat symlink component of type 2 as /
+ - udf: Check path length when reading symlink
+ - udf: Check component length before reading it
+ - crypto: af_alg - fix backlog handling
+ - Revert "tcp: Apply device TSO segment limit earlier"
+ (regression in 3.2.30)
+ - virtio_pci: defer kfree until release callback
+ - mm: propagate error from stack expansion even for guard page
+ - time: settimeofday: Validate the values of tv from user
+ - regulator: core: fix race condition in regulator_put()
+ - mm: prevent endless growth of anon_vma hierarchy
+ - mm: protect set_page_dirty() from ongoing truncation
+ - HID: roccat: potential out of bounds in pyra_sysfs_write_settings()
+ - USB: console: fix potential use after free
+ - mm: Don't count the stack guard page towards RLIMIT_STACK
+ - mm: fix corner case in anon_vma endless growing prevention
+ - can: dev: fix crtlmode_supported check
+ - net: sctp: fix race for one-to-many sockets in sendmsg's auto associate
+ - libata: allow sata_sil24 to opt-out of tag ordered submission
+ (regression in 3.2.62)
+ - nl80211: fix per-station group key get/del and memory leak
+ - vm: add VM_FAULT_SIGSEGV handling support
+ - vm: make stack guard page errors return VM_FAULT_SIGSEGV rather than
+ SIGBUS
+ - ACPI / EC: Fix regression due to conflicting firmware behavior between
+ Samsung and Acer. (regression in 3.2.63)
+ - [s390*] 3215: fix tty output containing tabs (Closes: #758264)
+ - fsnotify: next_i is freed during fsnotify_unmount_inodes.
+ - PCI: Handle read-only BARs on AMD CS553x devices
+
+ [ Ben Hutchings ]
+ * drm, agp: Update to 3.4.106:
+ - [x86] drm/vmwgfx: Filter out modes those cannot be supported by the
+ current VRAM size.
+ - drm/radeon: add missing crtc unlock when setting up the MC
+ * PCI: quirks: Fix backport of quirk_io()
+
+ -- Ben Hutchings <ben at decadent.org.uk> Mon, 23 Feb 2015 03:42:59 +0000
+
linux (3.2.65-1+deb7u2) wheezy-security; urgency=medium
* splice: Apply generic position and size checks to each write
Modified: dists/wheezy/linux/debian/config/defines
==============================================================================
--- dists/wheezy/linux/debian/config/defines Sun Feb 22 17:06:56 2015 (r22416)
+++ dists/wheezy/linux/debian/config/defines Tue Feb 24 00:12:40 2015 (r22417)
@@ -64,6 +64,11 @@
g450_mnp2f
matrox_*
matroxfb_*
+# Should not be used from OOT
+ tcp_alloc_md5sig_pool
+ tcp_free_md5sig_pool
+ tcp_get_md5sig_pool
+ tcp_put_md5sig_pool
[base]
arches:
Added: dists/wheezy/linux/debian/patches/bugfix/all/pci-quirks-fix-backport-of-quirk_io.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/wheezy/linux/debian/patches/bugfix/all/pci-quirks-fix-backport-of-quirk_io.patch Tue Feb 24 00:12:40 2015 (r22417)
@@ -0,0 +1,25 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Mon, 23 Feb 2015 21:37:52 +0000
+Subject: PCI: quirks: Fix backport of quirk_io()
+
+Commit 06cf35f903aa ('PCI: Handle read-only BARs on AMD CS553x
+devices') added the function quirk_io() which calls
+pcibios_bus_to_resource().
+
+Prior to Linux 3.14, pcibios_bus_to_resource() takes a pointer to
+struct pci_dev and looks up the device's bus itself, so we need
+to pass dev not dev->bus.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -409,7 +409,7 @@ static void quirk_io(struct pci_dev *dev
+ /* Convert from PCI bus to resource space */
+ bus_region.start = region;
+ bus_region.end = region + size - 1;
+- pcibios_bus_to_resource(dev->bus, res, &bus_region);
++ pcibios_bus_to_resource(dev, res, &bus_region);
+
+ dev_info(&dev->dev, FW_BUG "%s quirk: reg 0x%x: %pR\n",
+ name, PCI_BASE_ADDRESS_0 + (pos << 2), res);
Added: dists/wheezy/linux/debian/patches/debian/rmap-fix-abi-change-in-3.2.67.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/wheezy/linux/debian/patches/debian/rmap-fix-abi-change-in-3.2.67.patch Tue Feb 24 00:12:40 2015 (r22417)
@@ -0,0 +1,49 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Mon, 23 Feb 2015 05:09:41 +0000
+Subject: rmap: Fix ABI change in 3.2.67
+
+'mm: prevent endless growth of anon_vma hierarchy' in 3.2.67 added
+two new members to struct anon_vma.
+
+This structure is always allocated by anon_vma_alloc() so it is OK to
+add members, but we need to add them at the end and hide them from
+genksyms.
+
+--- a/include/linux/rmap.h
++++ b/include/linux/rmap.h
+@@ -37,16 +37,6 @@ struct anon_vma {
+ atomic_t refcount;
+
+ /*
+- * Count of child anon_vmas and VMAs which points to this anon_vma.
+- *
+- * This counter is used for making decision about reusing anon_vma
+- * instead of forking new one. See comments in function anon_vma_clone.
+- */
+- unsigned degree;
+-
+- struct anon_vma *parent; /* Parent of this anon_vma */
+-
+- /*
+ * NOTE: the LSB of the head.next is set by
+ * mm_take_all_locks() _after_ taking the above lock. So the
+ * head must only be read/written after taking the above lock
+@@ -55,6 +45,18 @@ struct anon_vma {
+ * mm_take_all_locks() (mm_all_locks_mutex).
+ */
+ struct list_head head; /* Chain of private "related" vmas */
++
++#ifndef __GENKSYMS__
++ /*
++ * Count of child anon_vmas and VMAs which points to this anon_vma.
++ *
++ * This counter is used for making decision about reusing anon_vma
++ * instead of forking new one. See comments in function anon_vma_clone.
++ */
++ unsigned degree;
++
++ struct anon_vma *parent; /* Parent of this anon_vma */
++#endif
+ };
+
+ /*
Added: dists/wheezy/linux/debian/patches/debian/sock-fix-abi-change-in-3.2.67.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/wheezy/linux/debian/patches/debian/sock-fix-abi-change-in-3.2.67.patch Tue Feb 24 00:12:40 2015 (r22417)
@@ -0,0 +1,17 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Mon, 23 Feb 2015 03:29:32 +0000
+Subject: sock: Fix ABI change in 3.2.67
+
+'Revert "tcp: Apply device TSO segment limit earlier"' in 3.2.67
+removed sock::sk_gso_max_segs. Add it back.
+
+--- a/include/net/sock.h
++++ b/include/net/sock.h
+@@ -310,6 +310,7 @@ struct sock {
+ int sk_route_nocaps;
+ int sk_gso_type;
+ unsigned int sk_gso_max_size;
++ u16 sk_gso_max_segs; /* now unused */
+ int sk_rcvlowat;
+ unsigned long sk_lingertime;
+ struct sk_buff_head sk_error_queue;
Modified: dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch Sun Feb 22 17:06:56 2015 (r22416)
+++ dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch Tue Feb 24 00:12:40 2015 (r22417)
@@ -351,7 +351,7 @@
return -EINVAL;
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
-index 3f1799b..c61e672 100644
+index 09851ce..c61e672 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -36,11 +36,7 @@
@@ -1584,16 +1584,28 @@
*
* Lookup the FB given its ID and return info about it.
*
-@@ -1814,7 +2347,7 @@ int drm_mode_getfb(struct drm_device *dev,
+@@ -1814,18 +2347,8 @@ int drm_mode_getfb(struct drm_device *dev,
r->width = fb->width;
r->depth = fb->depth;
r->bpp = fb->bits_per_pixel;
- r->pitch = fb->pitch;
+- if (file_priv->is_master || capable(CAP_SYS_ADMIN)) {
+- ret = fb->funcs->create_handle(fb, file_priv, &r->handle);
+- } else {
+- /* GET_FB() is an unprivileged ioctl so we must not
+- * return a buffer-handle to non-master processes! For
+- * backwards-compatibility reasons, we cannot make
+- * GET_FB() privileged, so just return an invalid handle
+- * for non-masters. */
+- r->handle = 0;
+- ret = 0;
+- }
+ r->pitch = fb->pitches[0];
- fb->funcs->create_handle(fb, file_priv, &r->handle);
++ fb->funcs->create_handle(fb, file_priv, &r->handle);
out:
-@@ -1846,7 +2379,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
+ mutex_unlock(&dev->mode_config.mutex);
+@@ -1856,7 +2379,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
fb = obj_to_fb(obj);
num_clips = r->num_clips;
@@ -1602,7 +1614,7 @@
if (!num_clips != !clips_ptr) {
ret = -EINVAL;
-@@ -1931,38 +2464,48 @@ void drm_fb_release(struct drm_file *priv)
+@@ -1941,38 +2464,48 @@ void drm_fb_release(struct drm_file *priv)
*
* Add @mode to @connector's user mode list.
*/
@@ -1670,7 +1682,7 @@
}
EXPORT_SYMBOL(drm_mode_attachmode_crtc);
-@@ -2041,9 +2584,14 @@ int drm_mode_attachmode_ioctl(struct drm_device *dev,
+@@ -2051,9 +2584,14 @@ int drm_mode_attachmode_ioctl(struct drm_device *dev,
goto out;
}
@@ -1687,7 +1699,7 @@
out:
mutex_unlock(&dev->mode_config.mutex);
return ret;
-@@ -2084,7 +2632,12 @@ int drm_mode_detachmode_ioctl(struct drm_device *dev,
+@@ -2094,7 +2632,12 @@ int drm_mode_detachmode_ioctl(struct drm_device *dev,
}
connector = obj_to_connector(obj);
@@ -1701,7 +1713,7 @@
ret = drm_mode_detachmode(dev, connector, &mode);
out:
mutex_unlock(&dev->mode_config.mutex);
-@@ -2095,6 +2648,7 @@ struct drm_property *drm_property_create(struct drm_device *dev, int flags,
+@@ -2105,6 +2648,7 @@ struct drm_property *drm_property_create(struct drm_device *dev, int flags,
const char *name, int num_values)
{
struct drm_property *property = NULL;
@@ -1709,7 +1721,7 @@
property = kzalloc(sizeof(struct drm_property), GFP_KERNEL);
if (!property)
-@@ -2106,7 +2660,10 @@ struct drm_property *drm_property_create(struct drm_device *dev, int flags,
+@@ -2116,7 +2660,10 @@ struct drm_property *drm_property_create(struct drm_device *dev, int flags,
goto fail;
}
@@ -1721,7 +1733,7 @@
property->flags = flags;
property->num_values = num_values;
INIT_LIST_HEAD(&property->enum_blob_list);
-@@ -2119,11 +2676,59 @@ struct drm_property *drm_property_create(struct drm_device *dev, int flags,
+@@ -2129,11 +2676,59 @@ struct drm_property *drm_property_create(struct drm_device *dev, int flags,
list_add_tail(&property->head, &dev->mode_config.property_list);
return property;
fail:
@@ -1781,7 +1793,7 @@
int drm_property_add_enum(struct drm_property *property, int index,
uint64_t value, const char *name)
{
-@@ -2242,7 +2847,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
+@@ -2252,7 +2847,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
struct drm_property_enum *prop_enum;
struct drm_mode_property_enum __user *enum_ptr;
struct drm_property_blob *prop_blob;
@@ -1790,7 +1802,7 @@
uint64_t __user *values_ptr;
uint32_t __user *blob_length_ptr;
-@@ -2272,7 +2877,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
+@@ -2282,7 +2877,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
out_resp->flags = property->flags;
if ((out_resp->count_values >= value_count) && value_count) {
@@ -1799,7 +1811,7 @@
for (i = 0; i < value_count; i++) {
if (copy_to_user(values_ptr + i, &property->values[i], sizeof(uint64_t))) {
ret = -EFAULT;
-@@ -2285,7 +2890,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
+@@ -2295,7 +2890,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
if (property->flags & DRM_MODE_PROP_ENUM) {
if ((out_resp->count_enum_blobs >= enum_count) && enum_count) {
copied = 0;
@@ -1808,7 +1820,7 @@
list_for_each_entry(prop_enum, &property->enum_blob_list, head) {
if (copy_to_user(&enum_ptr[copied].value, &prop_enum->value, sizeof(uint64_t))) {
-@@ -2307,8 +2912,8 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
+@@ -2317,8 +2912,8 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
if (property->flags & DRM_MODE_PROP_BLOB) {
if ((out_resp->count_enum_blobs >= blob_count) && blob_count) {
copied = 0;
@@ -1819,7 +1831,7 @@
list_for_each_entry(prop_blob, &property->enum_blob_list, head) {
if (put_user(prop_blob->base.id, blob_id_ptr + copied)) {
-@@ -2335,6 +2940,7 @@ static struct drm_property_blob *drm_property_create_blob(struct drm_device *dev
+@@ -2345,6 +2940,7 @@ static struct drm_property_blob *drm_property_create_blob(struct drm_device *dev
void *data)
{
struct drm_property_blob *blob;
@@ -1827,7 +1839,7 @@
if (!length || !data)
return NULL;
-@@ -2343,13 +2949,16 @@ static struct drm_property_blob *drm_property_create_blob(struct drm_device *dev
+@@ -2353,13 +2949,16 @@ static struct drm_property_blob *drm_property_create_blob(struct drm_device *dev
if (!blob)
return NULL;
@@ -1847,7 +1859,7 @@
list_add_tail(&blob->head, &dev->mode_config.property_blob_list);
return blob;
}
-@@ -2369,7 +2978,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
+@@ -2379,7 +2978,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
struct drm_mode_get_blob *out_resp = data;
struct drm_property_blob *blob;
int ret = 0;
@@ -1856,7 +1868,7 @@
if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL;
-@@ -2383,7 +2992,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
+@@ -2393,7 +2992,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
blob = obj_to_blob(obj);
if (out_resp->length == blob->length) {
@@ -1865,7 +1877,7 @@
if (copy_to_user(blob_ptr, blob->data, blob->length)){
ret = -EFAULT;
goto done;
-@@ -2528,7 +3137,7 @@ void drm_mode_connector_detach_encoder(struct drm_connector *connector,
+@@ -2538,7 +3137,7 @@ void drm_mode_connector_detach_encoder(struct drm_connector *connector,
}
EXPORT_SYMBOL(drm_mode_connector_detach_encoder);
@@ -1874,7 +1886,7 @@
int gamma_size)
{
crtc->gamma_size = gamma_size;
-@@ -2536,10 +3145,10 @@ bool drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
+@@ -2546,10 +3145,10 @@ bool drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
crtc->gamma_store = kzalloc(gamma_size * sizeof(uint16_t) * 3, GFP_KERNEL);
if (!crtc->gamma_store) {
crtc->gamma_size = 0;
@@ -1887,7 +1899,7 @@
}
EXPORT_SYMBOL(drm_mode_crtc_set_gamma_size);
-@@ -2685,6 +3294,18 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
+@@ -2695,6 +3294,18 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
goto out;
fb = obj_to_fb(obj);
@@ -1906,7 +1918,7 @@
if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
ret = -ENOMEM;
spin_lock_irqsave(&dev->event_lock, flags);
-@@ -2714,10 +3335,12 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
+@@ -2724,10 +3335,12 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
ret = crtc->funcs->page_flip(crtc, fb, e);
if (ret) {
@@ -1923,7 +1935,7 @@
}
out:
-@@ -2777,3 +3400,72 @@ int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
+@@ -2787,3 +3400,72 @@ int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
return dev->driver->dumb_destroy(file_priv, dev, args->handle);
}
@@ -44495,7 +44507,7 @@
#define __i915_read(x, y) \
u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
-index 2865b44..2ac4ded 100644
+index 315a49e..2ac4ded 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -58,6 +58,7 @@ static void i915_gem_free_object_tail(struct drm_i915_gem_object *obj);
@@ -45168,7 +45180,35 @@
if (ret)
return ret;
}
-@@ -2434,7 +2379,8 @@ i915_gem_object_flush_fence(struct drm_i915_gem_object *obj,
+@@ -2248,13 +2193,6 @@ static int sandybridge_write_fence_reg(struct drm_i915_gem_object *obj,
+ int regnum = obj->fence_reg;
+ uint64_t val;
+
+- /* Adjust fence size to match tiled area */
+- if (obj->tiling_mode != I915_TILING_NONE) {
+- uint32_t row_size = obj->stride *
+- (obj->tiling_mode == I915_TILING_Y ? 32 : 8);
+- size = (size / row_size) * row_size;
+- }
+-
+ val = (uint64_t)((obj->gtt_offset + size - 4096) &
+ 0xfffff000) << 32;
+ val |= obj->gtt_offset & 0xfffff000;
+@@ -2292,13 +2230,6 @@ static int i965_write_fence_reg(struct drm_i915_gem_object *obj,
+ int regnum = obj->fence_reg;
+ uint64_t val;
+
+- /* Adjust fence size to match tiled area */
+- if (obj->tiling_mode != I915_TILING_NONE) {
+- uint32_t row_size = obj->stride *
+- (obj->tiling_mode == I915_TILING_Y ? 32 : 8);
+- size = (size / row_size) * row_size;
+- }
+-
+ val = (uint64_t)((obj->gtt_offset + size - 4096) &
+ 0xfffff000) << 32;
+ val |= obj->gtt_offset & 0xfffff000;
+@@ -2448,7 +2379,8 @@ i915_gem_object_flush_fence(struct drm_i915_gem_object *obj,
if (!ring_passed_seqno(obj->last_fenced_ring,
obj->last_fenced_seqno)) {
ret = i915_wait_request(obj->last_fenced_ring,
@@ -45178,7 +45218,7 @@
if (ret)
return ret;
}
-@@ -2466,6 +2412,8 @@ i915_gem_object_put_fence(struct drm_i915_gem_object *obj)
+@@ -2480,6 +2412,8 @@ i915_gem_object_put_fence(struct drm_i915_gem_object *obj)
if (obj->fence_reg != I915_FENCE_REG_NONE) {
struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
@@ -45187,7 +45227,7 @@
i915_gem_clear_fence_reg(obj->base.dev,
&dev_priv->fence_regs[obj->fence_reg]);
-@@ -2490,7 +2438,7 @@ i915_find_fence_reg(struct drm_device *dev,
+@@ -2504,7 +2438,7 @@ i915_find_fence_reg(struct drm_device *dev,
if (!reg->obj)
return reg;
@@ -45196,7 +45236,7 @@
avail = reg;
}
-@@ -2500,7 +2448,7 @@ i915_find_fence_reg(struct drm_device *dev,
+@@ -2514,7 +2448,7 @@ i915_find_fence_reg(struct drm_device *dev,
/* None available, try to steal one or wait for a user to finish */
avail = first = NULL;
list_for_each_entry(reg, &dev_priv->mm.fence_list, lru_list) {
@@ -45205,7 +45245,7 @@
continue;
if (first == NULL)
-@@ -2580,7 +2528,8 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
+@@ -2594,7 +2528,8 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
if (!ring_passed_seqno(obj->last_fenced_ring,
reg->setup_seqno)) {
ret = i915_wait_request(obj->last_fenced_ring,
@@ -45215,7 +45255,7 @@
if (ret)
return ret;
}
-@@ -2599,7 +2548,7 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
+@@ -2613,7 +2548,7 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
reg = i915_find_fence_reg(dev, pipelined);
if (reg == NULL)
@@ -45224,7 +45264,7 @@
ret = i915_gem_object_flush_fence(obj, pipelined);
if (ret)
-@@ -2710,6 +2659,7 @@ i915_gem_clear_fence_reg(struct drm_device *dev,
+@@ -2724,6 +2659,7 @@ i915_gem_clear_fence_reg(struct drm_device *dev,
list_del_init(®->lru_list);
reg->obj = NULL;
reg->setup_seqno = 0;
@@ -45232,7 +45272,7 @@
}
/**
-@@ -2996,6 +2946,8 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
+@@ -3010,6 +2946,8 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
enum i915_cache_level cache_level)
{
@@ -45241,7 +45281,7 @@
int ret;
if (obj->cache_level == cache_level)
-@@ -3024,6 +2976,9 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
+@@ -3038,6 +2976,9 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
}
i915_gem_gtt_rebind_object(obj, cache_level);
@@ -45251,7 +45291,7 @@
}
if (cache_level == I915_CACHE_NONE) {
-@@ -3362,8 +3317,8 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
+@@ -3376,8 +3317,8 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
if (ret == 0 && atomic_read(&dev_priv->mm.wedged))
ret = -EIO;
@@ -45262,7 +45302,7 @@
atomic_read(&dev_priv->mm.wedged), 3000)) {
ret = -EBUSY;
}
-@@ -3674,8 +3629,8 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
+@@ -3688,8 +3629,8 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
obj->base.write_domain = I915_GEM_DOMAIN_CPU;
obj->base.read_domains = I915_GEM_DOMAIN_CPU;
@@ -45273,7 +45313,7 @@
* cache) for about a 10% performance improvement
* compared to uncached. Graphics requests other than
* display scanout are coherent with the CPU in
-@@ -3765,7 +3720,7 @@ i915_gem_idle(struct drm_device *dev)
+@@ -3779,7 +3720,7 @@ i915_gem_idle(struct drm_device *dev)
return 0;
}
@@ -45282,7 +45322,7 @@
if (ret) {
mutex_unlock(&dev->struct_mutex);
return ret;
-@@ -3800,12 +3755,91 @@ i915_gem_idle(struct drm_device *dev)
+@@ -3814,12 +3755,91 @@ i915_gem_idle(struct drm_device *dev)
return 0;
}
@@ -45375,7 +45415,7 @@
ret = intel_init_render_ring_buffer(dev);
if (ret)
return ret;
-@@ -3824,6 +3858,8 @@ i915_gem_init_ringbuffer(struct drm_device *dev)
+@@ -3838,6 +3858,8 @@ i915_gem_init_ringbuffer(struct drm_device *dev)
dev_priv->next_seqno = 1;
@@ -45384,7 +45424,7 @@
return 0;
cleanup_bsd_ring:
-@@ -3861,7 +3897,7 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
+@@ -3875,7 +3897,7 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
mutex_lock(&dev->struct_mutex);
dev_priv->mm.suspended = 0;
@@ -45393,7 +45433,7 @@
if (ret != 0) {
mutex_unlock(&dev->struct_mutex);
return ret;
-@@ -4256,7 +4292,7 @@ rescan:
+@@ -4270,7 +4292,7 @@ rescan:
* This has a dramatic impact to reduce the number of
* OOM-killer events whilst running the GPU aggressively.
*/
@@ -50052,7 +50092,7 @@
}
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
-index fadd021..77190cc 100644
+index 4da8182..77190cc 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -187,6 +187,8 @@ centre_horizontally(struct drm_display_mode *mode,
@@ -50101,16 +50141,46 @@
/**
* intel_lvds_init - setup LVDS connectors on this device
* @dev: drm device
-@@ -914,6 +932,9 @@ bool intel_lvds_init(struct drm_device *dev)
+@@ -914,17 +932,8 @@ bool intel_lvds_init(struct drm_device *dev)
int pipe;
u8 pin;
+- /*
+- * Unlock registers and just leave them unlocked. Do this before
+- * checking quirk lists to avoid bogus WARNINGs.
+- */
+- if (HAS_PCH_SPLIT(dev)) {
+- I915_WRITE(PCH_PP_CONTROL,
+- I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
+- } else {
+- I915_WRITE(PP_CONTROL,
+- I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
+- }
+ if (!intel_lvds_supported(dev))
+ return false;
-+
+
/* Skip init on machines we know falsely report LVDS */
if (dmi_check_system(intel_no_lvds))
- return false;
+@@ -1100,6 +1109,19 @@ out:
+ pwm = I915_READ(BLC_PWM_PCH_CTL1);
+ pwm |= PWM_PCH_ENABLE;
+ I915_WRITE(BLC_PWM_PCH_CTL1, pwm);
++ /*
++ * Unlock registers and just
++ * leave them unlocked
++ */
++ I915_WRITE(PCH_PP_CONTROL,
++ I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
++ } else {
++ /*
++ * Unlock registers and just
++ * leave them unlocked
++ */
++ I915_WRITE(PP_CONTROL,
++ I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
+ }
+ dev_priv->lid_notifier.notifier_call = intel_lid_notify;
+ if (acpi_lid_notifier_register(&dev_priv->lid_notifier)) {
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
index be2c6fe..9a2b270 100644
--- a/drivers/gpu/drm/i915/intel_modes.c
@@ -72934,7 +73004,7 @@
#include <linux/kernel.h>
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
-index 9b3f787..df62c39 100644
+index 9b3f787..01434ef 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -50,6 +50,39 @@ static const u32 crtc_offsets[6] =
@@ -72986,7 +73056,7 @@
{
u32 tmp = RREG32(MC_SHARED_CHMAP);
-@@ -1136,11 +1169,23 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
+@@ -1136,11 +1169,24 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
crtc_enabled = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]) & EVERGREEN_CRTC_MASTER_EN;
if (crtc_enabled) {
save->crtc_enabled[i] = true;
@@ -73002,6 +73072,7 @@
+ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
+ tmp |= EVERGREEN_CRTC_BLANK_DATA_EN;
+ WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp);
++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0);
+ }
+ } else {
+ tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]);
@@ -73015,7 +73086,7 @@
}
/* wait for the next frame */
frame_count = radeon_get_vblank_counter(rdev, i);
-@@ -1149,12 +1194,21 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
+@@ -1149,12 +1195,21 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
break;
udelay(1);
}
@@ -73038,7 +73109,7 @@
blackout = RREG32(MC_SHARED_BLACKOUT_CNTL);
if ((blackout & BLACKOUT_MODE_MASK) != 1) {
-@@ -1166,6 +1220,22 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
+@@ -1166,6 +1221,22 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
}
/* wait for the MC to settle */
udelay(100);
@@ -73061,7 +73132,7 @@
}
void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save)
-@@ -1187,6 +1257,33 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s
+@@ -1187,6 +1258,33 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s
WREG32(EVERGREEN_VGA_MEMORY_BASE_ADDRESS_HIGH, upper_32_bits(rdev->mc.vram_start));
WREG32(EVERGREEN_VGA_MEMORY_BASE_ADDRESS, (u32)rdev->mc.vram_start);
@@ -73095,7 +73166,7 @@
/* unblackout the MC */
tmp = RREG32(MC_SHARED_BLACKOUT_CNTL);
tmp &= ~BLACKOUT_MODE_MASK;
-@@ -1196,9 +1293,19 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s
+@@ -1196,9 +1294,19 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s
for (i = 0; i < rdev->num_crtc; i++) {
if (save->crtc_enabled[i]) {
@@ -73118,7 +73189,7 @@
/* wait for the next frame */
frame_count = radeon_get_vblank_counter(rdev, i);
for (j = 0; j < rdev->usec_timeout; j++) {
-@@ -1258,7 +1365,10 @@ void evergreen_mc_program(struct radeon_device *rdev)
+@@ -1258,7 +1366,10 @@ void evergreen_mc_program(struct radeon_device *rdev)
rdev->mc.vram_end >> 12);
}
WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, rdev->vram_scratch.gpu_addr >> 12);
@@ -73130,7 +73201,7 @@
tmp = RREG32(MC_FUS_VM_FB_OFFSET) & 0x000FFFFF;
tmp |= ((rdev->mc.vram_end >> 20) & 0xF) << 24;
tmp |= ((rdev->mc.vram_start >> 20) & 0xF) << 20;
-@@ -1293,18 +1403,20 @@ void evergreen_mc_program(struct radeon_device *rdev)
+@@ -1293,18 +1404,20 @@ void evergreen_mc_program(struct radeon_device *rdev)
*/
void evergreen_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib)
{
@@ -73157,7 +73228,7 @@
}
-@@ -1342,71 +1454,73 @@ static int evergreen_cp_load_microcode(struct radeon_device *rdev)
+@@ -1342,71 +1455,73 @@ static int evergreen_cp_load_microcode(struct radeon_device *rdev)
static int evergreen_cp_start(struct radeon_device *rdev)
{
@@ -73262,7 +73333,7 @@
u32 tmp;
u32 rb_bufsz;
int r;
-@@ -1424,13 +1538,14 @@ int evergreen_cp_resume(struct radeon_device *rdev)
+@@ -1424,13 +1539,14 @@ int evergreen_cp_resume(struct radeon_device *rdev)
RREG32(GRBM_SOFT_RESET);
/* Set ring buffer size */
@@ -73279,7 +73350,7 @@
/* Set the write pointer delay */
WREG32(CP_RB_WPTR_DELAY, 0);
-@@ -1438,8 +1553,8 @@ int evergreen_cp_resume(struct radeon_device *rdev)
+@@ -1438,8 +1554,8 @@ int evergreen_cp_resume(struct radeon_device *rdev)
/* Initialize the ring buffer's read and write pointers */
WREG32(CP_RB_CNTL, tmp | RB_RPTR_WR_ENA);
WREG32(CP_RB_RPTR_WR, 0);
@@ -73290,7 +73361,7 @@
/* set the wb address wether it's enabled or not */
WREG32(CP_RB_RPTR_ADDR,
-@@ -1457,16 +1572,16 @@ int evergreen_cp_resume(struct radeon_device *rdev)
+@@ -1457,16 +1573,16 @@ int evergreen_cp_resume(struct radeon_device *rdev)
mdelay(1);
WREG32(CP_RB_CNTL, tmp);
@@ -73312,7 +73383,7 @@
return r;
}
return 0;
-@@ -1897,7 +2012,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
+@@ -1897,7 +2013,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
mc_shared_chmap = RREG32(MC_SHARED_CHMAP);
@@ -73323,7 +73394,7 @@
mc_arb_ramcfg = RREG32(FUS_MC_ARB_RAMCFG);
else
mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG);
-@@ -2301,7 +2418,9 @@ int evergreen_mc_init(struct radeon_device *rdev)
+@@ -2301,7 +2419,9 @@ int evergreen_mc_init(struct radeon_device *rdev)
/* Get VRAM informations */
rdev->mc.vram_is_ddr = true;
@@ -73334,7 +73405,7 @@
tmp = RREG32(FUS_MC_ARB_RAMCFG);
else
tmp = RREG32(MC_ARB_RAMCFG);
-@@ -2333,14 +2452,16 @@ int evergreen_mc_init(struct radeon_device *rdev)
+@@ -2333,14 +2453,16 @@ int evergreen_mc_init(struct radeon_device *rdev)
rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
/* Setup GPU memory space */
@@ -73355,7 +73426,7 @@
}
rdev->mc.visible_vram_size = rdev->mc.aper_size;
r700_vram_gtt_location(rdev, &rdev->mc);
-@@ -2349,7 +2470,7 @@ int evergreen_mc_init(struct radeon_device *rdev)
+@@ -2349,7 +2471,7 @@ int evergreen_mc_init(struct radeon_device *rdev)
return 0;
}
@@ -73364,7 +73435,7 @@
{
u32 srbm_status;
u32 grbm_status;
-@@ -2362,19 +2483,19 @@ bool evergreen_gpu_is_lockup(struct radeon_device *rdev)
+@@ -2362,19 +2484,19 @@ bool evergreen_gpu_is_lockup(struct radeon_device *rdev)
grbm_status_se0 = RREG32(GRBM_STATUS_SE0);
grbm_status_se1 = RREG32(GRBM_STATUS_SE1);
if (!(grbm_status & GUI_ACTIVE)) {
@@ -73391,7 +73462,7 @@
}
static int evergreen_gpu_soft_reset(struct radeon_device *rdev)
-@@ -2466,7 +2587,13 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev)
+@@ -2466,7 +2588,13 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev)
{
u32 tmp;
@@ -73406,7 +73477,7 @@
WREG32(GRBM_INT_CNTL, 0);
WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
-@@ -2490,7 +2617,9 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev)
+@@ -2490,7 +2618,9 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev)
WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
}
@@ -73417,7 +73488,7 @@
WREG32(DACB_AUTODETECT_INT_CONTROL, 0);
tmp = RREG32(DC_HPD1_INT_CONTROL) & DC_HPDx_INT_POLARITY;
-@@ -2511,6 +2640,7 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev)
+@@ -2511,6 +2641,7 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev)
int evergreen_irq_set(struct radeon_device *rdev)
{
u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE;
@@ -73425,7 +73496,7 @@
u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0;
u32 hpd1, hpd2, hpd3, hpd4, hpd5, hpd6;
u32 grbm_int_cntl = 0;
-@@ -2535,11 +2665,28 @@ int evergreen_irq_set(struct radeon_device *rdev)
+@@ -2535,11 +2666,28 @@ int evergreen_irq_set(struct radeon_device *rdev)
hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN;
hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN;
@@ -73458,7 +73529,7 @@
if (rdev->irq.crtc_vblank_int[0] ||
rdev->irq.pflip[0]) {
DRM_DEBUG("evergreen_irq_set: vblank 0\n");
-@@ -2599,7 +2746,12 @@ int evergreen_irq_set(struct radeon_device *rdev)
+@@ -2599,7 +2747,12 @@ int evergreen_irq_set(struct radeon_device *rdev)
grbm_int_cntl |= GUI_IDLE_INT_ENABLE;
}
@@ -73472,7 +73543,7 @@
WREG32(GRBM_INT_CNTL, grbm_int_cntl);
WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
-@@ -2765,7 +2917,6 @@ static u32 evergreen_get_ih_wptr(struct radeon_device *rdev)
+@@ -2765,7 +2918,6 @@ static u32 evergreen_get_ih_wptr(struct radeon_device *rdev)
tmp = RREG32(IH_RB_CNTL);
tmp |= IH_WPTR_OVERFLOW_CLEAR;
WREG32(IH_RB_CNTL, tmp);
@@ -73480,7 +73551,7 @@
}
return (wptr & rdev->ih.ptr_mask);
}
-@@ -3015,11 +3166,24 @@ restart_ih:
+@@ -3015,11 +3167,24 @@ restart_ih:
case 177: /* CP_INT in IB1 */
case 178: /* CP_INT in IB2 */
DRM_DEBUG("IH: CP int: 0x%08x\n", src_data);
@@ -73507,7 +73578,7 @@
break;
case 233: /* GUI IDLE */
DRM_DEBUG("IH: GUI idle\n");
-@@ -3049,6 +3213,7 @@ restart_ih:
+@@ -3049,6 +3214,7 @@ restart_ih:
static int evergreen_startup(struct radeon_device *rdev)
{
@@ -73515,7 +73586,7 @@
int r;
/* enable pcie gen2 link */
-@@ -3095,7 +3260,7 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3095,7 +3261,7 @@ static int evergreen_startup(struct radeon_device *rdev)
r = evergreen_blit_init(rdev);
if (r) {
r600_blit_fini(rdev);
@@ -73524,7 +73595,7 @@
dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r);
}
-@@ -3104,6 +3269,12 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3104,6 +3270,12 @@ static int evergreen_startup(struct radeon_device *rdev)
if (r)
return r;
@@ -73537,7 +73608,7 @@
/* Enable IRQ */
if (!rdev->irq.installed) {
r = radeon_irq_kms_init(rdev);
-@@ -3119,7 +3290,9 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3119,7 +3291,9 @@ static int evergreen_startup(struct radeon_device *rdev)
}
evergreen_irq_set(rdev);
@@ -73548,7 +73619,7 @@
if (r)
return r;
r = evergreen_cp_load_microcode(rdev);
-@@ -3129,6 +3302,23 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3129,6 +3303,23 @@ static int evergreen_startup(struct radeon_device *rdev)
if (r)
return r;
@@ -73572,7 +73643,7 @@
return 0;
}
-@@ -3148,15 +3338,11 @@ int evergreen_resume(struct radeon_device *rdev)
+@@ -3148,15 +3339,11 @@ int evergreen_resume(struct radeon_device *rdev)
/* post card */
atom_asic_init(rdev->mode_info.atom_context);
@@ -73590,7 +73661,7 @@
return r;
}
-@@ -3166,13 +3352,17 @@ int evergreen_resume(struct radeon_device *rdev)
+@@ -3166,13 +3353,17 @@ int evergreen_resume(struct radeon_device *rdev)
int evergreen_suspend(struct radeon_device *rdev)
{
@@ -73610,7 +73681,7 @@
return 0;
}
-@@ -3243,8 +3433,8 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3243,8 +3434,8 @@ int evergreen_init(struct radeon_device *rdev)
if (r)
return r;
@@ -73621,7 +73692,7 @@
rdev->ih.ring_obj = NULL;
r600_ih_ring_init(rdev, 64 * 1024);
-@@ -3253,29 +3443,24 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3253,29 +3444,24 @@ int evergreen_init(struct radeon_device *rdev)
if (r)
return r;
@@ -73658,7 +73729,7 @@
/* Don't start up if the MC ucode is missing on BTC parts.
* The default clocks and voltages before the MC ucode
-@@ -3293,15 +3478,17 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3293,15 +3479,17 @@ int evergreen_init(struct radeon_device *rdev)
void evergreen_fini(struct radeon_device *rdev)
{
@@ -104346,7 +104417,7 @@
info->apertures = alloc_apertures(1);
if (!info->apertures) {
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
-index 15fb260..7e07433 100644
+index 1ed5a1c..7e07433 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -69,12 +69,13 @@ struct vmw_user_fence {
@@ -104366,7 +104437,54 @@
uint32_t *tv_sec;
uint32_t *tv_usec;
};
-@@ -784,46 +785,40 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
+@@ -484,7 +485,14 @@ void vmw_fence_obj_flush(struct vmw_fence_obj *fence)
+
+ static void vmw_fence_destroy(struct vmw_fence_obj *fence)
+ {
++ struct vmw_fence_manager *fman = fence->fman;
++
+ kfree(fence);
++ /*
++ * Free kernel space accounting.
++ */
++ ttm_mem_global_free(vmw_mem_glob(fman->dev_priv),
++ fman->fence_size);
+ }
+
+ int vmw_fence_create(struct vmw_fence_manager *fman,
+@@ -492,12 +500,20 @@ int vmw_fence_create(struct vmw_fence_manager *fman,
+ uint32_t mask,
+ struct vmw_fence_obj **p_fence)
+ {
++ struct ttm_mem_global *mem_glob = vmw_mem_glob(fman->dev_priv);
+ struct vmw_fence_obj *fence;
+ int ret;
+
++ ret = ttm_mem_global_alloc(mem_glob, fman->fence_size,
++ false, false);
++ if (unlikely(ret != 0))
++ return ret;
++
+ fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+- if (unlikely(fence == NULL))
+- return -ENOMEM;
++ if (unlikely(fence == NULL)) {
++ ret = -ENOMEM;
++ goto out_no_object;
++ }
+
+ ret = vmw_fence_obj_init(fman, fence, seqno, mask,
+ vmw_fence_destroy);
+@@ -509,6 +525,8 @@ int vmw_fence_create(struct vmw_fence_manager *fman,
+
+ out_err_init:
+ kfree(fence);
++out_no_object:
++ ttm_mem_global_free(mem_glob, fman->fence_size);
+ return ret;
+ }
+
+@@ -767,46 +785,40 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
}
/**
@@ -104442,7 +104560,7 @@
}
-@@ -836,18 +831,21 @@ static void vmw_event_fence_action_delivered(struct drm_pending_event *e)
+@@ -819,18 +831,21 @@ static void vmw_event_fence_action_delivered(struct drm_pending_event *e)
* This function is called when the seqno of the fence where @action is
* attached has passed. It queues the event on the submitter's event list.
* This function is always called from atomic context, and may be called
@@ -104468,7 +104586,7 @@
spin_lock_irqsave(&dev->event_lock, irq_flags);
if (likely(eaction->tv_sec != NULL)) {
-@@ -858,7 +856,9 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
+@@ -841,7 +856,9 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
*eaction->tv_usec = tv.tv_usec;
}
@@ -104479,7 +104597,7 @@
wake_up_all(&file_priv->event_wait);
spin_unlock_irqrestore(&dev->event_lock, irq_flags);
}
-@@ -876,9 +876,15 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
+@@ -859,9 +876,15 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
{
struct vmw_event_fence_action *eaction =
container_of(action, struct vmw_event_fence_action, action);
@@ -104496,7 +104614,7 @@
}
-@@ -946,39 +952,23 @@ void vmw_fence_obj_add_action(struct vmw_fence_obj *fence,
+@@ -929,39 +952,23 @@ void vmw_fence_obj_add_action(struct vmw_fence_obj *fence,
* an error code, the caller needs to free that object.
*/
@@ -104546,7 +104664,7 @@
eaction->action.seq_passed = vmw_event_fence_action_seq_passed;
eaction->action.cleanup = vmw_event_fence_action_cleanup;
-@@ -986,16 +976,89 @@ int vmw_event_fence_action_create(struct drm_file *file_priv,
+@@ -969,16 +976,89 @@ int vmw_event_fence_action_create(struct drm_file *file_priv,
eaction->fence = vmw_fence_obj_reference(fence);
eaction->dev = fman->dev_priv->dev;
@@ -104638,7 +104756,7 @@
int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
-@@ -1008,8 +1071,6 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
+@@ -991,8 +1071,6 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
(struct drm_vmw_fence_rep __user *)(unsigned long)
arg->fence_rep;
uint32_t handle;
@@ -104647,7 +104765,7 @@
int ret;
/*
-@@ -1062,59 +1123,28 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
+@@ -1045,59 +1123,28 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
BUG_ON(fence == NULL);
@@ -104758,7 +104876,7 @@
return 0;
out_err:
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
-index eb9735e..00fb5aa 100644
+index eb9735e..7ca1d47 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -422,7 +422,8 @@ static int do_surface_dirty_sou(struct vmw_private *dev_priv,
@@ -105038,43 +105156,6 @@
void vmw_du_crtc_save(struct drm_crtc *crtc)
{
}
-@@ -1826,14 +1915,6 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
- DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC)
- };
- int i;
-- u32 assumed_bpp = 2;
--
-- /*
-- * If using screen objects, then assume 32-bpp because that's what the
-- * SVGA device is assuming
-- */
-- if (dev_priv->sou_priv)
-- assumed_bpp = 4;
-
- /* Add preferred mode */
- {
-@@ -1844,9 +1925,8 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
- mode->vdisplay = du->pref_height;
- vmw_guess_mode_timing(mode);
-
-- if (vmw_kms_validate_mode_vram(dev_priv,
-- mode->hdisplay * assumed_bpp,
-- mode->vdisplay)) {
-+ if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2,
-+ mode->vdisplay)) {
- drm_mode_probed_add(connector, mode);
- } else {
- drm_mode_destroy(dev, mode);
-@@ -1868,8 +1948,7 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
- bmode->vdisplay > max_height)
- continue;
-
-- if (!vmw_kms_validate_mode_vram(dev_priv,
-- bmode->hdisplay * assumed_bpp,
-+ if (!vmw_kms_validate_mode_vram(dev_priv, bmode->hdisplay * 2,
- bmode->vdisplay))
- continue;
-
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
index e1cb855..8184bc5 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
@@ -106337,18 +106418,10 @@
#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
#define DRM_MODE_FB_DIRTY_FLAGS 0x03
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
-index 7daeaba..757f980 100644
+index 7daeaba..53baa0d 100644
--- a/include/drm/drm_pciids.h
+++ b/include/drm/drm_pciids.h
-@@ -56,6 +56,7 @@
- {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
- {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
- {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
-+ {0x1002, 0x4C6E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \
- {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
- {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
- {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
-@@ -203,11 +204,60 @@
+@@ -203,11 +203,60 @@
{0x1002, 0x6778, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
{0x1002, 0x6779, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
{0x1002, 0x677B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
@@ -106409,7 +106482,7 @@
{0x1002, 0x6850, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
{0x1002, 0x6858, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
{0x1002, 0x6859, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
-@@ -515,6 +565,43 @@
+@@ -515,6 +564,43 @@
{0x1002, 0x9808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
{0x1002, 0x9809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
{0x1002, 0x980A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
Modified: dists/wheezy/linux/debian/patches/series
==============================================================================
--- dists/wheezy/linux/debian/patches/series Sun Feb 22 17:06:56 2015 (r22416)
+++ dists/wheezy/linux/debian/patches/series Tue Feb 24 00:12:40 2015 (r22417)
@@ -608,7 +608,6 @@
debian/x86-mm-avoid-abi-change-in-3.2.44.patch
features/all/cpu-devices/cpufreq-Longhaul-Disable-driver-by-default.patch
-bugfix/all/ext4-make-orphan-functions-be-no-op-in-no-journal-mo.patch
debian/jbd2-avoid-ABI-change-in-3.2.45.patch
bugfix/all/sctp-Export-sctp_do_peeloff.patch
bugfix/all/dlm-Do-not-allocate-a-fd-for-peeloff.patch
@@ -626,7 +625,6 @@
features/arm/mtd-m25p80-modify-info-for-Micron-N25Q128.patch
debian/perf-avoid-abi-change-in-3.2.49.patch
-bugfix/s390/s390-revert-clockevent.patch
debian/tracing-avoid-abi-change-in-3.2.51.patch
debian/mm-avoid-abi-change-in-3.2.51.patch
features/all/mvsas-Recognise-device-subsystem-9485-9485-as-88SE94.patch
@@ -1103,7 +1101,6 @@
features/all/igb/0178-igb-Fixed-Wake-On-LAN-support.patch
features/all/igb/0179-igb-Fix-for-issue-where-values-could-be-too-high-for.patch
features/all/igb/0180-igb-disable-eee.patch
-bugfix/x86/crypto-ghash-clmulni-intel-use-C-implementation-for-.patch
bugfix/x86/revert-perf-x86-amd-ibs-fix-waking-up-from-s3-for-amd-family-10h.patch
@@ -1131,45 +1128,16 @@
debian/ip-ident-avoid-abi-change-in-3.2.63.patch
debian/scsi-avoid-abi-change-in-3.2.62.patch
debian/nlattr-avoid-abi-change-in-3.2.61.patch
-bugfix/all/udf-Avoid-infinite-loop-when-processing-indirect-ICB.patch
debian/sp5100_tco-reject-sb8x0-chips.patch
-bugfix/all/drivers-net-disable-ufo-through-virtio.patch
-bugfix/all/drivers-net-ipv6-select-ipv6-fragment-idents-for-vir.patch
debian/drivers-net-avoid-abi-change-for-ufo-ipv6-fix.patch
-bugfix/all/revert-drivers-net-disable-ufo-through-virtio-in-macvtap-and-tun.patch
-bugfix/all/net-sctp-fix-NULL-pointer-dereference-in-af-from_add.patch
-bugfix/all/media-ttusb-dec-buffer-overflow-in-ioctl.patch
debian/regulatory-avoid-abi-change-in-3.2.64.patch
debian/ceph-avoid-abi-change-in-3.2.64.patch
debian/perf-avoid-abi-change-in-3.2.65.patch
debian/mm-truncate-avoid-abi-change-in-3.2.65.patch
-bugfix/x86/kvm-x86-don-t-report-guest-userspace-emulation-error-to-userspace.patch
-bugfix/x86/x86-kvm-clear-paravirt_enabled-on-kvm-guests-for-espfix32-s-benefit.patch
-bugfix/all/isofs-fix-infinite-looping-over-ce-entries.patch
-bugfix/x86/revert-x86-mm-set-nx-across-entire-pmd-at-boot.patch
-bugfix/x86/revert-x86-64bit-mm-mark-data-bss-brk-to-nx.patch
-bugfix/x86/x86-cpu-amd-add-workaround-for-family-16h-erratum-79.patch
-bugfix/x86/x86-tls-validate-tls-entries-to-protect-espfix.patch
-bugfix/x86/x86_64-switch_to-load-tls-descriptors-before-switchi.patch
-bugfix/all/keys-close-race-between-key-lookup-and-freeing.patch
-bugfix/all/isofs-fix-unchecked-printing-of-er-records.patch
-bugfix/all/splice-apply-generic-position-and-size-checks-to-eac.patch
-bugfix/all/crypto-prefix-module-autoloading-with-crypto.patch
-bugfix/all/crypto-include-crypto-module-prefix-in-template.patch
-bugfix/all/crypto-add-missing-crypto-module-aliases.patch
-bugfix/all/netfilter-conntrack-disable-generic-tracking-for-kno.patch
-bugfix/x86/x86_64-vdso-fix-the-vdso-address-randomization-algor.patch
-bugfix/x86/kvm-x86-emulator-reject-sysenter-in-compatibility-mo.patch
-bugfix/x86/kvm-x86-sysenter-emulation-is-broken.patch
-bugfix/all/move-d_rcu-from-overlapping-d_child-to-overlapping-d_alias.patch
bugfix/all/aufs-move-d_rcu-from-overlapping-d_child-to-overlapping-d.patch
-bugfix/all/deal-with-deadlock-in-d_walk.patch
-bugfix/all/dcache-fix-locking-bugs-in-backported-deal-with-deadlock-in-d_walk.patch
debian/vfs-avoid-abi-change-for-dentry-union-changes.patch
bugfix/all/vfs-read-file_handle-only-once-in-handle_to_path.patch
bugfix/all/aslr-fix-stack-randomization-on-64-bit-systems.patch
-bugfix/all/vfs-fix-vfsmount_lock-imbalance-in-path_init.patch
-bugfix/all/net-sctp-fix-slab-corruption-from-use-after-free-on-init-collisions.patch
-bugfix/x86/x86-tls-ldt-stop-checking-lm-in-ldt_empty.patch
-bugfix/x86/x86-tls-interpret-an-all-zero-struct-user_desc-as-no-segment.patch
-bugfix/all/ecryptfs-remove-buggy-and-unnecessary-write-in-file-name-decode.patch
+debian/sock-fix-abi-change-in-3.2.67.patch
+debian/rmap-fix-abi-change-in-3.2.67.patch
+bugfix/all/pci-quirks-fix-backport-of-quirk_io.patch
More information about the Kernel-svn-changes
mailing list