diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/arch/x86/boot/memory.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/arch/x86/boot/memory.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/arch/x86/boot/memory.c 2009-06-05 18:21:10.786181943 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/arch/x86/boot/memory.c 2009-06-05 18:18:11.382213862 -0400 @@ -2,7 +2,6 @@ * * Copyright (C) 1991, 1992 Linus Torvalds * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin * * This file is part of the Linux kernel, and is made available under * the terms of the GNU General Public License version 2. @@ -17,37 +16,24 @@ #define SMAP 0x534d4150 /* ASCII "SMAP" */ -struct e820_ext_entry { - struct e820entry std; - u32 ext_flags; -} __attribute__((packed)); - static int detect_memory_e820(void) { int count = 0; u32 next = 0; - u32 size, id, edi; + u32 size, id; u8 err; struct e820entry *desc = boot_params.e820_map; - static struct e820_ext_entry buf; /* static so it is zeroed */ - - /* - * Set this here so that if the BIOS doesn't change this field - * but still doesn't change %ecx, we're still okay... - */ - buf.ext_flags = 1; do { - size = sizeof buf; + size = sizeof(struct e820entry); /* Important: %edx and %esi are clobbered by some BIOSes, so they must be either used for the error output - or explicitly marked clobbered. Given that, assume there - is something out there clobbering %ebp and %edi, too. */ - asm("pushl %%ebp; int $0x15; popl %%ebp; setc %0" + or explicitly marked clobbered. */ + asm("int $0x15; setc %0" : "=d" (err), "+b" (next), "=a" (id), "+c" (size), - "=D" (edi), "+m" (buf) - : "D" (&buf), "d" (SMAP), "a" (0xe820) + "=m" (*desc) + : "D" (desc), "d" (SMAP), "a" (0xe820) : "esi"); /* BIOSes which terminate the chain with CF = 1 as opposed @@ -66,14 +52,8 @@ break; } - /* ACPI 3.0 added the extended flags support. If bit 0 - in the extended flags is zero, we're supposed to simply - ignore the entry -- a backwards incompatible change! */ - if (size > 20 && !(buf.ext_flags & 1)) - continue; - - *desc++ = buf.std; count++; + desc++; } while (next && count < ARRAY_SIZE(boot_params.e820_map)); return boot_params.e820_entries = count; diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/arch/x86/xen/enlighten.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/arch/x86/xen/enlighten.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/arch/x86/xen/enlighten.c 2009-06-05 18:21:15.535056753 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/arch/x86/xen/enlighten.c 2009-06-05 18:20:14.862932645 -0400 @@ -218,6 +218,8 @@ (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), diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/.config 2009-06-05 18:21:26.739308873 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/.config 2009-06-05 18:21:14.145057517 -0400 @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:26 2009 +# Fri Jun 5 18:21:14 2009 # CONFIG_64BIT=y # CONFIG_X86_32 is not set diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-arm.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-arm.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-arm.config 2009-06-05 18:21:17.981932205 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-arm.config 2009-06-05 18:20:55.370932523 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:17 2009 +# Fri Jun 5 18:20:55 2009 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i586.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i586.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i586.config 2009-06-05 18:21:19.348973640 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i586.config 2009-06-05 18:21:03.788947497 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:19 2009 +# Fri Jun 5 18:21:03 2009 # # CONFIG_64BIT is not set CONFIG_X86_32=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i586-debug.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i586-debug.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i586-debug.config 2009-06-05 18:21:18.739192826 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i586-debug.config 2009-06-05 18:21:02.037182348 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:18 2009 +# Fri Jun 5 18:21:01 2009 # # CONFIG_64BIT is not set CONFIG_X86_32=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i686-PAE.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i686-PAE.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i686-PAE.config 2009-06-05 18:21:19.916943204 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i686-PAE.config 2009-06-05 18:21:04.692932629 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:19 2009 +# Fri Jun 5 18:21:04 2009 # # CONFIG_64BIT is not set CONFIG_X86_32=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i686-PAEdebug.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i686-PAEdebug.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i686-PAEdebug.config 2009-06-05 18:21:20.515307029 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-i686-PAEdebug.config 2009-06-05 18:21:06.069182484 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:20 2009 +# Fri Jun 5 18:21:05 2009 # # CONFIG_64BIT is not set CONFIG_X86_32=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ia64.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ia64.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ia64.config 2009-06-05 18:21:21.145308730 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ia64.config 2009-06-05 18:21:07.946308182 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:21 2009 +# Fri Jun 5 18:21:07 2009 # CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64.config 2009-06-05 18:21:24.187943626 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64.config 2009-06-05 18:21:11.076328690 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:24 2009 +# Fri Jun 5 18:21:11 2009 # CONFIG_PPC64=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64-debug.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64-debug.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64-debug.config 2009-06-05 18:21:23.029369799 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64-debug.config 2009-06-05 18:21:09.725932343 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:23 2009 +# Fri Jun 5 18:21:09 2009 # CONFIG_PPC64=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64-kdump.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64-kdump.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64-kdump.config 2009-06-05 18:21:23.619057667 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc64-kdump.config 2009-06-05 18:21:10.407327906 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:23 2009 +# Fri Jun 5 18:21:10 2009 # CONFIG_PPC64=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc.config 2009-06-05 18:21:22.406182608 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc.config 2009-06-05 18:21:09.243061649 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:22 2009 +# Fri Jun 5 18:21:09 2009 # # CONFIG_PPC64 is not set diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc-smp.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc-smp.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc-smp.config 2009-06-05 18:21:21.763931965 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-ppc-smp.config 2009-06-05 18:21:08.541979933 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:21 2009 +# Fri Jun 5 18:21:08 2009 # # CONFIG_PPC64 is not set diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-s390x.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-s390x.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-s390x.config 2009-06-05 18:21:24.655182816 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-s390x.config 2009-06-05 18:21:11.602187202 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:24 2009 +# Fri Jun 5 18:21:11 2009 # CONFIG_SCHED_MC=y CONFIG_MMU=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-sparc64.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-sparc64.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-sparc64.config 2009-06-05 18:21:25.627953080 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-sparc64.config 2009-06-05 18:21:12.862182198 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:25 2009 +# Fri Jun 5 18:21:12 2009 # CONFIG_64BIT=y CONFIG_SPARC=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-sparc64-smp.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-sparc64-smp.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-sparc64-smp.config 2009-06-05 18:21:25.222931846 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-sparc64-smp.config 2009-06-05 18:21:12.207932666 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:25 2009 +# Fri Jun 5 18:21:12 2009 # CONFIG_64BIT=y CONFIG_SPARC=y diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-x86_64.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-x86_64.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-x86_64.config 2009-06-05 18:21:26.743338243 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-x86_64.config 2009-06-05 18:21:14.151057249 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:26 2009 +# Fri Jun 5 18:21:14 2009 # CONFIG_64BIT=y # CONFIG_X86_32 is not set diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-x86_64-debug.config F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-x86_64-debug.config --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-x86_64-debug.config 2009-06-05 18:21:26.150953776 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/configs/kernel-2.6.29.3-x86_64-debug.config 2009-06-05 18:21:13.414328048 -0400 @@ -2,7 +2,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29.3 -# Fri Jun 5 18:21:26 2009 +# Fri Jun 5 18:21:13 2009 # CONFIG_64BIT=y # CONFIG_X86_32 is not set diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/block/xen-blkfront.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/block/xen-blkfront.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/block/xen-blkfront.c 2009-03-23 19:12:14.000000000 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/block/xen-blkfront.c 2009-06-05 18:20:14.687141885 -0400 @@ -934,8 +934,6 @@ spin_lock_irqsave(&blkif_io_lock, flags); - del_gendisk(info->gd); - /* No more blkif_request(). */ blk_stop_queue(info->rq); @@ -949,6 +947,8 @@ blk_cleanup_queue(info->rq); info->rq = NULL; + del_gendisk(info->gd); + out: xenbus_frontend_closed(dev); } @@ -977,8 +977,10 @@ 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"); diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/drm_edid.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/drm_edid.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/drm_edid.c 2009-06-05 18:21:12.087057455 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/drm_edid.c 2009-06-05 18:19:20.030062422 -0400 @@ -289,6 +289,11 @@ 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; diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/drm_gem.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/drm_gem.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/drm_gem.c 2009-06-05 18:21:12.527931880 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/drm_gem.c 2009-06-05 18:19:20.044056876 -0400 @@ -142,6 +142,9 @@ 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 -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_dma.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_dma.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_dma.c 2009-06-05 18:21:12.646182659 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_dma.c 2009-06-05 18:19:20.045056767 -0400 @@ -1144,13 +1144,13 @@ "performance may suffer.\n"); } -#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 +#ifdef CONFIG_HIGHMEM64G + /* 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 -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_drv.h F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_drv.h --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_drv.h 2009-06-05 18:21:13.061932028 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_drv.h 2009-06-05 18:19:20.033057050 -0400 @@ -784,7 +784,8 @@ (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) diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_gem.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_gem.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_gem.c 2009-06-05 18:21:13.062931975 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_gem.c 2009-06-05 18:19:20.055182143 -0400 @@ -278,7 +278,7 @@ 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 @@ SetPageDirty(user_pages[i]); page_cache_release(user_pages[i]); } - kfree(user_pages); + drm_free_large(user_pages); return ret; } @@ -562,7 +562,7 @@ 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_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 @@ 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_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 @@ } 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 @@ */ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ } 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 -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_reg.h F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_reg.h --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_reg.h 2009-06-05 18:21:12.103057337 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/i915_reg.h 2009-06-05 18:19:20.049057337 -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 -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c 2009-06-05 18:21:12.746181997 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c 2009-06-05 18:19:20.050057251 -0400 @@ -1361,7 +1361,7 @@ 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 @@ /* 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 @@ 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); diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/net/forcedeth.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/net/forcedeth.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/net/forcedeth.c 2009-06-05 18:21:11.871307217 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/net/forcedeth.c 2009-06-05 18:19:10.500932792 -0400 @@ -5210,6 +5210,10 @@ 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); diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/dmar.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/dmar.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/dmar.c 2009-06-05 18:21:10.705183030 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/dmar.c 2009-06-05 18:19:03.995932478 -0400 @@ -1058,6 +1058,29 @@ 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. */ diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/intel-iommu.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/intel-iommu.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/intel-iommu.c 2009-06-05 18:21:10.707183230 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/intel-iommu.c 2009-06-05 18:19:04.000932521 -0400 @@ -59,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; @@ -1182,7 +1186,7 @@ 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), @@ -2112,7 +2116,8 @@ * 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; @@ -2396,8 +2401,8 @@ 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, @@ -2765,6 +2770,33 @@ 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) { @@ -2790,6 +2822,7 @@ 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); @@ -2839,6 +2872,7 @@ 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 -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/pci-sysfs.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/pci-sysfs.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/pci-sysfs.c 2009-03-23 19:12:14.000000000 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/pci/pci-sysfs.c 2009-06-05 18:19:20.036077623 -0400 @@ -241,6 +241,17 @@ }; 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) { @@ -884,18 +895,27 @@ 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); diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/usb/serial/ftdi_sio.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/usb/serial/ftdi_sio.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/drivers/usb/serial/ftdi_sio.c 2009-06-05 18:21:08.749933405 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/drivers/usb/serial/ftdi_sio.c 2009-06-05 18:19:09.038932328 -0400 @@ -56,6 +56,7 @@ 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 */ @@ -1352,6 +1353,7 @@ 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); @@ -1468,6 +1470,13 @@ 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); @@ -1476,14 +1485,7 @@ 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; } @@ -1547,7 +1549,8 @@ dev_err(&port->dev, "%s - failed submitting read urb, error %d\n", __func__, result); - + else + kref_get(&priv->kref); return result; } /* ftdi_open */ @@ -1589,11 +1592,11 @@ 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 */ diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/fs/btrfs/ctree.h F-11-155/kernel-2.6.29/linux-2.6.29.noarch/fs/btrfs/ctree.h --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/fs/btrfs/ctree.h 2009-06-05 18:21:11.314057424 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/fs/btrfs/ctree.h 2009-06-05 18:19:08.559932358 -0400 @@ -2135,7 +2135,7 @@ 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); diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/fs/btrfs/inode.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/fs/btrfs/inode.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/fs/btrfs/inode.c 2009-06-05 18:21:11.407943388 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/fs/btrfs/inode.c 2009-06-05 18:19:08.542968842 -0400 @@ -4436,9 +4436,8 @@ * 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 -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/fs/ext4/extents.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/fs/ext4/extents.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/fs/ext4/extents.c 2009-03-23 19:12:14.000000000 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/fs/ext4/extents.c 2009-06-05 18:19:05.722128660 -0400 @@ -1740,11 +1740,13 @@ { 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 @@ 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 @@ 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; } /* @@ -2776,6 +2783,8 @@ 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; } diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/fs/ext4/inode.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/fs/ext4/inode.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/fs/ext4/inode.c 2009-06-05 18:21:11.027307283 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/fs/ext4/inode.c 2009-06-05 18:19:05.696982255 -0400 @@ -1069,6 +1069,7 @@ 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 @@ 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() @@ -2213,6 +2226,10 @@ 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 +2251,7 @@ /* not enough space to reserve */ return ret; - map_bh(bh_result, inode->i_sb, -1); + map_bh(bh_result, inode->i_sb, invalid_block); set_buffer_new(bh_result); set_buffer_delay(bh_result); } else if (ret > 0) { @@ -2244,11 +2261,8 @@ * 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; } diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/include/drm/drmP.h F-11-155/kernel-2.6.29/linux-2.6.29.noarch/include/drm/drmP.h --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/include/drm/drmP.h 2009-06-05 18:21:12.639182050 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/include/drm/drmP.h 2009-06-05 18:19:20.055182143 -0400 @@ -1043,6 +1043,7 @@ 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 */ /*@} */ }; @@ -1580,6 +1581,30 @@ { 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); diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/kernel/lockdep_internals.h F-11-155/kernel-2.6.29/linux-2.6.29.noarch/kernel/lockdep_internals.h --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/kernel/lockdep_internals.h 2009-06-05 18:21:11.925307626 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/kernel/lockdep_internals.h 2009-06-05 18:19:10.897322644 -0400 @@ -17,7 +17,7 @@ */ #define MAX_LOCKDEP_ENTRIES 16384UL -#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) diff -Nur F-11-140/kernel-2.6.29/linux-2.6.29.noarch/mm/shmem.c F-11-155/kernel-2.6.29/linux-2.6.29.noarch/mm/shmem.c --- F-11-140/kernel-2.6.29/linux-2.6.29.noarch/mm/shmem.c 2009-03-23 19:12:14.000000000 -0400 +++ F-11-155/kernel-2.6.29/linux-2.6.29.noarch/mm/shmem.c 2009-06-05 18:19:20.046056614 -0400 @@ -1226,7 +1226,7 @@ * 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(); Binary files F-11-140/kernel-2.6.29/linux-2.6.29.noarch/scripts/basic/docproc and F-11-155/kernel-2.6.29/linux-2.6.29.noarch/scripts/basic/docproc differ Binary files F-11-140/kernel-2.6.29/linux-2.6.29.noarch/scripts/basic/fixdep and F-11-155/kernel-2.6.29/linux-2.6.29.noarch/scripts/basic/fixdep differ Binary files F-11-140/kernel-2.6.29/linux-2.6.29.noarch/scripts/basic/hash and F-11-155/kernel-2.6.29/linux-2.6.29.noarch/scripts/basic/hash differ Binary files F-11-140/kernel-2.6.29/linux-2.6.29.noarch/scripts/kconfig/conf and F-11-155/kernel-2.6.29/linux-2.6.29.noarch/scripts/kconfig/conf differ