? ppc64-fuck-fuck-fuck.diff Index: agp-set_memory_ucwb.patch =================================================================== RCS file: /cvs/pkgs/rpms/kernel/F-11/agp-set_memory_ucwb.patch,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- agp-set_memory_ucwb.patch 27 Feb 2009 03:12:57 -0000 1.1 +++ agp-set_memory_ucwb.patch 20 May 2009 13:51:37 -0000 1.2 @@ -52,15 +52,3 @@ index 97e8b41..aeeaf68 100644 page = virt_to_page(addr); #ifndef CONFIG_X86 -diff -up linux-2.6.28.noarch/drivers/gpu/drm/i915/i915_dma.c.dma linux-2.6.28.noarch/drivers/gpu/drm/i915/i915_dma.c ---- linux-2.6.28.noarch/drivers/gpu/drm/i915/i915_dma.c.dma 2009-02-27 13:11:03.000000000 +1000 -+++ linux-2.6.28.noarch/drivers/gpu/drm/i915/i915_dma.c 2009-02-27 13:11:11.000000000 +1000 -@@ -1104,7 +1104,7 @@ int i915_driver_load(struct drm_device * - "performance may suffer.\n"); - } - --#ifdef CONFIG_HIGHMEM64G -+#if 0 /* Fedora has AGP workaround patch */ - /* don't enable GEM on PAE - needs agp + set_memory_* interface fixes */ - dev_priv->has_gem = 0; - #else Index: drm-edid-ignore-tiny-modes.patch =================================================================== RCS file: drm-edid-ignore-tiny-modes.patch diff -N drm-edid-ignore-tiny-modes.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ drm-edid-ignore-tiny-modes.patch 15 May 2009 20:10:54 -0000 1.1 @@ -0,0 +1,15 @@ +diff -up linux-2.6.29.noarch/drivers/gpu/drm/drm_edid.c.jx linux-2.6.29.noarch/drivers/gpu/drm/drm_edid.c +--- linux-2.6.29.noarch/drivers/gpu/drm/drm_edid.c.jx 2009-05-15 15:16:07.000000000 -0400 ++++ linux-2.6.29.noarch/drivers/gpu/drm/drm_edid.c 2009-05-15 16:05:16.000000000 -0400 +@@ -289,6 +289,11 @@ static struct drm_display_mode *drm_mode + struct drm_display_mode *mode; + struct detailed_pixel_timing *pt = &timing->data.pixel_data; + ++ /* ignore tiny modes */ ++ if (((pt->hactive_hi << 8) | pt->hactive_lo) < 64 || ++ ((pt->vactive_hi << 8) | pt->hactive_lo) < 64) ++ return NULL; ++ + if (pt->stereo) { + printk(KERN_WARNING "stereo mode not supported\n"); + return NULL; Index: drm-intel-gem-use-dma32-on-pae.patch =================================================================== RCS file: drm-intel-gem-use-dma32-on-pae.patch diff -N drm-intel-gem-use-dma32-on-pae.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ drm-intel-gem-use-dma32-on-pae.patch 20 May 2009 13:51:37 -0000 1.1 @@ -0,0 +1,60 @@ +diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c +index 4984aa8..ae52edc 100644 +--- a/drivers/gpu/drm/drm_gem.c ++++ b/drivers/gpu/drm/drm_gem.c +@@ -142,6 +142,9 @@ drm_gem_object_alloc(struct drm_device *dev, size_t size) + return NULL; + } + ++ if (dev->gem_flags) ++ mapping_set_gfp_mask(obj->filp->f_mapping, dev->gem_flags); ++ + kref_init(&obj->refcount); + kref_init(&obj->handlecount); + obj->size = size; +diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c +index 8161343..049fc3f 100644 +--- a/drivers/gpu/drm/i915/i915_dma.c ++++ b/drivers/gpu/drm/i915/i915_dma.c +@@ -1145,12 +1145,12 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) + } + + #ifdef CONFIG_HIGHMEM64G +- /* don't enable GEM on PAE - needs agp + set_memory_* interface fixes */ +- dev_priv->has_gem = 0; +-#else ++ /* set default allocation flags */ ++ dev->gem_flags = GFP_USER | GFP_DMA32; ++#endif ++ + /* enable GEM by default, except on I8xx */ + dev_priv->has_gem = !IS_I8XX(dev) ? 1 : 0; +-#endif + + dev->driver->get_vblank_counter = i915_get_vblank_counter; + if (IS_GM45(dev)) +diff --git a/include/drm/drmP.h b/include/drm/drmP.h +index 04fbd1e..018534b 100644 +--- a/include/drm/drmP.h ++++ b/include/drm/drmP.h +@@ -1043,6 +1043,7 @@ struct drm_device { + uint32_t gtt_total; + uint32_t invalidate_domains; /* domains pending invalidation */ + uint32_t flush_domains; /* domains pending flush */ ++ gfp_t gem_flags; /* object allocation flags */ + /*@} */ + }; + +diff --git a/mm/shmem.c b/mm/shmem.c +index 4103a23..515bb1b 100644 +--- a/mm/shmem.c ++++ b/mm/shmem.c +@@ -1226,7 +1226,7 @@ repeat: + * Try to preload while we can wait, to not make a habit of + * draining atomic reserves; but don't latch on to this cpu. + */ +- error = radix_tree_preload(gfp & ~__GFP_HIGHMEM); ++ error = radix_tree_preload(gfp & ~(__GFP_HIGHMEM|__GFP_DMA32)); + if (error) + goto failed; + radix_tree_preload_end(); Index: drm-intel-i8xx-cursors.patch =================================================================== RCS file: drm-intel-i8xx-cursors.patch diff -N drm-intel-i8xx-cursors.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ drm-intel-i8xx-cursors.patch 20 May 2009 21:02:25 -0000 1.1 @@ -0,0 +1,89 @@ +diff -up linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_reg.h.8xx-cursor linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_reg.h +--- linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_reg.h.8xx-cursor 2009-05-20 10:17:18.000000000 -0400 ++++ linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_reg.h 2009-05-20 12:06:55.000000000 -0400 +@@ -1409,9 +1409,25 @@ + + /* Cursor A & B regs */ + #define CURACNTR 0x70080 ++/* Old style CUR*CNTR flags (desktop 8xx) */ ++#define CURSOR_ENABLE 0x80000000 ++#define CURSOR_GAMMA_ENABLE 0x40000000 ++#define CURSOR_STRIDE_MASK 0x30000000 ++#define CURSOR_FORMAT_SHIFT 24 ++#define CURSOR_FORMAT_MASK (0x07 << CURSOR_FORMAT_SHIFT) ++#define CURSOR_FORMAT_2C (0x00 << CURSOR_FORMAT_SHIFT) ++#define CURSOR_FORMAT_3C (0x01 << CURSOR_FORMAT_SHIFT) ++#define CURSOR_FORMAT_4C (0x02 << CURSOR_FORMAT_SHIFT) ++#define CURSOR_FORMAT_ARGB (0x04 << CURSOR_FORMAT_SHIFT) ++#define CURSOR_FORMAT_XRGB (0x05 << CURSOR_FORMAT_SHIFT) ++/* New style CUR*CNTR flags */ ++#define CURSOR_MODE 0x27 + #define CURSOR_MODE_DISABLE 0x00 + #define CURSOR_MODE_64_32B_AX 0x07 + #define CURSOR_MODE_64_ARGB_AX ((1 << 5) | CURSOR_MODE_64_32B_AX) ++#define MCURSOR_PIPE_SELECT (1 << 28) ++#define MCURSOR_PIPE_A 0x00 ++#define MCURSOR_PIPE_B (1 << 28) + #define MCURSOR_GAMMA_ENABLE (1 << 26) + #define CURABASE 0x70084 + #define CURAPOS 0x70088 +@@ -1419,6 +1435,7 @@ + #define CURSOR_POS_SIGN 0x8000 + #define CURSOR_X_SHIFT 0 + #define CURSOR_Y_SHIFT 16 ++#define CURSIZE 0x700a0 + #define CURBCNTR 0x700c0 + #define CURBBASE 0x700c4 + #define CURBPOS 0x700c8 +diff -up linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c.8xx-cursor linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c +--- linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c.8xx-cursor 2009-05-20 10:17:18.000000000 -0400 ++++ linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c 2009-05-20 12:09:46.000000000 -0400 +@@ -1361,7 +1361,7 @@ static int intel_crtc_cursor_set(struct + int pipe = intel_crtc->pipe; + uint32_t control = (pipe == 0) ? CURACNTR : CURBCNTR; + uint32_t base = (pipe == 0) ? CURABASE : CURBBASE; +- uint32_t temp; ++ uint32_t temp = I915_READ(control); + size_t addr; + int ret; + +@@ -1370,7 +1370,13 @@ static int intel_crtc_cursor_set(struct + /* if we want to turn off the cursor ignore width and height */ + if (!handle) { + DRM_DEBUG("cursor off\n"); +- temp = CURSOR_MODE_DISABLE; ++ if (IS_MOBILE(dev) || IS_I9XX(dev)) { ++ temp &= ~(CURSOR_MODE | MCURSOR_GAMMA_ENABLE); ++ temp |= CURSOR_MODE_DISABLE; ++ } ++ else { ++ temp &= ~(CURSOR_ENABLE | CURSOR_GAMMA_ENABLE); ++ } + addr = 0; + bo = NULL; + mutex_lock(&dev->struct_mutex); +@@ -1413,10 +1419,20 @@ static int intel_crtc_cursor_set(struct + addr = obj_priv->phys_obj->handle->busaddr; + } + +- temp = 0; +- /* set the pipe for the cursor */ +- temp |= (pipe << 28); +- temp |= CURSOR_MODE_64_ARGB_AX | MCURSOR_GAMMA_ENABLE; ++ if (!IS_I9XX(dev)) ++ I915_WRITE(CURSIZE, (height << 12) | width); ++ ++ /* Hooray for CUR*CNTR differences */ ++ if (IS_MOBILE(dev) || IS_I9XX(dev)) { ++ temp &= ~(CURSOR_MODE | MCURSOR_PIPE_SELECT); ++ temp |= CURSOR_MODE_64_ARGB_AX | MCURSOR_GAMMA_ENABLE; ++ temp |= (pipe << 28); /* Connect to correct pipe */ ++ } ++ else { ++ temp &= ~(CURSOR_FORMAT_MASK); ++ temp |= CURSOR_ENABLE; ++ temp |= CURSOR_FORMAT_ARGB | CURSOR_GAMMA_ENABLE; ++ } + + finish: + I915_WRITE(control, temp); Index: drm-intel-include-965gme-pci-id.patch =================================================================== RCS file: drm-intel-include-965gme-pci-id.patch diff -N drm-intel-include-965gme-pci-id.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ drm-intel-include-965gme-pci-id.patch 18 May 2009 20:26:44 -0000 1.1 @@ -0,0 +1,29 @@ +From: Ma Ling +Date: Wed, 13 May 2009 07:08:27 +0000 (+0800) +Subject: drm/i915: Include 965GME pci ID in IS_I965GM(dev) to match UMS. +X-Git-Tag: v2.6.30-rc6~3^2~2 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=c9ed4486bdee3b54cb544fc181057bc6bf1ae45c + +drm/i915: Include 965GME pci ID in IS_I965GM(dev) to match UMS. + +It fixed bug #21659 + +Signed-off-by: Ma Ling +[anholt: hand-applied because git-am is too picky] +Signed-off-by: Eric Anholt +--- + +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index b47af07..9b149fe 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -786,7 +786,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller); + (dev)->pci_device == 0x2E22 || \ + (dev)->pci_device == 0x2E32) + +-#define IS_I965GM(dev) ((dev)->pci_device == 0x2A02) ++#define IS_I965GM(dev) ((dev)->pci_device == 0x2A02 || \ ++ (dev)->pci_device == 0x2A12) + + #define IS_GM45(dev) ((dev)->pci_device == 0x2A42) + Index: drm-intel-vmalloc.patch =================================================================== RCS file: drm-intel-vmalloc.patch diff -N drm-intel-vmalloc.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ drm-intel-vmalloc.patch 20 May 2009 21:02:25 -0000 1.1 @@ -0,0 +1,166 @@ +diff -up linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_gem.c.drm-vmalloc linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_gem.c +--- linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_gem.c.drm-vmalloc 2009-05-20 10:04:32.000000000 -0400 ++++ linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_gem.c 2009-05-20 10:10:59.000000000 -0400 +@@ -278,7 +278,7 @@ i915_gem_shmem_pread_slow(struct drm_dev + last_data_page = (data_ptr + args->size - 1) / PAGE_SIZE; + num_pages = last_data_page - first_data_page + 1; + +- user_pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL); ++ user_pages = drm_calloc_large(num_pages, sizeof(struct page *)); + if (user_pages == NULL) + return -ENOMEM; + +@@ -347,7 +347,7 @@ fail_put_user_pages: + SetPageDirty(user_pages[i]); + page_cache_release(user_pages[i]); + } +- kfree(user_pages); ++ drm_free_large(user_pages); + + return ret; + } +@@ -562,7 +562,7 @@ i915_gem_gtt_pwrite_slow(struct drm_devi + last_data_page = (data_ptr + args->size - 1) / PAGE_SIZE; + num_pages = last_data_page - first_data_page + 1; + +- user_pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL); ++ user_pages = drm_calloc_large(num_pages, sizeof(struct page *)); + if (user_pages == NULL) + return -ENOMEM; + +@@ -632,7 +632,7 @@ out_unlock: + out_unpin_pages: + for (i = 0; i < pinned_pages; i++) + page_cache_release(user_pages[i]); +- kfree(user_pages); ++ drm_free_large(user_pages); + + return ret; + } +@@ -736,7 +736,7 @@ i915_gem_shmem_pwrite_slow(struct drm_de + last_data_page = (data_ptr + args->size - 1) / PAGE_SIZE; + num_pages = last_data_page - first_data_page + 1; + +- user_pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL); ++ user_pages = drm_calloc_large(num_pages, sizeof(struct page *)); + if (user_pages == NULL) + return -ENOMEM; + +@@ -803,7 +803,7 @@ fail_unlock: + fail_put_user_pages: + for (i = 0; i < pinned_pages; i++) + page_cache_release(user_pages[i]); +- kfree(user_pages); ++ drm_free_large(user_pages); + + return ret; + } +@@ -1304,9 +1304,7 @@ i915_gem_object_put_pages(struct drm_gem + } + obj_priv->dirty = 0; + +- drm_free(obj_priv->pages, +- page_count * sizeof(struct page *), +- DRM_MEM_DRIVER); ++ drm_free_large(obj_priv->pages); + obj_priv->pages = NULL; + } + +@@ -1900,8 +1898,7 @@ i915_gem_object_get_pages(struct drm_gem + */ + page_count = obj->size / PAGE_SIZE; + BUG_ON(obj_priv->pages != NULL); +- obj_priv->pages = drm_calloc(page_count, sizeof(struct page *), +- DRM_MEM_DRIVER); ++ obj_priv->pages = drm_calloc_large(page_count, sizeof(struct page *)); + if (obj_priv->pages == NULL) { + DRM_ERROR("Faled to allocate page list\n"); + obj_priv->pages_refcount--; +@@ -2983,7 +2980,7 @@ i915_gem_get_relocs_from_user(struct drm + reloc_count += exec_list[i].relocation_count; + } + +- *relocs = drm_calloc(reloc_count, sizeof(**relocs), DRM_MEM_DRIVER); ++ *relocs = drm_calloc_large(reloc_count, sizeof(**relocs)); + if (*relocs == NULL) + return -ENOMEM; + +@@ -2997,8 +2994,7 @@ i915_gem_get_relocs_from_user(struct drm + exec_list[i].relocation_count * + sizeof(**relocs)); + if (ret != 0) { +- drm_free(*relocs, reloc_count * sizeof(**relocs), +- DRM_MEM_DRIVER); ++ drm_free_large(*relocs); + *relocs = NULL; + return ret; + } +@@ -3032,7 +3028,7 @@ i915_gem_put_relocs_to_user(struct drm_i + reloc_count += exec_list[i].relocation_count; + } + +- drm_free(relocs, reloc_count * sizeof(*relocs), DRM_MEM_DRIVER); ++ drm_free_large(relocs); + + return ret; + } +@@ -3065,10 +3061,8 @@ i915_gem_execbuffer(struct drm_device *d + return -EINVAL; + } + /* Copy in the exec list from userland */ +- exec_list = drm_calloc(sizeof(*exec_list), args->buffer_count, +- DRM_MEM_DRIVER); +- object_list = drm_calloc(sizeof(*object_list), args->buffer_count, +- DRM_MEM_DRIVER); ++ exec_list = drm_calloc_large(sizeof(*exec_list), args->buffer_count); ++ object_list = drm_calloc_large(sizeof(*object_list), args->buffer_count); + if (exec_list == NULL || object_list == NULL) { + DRM_ERROR("Failed to allocate exec or object list " + "for %d buffers\n", +@@ -3332,10 +3326,8 @@ err: + } + + pre_mutex_err: +- drm_free(object_list, sizeof(*object_list) * args->buffer_count, +- DRM_MEM_DRIVER); +- drm_free(exec_list, sizeof(*exec_list) * args->buffer_count, +- DRM_MEM_DRIVER); ++ drm_free_large(object_list); ++ drm_free_large(exec_list); + drm_free(cliprects, sizeof(*cliprects) * args->num_cliprects, + DRM_MEM_DRIVER); + +diff -up linux-2.6.29.noarch/include/drm/drmP.h.drm-vmalloc linux-2.6.29.noarch/include/drm/drmP.h +--- linux-2.6.29.noarch/include/drm/drmP.h.drm-vmalloc 2009-05-20 10:04:32.000000000 -0400 ++++ linux-2.6.29.noarch/include/drm/drmP.h 2009-05-20 10:09:10.000000000 -0400 +@@ -1581,6 +1581,30 @@ static __inline__ void *drm_calloc(size_ + { + return kcalloc(nmemb, size, GFP_KERNEL); + } ++ ++static __inline__ void *drm_calloc_large(size_t nmemb, size_t size) ++{ ++ u8 *addr; ++ ++ if (size <= PAGE_SIZE) ++ return kcalloc(nmemb, size, GFP_KERNEL); ++ ++ addr = vmalloc(nmemb * size); ++ if (!addr) ++ return NULL; ++ ++ memset(addr, 0, nmemb * size); ++ ++ return addr; ++} ++ ++static __inline void drm_free_large(void *ptr) ++{ ++ if (!is_vmalloc_addr(ptr)) ++ return kfree(ptr); ++ ++ vfree(ptr); ++} + #else + extern void *drm_alloc(size_t size, int area); + extern void drm_free(void *pt, size_t size, int area); Index: increase-MAX_LOCKDEP_ENTRIES.patch =================================================================== RCS file: /cvs/pkgs/rpms/kernel/F-11/increase-MAX_LOCKDEP_ENTRIES.patch,v retrieving revision 1.2 retrieving revision 1.3 diff -u -p -r1.2 -r1.3 --- increase-MAX_LOCKDEP_ENTRIES.patch 28 Mar 2009 05:22:37 -0000 1.2 +++ increase-MAX_LOCKDEP_ENTRIES.patch 18 May 2009 17:24:24 -0000 1.3 @@ -1,13 +1,18 @@ diff --git a/kernel/lockdep_internals.h b/kernel/lockdep_internals.h -index 56b1969..58258a5 100644 +index a2cc7e9..699a2ac 100644 --- a/kernel/lockdep_internals.h +++ b/kernel/lockdep_internals.h -@@ -15,7 +15,7 @@ +@@ -54,9 +54,9 @@ enum { * table (if it's not there yet), and we check it for lock order * conflicts and deadlocks. */ -#define MAX_LOCKDEP_ENTRIES 8192UL +#define MAX_LOCKDEP_ENTRIES 16384UL - #define MAX_LOCKDEP_CHAINS_BITS 14 +-#define MAX_LOCKDEP_CHAINS_BITS 14 ++#define MAX_LOCKDEP_CHAINS_BITS 15 #define MAX_LOCKDEP_CHAINS (1UL << MAX_LOCKDEP_CHAINS_BITS) + + #define MAX_LOCKDEP_CHAIN_HLOCKS (MAX_LOCKDEP_CHAINS*5) + + Index: kernel.spec =================================================================== RCS file: /cvs/pkgs/rpms/kernel/F-11/kernel.spec,v retrieving revision 1.1602 retrieving revision 1.1617 diff -u -p -r1.1602 -r1.1617 --- kernel.spec 12 May 2009 14:20:48 -0000 1.1602 +++ kernel.spec 20 May 2009 21:02:25 -0000 1.1617 @@ -26,7 +26,7 @@ Summary: The Linux kernel # Don't stare at the awk too long, you'll go blind. %define fedora_cvs_origin 1462 %define fedora_cvs_revision() %2 -%global fedora_build %(echo %{fedora_cvs_origin}.%{fedora_cvs_revision $Revision: 1.1602 $} | awk -F . '{ OFS = "."; ORS = ""; print $3 - $1 ; i = 4 ; OFS = ""; while (i <= NF) { print ".", $i ; i++} }') +%global fedora_build %(echo %{fedora_cvs_origin}.%{fedora_cvs_revision $Revision: 1.1617 $} | awk -F . '{ OFS = "."; ORS = ""; print $3 - $1 ; i = 4 ; OFS = ""; while (i <= NF) { print ".", $i ; i++} }') # base_sublevel is the kernel version we're starting with and patching # on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base, @@ -604,9 +604,9 @@ Patch30: linux-2.6-iommu-fixes.patch Patch41: linux-2.6-sysrq-c.patch -Patch101: linux-2.6-e820-save-restore-edi-ebp.patch -Patch102: linux-2.6-e820-acpi3-bios-workaround.patch -Patch103: linux-2.6-e820-guard-against-pre-acpi3.patch +#Patch101: linux-2.6-e820-save-restore-edi-ebp.patch +#Patch102: linux-2.6-e820-acpi3-bios-workaround.patch +#Patch103: linux-2.6-e820-guard-against-pre-acpi3.patch Patch141: linux-2.6-ps3-storage-alias.patch Patch143: linux-2.6-g5-therm-shutdown.patch @@ -698,6 +698,12 @@ Patch1824: drm-intel-hdmi-edid-fix.patch Patch1825: drm-intel-tiling-transition.patch Patch1826: drm-intel-next.patch Patch1828: drm-intel-debugfs-ringbuffer.patch +Patch1829: drm-edid-ignore-tiny-modes.patch +Patch1830: linux-2.6.29.3-boot-vga.patch +Patch1831: drm-intel-include-965gme-pci-id.patch +Patch1832: drm-intel-gem-use-dma32-on-pae.patch +Patch1833: drm-intel-i8xx-cursors.patch +Patch1834: drm-intel-vmalloc.patch # kludge to make ich9 e1000 work Patch2000: linux-2.6-e1000-ich9.patch @@ -716,15 +722,21 @@ Patch2902: linux-2.6-v4l-dvb-fix-uint16_ Patch2903: linux-2.6-revert-dvb-net-kabi-change.patch # fs fixes +# ext4 fixes, all from upstream (.30) Patch2920: linux-2.6-ext4-flush-on-close.patch Patch2921: linux-2.6-ext4-really-print-warning-once.patch Patch2922: linux-2.6-ext4-prealloc-fixes.patch +Patch2923: linux-2.6-ext4-fake-delalloc-bno.patch +Patch2924: linux-2.6-ext4-clear-unwritten-flag.patch +Patch2925: linux-2.6-ext4-fix-i_cached_extent-race.patch Patch3000: linux-2.6-btrfs-unstable-update.patch +Patch3001: linux-2.6-btrfs-fix-page-mkwrite.patch Patch3010: linux-2.6-relatime-by-default.patch Patch3020: linux-2.6-fiemap-header-install.patch Patch4000: linux-2.6-usb-cdc-acm-remove-low-latency-flag.patch +Patch4010: linux-2.6-ftdi-oops.patch Patch5000: linux-2.6-add-qcserial.patch @@ -745,6 +757,9 @@ Patch9003: linux-2.6-dropwatch-protocol. # kvm fixes Patch9303: linux-2.6-kvm-skip-pit-check.patch Patch9304: linux-2.6-xen-check-for-nx-support.patch +Patch9305: linux-2.6-xen-fix_warning_when_deleting_gendisk.patch +Patch9306: linux-2.6-xen-xenbus_state_transition_when_not_connected.patch +Patch9307: linux-2.6.29-xen-disable-gbpages.patch %endif @@ -1157,9 +1172,9 @@ ApplyPatch linux-2.6-sysrq-c.patch # Architecture patches # x86(-64) -ApplyPatch linux-2.6-e820-save-restore-edi-ebp.patch -ApplyPatch linux-2.6-e820-acpi3-bios-workaround.patch -ApplyPatch linux-2.6-e820-guard-against-pre-acpi3.patch +#ApplyPatch linux-2.6-e820-save-restore-edi-ebp.patch +#ApplyPatch linux-2.6-e820-acpi3-bios-workaround.patch +#ApplyPatch linux-2.6-e820-guard-against-pre-acpi3.patch # # PowerPC @@ -1194,11 +1209,15 @@ ApplyPatch linux-2.6-execshield.patch ApplyPatch linux-2.6-ext4-flush-on-close.patch ApplyPatch linux-2.6-ext4-really-print-warning-once.patch ApplyPatch linux-2.6-ext4-prealloc-fixes.patch +ApplyPatch linux-2.6-ext4-fake-delalloc-bno.patch +ApplyPatch linux-2.6-ext4-clear-unwritten-flag.patch +ApplyPatch linux-2.6-ext4-fix-i_cached_extent-race.patch # xfs # btrfs ApplyPatch linux-2.6-btrfs-unstable-update.patch +ApplyPatch linux-2.6-btrfs-fix-page-mkwrite.patch # relatime ApplyPatch linux-2.6-relatime-by-default.patch @@ -1209,6 +1228,7 @@ ApplyPatch linux-2.6-fiemap-header-insta # USB ApplyPatch linux-2.6-add-qcserial.patch ApplyPatch linux-2.6-usb-cdc-acm-remove-low-latency-flag.patch +ApplyPatch linux-2.6-ftdi-oops.patch # ACPI ApplyPatch linux-2.6-defaults-acpi-video.patch @@ -1349,6 +1369,12 @@ ApplyPatch drm-intel-hdmi-edid-fix.patch ApplyPatch drm-intel-tiling-transition.patch ApplyPatch drm-intel-next.patch ApplyPatch drm-intel-debugfs-ringbuffer.patch +ApplyPatch drm-edid-ignore-tiny-modes.patch +ApplyPatch drm-intel-include-965gme-pci-id.patch +ApplyPatch linux-2.6.29.3-boot-vga.patch +ApplyPatch drm-intel-gem-use-dma32-on-pae.patch +ApplyPatch drm-intel-i8xx-cursors.patch +ApplyPatch drm-intel-vmalloc.patch # linux1394 git patches ApplyPatch linux-2.6-firewire-git-update.patch @@ -1382,6 +1408,9 @@ ApplyPatch linux-2.6-dropwatch-protocol. # kvm fixes ApplyPatch linux-2.6-kvm-skip-pit-check.patch ApplyPatch linux-2.6-xen-check-for-nx-support.patch +ApplyPatch linux-2.6-xen-fix_warning_when_deleting_gendisk.patch +ApplyPatch linux-2.6-xen-xenbus_state_transition_when_not_connected.patch +ApplyPatch linux-2.6.29-xen-disable-gbpages.patch # END OF PATCH APPLICATIONS @@ -1970,6 +1999,69 @@ fi # and build. %changelog +* Wed May 20 2009 - 2.6.29.3-155 +- Add drm-intel-i8xx-cursors.patch to fix cursors on i8xx desktop + chipsets (#488980). +- Add drm-intel-vmalloc.patch as part of the fix for #498131. + +* Wed May 20 2009 Kyle McMartin 2.6.29.3-154 +- disable e820 backports, causes problems in some places, bz#499396. + linux-2.6-e820-save-restore-edi-ebp.patch + linux-2.6-e820-acpi3-bios-workaround.patch + linux-2.6-e820-guard-against-pre-acpi3.patch + +* Tue May 19 2009 Kyle McMartin 2.6.29.3-153 +- drm-intel-gem-use-dma32-on-pae.patch: Force GEM allocations to be DMA32 + when using PAE. This should fix bz#493526. Leave the gfp flags for every + other chipset (radeon, really...) unset so we don't fribble the flags. +- agp-set_memory_ucwb.patch: comment out rejecting hunk that's no longer + necessary (forcing gem on with highmem64g.) + +* Tue May 19 2009 Kyle McMartin 2.6.29.3-151 +- net-revert-forcedeth-power-down-phy-when-interface-is.patch: revert only + hunks that powered down the phy. fixes rhbz#501249. + +* Mon May 18 2009 Kyle McMartin +- drm-intel-include-965gme-pci-id.patch: add patch patch from git head to + treat 965GME like 965GM. + +* Mon May 18 2009 Adam Jackson +- Expose whether VGA devices were active at boot or not in sysfs. + +* Mon May 18 2009 Justin M. Forbes +- Disable GB pages for Xen guests BZ# 499592 + +* Mon May 18 2009 Kyle McMartin +- increase-MAX_LOCKDEP_ENTRIES.patch: suck in upstream fix + d80c19df5fcceb8c741e96f09f275c2da719efef + +* Mon May 18 2009 Justin M. Forbes +- xen/blkfront: fix warning when deleting gendisk on unplug/shutdown. BZ# 499621 +- xen/blkfront: allow xenbus state transition to closing->closed when + not connected + +* Mon May 18 2009 Josef Bacik +- fix page_mkwrite in btrfs + +* Mon May 18 2009 David Woodhouse +- Fix oops on FTDI removal. + +* Fri May 15 2009 Eric Sandeen +- ext4: corruption fixes from upstream. + +* Fri May 15 2009 Adam Jackson +- drm: ignore tiny modes from EDID. + +* Tue May 12 2009 Kyle McMartin 2.6.29.3-142 +- linux-2.6-iommu-fixes.patch: intel-iommu: fix PCI device detach + from virtual machine + 3199aa6bc8766e17b8f60820c4f78d59c25fce0e upstream. + +* Tue May 12 2009 Kyle McMartin 2.6.29.3-141 +- linux-2.6-iommu-fixes.patch: intel-iommu: PAE memory corruption fix + fd18de50b9e7965f93d231e7390436fb8900c0e6 upstream. Also, re-cherry-pick + patchset and fix up merge conflicts against 2.6.29.3. + * Tue May 12 2009 Kyle McMartin 2.6.29.3-140 - git-bluetooth-fixes.patch: fix build error in backport from previous commit. Index: linux-2.6-btrfs-fix-page-mkwrite.patch =================================================================== RCS file: linux-2.6-btrfs-fix-page-mkwrite.patch diff -N linux-2.6-btrfs-fix-page-mkwrite.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6-btrfs-fix-page-mkwrite.patch 18 May 2009 13:42:21 -0000 1.2 @@ -0,0 +1,26 @@ +diff -up linux-2.6.29.x86_64/fs/btrfs/inode.c.orig linux-2.6.29.x86_64/fs/btrfs/inode.c +--- linux-2.6.29.x86_64/fs/btrfs/inode.c.orig 2009-05-16 14:24:28.602294856 -0400 ++++ linux-2.6.29.x86_64/fs/btrfs/inode.c 2009-05-16 14:25:13.497232334 -0400 +@@ -4436,9 +4436,8 @@ static void btrfs_invalidatepage(struct + * beyond EOF, then the page is guaranteed safe against truncation until we + * unlock the page. + */ +-int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) ++int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page) + { +- struct page *page = vmf->page; + struct inode *inode = fdentry(vma->vm_file)->d_inode; + struct btrfs_root *root = BTRFS_I(inode)->root; + struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; +diff -up linux-2.6.29.x86_64/fs/btrfs/ctree.h.orig linux-2.6.29.x86_64/fs/btrfs/ctree.h +--- linux-2.6.29.x86_64/fs/btrfs/ctree.h.orig 2009-05-18 09:40:20.715326888 -0400 ++++ linux-2.6.29.x86_64/fs/btrfs/ctree.h 2009-05-18 09:40:30.182323090 -0400 +@@ -2135,7 +2135,7 @@ int btrfs_merge_bio_hook(struct page *pa + unsigned long btrfs_force_ra(struct address_space *mapping, + struct file_ra_state *ra, struct file *file, + pgoff_t offset, pgoff_t last_index); +-int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); ++int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page); + int btrfs_readpage(struct file *file, struct page *page); + void btrfs_delete_inode(struct inode *inode); + void btrfs_put_inode(struct inode *inode); Index: linux-2.6-ext4-clear-unwritten-flag.patch =================================================================== RCS file: linux-2.6-ext4-clear-unwritten-flag.patch diff -N linux-2.6-ext4-clear-unwritten-flag.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6-ext4-clear-unwritten-flag.patch 15 May 2009 21:47:55 -0000 1.1 @@ -0,0 +1,55 @@ +From: Aneesh Kumar K.V +Date: Thu, 14 May 2009 21:05:39 +0000 (-0400) +Subject: ext4: Clear the unwritten buffer_head flag after the extent is initialized +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=2a8964d63d50dd2d65d71d342bc7fb6ef4117614 + +ext4: Clear the unwritten buffer_head flag after the extent is initialized + +The BH_Unwritten flag indicates that the buffer is allocated on disk +but has not been written; that is, the disk was part of a persistent +preallocation area. That flag should only be set when a get_blocks() +function is looking up a inode's logical to physical block mapping. + +When ext4_get_blocks_wrap() is called with create=1, the uninitialized +extent is converted into an initialized one, so the BH_Unwritten flag +is no longer appropriate. Hence, we need to make sure the +BH_Unwritten is not left set, since the combination of BH_Mapped and +BH_Unwritten is not allowed; among other things, it will result ext4's +get_block() to be called over and over again during the write_begin +phase of write(2). + +Signed-off-by: Aneesh Kumar K.V +Signed-off-by: "Theodore Ts'o" +--- + +Index: linux-2.6.29.noarch/fs/ext4/inode.c +=================================================================== +--- linux-2.6.29.noarch.orig/fs/ext4/inode.c ++++ linux-2.6.29.noarch/fs/ext4/inode.c +@@ -1069,6 +1069,7 @@ int ext4_get_blocks_wrap(handle_t *handl + int retval; + + clear_buffer_mapped(bh); ++ clear_buffer_unwritten(bh); + + /* + * Try to see if we can get the block without requesting +@@ -1099,6 +1100,18 @@ int ext4_get_blocks_wrap(handle_t *handl + return retval; + + /* ++ * When we call get_blocks without the create flag, the ++ * BH_Unwritten flag could have gotten set if the blocks ++ * requested were part of a uninitialized extent. We need to ++ * clear this flag now that we are committed to convert all or ++ * part of the uninitialized extent to be an initialized ++ * extent. This is because we need to avoid the combination ++ * of BH_Unwritten and BH_Mapped flags being simultaneously ++ * set on the buffer_head. ++ */ ++ clear_buffer_unwritten(bh); ++ ++ /* + * New blocks allocate and/or writing to uninitialized extent + * will possibly result in updating i_data, so we take + * the write lock of i_data_sem, and call get_blocks() Index: linux-2.6-ext4-fake-delalloc-bno.patch =================================================================== RCS file: linux-2.6-ext4-fake-delalloc-bno.patch diff -N linux-2.6-ext4-fake-delalloc-bno.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6-ext4-fake-delalloc-bno.patch 15 May 2009 21:47:55 -0000 1.1 @@ -0,0 +1,39 @@ +From: Aneesh Kumar K.V +Date: Tue, 12 May 2009 18:40:37 +0000 (-0400) +Subject: ext4: Use a fake block number for delayed new buffer_head +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=33b9817e2ae097c7b8d256e3510ac6c54fc6d9d0 + +ext4: Use a fake block number for delayed new buffer_head + +Use a very large unsigned number (~0xffff) as as the fake block number +for the delayed new buffer. The VFS should never try to write out this +number, but if it does, this will make it obvious. + +Signed-off-by: Aneesh Kumar K.V +Signed-off-by: "Theodore Ts'o" +--- + +Index: linux-2.6.29.noarch/fs/ext4/inode.c +=================================================================== +--- linux-2.6.29.noarch.orig/fs/ext4/inode.c ++++ linux-2.6.29.noarch/fs/ext4/inode.c +@@ -2213,6 +2213,10 @@ static int ext4_da_get_block_prep(struct + struct buffer_head *bh_result, int create) + { + int ret = 0; ++ sector_t invalid_block = ~((sector_t) 0xffff); ++ ++ if (invalid_block < ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es)) ++ invalid_block = ~0; + + BUG_ON(create == 0); + BUG_ON(bh_result->b_size != inode->i_sb->s_blocksize); +@@ -2234,7 +2238,7 @@ static int ext4_da_get_block_prep(struct + /* not enough space to reserve */ + return ret; + +- map_bh(bh_result, inode->i_sb, 0); ++ map_bh(bh_result, inode->i_sb, invalid_block); + set_buffer_new(bh_result); + set_buffer_delay(bh_result); + } else if (ret > 0) { Index: linux-2.6-ext4-fix-i_cached_extent-race.patch =================================================================== RCS file: linux-2.6-ext4-fix-i_cached_extent-race.patch diff -N linux-2.6-ext4-fix-i_cached_extent-race.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6-ext4-fix-i_cached_extent-race.patch 15 May 2009 21:47:55 -0000 1.1 @@ -0,0 +1,79 @@ +From: Theodore Ts'o +Date: Fri, 15 May 2009 13:07:28 +0000 (-0400) +Subject: ext4: Fix race in ext4_inode_info.i_cached_extent +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=2ec0ae3acec47f628179ee95fe2c4da01b5e9fc4 + +ext4: Fix race in ext4_inode_info.i_cached_extent + +If two CPU's simultaneously call ext4_ext_get_blocks() at the same +time, there is nothing protecting the i_cached_extent structure from +being used and updated at the same time. This could potentially cause +the wrong location on disk to be read or written to, including +potentially causing the corruption of the block group descriptors +and/or inode table. + +This bug has been in the ext4 code since almost the very beginning of +ext4's development. Fortunately once the data is stored in the page +cache cache, ext4_get_blocks() doesn't need to be called, so trying to +replicate this problem to the point where we could identify its root +cause was *extremely* difficult. Many thanks to Kevin Shanahan for +working over several months to be able to reproduce this easily so we +could finally nail down the cause of the corruption. + +Signed-off-by: "Theodore Ts'o" +Reviewed-by: "Aneesh Kumar K.V" +--- + +Index: linux-2.6.29.noarch/fs/ext4/extents.c +=================================================================== +--- linux-2.6.29.noarch.orig/fs/ext4/extents.c ++++ linux-2.6.29.noarch/fs/ext4/extents.c +@@ -1740,11 +1740,13 @@ ext4_ext_put_in_cache(struct inode *inod + { + struct ext4_ext_cache *cex; + BUG_ON(len == 0); ++ spin_lock(&EXT4_I(inode)->i_block_reservation_lock); + cex = &EXT4_I(inode)->i_cached_extent; + cex->ec_type = type; + cex->ec_block = block; + cex->ec_len = len; + cex->ec_start = start; ++ spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); + } + + /* +@@ -1801,12 +1803,17 @@ ext4_ext_in_cache(struct inode *inode, e + struct ext4_extent *ex) + { + struct ext4_ext_cache *cex; ++ int ret = EXT4_EXT_CACHE_NO; + ++ /* ++ * We borrow i_block_reservation_lock to protect i_cached_extent ++ */ ++ spin_lock(&EXT4_I(inode)->i_block_reservation_lock); + cex = &EXT4_I(inode)->i_cached_extent; + + /* has cache valid data? */ + if (cex->ec_type == EXT4_EXT_CACHE_NO) +- return EXT4_EXT_CACHE_NO; ++ goto errout; + + BUG_ON(cex->ec_type != EXT4_EXT_CACHE_GAP && + cex->ec_type != EXT4_EXT_CACHE_EXTENT); +@@ -1817,11 +1824,11 @@ ext4_ext_in_cache(struct inode *inode, e + ext_debug("%u cached by %u:%u:%llu\n", + block, + cex->ec_block, cex->ec_len, cex->ec_start); +- return cex->ec_type; ++ ret = cex->ec_type; + } +- +- /* not in cache */ +- return EXT4_EXT_CACHE_NO; ++errout: ++ spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); ++ return ret; + } + + /* Index: linux-2.6-ext4-prealloc-fixes.patch =================================================================== RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-ext4-prealloc-fixes.patch,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- linux-2.6-ext4-prealloc-fixes.patch 1 May 2009 18:59:33 -0000 1.1 +++ linux-2.6-ext4-prealloc-fixes.patch 15 May 2009 21:47:55 -0000 1.2 @@ -1,34 +1,41 @@ -We need to mark the buffer_head mapping prealloc space -as new during write_begin. Otherwise we don't zero out the -page cache content properly for a partial write. This will -cause file corruption with preallocation. - -Also use block number -1 as the fake block number so that -unmap_underlying_metadata doesn't drop wrong buffer_head - -Signed-off-by: Aneesh Kumar K.V - -Block number '0' should not be used as the fake block number for -the delayed new buffer. This will result in vfs calling umap_underlying_metadata for -block number '0'. So use -1 instead. +From: Aneesh Kumar K.V +Date: Wed, 13 May 2009 22:36:58 +0000 (-0400) +Subject: ext4: Fix sub-block zeroing for writes into preallocated extents +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=9c1ee184a30394e54165fa4c15923cabd952c106 + +ext4: Fix sub-block zeroing for writes into preallocated extents + +We need to mark the buffer_head mapping preallocated space as new +during write_begin. Otherwise we don't zero out the page cache content +properly for a partial write. This will cause file corruption with +preallocation. + +Now that we mark the buffer_head new we also need to have a valid +buffer_head blocknr so that unmap_underlying_metadata() unmaps the +correct block. Signed-off-by: Aneesh Kumar K.V - +Signed-off-by: "Theodore Ts'o" --- - fs/ext4/inode.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) +Index: linux-2.6.29.noarch/fs/ext4/extents.c +=================================================================== +--- linux-2.6.29.noarch.orig/fs/ext4/extents.c ++++ linux-2.6.29.noarch/fs/ext4/extents.c +@@ -2776,6 +2776,8 @@ int ext4_ext_get_blocks(handle_t *handle + if (allocated > max_blocks) + allocated = max_blocks; + set_buffer_unwritten(bh_result); ++ bh_result->b_bdev = inode->i_sb->s_bdev; ++ bh_result->b_blocknr = newblock; + goto out2; + } + Index: linux-2.6.29.noarch/fs/ext4/inode.c =================================================================== --- linux-2.6.29.noarch.orig/fs/ext4/inode.c +++ linux-2.6.29.noarch/fs/ext4/inode.c -@@ -2318,11 +2318,21 @@ static int ext4_da_get_block_prep(struct - /* not enough space to reserve */ - return ret; - -- map_bh(bh_result, inode->i_sb, 0); -+ map_bh(bh_result, inode->i_sb, -1); - set_buffer_new(bh_result); +@@ -2239,6 +2239,13 @@ static int ext4_da_get_block_prep(struct set_buffer_delay(bh_result); } else if (ret > 0) { bh_result->b_size = (ret << inode->i_blkbits); @@ -37,11 +44,8 @@ Index: linux-2.6.29.noarch/fs/ext4/inode + * we also need to mark the buffer as new so that + * the unwritten parts of the buffer gets correctly zeroed. + */ -+ if (buffer_unwritten(bh_result)) { -+ bh_result->b_bdev = inode->i_sb->s_bdev; ++ if (buffer_unwritten(bh_result)) + set_buffer_new(bh_result); -+ bh_result->b_blocknr = -1; -+ } ret = 0; } Index: linux-2.6-ftdi-oops.patch =================================================================== RCS file: linux-2.6-ftdi-oops.patch diff -N linux-2.6-ftdi-oops.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6-ftdi-oops.patch 19 May 2009 09:52:54 -0000 1.2 @@ -0,0 +1,125 @@ +commit 80193195f87ebca6d7417516d6edeb3969631c15 +Author: David Woodhouse +Date: Mon May 18 13:07:35 2009 +0100 + + Fix oops on close of hot-unplugged FTDI serial converter + + Commit c45d6320 ("fix reference counting of ftdi_private") stopped + ftdi_sio_port_remove() from directly freeing the port-private data, with + the intention if the port was still open, it would be freed when + ftdi_close() is eventually called and releases the last refcount on the + structure. + + That's all very well, but ftdi_sio_port_remove() still contains a call + to usb_set_serial_port_data(port, NULL) -- so by the time we get to + ftdi_close() for the port which was unplugged, it _still_ oopses on + dereferencing that NULL pointer, as it did before (and does in 2.6.29). + + The fix is just not to clear the private data in ftdi_sio_port_remove(). + Then the refcount is properly reduced to zero when the final kref_put() + happens in ftdi_close(). + + Remove a bogus comment too, while we're at it. And stop doing things + inside "if (priv)" -- it must _always_ be there. + + Based loosely on an earlier patch by Daniel Mack, and suggestions by + Alan Stern. + + Signed-off-by: David Woodhouse + Tested-by: Daniel Mack + Cc: stable@kernel.org + Signed-off-by: Linus Torvalds + +commit c45d63202fbaccef7ef7946c03f27f72c809b1cc +Author: Alan Stern +Date: Thu Apr 30 10:06:19 2009 -0400 + + usb-serial: ftdi_sio: fix reference counting of ftdi_private + + This patch (as1238) adds proper reference counting for ftdi_sio's + private data structure. Without it, the driver will free the + structure while it is still in use if the user unplugs the serial + device before closing the device file. + + The patch also replaces a slightly dangerous + cancel_delayed_work/flush_scheduled_work pair with + cancel_delayed_work_sync, which is always safer. + + Signed-off-by: Alan Stern + Reported-by: Daniel Mack + Tested-by: Daniel Mack + Cc: stable + Signed-off-by: Greg Kroah-Hartman + +--- a/drivers/usb/serial/ftdi_sio.c.29 2009-05-18 12:18:13.000000000 +0100 ++++ b/drivers/usb/serial/ftdi_sio.c 2009-05-18 12:18:18.000000000 +0100 +@@ -56,6 +56,7 @@ static __u16 vendor = FTDI_VID; + static __u16 product; + + struct ftdi_private { ++ struct kref kref; + ftdi_chip_type_t chip_type; + /* type of device, either SIO or FT8U232AM */ + int baud_base; /* baud base clock for divisor setting */ +@@ -1354,6 +1355,7 @@ static int ftdi_sio_port_probe(struct us + return -ENOMEM; + } + ++ kref_init(&priv->kref); + spin_lock_init(&priv->rx_lock); + spin_lock_init(&priv->tx_lock); + init_waitqueue_head(&priv->delta_msr_wait); +@@ -1470,6 +1472,13 @@ static void ftdi_shutdown(struct usb_ser + dbg("%s", __func__); + } + ++static void ftdi_sio_priv_release(struct kref *k) ++{ ++ struct ftdi_private *priv = container_of(k, struct ftdi_private, kref); ++ ++ kfree(priv); ++} ++ + static int ftdi_sio_port_remove(struct usb_serial_port *port) + { + struct ftdi_private *priv = usb_get_serial_port_data(port); +@@ -1478,14 +1487,7 @@ static int ftdi_sio_port_remove(struct u + + remove_sysfs_attrs(port); + +- /* all open ports are closed at this point +- * (by usbserial.c:__serial_close, which calls ftdi_close) +- */ +- +- if (priv) { +- usb_set_serial_port_data(port, NULL); +- kfree(priv); +- } ++ kref_put(&priv->kref, ftdi_sio_priv_release); + + return 0; + } +@@ -1549,7 +1551,8 @@ static int ftdi_open(struct tty_struct * + dev_err(&port->dev, + "%s - failed submitting read urb, error %d\n", + __func__, result); +- ++ else ++ kref_get(&priv->kref); + + return result; + } /* ftdi_open */ +@@ -1591,11 +1594,11 @@ static void ftdi_close(struct tty_struct + mutex_unlock(&port->serial->disc_mutex); + + /* cancel any scheduled reading */ +- cancel_delayed_work(&priv->rx_work); +- flush_scheduled_work(); ++ cancel_delayed_work_sync(&priv->rx_work); + + /* shutdown our bulk read */ + usb_kill_urb(port->read_urb); ++ kref_put(&priv->kref, ftdi_sio_priv_release); + } /* ftdi_close */ + + Index: linux-2.6-iommu-fixes.patch =================================================================== RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-iommu-fixes.patch,v retrieving revision 1.2 retrieving revision 1.4 diff -u -p -r1.2 -r1.4 --- linux-2.6-iommu-fixes.patch 9 May 2009 02:08:24 -0000 1.2 +++ linux-2.6-iommu-fixes.patch 13 May 2009 02:22:55 -0000 1.4 @@ -1,21 +1,51 @@ -commit c065567f392e05f0fda406369e1c8969c4411c68 -Author: David Woodhouse -Date: Fri Apr 10 22:27:48 2009 -0700 +commit 0717e50c97ae74bc9fda0f07ce4cc6934d69c8e4 +Author: Han, Weidong +Date: Thu Feb 26 17:31:12 2009 +0800 + + intel-iommu: fix PCI device detach from virtual machine + + When assign a device behind conventional PCI bridge or PCIe to + PCI/PCI-x bridge to a domain, it must assign its bridge and may + also need to assign secondary interface to the same domain. + + Dependent assignment is already there, but dependent + deassignment is missed when detach device from virtual machine. + This results in conventional PCI device assignment failure after + it has been assigned once. This patch addes dependent + deassignment, and fixes the issue. + + Signed-off-by: Weidong Han + Signed-off-by: David Woodhouse + (cherry picked from commit 3199aa6bc8766e17b8f60820c4f78d59c25fce0e) + +commit bbad20263a1aa62f406847a98706f4509d66062e +Author: David Woodhouse +Date: Sun May 10 23:57:41 2009 +0100 - intel-iommu: Avoid panic() for DRHD at address zero. + intel-iommu: PAE memory corruption fix + + PAGE_MASK is 0xFFFFF000 on i386 -- even with PAE. + + So it's not sufficient to ensure that you use phys_addr_t or uint64_t + everywhere you handle physical addresses -- you also have to avoid using + the construct 'addr & PAGE_MASK', because that will strip the high 32 + bits of the address. - If the BIOS does something obviously stupid, like claiming that the - registers for the IOMMU are at physical address zero, then print a nasty - message and abort, rather than trying to set up the IOMMU and then later - panicking. + This patch avoids that problem by using PHYSICAL_PAGE_MASK instead of + PAGE_MASK where appropriate. It leaves '& PAGE_MASK' in a few instances + that don't matter -- where it's being used on the virtual bus addresses + we're dishing out, which are 32-bit anyway. - It's becoming more and more obvious that trusting this stuff to the BIOS - was a mistake. + Since PHYSICAL_PAGE_MASK is not present on other architectures, we have + to define it (to PAGE_MASK) if it's not already defined. + + Maybe it would be better just to fix PAGE_MASK for i386/PAE? Signed-off-by: David Woodhouse - (cherry picked from commit e523b38e2f568af58baa13120a994cbf24e6dee0) + Signed-off-by: Linus Torvalds + (cherry picked from commit fd18de50b9e7965f93d231e7390436fb8900c0e6) -commit 1d748e6cec8936af4c7044bdb51593a3f3904239 +commit c405c91435e937ed05e7858913262295ac68047c Author: David Woodhouse Date: Mon Apr 6 13:30:01 2009 -0700 @@ -28,7 +58,7 @@ Date: Mon Apr 6 13:30:01 2009 -0700 Signed-off-by: David Woodhouse (cherry picked from commit 4958c5dc7bcb2e42d985cd26aeafd8a7eca9ab1e) -commit 3bf17fdaaadea04d4d82be5930dff93ec737aeed +commit 0210ca0870810580f8d26b0b4b56497814fc4898 Author: David Woodhouse Date: Sat Apr 4 00:39:25 2009 +0100 @@ -47,7 +77,7 @@ Date: Sat Apr 4 00:39:25 2009 +0100 Signed-off-by: David Woodhouse (cherry picked from commit 924b6231edfaf1e764ffb4f97ea382bf4facff58) -commit 948852c81654aa8572a2bac1d2dfb1abfcc76ab2 +commit f4e871ae555664b64f97ccf301bf189487530528 Author: Linus Torvalds Date: Tue Apr 7 07:59:41 2009 -0700 @@ -78,7 +108,7 @@ Date: Tue Apr 7 07:59:41 2009 -0700 Signed-off-by: Linus Torvalds (cherry picked from commit aeeae86859f4319de0a4946b44771d9926eeed54) -commit 484abc37905056cc7b90a51311e6589bacd9ed65 +commit 698149762a0af0c54259f543b660168b903d4ae4 Author: Fenghua Yu Date: Fri Mar 27 14:22:42 2009 -0700 @@ -93,10 +123,11 @@ Date: Fri Mar 27 14:22:42 2009 -0700 Signed-off-by: Fenghua Yu Acked-by: Ingo Molnar Signed-off-by: David Woodhouse + (cherry picked from commit f59c7b69bcba31cd355ababe067202b9895d6102) -commit 85e4b00c9d0378d7c19510d7bac8d5834b58edea -Author: David Woodhouse -Date: Fri Apr 10 15:15:05 2009 -0700 +commit adfd653bdf2cb37b90ab44fb571b746e08755c1e +Author: Fenghua Yu +Date: Fri Mar 27 14:22:43 2009 -0700 Intel IOMMU Suspend/Resume Support - Queued Invalidation @@ -107,7 +138,7 @@ Date: Fri Apr 10 15:15:05 2009 -0700 Signed-off-by: David Woodhouse (cherry picked from commit eb4a52bc660ea835482c582eaaf4893742cbd160) -commit 28dde4ade0c005b78f0cd0bda03ed20fcdfc11ae +commit 19eadfec5de05cdaec5f5dbc2002c19aa5217e91 Author: David Woodhouse Date: Fri Apr 3 15:19:32 2009 +0100 @@ -117,7 +148,7 @@ Date: Fri Apr 3 15:19:32 2009 +0100 Acked-by: Ingo Molnar (cherry picked from commit 8f912ba4d7cdaf7d31cf39fe5a9b7732308a256d) -commit b35948e3225618ab7c1c7700eae0c9f4565f9199 +commit 7fe06af0d58ea3e0494a5a77758593ea8cb8d996 Author: Suresh Siddha Date: Mon Mar 16 17:04:57 2009 -0700 @@ -133,7 +164,7 @@ Date: Mon Mar 16 17:04:57 2009 -0700 Signed-off-by: H. Peter Anvin (cherry picked from commit 1531a6a6b81a4e6f9eec9a5608758a6ea14b96e0) -commit 26c3c4ad26414ea9f66c56a27e394fc7ae937231 +commit 2724d3b3375d93f5d87f98ac5f308649f9919945 Author: Suresh Siddha Date: Mon Mar 16 17:04:56 2009 -0700 @@ -147,7 +178,7 @@ Date: Mon Mar 16 17:04:56 2009 -0700 Signed-off-by: H. Peter Anvin (cherry picked from commit eba67e5da6e971993b2899d2cdf459ce77d3dbc5) -commit 1c2f1031da6024fee999d2b115e31b40ff449405 +commit f31131852631f599d670a842071c48299b691b29 Author: Suresh Siddha Date: Mon Mar 16 17:04:54 2009 -0700 @@ -162,8 +193,16 @@ Date: Mon Mar 16 17:04:54 2009 -0700 Signed-off-by: H. Peter Anvin (cherry picked from commit 0ac2491f57af5644f88383d28809760902d6f4d7) + drivers/pci/dmar.c | 311 +++++++++++++++++++++++++++++++-- + drivers/pci/intel-iommu.c | 405 ++++++++++++++++++++++--------------------- + drivers/pci/intr_remapping.c | 44 ++++ + include/linux/compiler.h | 4 + include/linux/dmar.h | 10 + + include/linux/intel-iommu.h | 12 + + 6 files changed, 581 insertions(+), 205 deletions(-) + diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c -index 8a01120..e095037 100644 +index 8a01120..8734b14 100644 --- a/drivers/pci/dmar.c +++ b/drivers/pci/dmar.c @@ -31,6 +31,8 @@ @@ -255,7 +294,7 @@ index 8a01120..e095037 100644 struct q_inval *qi; if (!ecap_qis(iommu->ecap)) -@@ -802,19 +867,218 @@ int dmar_enable_qi(struct intel_iommu *iommu) +@@ -802,19 +867,241 @@ int dmar_enable_qi(struct intel_iommu *iommu) spin_lock_init(&qi->q_lock); @@ -460,6 +499,29 @@ index 8a01120..e095037 100644 + return ret; +} + ++int __init enable_drhd_fault_handling(void) ++{ ++ struct dmar_drhd_unit *drhd; ++ ++ /* ++ * Enable fault control interrupt. ++ */ ++ for_each_drhd_unit(drhd) { ++ int ret; ++ struct intel_iommu *iommu = drhd->iommu; ++ ret = dmar_set_interrupt(iommu); ++ ++ if (ret) { ++ printk(KERN_ERR "DRHD %Lx: failed to enable fault, " ++ " interrupt, ret %d\n", ++ (unsigned long long)drhd->reg_base_addr, ret); ++ return -1; ++ } ++ } ++ ++ return 0; ++} ++ +/* + * Re-enable Queued Invalidation interface. + */ @@ -485,7 +547,7 @@ index 8a01120..e095037 100644 return 0; } diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c -index 7e4f9e6..8e4ac13 100644 +index 7e4f9e6..52af2a3 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c @@ -36,6 +36,7 @@ @@ -496,7 +558,18 @@ index 7e4f9e6..8e4ac13 100644 #include #include #include "pci.h" -@@ -1010,194 +1011,6 @@ static int iommu_disable_translation(struct intel_iommu *iommu) +@@ -58,6 +59,10 @@ + #define DMA_32BIT_PFN IOVA_PFN(DMA_32BIT_MASK) + #define DMA_64BIT_PFN IOVA_PFN(DMA_64BIT_MASK) + ++#ifndef PHYSICAL_PAGE_MASK ++#define PHYSICAL_PAGE_MASK PAGE_MASK ++#endif ++ + /* global iommu list, set NULL for ignored DMAR units */ + static struct intel_iommu **g_iommus; + +@@ -1010,194 +1015,6 @@ static int iommu_disable_translation(struct intel_iommu *iommu) return 0; } @@ -691,18 +764,27 @@ index 7e4f9e6..8e4ac13 100644 static int iommu_init_domains(struct intel_iommu *iommu) { -@@ -2049,11 +1862,40 @@ static int __init init_dmars(void) +@@ -1369,7 +1186,7 @@ static void dmar_init_reserved_ranges(void) + if (!r->flags || !(r->flags & IORESOURCE_MEM)) + continue; + addr = r->start; +- addr &= PAGE_MASK; ++ addr &= PHYSICAL_PAGE_MASK; + size = r->end - addr; + size = PAGE_ALIGN(size); + iova = reserve_iova(&reserved_iova_list, IOVA_PFN(addr), +@@ -2049,11 +1866,40 @@ static int __init init_dmars(void) } } + /* + * Start from the sane iommu hardware state. + */ -+ for_each_drhd_unit(drhd) { -+ if (drhd->ignored) -+ continue; -+ -+ iommu = drhd->iommu; + for_each_drhd_unit(drhd) { + if (drhd->ignored) + continue; + + iommu = drhd->iommu; + + /* + * If the queued invalidation is already initialized by us @@ -723,16 +805,37 @@ index 7e4f9e6..8e4ac13 100644 + dmar_disable_qi(iommu); + } + - for_each_drhd_unit(drhd) { - if (drhd->ignored) - continue; - - iommu = drhd->iommu; ++ for_each_drhd_unit(drhd) { ++ if (drhd->ignored) ++ continue; ++ ++ iommu = drhd->iommu; + if (dmar_enable_qi(iommu)) { /* * Queued Invalidate not enabled, use Register Based -@@ -2713,6 +2555,150 @@ static void __init init_no_remapping_devices(void) +@@ -2270,7 +2116,8 @@ static dma_addr_t __intel_map_single(struct device *hwdev, phys_addr_t paddr, + * is not a big problem + */ + ret = domain_page_mapping(domain, start_paddr, +- ((u64)paddr) & PAGE_MASK, size, prot); ++ ((u64)paddr) & PHYSICAL_PAGE_MASK, ++ size, prot); + if (ret) + goto error; + +@@ -2554,8 +2401,8 @@ int intel_map_sg(struct device *hwdev, struct scatterlist *sglist, int nelems, + addr = (void *)virt_to_phys(addr); + size = aligned_size((u64)addr, sg->length); + ret = domain_page_mapping(domain, start_addr + offset, +- ((u64)addr) & PAGE_MASK, +- size, prot); ++ ((u64)addr) & PHYSICAL_PAGE_MASK, ++ size, prot); + if (ret) { + /* clear the page */ + dma_pte_clear_range(domain, start_addr, +@@ -2713,6 +2560,150 @@ static void __init init_no_remapping_devices(void) } } @@ -883,7 +986,7 @@ index 7e4f9e6..8e4ac13 100644 int __init intel_iommu_init(void) { int ret = 0; -@@ -2748,6 +2734,7 @@ int __init intel_iommu_init(void) +@@ -2748,6 +2739,7 @@ int __init intel_iommu_init(void) init_timer(&unmap_timer); force_iommu = 1; dma_ops = &intel_dma_ops; @@ -891,6 +994,56 @@ index 7e4f9e6..8e4ac13 100644 register_iommu(&intel_iommu_ops); +@@ -2778,6 +2770,33 @@ static int vm_domain_add_dev_info(struct dmar_domain *domain, + return 0; + } + ++static void iommu_detach_dependent_devices(struct intel_iommu *iommu, ++ struct pci_dev *pdev) ++{ ++ struct pci_dev *tmp, *parent; ++ ++ if (!iommu || !pdev) ++ return; ++ ++ /* dependent device detach */ ++ tmp = pci_find_upstream_pcie_bridge(pdev); ++ /* Secondary interface's bus number and devfn 0 */ ++ if (tmp) { ++ parent = pdev->bus->self; ++ while (parent != tmp) { ++ iommu_detach_dev(iommu, parent->bus->number, ++ parent->devfn); ++ parent = parent->bus->self; ++ } ++ if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */ ++ iommu_detach_dev(iommu, ++ tmp->subordinate->number, 0); ++ else /* this is a legacy PCI bridge */ ++ iommu_detach_dev(iommu, ++ tmp->bus->number, tmp->devfn); ++ } ++} ++ + static void vm_domain_remove_one_dev_info(struct dmar_domain *domain, + struct pci_dev *pdev) + { +@@ -2803,6 +2822,7 @@ static void vm_domain_remove_one_dev_info(struct dmar_domain *domain, + spin_unlock_irqrestore(&device_domain_lock, flags); + + iommu_detach_dev(iommu, info->bus, info->devfn); ++ iommu_detach_dependent_devices(iommu, pdev); + free_devinfo_mem(info); + + spin_lock_irqsave(&device_domain_lock, flags); +@@ -2852,6 +2872,7 @@ static void vm_domain_remove_all_dev_info(struct dmar_domain *domain) + + iommu = device_to_iommu(info->bus, info->devfn); + iommu_detach_dev(iommu, info->bus, info->devfn); ++ iommu_detach_dependent_devices(iommu, info->dev); + + /* clear this iommu in iommu_bmp, update iommu count + * and coherency diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c index 45effc5..0a490fe 100644 --- a/drivers/pci/intr_remapping.c Index: linux-2.6-xen-fix_warning_when_deleting_gendisk.patch =================================================================== RCS file: linux-2.6-xen-fix_warning_when_deleting_gendisk.patch diff -N linux-2.6-xen-fix_warning_when_deleting_gendisk.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6-xen-fix_warning_when_deleting_gendisk.patch 18 May 2009 17:23:49 -0000 1.1 @@ -0,0 +1,67 @@ +Currently blkfront gives a warning when hot unplugging due to calling +del_gendisk() with interrupts disabled (due to blkif_io_lock). + +WARNING: at kernel/softirq.c:124 local_bh_enable+0x36/0x84() +Modules linked in: xenfs xen_netfront ext3 jbd mbcache xen_blkfront +Pid: 13, comm: xenwatch Not tainted 2.6.29-xs5.5.0.13 #3 +Call Trace: + [] warn_slowpath+0x80/0xb6 + [] xen_sched_clock+0x16/0x63 + [] xen_force_evtchn_callback+0xc/0x10 + [] check_events+0x8/0xe + [] xen_restore_fl_direct_end+0x0/0x1 + [] xen_mc_flush+0x10a/0x13f + [] __switch_to+0x114/0x14e + [] dequeue_task+0x62/0x70 + [] finish_task_switch+0x2b/0x84 + [] schedule+0x66d/0x6e7 + [] xen_force_evtchn_callback+0xc/0x10 + [] xen_force_evtchn_callback+0xc/0x10 + [] local_bh_enable+0x36/0x84 + [] sk_filter+0x57/0x5c + [] netlink_broadcast+0x1d5/0x315 + [] kobject_uevent_env+0x28d/0x331 + [] device_del+0x10f/0x120 + [] device_unregister+0x8/0x10 + [] bdi_unregister+0x2d/0x39 + [] unlink_gendisk+0x23/0x3e + [] del_gendisk+0x7b/0xe7 + [] blkfront_closing+0x28/0x6e [xen_blkfront] + [] backend_changed+0x3ad/0x41d [xen_blkfront] + +We can fix this by calling del_gendisk() later in blkfront_closing, after +releasing blkif_io_lock. Since the queue is stopped during the interrupts +disabled phase I don't think there is any danger of an event occuring between +releasing the blkif_io_lock and deleting the disk. + +Signed-off-by: Ian Campbell +Cc: Jeremy Fitzhardinge +--- + drivers/block/xen-blkfront.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c +index 8f90508..aa0c94b 100644 +--- a/drivers/block/xen-blkfront.c ++++ b/drivers/block/xen-blkfront.c +@@ -934,8 +934,6 @@ static void blkfront_closing(struct xenbus_device *dev) + + spin_lock_irqsave(&blkif_io_lock, flags); + +- del_gendisk(info->gd); +- + /* No more blkif_request(). */ + blk_stop_queue(info->rq); + +@@ -949,6 +947,8 @@ static void blkfront_closing(struct xenbus_device *dev) + blk_cleanup_queue(info->rq); + info->rq = NULL; + ++ del_gendisk(info->gd); ++ + out: + xenbus_frontend_closed(dev); + } +-- +1.5.6.5 + Index: linux-2.6-xen-xenbus_state_transition_when_not_connected.patch =================================================================== RCS file: linux-2.6-xen-xenbus_state_transition_when_not_connected.patch diff -N linux-2.6-xen-xenbus_state_transition_when_not_connected.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6-xen-xenbus_state_transition_when_not_connected.patch 18 May 2009 17:23:49 -0000 1.1 @@ -0,0 +1,32 @@ +This situation can occur when attempting to attach a block device whose backend +is an empty physical CD-ROM driver. The backend in this case will go directly +from the Initialising state to Closing->Closed. Previously this would result in +a NULL pointer deref on info->gd (xenbus_dev_fatal does not return as a1a15ac5 +seems to expect) + +Signed-off-by: Ian Campbell +Cc: Jeremy Fitzhardinge +--- + drivers/block/xen-blkfront.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c +index aa0c94b..a6cbf7b 100644 +--- a/drivers/block/xen-blkfront.c ++++ b/drivers/block/xen-blkfront.c +@@ -977,8 +977,10 @@ static void backend_changed(struct xenbus_device *dev, + break; + + case XenbusStateClosing: +- if (info->gd == NULL) +- xenbus_dev_fatal(dev, -ENODEV, "gd is NULL"); ++ if (info->gd == NULL) { ++ xenbus_frontend_closed(dev); ++ break; ++ } + bd = bdget_disk(info->gd, 0); + if (bd == NULL) + xenbus_dev_fatal(dev, -ENODEV, "bdget failed"); +-- +1.5.6.5 + Index: linux-2.6.29-xen-disable-gbpages.patch =================================================================== RCS file: linux-2.6.29-xen-disable-gbpages.patch diff -N linux-2.6.29-xen-disable-gbpages.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6.29-xen-disable-gbpages.patch 18 May 2009 17:43:03 -0000 1.1 @@ -0,0 +1,12 @@ +diff -up linux-2.6.29.noarch/arch/x86/xen/enlighten.c.orig linux-2.6.29.noarch/arch/x86/xen/enlighten.c +--- linux-2.6.29.noarch/arch/x86/xen/enlighten.c.orig 2009-05-18 14:27:53.000000000 +0200 ++++ linux-2.6.29.noarch/arch/x86/xen/enlighten.c 2009-05-18 14:32:07.000000000 +0200 +@@ -218,6 +218,8 @@ static void xen_cpuid(unsigned int *ax, + (1 << X86_FEATURE_MCE) | /* disable MCE */ + (1 << X86_FEATURE_MCA) | /* disable MCA */ + (1 << X86_FEATURE_ACC)); /* thermal monitoring */ ++ else if (*ax == 0x80000001) ++ maskedx = ~((1 << (X86_FEATURE_GBPAGES&31))); /* disable GB pages */ + + asm(XEN_EMULATE_PREFIX "cpuid" + : "=a" (*ax), Index: linux-2.6.29.3-boot-vga.patch =================================================================== RCS file: linux-2.6.29.3-boot-vga.patch diff -N linux-2.6.29.3-boot-vga.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ linux-2.6.29.3-boot-vga.patch 18 May 2009 17:43:45 -0000 1.1 @@ -0,0 +1,70 @@ +commit 217f45de3d2f68b6d0b646bb4f2a155a71648396 +Author: Dave Airlie +Date: Wed Mar 4 05:57:05 2009 +0000 + + PCI: expose boot VGA device via sysfs. + + X really would like to know which VGA device was considered the boot + device by the system. The x86 PCI fixups have support for discovering + this but we provide no way to expose it to userspace. + + This adds a sysfs file per VGA class device which has the value 0 for + non the boot device or unknown, and 1 if the VGA device is the boot + device. + + Acked-by: Greg Kroah-Hartman + Signed-off-by: Dave Airlie + Signed-off-by: Jesse Barnes + +diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c +index 1c89298..ec7a175 100644 +--- a/drivers/pci/pci-sysfs.c ++++ b/drivers/pci/pci-sysfs.c +@@ -241,6 +241,17 @@ struct device_attribute pci_dev_attrs[] = { + }; + + static ssize_t ++boot_vga_show(struct device *dev, struct device_attribute *attr, char *buf) ++{ ++ struct pci_dev *pdev = to_pci_dev(dev); ++ ++ return sprintf(buf, "%u\n", ++ !!(pdev->resource[PCI_ROM_RESOURCE].flags & ++ IORESOURCE_ROM_SHADOW)); ++} ++struct device_attribute vga_attr = __ATTR_RO(boot_vga); ++ ++static ssize_t + pci_read_config(struct kobject *kobj, struct bin_attribute *bin_attr, + char *buf, loff_t off, size_t count) + { +@@ -899,18 +910,27 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) + pdev->rom_attr = attr; + } + ++ if ((pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA) { ++ retval = device_create_file(&pdev->dev, &vga_attr); ++ if (retval) ++ goto err_rom_file; ++ } ++ + /* add platform-specific attributes */ + retval = pcibios_add_platform_entries(pdev); + if (retval) +- goto err_rom_file; ++ goto err_vga_file; + + /* add sysfs entries for various capabilities */ + retval = pci_create_capabilities_sysfs(pdev); + if (retval) +- goto err_rom_file; ++ goto err_vga_file; + + return 0; + ++err_vga_file: ++ if ((pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA) ++ device_remove_file(&pdev->dev, &vga_attr); + err_rom_file: + if (rom_size) { + sysfs_remove_bin_file(&pdev->dev.kobj, pdev->rom_attr); Index: net-revert-forcedeth-power-down-phy-when-interface-is.patch =================================================================== RCS file: /cvs/pkgs/rpms/kernel/F-11/net-revert-forcedeth-power-down-phy-when-interface-is.patch,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- net-revert-forcedeth-power-down-phy-when-interface-is.patch 11 May 2009 16:52:28 -0000 1.1 +++ net-revert-forcedeth-power-down-phy-when-interface-is.patch 19 May 2009 16:53:49 -0000 1.2 @@ -1,15 +1,14 @@ -From c1043da4aa23c180e36399f7c32cb909f7924c31 Mon Sep 17 00:00:00 2001 +From 20c6d5f67970a7dfc510d4bdc484bcc259610161 Mon Sep 17 00:00:00 2001 From: Kyle McMartin -Date: Mon, 11 May 2009 12:49:30 -0400 -Subject: [PATCH] Revert "forcedeth: power down phy when interface is down" +Date: Mon, 18 May 2009 13:01:28 -0400 +Subject: [PATCH] revert cb52deba12f27af90a46d2f8667a64888118a888 -This reverts commit cb52deba12f27af90a46d2f8667a64888118a888. --- - drivers/net/forcedeth.c | 12 ++---------- - 1 files changed, 2 insertions(+), 10 deletions(-) + drivers/net/forcedeth.c | 8 ++------ + 1 files changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c -index df0794e..3798f67 100644 +index df0794e..11ade32 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c @@ -1446,9 +1446,9 @@ static int phy_init(struct net_device *dev) @@ -24,18 +23,7 @@ index df0794e..3798f67 100644 if (mii_rw(dev, np->phyaddr, MII_BMCR, mii_control)) { return PHY_ERROR; } -@@ -5210,10 +5210,6 @@ static int nv_open(struct net_device *dev) - - dprintk(KERN_DEBUG "nv_open: begin\n"); - -- /* power up phy */ -- mii_rw(dev, np->phyaddr, MII_BMCR, -- mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ) & ~BMCR_PDOWN); -- - /* erase previous misconfiguration */ - if (np->driver_data & DEV_HAS_POWER_CNTRL) - nv_mac_reset(dev); -@@ -5407,10 +5403,6 @@ static int nv_close(struct net_device *dev) +@@ -5407,10 +5407,6 @@ static int nv_close(struct net_device *dev) if (np->wolenabled) { writel(NVREG_PFF_ALWAYS|NVREG_PFF_MYADDR, base + NvRegPacketFilterFlags); nv_start_rx(dev);