Date: Saturday, January 12, 2013 @ 04:50:53
  Author: tpowa
Revision: 175047

upgpkg: linux 3.7.2-1

bump to latest version, #33332 CONFIG_DYNAMIC_DEBUG, #33200 CONFIG_ARPD, #33160 
fix GPU hang

Added:
  linux/trunk/drm-fix-track-free-areas-3.7.patch
Modified:
  linux/trunk/PKGBUILD
  linux/trunk/linux.install

------------------------------------+
 PKGBUILD                           |   20 ++--
 drm-fix-track-free-areas-3.7.patch |  153 +++++++++++++++++++++++++++++++++++
 linux.install                      |    2 
 3 files changed, 167 insertions(+), 8 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2013-01-12 09:28:50 UTC (rev 175046)
+++ PKGBUILD    2013-01-12 09:50:53 UTC (rev 175047)
@@ -5,8 +5,8 @@
 pkgbase=linux               # Build stock -ARCH kernel
 #pkgbase=linux-custom       # Build kernel with a different name
 _srcname=linux-3.7
-pkgver=3.7.1
-pkgrel=2
+pkgver=3.7.2
+pkgrel=1
 arch=('i686' 'x86_64')
 url="http://www.kernel.org/";
 license=('GPL2')
@@ -20,15 +20,17 @@
         'linux.preset'
         'change-default-console-loglevel.patch'
         'fat-3.6.x.patch'
-        'fix-watchdog-3.7.patch')
+        'fix-watchdog-3.7.patch'
+        'drm-fix-track-free-areas-3.7.patch')
 md5sums=('21223369d682bcf44bcdfe1521095983'
-         '48f5f530b048e387e978e3e49de7742a'
-         '2cf43e0448a8074eb2ff93035168250b'
-         '58a9ba178fedb244a0a86b760fb4bd81'
+         '132211742278e18b8f4808754d85e66c'
+         'ce16969e83a649c3e7d71031b7f752c2'
+         '610443591e7d3f619b8250833958eb7e'
          'eb14dcfd80c00852ef81ded6e826826a'
          '9d3c56a4b999c8bfbd4018089a62f662'
          '88d501404f172dac6fcb248978251560'
-         '3485d6c7ae3af35d16e09d6d9a7ed32a')
+         '3485d6c7ae3af35d16e09d6d9a7ed32a'
+         'e365972f002482a7b25cd5360467d75f')
 
 _kernelname=${pkgbase#linux}
 
@@ -53,6 +55,9 @@
   # fix watchdog enable/disable regression
   # https://bugs.archlinux.org/task/33095
   patch -Np1 -i "${srcdir}/fix-watchdog-3.7.patch"
+  # fix GPU hang
+  # https://bugs.archlinux.org/task/33160
+  patch -Np1 -i "${srcdir}/drm-fix-track-free-areas-3.7.patch"
 
   if [ "${CARCH}" = "x86_64" ]; then
     cat "${srcdir}/config.x86_64" > ./.config
@@ -328,3 +333,4 @@
 done
 
 # vim:set ts=8 sts=2 sw=2 et:
+

Added: drm-fix-track-free-areas-3.7.patch
===================================================================
--- drm-fix-track-free-areas-3.7.patch                          (rev 0)
+++ drm-fix-track-free-areas-3.7.patch  2013-01-12 09:50:53 UTC (rev 175047)
@@ -0,0 +1,153 @@
+From 9ff0ab9881bd47f7d8a95c07a2fa61f594a91d0a Mon Sep 17 00:00:00 2001
+From: Chris Wilson <[email protected]>
+Date: Sun, 16 Dec 2012 16:15:00 +0000
+Subject: [PATCH] drm: Only evict the blocks required to create the requested
+ hole
+
+Avoid clobbering adjacent blocks if they happen to expire earlier and
+amalgamate together to form the requested hole.
+
+In passing this fixes a regression from
+commit ea7b1dd44867e9cd6bac67e7c9fc3f128b5b255c
+Author: Daniel Vetter <[email protected]>
+Date:   Fri Feb 18 17:59:12 2011 +0100
+
+    drm: mm: track free areas implicitly
+
+which swaps the end address for size (with a potential overflow) and
+effectively causes the eviction code to clobber almost all earlier
+buffers above the evictee.
+
+v2: Check the original hole not the adjusted as the coloring may confuse
+us when later searching for the overlapping nodes. Also make sure that
+we do apply the range restriction and color adjustment in the same
+order for both scanning, searching and insertion.
+
+Signed-off-by: Chris Wilson <[email protected]>
+Cc: Daniel Vetter <[email protected]>
+---
+ drivers/gpu/drm/drm_mm.c |   45 +++++++++++++++++----------------------------
+ include/drm/drm_mm.h     |    2 +-
+ 2 files changed, 18 insertions(+), 29 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
+index 0761a03..665553c 100644
+--- a/drivers/gpu/drm/drm_mm.c
++++ b/drivers/gpu/drm/drm_mm.c
+@@ -213,11 +213,13 @@ static void drm_mm_insert_helper_range(struct 
drm_mm_node *hole_node,
+ 
+       BUG_ON(!hole_node->hole_follows || node->allocated);
+ 
+-      if (mm->color_adjust)
+-              mm->color_adjust(hole_node, color, &adj_start, &adj_end);
+-
+       if (adj_start < start)
+               adj_start = start;
++      if (adj_end > end)
++              adj_end = end;
++
++      if (mm->color_adjust)
++              mm->color_adjust(hole_node, color, &adj_start, &adj_end);
+ 
+       if (alignment) {
+               unsigned tmp = adj_start % alignment;
+@@ -489,7 +491,7 @@ void drm_mm_init_scan(struct drm_mm *mm,
+       mm->scan_size = size;
+       mm->scanned_blocks = 0;
+       mm->scan_hit_start = 0;
+-      mm->scan_hit_size = 0;
++      mm->scan_hit_end = 0;
+       mm->scan_check_range = 0;
+       mm->prev_scanned_node = NULL;
+ }
+@@ -516,7 +518,7 @@ void drm_mm_init_scan_with_range(struct drm_mm *mm,
+       mm->scan_size = size;
+       mm->scanned_blocks = 0;
+       mm->scan_hit_start = 0;
+-      mm->scan_hit_size = 0;
++      mm->scan_hit_end = 0;
+       mm->scan_start = start;
+       mm->scan_end = end;
+       mm->scan_check_range = 1;
+@@ -535,8 +537,7 @@ int drm_mm_scan_add_block(struct drm_mm_node *node)
+       struct drm_mm *mm = node->mm;
+       struct drm_mm_node *prev_node;
+       unsigned long hole_start, hole_end;
+-      unsigned long adj_start;
+-      unsigned long adj_end;
++      unsigned long adj_start, adj_end;
+ 
+       mm->scanned_blocks++;
+ 
+@@ -553,14 +554,8 @@ int drm_mm_scan_add_block(struct drm_mm_node *node)
+       node->node_list.next = &mm->prev_scanned_node->node_list;
+       mm->prev_scanned_node = node;
+ 
+-      hole_start = drm_mm_hole_node_start(prev_node);
+-      hole_end = drm_mm_hole_node_end(prev_node);
+-
+-      adj_start = hole_start;
+-      adj_end = hole_end;
+-
+-      if (mm->color_adjust)
+-              mm->color_adjust(prev_node, mm->scan_color, &adj_start, 
&adj_end);
++      adj_start = hole_start = drm_mm_hole_node_start(prev_node);
++      adj_end = hole_end = drm_mm_hole_node_end(prev_node);
+ 
+       if (mm->scan_check_range) {
+               if (adj_start < mm->scan_start)
+@@ -569,11 +564,14 @@ int drm_mm_scan_add_block(struct drm_mm_node *node)
+                       adj_end = mm->scan_end;
+       }
+ 
++      if (mm->color_adjust)
++              mm->color_adjust(prev_node, mm->scan_color,
++                               &adj_start, &adj_end);
++
+       if (check_free_hole(adj_start, adj_end,
+                           mm->scan_size, mm->scan_alignment)) {
+               mm->scan_hit_start = hole_start;
+-              mm->scan_hit_size = hole_end;
+-
++              mm->scan_hit_end = hole_end;
+               return 1;
+       }
+ 
+@@ -609,19 +607,10 @@ int drm_mm_scan_remove_block(struct drm_mm_node *node)
+                              node_list);
+ 
+       prev_node->hole_follows = node->scanned_preceeds_hole;
+-      INIT_LIST_HEAD(&node->node_list);
+       list_add(&node->node_list, &prev_node->node_list);
+ 
+-      /* Only need to check for containement because start&size for the
+-       * complete resulting free block (not just the desired part) is
+-       * stored. */
+-      if (node->start >= mm->scan_hit_start &&
+-          node->start + node->size
+-                      <= mm->scan_hit_start + mm->scan_hit_size) {
+-              return 1;
+-      }
+-
+-      return 0;
++       return (drm_mm_hole_node_end(node) > mm->scan_hit_start &&
++               node->start < mm->scan_hit_end);
+ }
+ EXPORT_SYMBOL(drm_mm_scan_remove_block);
+ 
+diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
+index 06d7f79..a1b66b7 100644
+--- a/include/drm/drm_mm.h
++++ b/include/drm/drm_mm.h
+@@ -70,7 +70,7 @@ struct drm_mm {
+       unsigned long scan_color;
+       unsigned long scan_size;
+       unsigned long scan_hit_start;
+-      unsigned scan_hit_size;
++      unsigned long scan_hit_end;
+       unsigned scanned_blocks;
+       unsigned long scan_start;
+       unsigned long scan_end;
+-- 
+1.7.10.4
+

Modified: linux.install
===================================================================
--- linux.install       2013-01-12 09:28:50 UTC (rev 175046)
+++ linux.install       2013-01-12 09:50:53 UTC (rev 175047)
@@ -2,7 +2,7 @@
 # arg 2:  the old package version
 
 KERNEL_NAME=
-KERNEL_VERSION=3.7.1-2-ARCH
+KERNEL_VERSION=3.7.2-1-ARCH
 
 # set a sane PATH to ensure that critical utils like depmod will be found
 export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

Reply via email to