diff --git a/.gitignore b/.gitignore index a955be8..d89af37 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ patch-*.bz2 clog *.rpm kernel-2.6.*/ -/patch-2.6.36-git8.bz2 +/patch-2.6.37-rc1.bz2 diff --git a/Makefile b/Makefile index 8e3e841..c6142c1 100644 --- a/Makefile +++ b/Makefile @@ -91,6 +91,8 @@ debug: @perl -pi -e 's/# CONFIG_DEBUG_PER_CPU_MAPS is not set/CONFIG_DEBUG_PER_CPU_MAPS=y/' config-nodebug @perl -pi -e 's/CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y/# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set/' config-nodebug #@perl -pi -e 's/# CONFIG_PCI_DEFAULT_USE_CRS is not set/CONFIG_PCI_DEFAULT_USE_CRS=y/' config-nodebug + @perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/' config-nodebug + @perl -pi -e 's/# CONFIG_TEST_LIST_SORT is not set/CONFIG_TEST_LIST_SORT=y/' config-nodebug @# just in case we're going from extremedebug -> debug @perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug @@ -164,6 +166,8 @@ release: @perl -pi -e 's/CONFIG_DEBUG_PER_CPU_MAPS=y/# CONFIG_DEBUG_PER_CPU_MAPS is not set/' config-nodebug @perl -pi -e 's/# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set/CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y/' config-nodebug #@perl -pi -e 's/CONFIG_PCI_DEFAULT_USE_CRS=y/# CONFIG_PCI_DEFAULT_USE_CRS is not set/' config-nodebug + @perl -pi -e 's/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/' config-nodebug + @perl -pi -e 's/CONFIG_TEST_LIST_SORT=y/# CONFIG_TEST_LIST_SORT is not set/' config-nodebug @perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-debug @perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug diff --git a/acpi-ec-add-delay-before-write.patch b/acpi-ec-add-delay-before-write.patch index af49ccc..f1cb508 100644 --- a/acpi-ec-add-delay-before-write.patch +++ b/acpi-ec-add-delay-before-write.patch @@ -23,7 +23,7 @@ index 27e0b92..09fbb69 100644 pr_debug(PREFIX "controller reset, restart transaction\n"); spin_lock_irqsave(&ec->curr_lock, flags); start_transaction(ec); -@@ -271,15 +272,25 @@ static int ec_check_ibf0(struct acpi_ec *ec) +@@ -271,15 +272,24 @@ static int ec_check_ibf0(struct acpi_ec *ec) return (status & ACPI_EC_FLAG_IBF) == 0; } @@ -38,8 +38,7 @@ index 27e0b92..09fbb69 100644 + static int ec_wait_ibf0(struct acpi_ec *ec) { -+ - unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY); + unsigned long delay = jiffies + msecs_to_jiffies(ec_delay); /* interrupt wait manually if GPE mode is not active */ while (time_before(jiffies, delay)) if (wait_event_timeout(ec->wait, ec_check_ibf0(ec), diff --git a/acpi-update-battery-information-on-notification-0x81.patch b/acpi-update-battery-information-on-notification-0x81.patch index 5fe34b9..3704b05 100644 --- a/acpi-update-battery-information-on-notification-0x81.patch +++ b/acpi-update-battery-information-on-notification-0x81.patch @@ -12,14 +12,14 @@ and recreate the battery in order to populate the fields correctly. Signed-off-by: Matthew Garrett --- - drivers/acpi/battery.c | 22 +++++++++++++++++----- - 1 files changed, 17 insertions(+), 5 deletions(-) + drivers/acpi/battery.c | 20 +++++++++++++++----- + 1 files changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c -index dc58402..69638c4 100644 +index 95649d3..2a774a8 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c -@@ -562,9 +562,10 @@ static void acpi_battery_quirks(struct acpi_battery *battery) +@@ -605,9 +605,10 @@ static void acpi_battery_quirks2(struct acpi_battery *battery) } } @@ -31,24 +31,22 @@ index dc58402..69638c4 100644 result = acpi_battery_get_status(battery); if (result) return result; -@@ -587,6 +588,16 @@ static int acpi_battery_update(struct acpi_battery *battery) - if (!battery->bat.dev) +@@ -628,6 +629,14 @@ static int acpi_battery_update(struct acpi_battery *battery) sysfs_add_battery(battery); - #endif + result = acpi_battery_get_state(battery); + acpi_battery_quirks2(battery); + if (get_info) { + acpi_battery_get_info(battery); -+#ifdef CONFIG_ACPI_SYSFS_POWER + if (old_power_unit != battery->power_unit) { + /* The battery has changed its reporting units */ + sysfs_remove_battery(battery); + sysfs_add_battery(battery); + } -+#endif + } - return acpi_battery_get_state(battery); + return result; } -@@ -762,7 +773,7 @@ static print_func acpi_print_funcs[ACPI_BATTERY_NUMFILES] = { +@@ -803,7 +812,7 @@ static print_func acpi_print_funcs[ACPI_BATTERY_NUMFILES] = { static int acpi_battery_read(int fid, struct seq_file *seq) { struct acpi_battery *battery = seq->private; @@ -57,17 +55,17 @@ index dc58402..69638c4 100644 return acpi_print_funcs[fid](seq, result); } -@@ -877,7 +888,8 @@ static void acpi_battery_notify(struct acpi_device *device, u32 event) - #ifdef CONFIG_ACPI_SYSFS_POWER +@@ -914,7 +923,8 @@ static void acpi_battery_notify(struct acpi_device *device, u32 event) + if (!battery) + return; old = battery->bat.dev; - #endif - acpi_battery_update(battery); + acpi_battery_update(battery, (event == ACPI_BATTERY_NOTIFY_INFO ? true + : false)); acpi_bus_generate_proc_event(device, event, acpi_battery_present(battery)); acpi_bus_generate_netlink_event(device->pnp.device_class, -@@ -908,7 +920,7 @@ static int acpi_battery_add(struct acpi_device *device) +@@ -943,7 +953,7 @@ static int acpi_battery_add(struct acpi_device *device) if (ACPI_SUCCESS(acpi_get_handle(battery->device->handle, "_BIX", &handle))) set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags); @@ -76,7 +74,7 @@ index dc58402..69638c4 100644 #ifdef CONFIG_ACPI_PROCFS_POWER result = acpi_battery_add_fs(device); #endif -@@ -951,7 +963,7 @@ static int acpi_battery_resume(struct acpi_device *device) +@@ -984,7 +994,7 @@ static int acpi_battery_resume(struct acpi_device *device) return -EINVAL; battery = acpi_driver_data(device); battery->update_time = 0; @@ -85,12 +83,3 @@ index dc58402..69638c4 100644 return 0; } --- -1.7.2.1 - --- -To unsubscribe from this list: send the line "unsubscribe linux-kernel" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html -Please read the FAQ at http://www.tux.org/lkml/ - diff --git a/config-arm b/config-arm index b10eaf4..22335ef 100644 --- a/config-arm +++ b/config-arm @@ -127,3 +127,5 @@ CONFIG_PM_OPP=y CONFIG_SECCOMP=y CONFIG_STRICT_DEVMEM=y + +# CONFIG_AMBA_PL08X is not set diff --git a/config-debug b/config-debug index 1675f5c..5366a84 100644 --- a/config-debug +++ b/config-debug @@ -94,3 +94,6 @@ CONFIG_PCI_DEFAULT_USE_CRS=y CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y + +CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y +CONFIG_TEST_LIST_SORT=y diff --git a/config-generic b/config-generic index 3c3e260..a4ff8cf 100644 --- a/config-generic +++ b/config-generic @@ -119,12 +119,13 @@ CONFIG_PCMCIA_IOCTL=y CONFIG_PCCARD=y CONFIG_MMC=m -CONFIG_MMC_BLOCK_BOUNCE=y CONFIG_SDIO_UART=m # CONFIG_MMC_TEST is not set # CONFIG_MMC_DEBUG is not set # CONFIG_MMC_UNSAFE_RESUME is not set CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_BLOCK_BOUNCE=y CONFIG_MMC_SDHCI=m CONFIG_MMC_SDHCI_PCI=m CONFIG_MMC_SDRICOH_CS=m @@ -134,6 +135,7 @@ CONFIG_MMC_VIA_SDMMC=m CONFIG_MMC_SDHCI_PLTFM=m CONFIG_MMC_CB710=m CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_USHC=m CONFIG_CB710_CORE=m # CONFIG_CB710_DEBUG is not set @@ -1580,6 +1582,8 @@ CONFIG_CAN_EMS_USB=m CONFIG_CAN_ESD_USB2=m CONFIG_CAN_KVASER_PCI=m CONFIG_CAN_PLX_PCI=m +CONFIG_CAN_TSCAN1=m +CONFIG_PCH_CAN=m CONFIG_NETROM=m CONFIG_ROSE=m CONFIG_MKISS=m @@ -2062,6 +2066,7 @@ CONFIG_I2C_ALGOPCA=m # CONFIG_I2C_I801 is not set # CONFIG_I2C_ISCH is not set # CONFIG_I2C_NFORCE2_S4985 is not set +# CONFIG_I2C_INTEL_MID is not set CONFIG_EEPROM_AT24=m CONFIG_EEPROM_LEGACY=m @@ -2156,6 +2161,11 @@ CONFIG_SENSORS_SMSC47M192=m CONFIG_SENSORS_SMSC47B397=m CONFIG_SENSORS_THMC50=m CONFIG_SENSORS_TMP401=m +CONFIG_APDS9802ALS=m +CONFIG_ISL29020=m +CONFIG_ISL29003=m +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_APDS990X=m CONFIG_SENSORS_TSL2550=m CONFIG_SENSORS_VIA686A=m CONFIG_SENSORS_VIA_CPUTEMP=m @@ -2186,6 +2196,8 @@ CONFIG_SENSORS_LTC4261=m # CONFIG_SENSORS_SMM665 is not set # CONFIG_SENSORS_EMC2103 is not set # CONFIG_SENSORS_GPIO_FAN is not set +CONFIG_SENSORS_W83795=m +# CONFIG_SENSORS_W83795_FANCTRL is not set # CONFIG_HMC6352 is not set # CONFIG_BMP085 is not set @@ -2328,6 +2340,7 @@ CONFIG_AGP_VIA=y CONFIG_AGP_EFFICEON=y CONFIG_VGA_ARB=y CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_STUB_POULSBO=m CONFIG_DRM=m CONFIG_DRM_TDFX=m CONFIG_DRM_R128=m @@ -2386,7 +2399,8 @@ CONFIG_VIDEO_AU0828=m CONFIG_VIDEO_BT848=m CONFIG_VIDEO_BT848_DVB=y CONFIG_VIDEO_BWQCAM=m -# CONFIG_VIDEO_CAFE_CCIC is not set +CONFIG_VIDEO_SR030PC30=m +CONFIG_VIDEO_CAFE_CCIC=m # CONFIG_VIDEO_CPIA is not set CONFIG_VIDEO_CPIA2=m CONFIG_VIDEO_CQCAM=m @@ -2418,6 +2432,7 @@ CONFIG_VIDEO_SAA6588=m CONFIG_VIDEO_SAA7134=m CONFIG_VIDEO_SAA7134_ALSA=m CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7134_RC=y CONFIG_VIDEO_STRADIS=m CONFIG_VIDEO_USBVISION=m CONFIG_VIDEO_W9966=m @@ -2460,6 +2475,7 @@ CONFIG_MEDIA_TUNER_MXL5005S=m CONFIG_MEDIA_TUNER_MXL5007T=m CONFIG_MEDIA_TUNER_MC44S803=m CONFIG_MEDIA_TUNER_MAX2165=m +CONFIG_MEDIA_TUNER_TDA18218=m # # Digital Video Broadcasting Devices @@ -2499,6 +2515,8 @@ CONFIG_DVB_SP8870=m CONFIG_DVB_SP887X=m CONFIG_DVB_CX22700=m CONFIG_DVB_CX22702=m +CONFIG_DVB_S5H1432=m +CONFIG_DVB_IX2505V=m CONFIG_DVB_L64781=m CONFIG_DVB_NXT6000=m CONFIG_DVB_MT352=m @@ -2603,6 +2621,7 @@ CONFIG_DVB_USB_UMT_010=m CONFIG_DVB_USB_VP702X=m CONFIG_DVB_USB_VP7045=m CONFIG_DVB_USB_AZ6027=m +CONFIG_DVB_USB_LME2510=m CONFIG_DVB_PT1=m @@ -2624,9 +2643,11 @@ CONFIG_IR_RC5_DECODER=m CONFIG_IR_RC6_DECODER=m CONFIG_IR_JVC_DECODER=m CONFIG_IR_SONY_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m CONFIG_IR_LIRC_CODEC=m CONFIG_IR_IMON=m CONFIG_IR_MCEUSB=m +CONFIG_IR_NUVOTON=m CONFIG_V4L_MEM2MEM_DRIVERS=y # CONFIG_VIDEO_MEM2MEM_TESTDEV is not set @@ -3078,6 +3099,8 @@ CONFIG_USB_GSPCA_PAC7302=m CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GL860=m CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_KONICA=m +CONFIG_USB_GSPCA_XIRLINK_CIT=m CONFIG_USB_GSPCA_SPCA1528=m CONFIG_USB_GSPCA_SQ930X=m @@ -3093,6 +3116,7 @@ CONFIG_USB_SE401=m CONFIG_USB_ZR364XX=m CONFIG_SOC_CAMERA=m CONFIG_SOC_CAMERA_MT9M001=m +CONFIG_SOC_CAMERA_MT9M001=m CONFIG_SOC_CAMERA_MT9V022=m CONFIG_SOC_CAMERA_PLATFORM=m CONFIG_SOC_CAMERA_MT9M111=m @@ -3102,6 +3126,8 @@ CONFIG_SOC_CAMERA_OV772X=m CONFIG_SOC_CAMERA_MT9T112=m CONFIG_SOC_CAMERA_RJ54N1=m CONFIG_SOC_CAMERA_OV9640=m +CONFIG_SOC_CAMERA_OV6650=m +CONFIG_SOC_CAMERA_IMX074=m # # USB Network adaptors @@ -3306,6 +3332,7 @@ CONFIG_RTC_DRV_DS3232=m CONFIG_RTC_DRV_ISL12022=m CONFIG_MFD_SUPPORT=y +CONFIG_MFD_VX855=m CONFIG_MFD_SM501=m CONFIG_MFD_SM501_GPIO=y # CONFIG_MFD_TC6393XB is not set @@ -3326,6 +3353,7 @@ CONFIG_MFD_WM8400=m # CONFIG_ABX500_CORE is not set # CONFIG_MFD_RDC321X is not set # CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_WM831X_I2C is not set # # File systems @@ -3462,6 +3490,7 @@ CONFIG_UFS_FS=m # CONFIG_UFS_DEBUG is not set CONFIG_9P_FS=m CONFIG_9P_FSCACHE=y +CONFIG_9P_FS_POSIX_ACL=y CONFIG_FUSE_FS=m CONFIG_OMFS_FS=m CONFIG_CUSE=m @@ -3482,6 +3511,7 @@ CONFIG_NFSD_V4=y CONFIG_NFS_FSCACHE=y # CONFIG_NFS_USE_LEGACY_DNS is not set # CONFIG_NFS_USE_NEW_IDMAPPER is not set +# CONFIG_NFSD_DEPRECATED is not set CONFIG_LOCKD=m CONFIG_LOCKD_V4=y CONFIG_EXPORTFS=m @@ -4043,6 +4073,8 @@ CONFIG_APM_POWER=m CONFIG_WM831X_POWER=m # CONFIG_BATTERY_DS2760 is not set # CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_BQ20Z75 is not set +# CONFIG_CHARGER_ISP1704 is not set CONFIG_BATTERY_PMU=m CONFIG_BATTERY_BQ27x00=m CONFIG_BATTERY_MAX17040=m @@ -4107,7 +4139,6 @@ CONFIG_INPUT_APANEL=m # CONFIG_INTEL_MENLOW is not set CONFIG_ENCLOSURE_SERVICES=m -CONFIG_ISL29003=m CONFIG_IPWIRELESS=m CONFIG_RTC_DRV_DS1511=m @@ -4236,6 +4267,13 @@ CONFIG_USB_ATMEL=m # CONFIG_EASYCAP is not set # CONFIG_SOLO6X10 is not set # CONFIG_ACPI_QUICKSTART is not set +# CONFIG_BRCM80211 is not set +# CONFIG_R8712U is not set +# CONFIG_ATH6K_LEGACY is not set +# CONFIG_USB_ENESTORAGE is not set +# CONFIG_BCM_WIMAX is not set +# CONFIG_FT1000 is not set +# CONFIG_SPEAKUP is not set # # Android @@ -4357,7 +4395,9 @@ CONFIG_GPIO_SYSFS=y # CONFIG_GPIO_SCH is not set # CONFIG_GPIO_LANGWELL is not set # CONFIG_GPIO_RDC321X is not set - +# CONFIG_GPIO_BASIC_MMIO is not set +# CONFIG_GPIO_VX855 is not set +# CONFIG_GPIO_PCH is not set CONFIG_KSYM_TRACER=y CONFIG_PROFILE_KSYM_TRACER=y @@ -4377,3 +4417,5 @@ CONFIG_IR_STREAMZAP=m CONFIG_SPARSE_RCU_POINTER=y # CONFIG_PM_OPP is not set + +CONFIG_BKL=y diff --git a/config-nodebug b/config-nodebug index 4e5e220..ab9c209 100644 --- a/config-nodebug +++ b/config-nodebug @@ -94,3 +94,6 @@ CONFIG_PCI_DEFAULT_USE_CRS=y CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y + +CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y +CONFIG_TEST_LIST_SORT=y diff --git a/config-s390x b/config-s390x index 729131a..148ee55 100644 --- a/config-s390x +++ b/config-s390x @@ -229,4 +229,5 @@ CONFIG_VMCP=y CONFIG_ZFCP_DIF=y +CONFIG_SCHED_MC=y CONFIG_SCHED_BOOK=y diff --git a/config-sparc64-generic b/config-sparc64-generic index 1d21fa7..61612cb 100644 --- a/config-sparc64-generic +++ b/config-sparc64-generic @@ -201,3 +201,5 @@ CONFIG_GRETH=m CONFIG_FB_XVR1000=y CONFIG_CRYPTO_DEV_NIAGARA2=y + +CONFIG_JUMP_LABEL=y diff --git a/config-x86-generic b/config-x86-generic index 8f19cd3..68bd39b 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -370,6 +370,7 @@ CONFIG_XEN_FBDEV_FRONTEND=y CONFIG_XEN_KBDDEV_FRONTEND=y CONFIG_XEN_BLKDEV_FRONTEND=m CONFIG_XEN_NETDEV_FRONTEND=m +CONFIG_XEN_PCIDEV_FRONTEND=m CONFIG_XENFS=m CONFIG_XEN_COMPAT_XENFS=y @@ -475,7 +476,7 @@ CONFIG_SBC_FITPC2_WATCHDOG=m CONFIG_EDAC_I3200=m CONFIG_EDAC_DECODE_MCE=m -CONFIG_GPIO_LANGWELL=y +# CONFIG_GPIO_LANGWELL is not set # CONFIG_INTEL_TXT is not set @@ -515,6 +516,7 @@ CONFIG_INTEL_IPS=m CONFIG_OLPC_XO1=m CONFIG_XO1_RFKILL=m +CONFIG_VIDEO_VIA_CAMERA=m CONFIG_EDAC_MCE_INJ=m CONFIG_IRQ_TIME_ACCOUNTING=y @@ -522,3 +524,5 @@ CONFIG_X86_RESERVE_LOW=64 CONFIG_PCH_GBE=m CONFIG_PCH_PHUB=m + +CONFIG_JUMP_LABEL=y diff --git a/config-x86_64-generic b/config-x86_64-generic index caad92a..a521b72 100644 --- a/config-x86_64-generic +++ b/config-x86_64-generic @@ -299,6 +299,7 @@ CONFIG_XEN_FBDEV_FRONTEND=y CONFIG_XEN_KBDDEV_FRONTEND=y CONFIG_XEN_BLKDEV_FRONTEND=m CONFIG_XEN_NETDEV_FRONTEND=m +CONFIG_XEN_PCIDEV_FRONTEND=m CONFIG_XENFS=m CONFIG_XEN_COMPAT_XENFS=y CONFIG_XEN_DEV_EVTCHN=m @@ -432,3 +433,7 @@ CONFIG_X86_RESERVE_LOW=64 CONFIG_PCH_GBE=m CONFIG_PCH_PHUB=m + +CONFIG_VIDEO_VIA_CAMERA=m + +CONFIG_JUMP_LABEL=y diff --git a/drm-intel-big-hammer.patch b/drm-intel-big-hammer.patch index 63dc016..97bb2e8 100644 --- a/drm-intel-big-hammer.patch +++ b/drm-intel-big-hammer.patch @@ -1,16 +1,21 @@ +omgwtfbbqchainsaw? +--- + drivers/gpu/drm/i915/i915_gem.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c -index 37427e4..08af9db 100644 +index 8eb8453..36fa9d7 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c -@@ -2553,6 +2553,11 @@ i915_gem_execbuffer(struct drm_device *dev, void *data, - - mutex_lock(&dev->struct_mutex); +@@ -3692,6 +3692,11 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, + if (ret) + goto pre_mutex_err; + /* We don't get the flushing right for these chipsets, use the -+ * big hamer for now to avoid random crashiness. */ ++ * big hammer for now to avoid random crashiness. */ + if (IS_I85X(dev) || IS_I865G(dev)) + wbinvd(); + - i915_verify_inactive(dev, __FILE__, __LINE__); - - if (dev_priv->mm.wedged) { + if (dev_priv->mm.suspended) { + mutex_unlock(&dev->struct_mutex); + ret = -EBUSY; diff --git a/drm-intel-make-lvds-work.patch b/drm-intel-make-lvds-work.patch index 5ca0152..209deb2 100644 --- a/drm-intel-make-lvds-work.patch +++ b/drm-intel-make-lvds-work.patch @@ -1,19 +1,23 @@ -diff -up linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c.orig linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c ---- linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c.orig 2010-03-31 16:59:39.901995671 -0400 -+++ linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c 2010-03-31 17:01:05.416996744 -0400 -@@ -3757,7 +3757,6 @@ struct drm_crtc *intel_get_load_detect_p - void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, int dpms_mode) + drivers/gpu/drm/i915/intel_display.c | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 990f065..171a797 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -4568,7 +4568,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, + struct drm_connector *connector, int dpms_mode) { - struct drm_encoder *encoder = &intel_encoder->enc; + struct drm_encoder *encoder = &intel_encoder->base; - struct drm_device *dev = encoder->dev; struct drm_crtc *crtc = encoder->crtc; struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; -@@ -3767,7 +3766,6 @@ void intel_release_load_detect_pipe(stru - intel_encoder->base.encoder = NULL; +@@ -4578,7 +4577,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, + connector->encoder = NULL; intel_encoder->load_detect_temp = false; crtc->enabled = drm_helper_crtc_in_use(crtc); - drm_helper_disable_unused_functions(dev); } - /* Switch crtc and output back off if necessary */ + /* Switch crtc and encoder back off if necessary */ diff --git a/hdpvr-ir-enable.patch b/hdpvr-ir-enable.patch index 787c8f8..f377d6b 100644 --- a/hdpvr-ir-enable.patch +++ b/hdpvr-ir-enable.patch @@ -110,7 +110,7 @@ index 463b81b..60cdc06 100644 msgs[i].len); } -@@ -115,31 +120,59 @@ static struct i2c_algorithm hdpvr_algo = { +@@ -115,30 +120,58 @@ static struct i2c_algorithm hdpvr_algo = { .functionality = hdpvr_functionality, }; @@ -119,7 +119,6 @@ index 463b81b..60cdc06 100644 + .owner = THIS_MODULE, + .id = I2C_HW_B_HDPVR, + .algo = &hdpvr_algo, -+ .class = I2C_CLASS_TV_ANALOG, +}; + +static struct i2c_board_info hdpvr_i2c_board_info = { @@ -160,7 +159,6 @@ index 463b81b..60cdc06 100644 - strlcpy(i2c_adap->name, "Hauppauge HD PVR I2C", - sizeof(i2c_adap->name)); - i2c_adap->algo = &hdpvr_algo; -- i2c_adap->class = I2C_CLASS_TV_ANALOG; - i2c_adap->owner = THIS_MODULE; - i2c_adap->dev.parent = &dev->udev->dev; + memcpy(&dev->i2c_adapter, &hdpvr_i2c_adapter_template, diff --git a/kernel.spec b/kernel.spec index e8a00a2..f8c30f6 100644 --- a/kernel.spec +++ b/kernel.spec @@ -82,9 +82,9 @@ Summary: The Linux kernel # The next upstream release sublevel (base_sublevel+1) %define upstream_sublevel %(echo $((%{base_sublevel} + 1))) # The rc snapshot level -%define rcrev 0 +%define rcrev 1 # The git snapshot level -%define gitrev 8 +%define gitrev 0 # Set rpm version accordingly %define rpmversion 2.6.%{upstream_sublevel} %endif @@ -698,15 +698,10 @@ Patch12030: tpm-fix-stall-on-boot.patch # Runtime power management Patch12200: linux-2.6-bluetooth-autosuspend.patch -Patch12201: linux-2.6-uvc-autosuspend.patch Patch12203: linux-2.6-usb-pci-autosuspend.patch Patch12204: linux-2.6-enable-more-pci-autosuspend.patch Patch12205: runtime_pm_fixups.patch -Patch12225: pci-crs-fixes.patch - -Patch12302: pnpacpi-cope-with-invalid-device-ids.patch - Patch12303: dmar-disable-when-ricoh-multifunction.patch %endif @@ -1127,7 +1122,7 @@ ApplyPatch linux-2.6-hotfixes.patch # Roland's utrace ptrace replacement. ApplyPatch linux-2.6-tracehook.patch ApplyPatch linux-2.6-utrace.patch -ApplyPatch linux-2.6-utrace-ptrace.patch +#ApplyPatch linux-2.6-utrace-ptrace.patch # Architecture patches # x86(-64) @@ -1193,7 +1188,7 @@ ApplyPatch linux-2.6-defaults-pci_use_crs.patch # enable ASPM by default on hardware we expect to work ApplyPatch linux-2.6-defaults-aspm.patch -ApplyPatch ima-allow-it-to-be-completely-disabled-and-default-off.patch +#ApplyPatch ima-allow-it-to-be-completely-disabled-and-default-off.patch # # SCSI Bits. @@ -1291,18 +1286,10 @@ ApplyPatch tpm-fix-stall-on-boot.patch # Runtime PM ApplyPatch linux-2.6-bluetooth-autosuspend.patch -ApplyPatch linux-2.6-uvc-autosuspend.patch ApplyPatch linux-2.6-usb-pci-autosuspend.patch ApplyPatch linux-2.6-enable-more-pci-autosuspend.patch ApplyPatch runtime_pm_fixups.patch -# PCI patches to fix problems with _CRS -# ( from linux-pci list ) -ApplyPatch pci-crs-fixes.patch - -# rhbz#641468 -ApplyPatch pnpacpi-cope-with-invalid-device-ids.patch - # rhbz#605888 ApplyPatch dmar-disable-when-ricoh-multifunction.patch @@ -1913,6 +1900,9 @@ fi # || || %changelog +* Tue Nov 02 2010 Kyle McMartin 2.6.37-0.1.rc1.git0 +- Linux 2.6.37-rc1 + * Tue Oct 26 2010 Kyle McMartin 2.6.37-0.1.rc0.git8 - Linux 2.6.36-git8 diff --git a/linux-2.6-32bit-mmap-exec-randomization.patch b/linux-2.6-32bit-mmap-exec-randomization.patch index fe91e0a..d42638c 100644 --- a/linux-2.6-32bit-mmap-exec-randomization.patch +++ b/linux-2.6-32bit-mmap-exec-randomization.patch @@ -14,9 +14,9 @@ --- b/mm/mmap.c +++ b/mm/mmap.c @@ -28,6 +28,7 @@ - #include #include #include + #include +#include #include diff --git a/linux-2.6-enable-more-pci-autosuspend.patch b/linux-2.6-enable-more-pci-autosuspend.patch index b1f92b1..666ded6 100644 --- a/linux-2.6-enable-more-pci-autosuspend.patch +++ b/linux-2.6-enable-more-pci-autosuspend.patch @@ -1,7 +1,20 @@ -diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/aclocal.h.mjg linux-2.6.35.x86_64/drivers/acpi/acpica/aclocal.h ---- linux-2.6.35.x86_64/drivers/acpi/acpica/aclocal.h.mjg 2010-10-04 13:52:05.086789354 -0400 -+++ linux-2.6.35.x86_64/drivers/acpi/acpica/aclocal.h 2010-10-04 13:52:50.948801001 -0400 -@@ -406,16 +406,15 @@ struct acpi_predefined_data { + drivers/acpi/acpica/aclocal.h | 7 +-- + drivers/acpi/acpica/evgpe.c | 75 +++++++++++++++----------------- + drivers/acpi/acpica/evgpeinit.c | 11 +---- + drivers/acpi/acpica/evgpeutil.c | 5 +- + drivers/acpi/acpica/evxface.c | 23 +++++----- + drivers/acpi/ec.c | 2 +- + drivers/acpi/pci_bind.c | 86 ++++++++++++++++++++++++++++++++++++++ + drivers/acpi/sleep.c | 2 +- + drivers/char/ipmi/ipmi_si_intf.c | 2 +- + include/acpi/acpixf.h | 3 +- + 10 files changed, 143 insertions(+), 73 deletions(-) + +diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h +index 2ceb0c0..3663362 100644 +--- a/drivers/acpi/acpica/aclocal.h ++++ b/drivers/acpi/acpica/aclocal.h +@@ -406,17 +406,16 @@ struct acpi_predefined_data { * ****************************************************************************/ @@ -13,6 +26,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/aclocal.h.mjg linux-2.6.35.x86_ void *context; /* Context to be passed to handler */ - struct acpi_namespace_node *method_node; /* Method node for this GPE level (saved) */ u8 orig_flags; /* Original misc info about this GPE */ + u8 orig_enabled; /* Set if the GPE was originally enabled */ }; -union acpi_gpe_dispatch_info { @@ -20,7 +34,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/aclocal.h.mjg linux-2.6.35.x86_ struct acpi_namespace_node *method_node; /* Method node for this GPE level */ struct acpi_handler_info *handler; }; -@@ -425,7 +424,7 @@ union acpi_gpe_dispatch_info { +@@ -426,7 +425,7 @@ union acpi_gpe_dispatch_info { * NOTE: Important to keep this struct as small as possible. */ struct acpi_gpe_event_info { @@ -29,10 +43,11 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/aclocal.h.mjg linux-2.6.35.x86_ struct acpi_gpe_register_info *register_info; /* Backpointer to register info */ u8 flags; /* Misc info about this GPE */ u8 gpe_number; /* This GPE */ -diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c.mjg linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c ---- linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c.mjg 2010-10-04 13:52:05.088789399 -0400 -+++ linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c 2010-10-04 13:52:50.950801045 -0400 -@@ -474,9 +474,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_as +diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c +index f226eac..c4b1c4c 100644 +--- a/drivers/acpi/acpica/evgpe.c ++++ b/drivers/acpi/acpica/evgpe.c +@@ -474,9 +474,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context) * Must check for control method type dispatch one more time to avoid a * race with ev_gpe_install_handler */ @@ -43,7 +58,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c.mjg linux-2.6.35.x86_64 /* Allocate the evaluation information block */ info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info)); -@@ -575,41 +573,15 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_eve +@@ -575,41 +573,15 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number) } /* @@ -93,7 +108,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c.mjg linux-2.6.35.x86_64 /* * Disable the GPE, so it doesn't keep firing before the method has a * chance to run (it runs asynchronously with interrupts enabled). -@@ -634,10 +606,34 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_eve +@@ -634,10 +606,34 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number) "Unable to queue handler for GPE[0x%2X] - event disabled", gpe_number)); } @@ -111,7 +126,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c.mjg linux-2.6.35.x86_64 + dispatch. + handler-> + context); -+ + + /* It is now safe to clear level-triggered events. */ + + if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) == @@ -125,12 +140,12 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c.mjg linux-2.6.35.x86_64 + } + } + } - ++ + if (!(gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK)) { /* * No handler or method to run! * 03/2010: This case should no longer be possible. We will not allow -@@ -658,7 +654,6 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_eve +@@ -658,7 +654,6 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number) gpe_number)); return_UINT32(ACPI_INTERRUPT_NOT_HANDLED); } @@ -138,10 +153,11 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpe.c.mjg linux-2.6.35.x86_64 } return_UINT32(ACPI_INTERRUPT_HANDLED); -diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeinit.c.mjg linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeinit.c ---- linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeinit.c.mjg 2010-10-04 13:52:05.089789421 -0400 -+++ linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeinit.c 2010-10-04 13:52:50.951801067 -0400 -@@ -392,16 +392,7 @@ acpi_ev_match_gpe_method(acpi_handle obj +diff --git a/drivers/acpi/acpica/evgpeinit.c b/drivers/acpi/acpica/evgpeinit.c +index 2c7def9..9915b52 100644 +--- a/drivers/acpi/acpica/evgpeinit.c ++++ b/drivers/acpi/acpica/evgpeinit.c +@@ -386,16 +386,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle, return_ACPI_STATUS(AE_OK); } @@ -159,10 +175,11 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeinit.c.mjg linux-2.6.35.x8 /* * If there is already a method, ignore this method. But check * for a type mismatch (if both the _Lxx AND _Exx exist) -diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeutil.c.mjg linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeutil.c ---- linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeutil.c.mjg 2010-10-04 13:52:05.090789443 -0400 -+++ linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeutil.c 2010-10-04 13:52:50.952801089 -0400 -@@ -323,12 +323,11 @@ acpi_ev_delete_gpe_handlers(struct acpi_ +diff --git a/drivers/acpi/acpica/evgpeutil.c b/drivers/acpi/acpica/evgpeutil.c +index 19a0e51..434ad1b 100644 +--- a/drivers/acpi/acpica/evgpeutil.c ++++ b/drivers/acpi/acpica/evgpeutil.c +@@ -323,12 +323,11 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info, ACPI_GPE_REGISTER_WIDTH) + j]; @@ -177,10 +194,11 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evgpeutil.c.mjg linux-2.6.35.x8 } } } -diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c ---- linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg 2010-10-04 13:52:05.092789487 -0400 -+++ linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c 2010-10-04 13:52:50.954801133 -0400 -@@ -662,6 +662,8 @@ ACPI_EXPORT_SYMBOL(acpi_remove_notify_ha +diff --git a/drivers/acpi/acpica/evxface.c b/drivers/acpi/acpica/evxface.c +index 36af222..b097136 100644 +--- a/drivers/acpi/acpica/evxface.c ++++ b/drivers/acpi/acpica/evxface.c +@@ -662,6 +662,8 @@ ACPI_EXPORT_SYMBOL(acpi_remove_notify_handler) * edge- or level-triggered interrupt. * Address - Address of the handler * Context - Value passed to the handler on each GPE @@ -189,7 +207,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg linux-2.6.35.x86_ * * RETURN: Status * -@@ -671,7 +673,8 @@ ACPI_EXPORT_SYMBOL(acpi_remove_notify_ha +@@ -671,7 +673,8 @@ ACPI_EXPORT_SYMBOL(acpi_remove_notify_handler) acpi_status acpi_install_gpe_handler(acpi_handle gpe_device, u32 gpe_number, @@ -199,7 +217,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg linux-2.6.35.x86_ { struct acpi_gpe_event_info *gpe_event_info; struct acpi_handler_info *handler; -@@ -711,8 +714,7 @@ acpi_install_gpe_handler(acpi_handle gpe +@@ -711,8 +714,7 @@ acpi_install_gpe_handler(acpi_handle gpe_device, /* Make sure that there isn't a handler there already */ @@ -209,7 +227,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg linux-2.6.35.x86_ status = AE_ALREADY_EXISTS; goto free_and_exit; } -@@ -721,7 +723,6 @@ acpi_install_gpe_handler(acpi_handle gpe +@@ -721,7 +723,6 @@ acpi_install_gpe_handler(acpi_handle gpe_device, handler->address = address; handler->context = context; @@ -217,15 +235,16 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg linux-2.6.35.x86_ handler->orig_flags = gpe_event_info->flags & (ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK); -@@ -733,17 +734,17 @@ acpi_install_gpe_handler(acpi_handle gpe +@@ -732,7 +733,7 @@ acpi_install_gpe_handler(acpi_handle gpe_device, */ if ((handler->orig_flags & ACPI_GPE_DISPATCH_METHOD) -- && !(gpe_event_info->flags & ACPI_GPE_CAN_WAKE)) -+ && !(gpe_event_info->flags & ACPI_GPE_CAN_WAKE) && !keep_method) +- && gpe_event_info->runtime_count) { ++ && gpe_event_info->runtime_count && !keep_method) { + handler->orig_enabled = 1; (void)acpi_raw_disable_gpe(gpe_event_info); - - /* Install the handler */ + } +@@ -741,10 +742,10 @@ acpi_install_gpe_handler(acpi_handle gpe_device, gpe_event_info->dispatch.handler = handler; @@ -239,7 +258,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg linux-2.6.35.x86_ gpe_event_info->flags |= (u8) (type | ACPI_GPE_DISPATCH_HANDLER); acpi_os_release_lock(acpi_gbl_gpe_lock, flags); -@@ -812,8 +813,7 @@ acpi_remove_gpe_handler(acpi_handle gpe_ +@@ -813,8 +814,7 @@ acpi_remove_gpe_handler(acpi_handle gpe_device, /* Make sure that a handler is indeed installed */ @@ -249,7 +268,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg linux-2.6.35.x86_ status = AE_NOT_EXIST; goto unlock_and_exit; } -@@ -829,9 +829,8 @@ acpi_remove_gpe_handler(acpi_handle gpe_ +@@ -830,9 +830,8 @@ acpi_remove_gpe_handler(acpi_handle gpe_device, handler = gpe_event_info->dispatch.handler; @@ -260,10 +279,11 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/acpica/evxface.c.mjg linux-2.6.35.x86_ gpe_event_info->flags &= ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK); gpe_event_info->flags |= handler->orig_flags; -diff -up linux-2.6.35.x86_64/drivers/acpi/ec.c.mjg linux-2.6.35.x86_64/drivers/acpi/ec.c ---- linux-2.6.35.x86_64/drivers/acpi/ec.c.mjg 2010-10-04 13:52:05.094789531 -0400 -+++ linux-2.6.35.x86_64/drivers/acpi/ec.c 2010-10-04 13:52:50.955801156 -0400 -@@ -746,7 +746,7 @@ static int ec_install_handlers(struct ac +diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c +index 372ff80..9a39f82 100644 +--- a/drivers/acpi/ec.c ++++ b/drivers/acpi/ec.c +@@ -740,7 +740,7 @@ static int ec_install_handlers(struct acpi_ec *ec) return 0; status = acpi_install_gpe_handler(NULL, ec->gpe, ACPI_GPE_EDGE_TRIGGERED, @@ -272,9 +292,10 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/ec.c.mjg linux-2.6.35.x86_64/drivers/a if (ACPI_FAILURE(status)) return -ENODEV; -diff -up linux-2.6.35.x86_64/drivers/acpi/pci_bind.c.mjg linux-2.6.35.x86_64/drivers/acpi/pci_bind.c ---- linux-2.6.35.x86_64/drivers/acpi/pci_bind.c.mjg 2010-10-04 13:52:05.102789707 -0400 -+++ linux-2.6.35.x86_64/drivers/acpi/pci_bind.c 2010-10-04 13:52:50.962801311 -0400 +diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c +index 2ef0409..8b3cc6a 100644 +--- a/drivers/acpi/pci_bind.c ++++ b/drivers/acpi/pci_bind.c @@ -28,6 +28,7 @@ #include #include @@ -327,7 +348,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/pci_bind.c.mjg linux-2.6.35.x86_64/dri static int acpi_pci_unbind(struct acpi_device *device) { struct pci_dev *dev; -@@ -43,6 +81,30 @@ static int acpi_pci_unbind(struct acpi_d +@@ -43,6 +81,30 @@ static int acpi_pci_unbind(struct acpi_device *device) if (!dev) goto out; @@ -358,7 +379,7 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/pci_bind.c.mjg linux-2.6.35.x86_64/dri device_set_run_wake(&dev->dev, false); pci_acpi_remove_pm_notifier(device); -@@ -71,6 +133,30 @@ static int acpi_pci_bind(struct acpi_dev +@@ -71,6 +133,30 @@ static int acpi_pci_bind(struct acpi_device *device) return 0; pci_acpi_add_pm_notifier(device, dev); @@ -389,25 +410,24 @@ diff -up linux-2.6.35.x86_64/drivers/acpi/pci_bind.c.mjg linux-2.6.35.x86_64/dri if (device->wakeup.flags.run_wake) device_set_run_wake(&dev->dev, true); -diff -up linux-2.6.35.x86_64/drivers/acpi/sleep.c.mjg linux-2.6.35.x86_64/drivers/acpi/sleep.c ---- linux-2.6.35.x86_64/drivers/acpi/sleep.c.mjg 2010-10-04 13:52:05.103789729 -0400 -+++ linux-2.6.35.x86_64/drivers/acpi/sleep.c 2010-10-04 13:52:50.963801333 -0400 -@@ -631,9 +631,9 @@ int acpi_pm_device_sleep_state(struct de - acpi_method[3] = 'W'; - status = acpi_evaluate_integer(handle, acpi_method, NULL, - &d_max); -- if (ACPI_FAILURE(status)) { -+ if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { - d_max = d_min; +diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c +index 721d93b..b0ddef6 100644 +--- a/drivers/acpi/sleep.c ++++ b/drivers/acpi/sleep.c +@@ -643,7 +643,7 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p) + if (acpi_target_sleep_state != ACPI_STATE_S0 || + status != AE_NOT_FOUND) + d_max = d_min; - } else if (d_max < d_min) { + } else if (ACPI_SUCCESS(status) && d_max < d_min) { /* Warn the user of the broken DSDT */ printk(KERN_WARNING "ACPI: Wrong value from %s\n", acpi_method); -diff -up linux-2.6.35.x86_64/drivers/char/ipmi/ipmi_si_intf.c.mjg linux-2.6.35.x86_64/drivers/char/ipmi/ipmi_si_intf.c ---- linux-2.6.35.x86_64/drivers/char/ipmi/ipmi_si_intf.c.mjg 2010-10-04 13:52:05.097789597 -0400 -+++ linux-2.6.35.x86_64/drivers/char/ipmi/ipmi_si_intf.c 2010-10-04 13:52:50.958801223 -0400 -@@ -1959,7 +1959,7 @@ static int acpi_gpe_irq_setup(struct smi +diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c +index 035da9e..62a48b2 100644 +--- a/drivers/char/ipmi/ipmi_si_intf.c ++++ b/drivers/char/ipmi/ipmi_si_intf.c +@@ -1970,7 +1970,7 @@ static int acpi_gpe_irq_setup(struct smi_info *info) info->irq, ACPI_GPE_LEVEL_TRIGGERED, &ipmi_acpi_gpe, @@ -416,126 +436,11 @@ diff -up linux-2.6.35.x86_64/drivers/char/ipmi/ipmi_si_intf.c.mjg linux-2.6.35.x if (status != AE_OK) { dev_warn(info->dev, "%s unable to claim ACPI GPE %d," " running polled\n", DEVICE_NAME, info->irq); -diff -up linux-2.6.35.x86_64/drivers/pci/pci.c.mjg linux-2.6.35.x86_64/drivers/pci/pci.c ---- linux-2.6.35.x86_64/drivers/pci/pci.c.mjg 2010-10-04 13:52:05.105789773 -0400 -+++ linux-2.6.35.x86_64/drivers/pci/pci.c 2010-10-04 13:52:50.965801377 -0400 -@@ -38,6 +38,19 @@ EXPORT_SYMBOL(pci_pci_problems); - - unsigned int pci_pm_d3_delay; - -+static void pci_pme_list_scan(struct work_struct *work); -+ -+static LIST_HEAD(pci_pme_list); -+static DEFINE_MUTEX(pci_pme_list_mutex); -+static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan); -+ -+struct pci_pme_device { -+ struct list_head list; -+ struct pci_dev *dev; -+}; -+ -+#define PME_TIMEOUT 1000 /* How long between PME checks */ -+ - static void pci_dev_d3_sleep(struct pci_dev *dev) - { - unsigned int delay = dev->d3_delay; -@@ -1331,6 +1344,32 @@ bool pci_pme_capable(struct pci_dev *dev - return !!(dev->pme_support & (1 << state)); - } - -+static void pci_pme_list_scan(struct work_struct *work) -+{ -+ struct pci_pme_device *pme_dev; -+ -+ mutex_lock(&pci_pme_list_mutex); -+ if (!list_empty(&pci_pme_list)) { -+ list_for_each_entry(pme_dev, &pci_pme_list, list) -+ pci_pme_wakeup(pme_dev->dev, NULL); -+ schedule_delayed_work(&pci_pme_work, msecs_to_jiffies(PME_TIMEOUT)); -+ } -+ mutex_unlock(&pci_pme_list_mutex); -+} -+ -+/** -+ * pci_external_pme - is a device an external PCI PME source? -+ * @dev: PCI device to check -+ * -+ */ -+ -+static bool pci_external_pme(struct pci_dev *dev) -+{ -+ if (pci_is_pcie(dev) || dev->bus->number == 0) -+ return false; -+ return true; -+} -+ - /** - * pci_pme_active - enable or disable PCI device's PME# function - * @dev: PCI device to handle. -@@ -1354,6 +1393,44 @@ void pci_pme_active(struct pci_dev *dev, - - pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr); - -+ /* PCI (as opposed to PCIe) PME requires that the device have -+ its PME# line hooked up correctly. Not all hardware vendors -+ do this, so the PME never gets delivered and the device -+ remains asleep. The easiest way around this is to -+ periodically walk the list of suspended devices and check -+ whether any have their PME flag set. The assumption is that -+ we'll wake up often enough anyway that this won't be a huge -+ hit, and the power savings from the devices will still be a -+ win. */ -+ -+ if (pci_external_pme(dev)) { -+ struct pci_pme_device *pme_dev; -+ if (enable) { -+ pme_dev = kmalloc(sizeof(struct pci_pme_device), -+ GFP_KERNEL); -+ if (!pme_dev) -+ goto out; -+ pme_dev->dev = dev; -+ mutex_lock(&pci_pme_list_mutex); -+ list_add(&pme_dev->list, &pci_pme_list); -+ if (list_is_singular(&pci_pme_list)) -+ schedule_delayed_work(&pci_pme_work, -+ msecs_to_jiffies(PME_TIMEOUT)); -+ mutex_unlock(&pci_pme_list_mutex); -+ } else { -+ mutex_lock(&pci_pme_list_mutex); -+ list_for_each_entry(pme_dev, &pci_pme_list, list) { -+ if (pme_dev->dev == dev) { -+ list_del(&pme_dev->list); -+ kfree(pme_dev); -+ break; -+ } -+ } -+ mutex_unlock(&pci_pme_list_mutex); -+ } -+ } -+ -+out: - dev_printk(KERN_DEBUG, &dev->dev, "PME# %s\n", - enable ? "enabled" : "disabled"); - } -diff -up linux-2.6.35.x86_64/drivers/pci/pci.h.mjg linux-2.6.35.x86_64/drivers/pci/pci.h ---- linux-2.6.35.x86_64/drivers/pci/pci.h.mjg 2010-10-04 13:52:05.100789663 -0400 -+++ linux-2.6.35.x86_64/drivers/pci/pci.h 2010-10-04 13:52:50.960801267 -0400 -@@ -63,11 +63,8 @@ struct pci_platform_pm_ops { - extern int pci_set_platform_pm(struct pci_platform_pm_ops *ops); - extern void pci_update_current_state(struct pci_dev *dev, pci_power_t state); - extern void pci_disable_enabled_device(struct pci_dev *dev); --extern bool pci_check_pme_status(struct pci_dev *dev); - extern int pci_finish_runtime_suspend(struct pci_dev *dev); --extern void pci_wakeup_event(struct pci_dev *dev); - extern int __pci_pme_wakeup(struct pci_dev *dev, void *ign); --extern void pci_pme_wakeup_bus(struct pci_bus *bus); - extern void pci_pm_init(struct pci_dev *dev); - extern void platform_pci_wakeup_init(struct pci_dev *dev); - extern void pci_allocate_cap_save_buffers(struct pci_dev *dev); -diff -up linux-2.6.35.x86_64/include/acpi/acpixf.h.mjg linux-2.6.35.x86_64/include/acpi/acpixf.h ---- linux-2.6.35.x86_64/include/acpi/acpixf.h.mjg 2010-10-04 13:52:05.099789641 -0400 -+++ linux-2.6.35.x86_64/include/acpi/acpixf.h 2010-10-04 13:52:50.959801245 -0400 -@@ -253,7 +253,8 @@ acpi_remove_address_space_handler(acpi_h +diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h +index 53b7cfd..740eb7e 100644 +--- a/include/acpi/acpixf.h ++++ b/include/acpi/acpixf.h +@@ -258,7 +258,8 @@ acpi_remove_address_space_handler(acpi_handle device, acpi_status acpi_install_gpe_handler(acpi_handle gpe_device, u32 gpe_number, @@ -545,16 +450,3 @@ diff -up linux-2.6.35.x86_64/include/acpi/acpixf.h.mjg linux-2.6.35.x86_64/inclu acpi_status acpi_remove_gpe_handler(acpi_handle gpe_device, -diff -up linux-2.6.35.x86_64/include/linux/pci.h.mjg linux-2.6.35.x86_64/include/linux/pci.h ---- linux-2.6.35.x86_64/include/linux/pci.h.mjg 2010-10-04 13:52:05.101789685 -0400 -+++ linux-2.6.35.x86_64/include/linux/pci.h 2010-10-04 13:52:50.962801311 -0400 -@@ -819,6 +819,9 @@ pci_power_t pci_target_state(struct pci_ - int pci_prepare_to_sleep(struct pci_dev *dev); - int pci_back_from_sleep(struct pci_dev *dev); - bool pci_dev_run_wake(struct pci_dev *dev); -+bool pci_check_pme_status(struct pci_dev *dev); -+void pci_wakeup_event(struct pci_dev *dev); -+void pci_pme_wakeup_bus(struct pci_bus *bus); - - static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, - bool enable) diff --git a/linux-2.6-uvc-autosuspend.patch b/linux-2.6-uvc-autosuspend.patch deleted file mode 100644 index 6c965c6..0000000 --- a/linux-2.6-uvc-autosuspend.patch +++ /dev/null @@ -1,22 +0,0 @@ -commit 4a3757e0ae269f710292dd75013532c5a57ccb00 -Author: Matthew Garrett -Date: Thu Sep 16 13:38:38 2010 -0400 - - uvc: Enable USB autosuspend by default on uvcvideo - - We've been doing this for a while in Fedora without any complaints. - - Signed-off-by: Matthew Garrett - -diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c -index 8bdd940..28ed5b4 100644 ---- a/drivers/media/video/uvc/uvc_driver.c -+++ b/drivers/media/video/uvc/uvc_driver.c -@@ -1814,6 +1814,7 @@ static int uvc_probe(struct usb_interface *intf, - } - - uvc_trace(UVC_TRACE_PROBE, "UVC device initialized.\n"); -+ usb_enable_autosuspend(udev); - return 0; - - error: diff --git a/pci-crs-fixes.patch b/pci-crs-fixes.patch deleted file mode 100644 index b4fd015..0000000 --- a/pci-crs-fixes.patch +++ /dev/null @@ -1,593 +0,0 @@ - This revision is to address two problems found by Horst H. von Brand while - testing the v2 patches in Fedora: - https://bugzilla.redhat.com/show_bug.cgi?id=637647 - On his machine, we don't use _CRS by default, and the BIOS left some bridge - windows disabled. - - Problem 1: When we assigned space for the windows, we started at the top - and allocated [mem 0xffffffffffe00000-0xffffffffffffffff], which is - obviously useless because the CPU doesn't support physical addresses that - large. - - Problem 2: Subsequent allocations failed because I made an error in - find_resource(). We look for available space from [child->end + 1 to - root->end], and if the last child ends exactly at 0xffffffffffffffff, we - wrap around and start from zero. - - I made the top-down allocation conditional: an arch can select it at - boot-time, and there's a kernel command line option to change it for - debugging. - - -When we move PCI devices, we currently allocate space bottom-up, i.e., we look -at PCI bus resources in the order we found them, we look at gaps between child -resources bottom-up, and we align the new space at the bottom of an available -region. - -On x86, we move PCI devices more than we used to because we now pay attention -to the PCI host bridge windows from ACPI. For example, when we find a device -that's outside all the known host bridge windows, we try to move it into a -window, and we look for space starting at the bottom. - -Windows does similar device moves, but it looks for space top-down rather than -bottom-up. Since most machines are better-tested with Windows than Linux, this -difference means that Linux is more likely to trip over BIOS bugs in the PCI -host bridge window descriptions than Windows is. - -We've had several reports of Dell machines where the BIOS leaves the AHCI -controller outside the host bridge windows (BIOS bug #1), *and* the lowest -host bridge window includes an area that doesn't actually reach PCI (BIOS -bug #2). The result is that Windows (which moves AHCI to the top of a window) -works fine, while Linux (which moves AHCI to the bottom, buggy, area) doesn't -work. - -These patches change Linux to allocate space more like Windows does: - - 1) The x86 pcibios_align_resource() will choose space from the - end of an available area, not the beginning. - - 2) In the generic allocate_resource() path, we'll look for space - between existing children from the top, not from the bottom. - - 3) When pci_bus_alloc_resource() looks for available space, it - will start from the highest window, not the first one we found. - -This series fixes a 2.6.34 regression that prevents many Dell Precision -workstations from booting: - - https://bugzilla.kernel.org/show_bug.cgi?id=16228 - -Changes from v3 to v4: - - Use round_down() rather than adding ALIGN_DOWN(). - - Replace ARCH_HAS_TOP_DOWN_ALLOC #define with a boot-time architecture - choice and add a "resource_alloc_from_bottom" command line option to - revert to the old behavior (NOTE: this only affects allocate_resource(), - not pcibios_align_resource() or pci_bus_alloc_resource()). - - Fixed find_resource_from_top() again; it still didn't handle a child - that ended at the parent's end correctly. - -Changes from v2 to v3: - - Updated iomem_resource.end to reflect the end of usable physical address - space. Otherwise, we might allocate right up to 0xffffffff_ffffffff, - which isn't usable. - - Make allocate_resource() change conditional on ARCH_HAS_TOP_DOWN_ALLOC. - Without arch-specific changes like the above, it's too dangerous to - make this change for everybody at once. - - Fix 64-bit wraparound in find_resource(). If the last child happened - to end at ~0, we computed the highest available space as [child->end + 1, - root->end], which makes us think the available space started at 0, - which makes us return space that may already be allocated. - -Changes from v1 to v2: - - Moved check for allocating before the available area from - pcibios_align_resource() to find_resource(). Better to do it - after the alignment callback is done, and make it generic. - - Fixed pcibios_align_resource() alignment. If we start from the - end of the available area, we must align *downward*, not upward. - - Fixed pcibios_align_resource() ISA alias avoidance. Again, since - the starting point is the end of the area, we must align downward - when we avoid aliased areas. ---- - -Bjorn Helgaas (6): - resources: ensure alignment callback doesn't allocate below available start - resources: support allocating space within a region from the top down - PCI: allocate bus resources from the top down - x86/PCI: allocate space from the end of a region, not the beginning - x86: update iomem_resource end based on CPU physical address capabilities - x86: allocate space within a region top-down - - - Documentation/kernel-parameters.txt | 5 ++ - arch/x86/kernel/setup.c | 2 + - arch/x86/pci/i386.c | 17 ++++-- - drivers/pci/bus.c | 53 +++++++++++++++++-- - include/linux/ioport.h | 1 - kernel/resource.c | 99 ++++++++++++++++++++++++++++++++++- - 6 files changed, 163 insertions(+), 14 deletions(-) --- -To unsubscribe from this list: send the line "unsubscribe linux-pci" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html -The alignment callback returns a proposed location, which may have been -adjusted to avoid ISA aliases or for other architecture-specific reasons. -We already had a check ("tmp.start < tmp.end") to make sure the callback -doesn't return a location above the available area. - -This patch adds a check to make sure the callback doesn't return something -*below* the available area, as may happen if the callback tries to allocate -top-down. - -Signed-off-by: Bjorn Helgaas ---- - - kernel/resource.c | 10 ++++++++-- - 1 files changed, 8 insertions(+), 2 deletions(-) - - -diff --git a/kernel/resource.c b/kernel/resource.c -index 7b36976..ace2269 100644 ---- a/kernel/resource.c -+++ b/kernel/resource.c -@@ -371,6 +371,7 @@ static int find_resource(struct resource *root, struct resource *new, - { - struct resource *this = root->child; - struct resource tmp = *new; -+ resource_size_t start; - - tmp.start = root->start; - /* -@@ -391,8 +392,13 @@ static int find_resource(struct resource *root, struct resource *new, - if (tmp.end > max) - tmp.end = max; - tmp.start = ALIGN(tmp.start, align); -- if (alignf) -- tmp.start = alignf(alignf_data, &tmp, size, align); -+ if (alignf) { -+ start = alignf(alignf_data, &tmp, size, align); -+ if (tmp.start <= start && start <= tmp.end) -+ tmp.start = start; -+ else -+ tmp.start = tmp.end; -+ } - if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) { - new->start = tmp.start; - new->end = tmp.start + size - 1; - --- -To unsubscribe from this list: send the line "unsubscribe linux-pci" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html -Allocate space from the top of a region first, then work downward, -if an architecture desires this. - -When we allocate space from a resource, we look for gaps between children -of the resource. Previously, we always looked at gaps from the bottom up. -For example, given this: - - [mem 0xbff00000-0xf7ffffff] PCI Bus 0000:00 - [mem 0xbff00000-0xbfffffff] gap -- available - [mem 0xc0000000-0xdfffffff] PCI Bus 0000:02 - [mem 0xe0000000-0xf7ffffff] gap -- available - -we attempted to allocate from the [mem 0xbff00000-0xbfffffff] gap first, -then the [mem 0xe0000000-0xf7ffffff] gap. - -With this patch an architecture can choose to allocate from the top gap -[mem 0xe0000000-0xf7ffffff] first. - -We can't do this across the board because iomem_resource.end is initialized -to 0xffffffff_ffffffff on 64-bit architectures, and most machines can't -address the entire 64-bit physical address space. Therefore, we only -allocate top-down if the arch requests it by clearing -"resource_alloc_from_bottom". - -Signed-off-by: Bjorn Helgaas ---- - - Documentation/kernel-parameters.txt | 5 ++ - include/linux/ioport.h | 1 - kernel/resource.c | 89 +++++++++++++++++++++++++++++++++++ - 3 files changed, 94 insertions(+), 1 deletions(-) - - -diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt -index 8dd7248..fe50cbd 100644 ---- a/Documentation/kernel-parameters.txt -+++ b/Documentation/kernel-parameters.txt -@@ -2156,6 +2156,11 @@ and is between 256 and 4096 characters. It is defined in the file - reset_devices [KNL] Force drivers to reset the underlying device - during initialization. - -+ resource_alloc_from_bottom -+ Allocate new resources from the beginning of available -+ space, not the end. If you need to use this, please -+ report a bug. -+ - resume= [SWSUSP] - Specify the partition device for software suspend - -diff --git a/include/linux/ioport.h b/include/linux/ioport.h -index b227902..d377ea8 100644 ---- a/include/linux/ioport.h -+++ b/include/linux/ioport.h -@@ -112,6 +112,7 @@ struct resource_list { - /* PC/ISA/whatever - the normal PC address spaces: IO and memory */ - extern struct resource ioport_resource; - extern struct resource iomem_resource; -+extern int resource_alloc_from_bottom; - - extern struct resource *request_resource_conflict(struct resource *root, struct resource *new); - extern int request_resource(struct resource *root, struct resource *new); -diff --git a/kernel/resource.c b/kernel/resource.c -index ace2269..8d337a9 100644 ---- a/kernel/resource.c -+++ b/kernel/resource.c -@@ -40,6 +40,23 @@ EXPORT_SYMBOL(iomem_resource); - - static DEFINE_RWLOCK(resource_lock); - -+/* -+ * By default, we allocate free space bottom-up. The architecture can request -+ * top-down by clearing this flag. The user can override the architecture's -+ * choice with the "resource_alloc_from_bottom" kernel boot option, but that -+ * should only be a debugging tool. -+ */ -+int resource_alloc_from_bottom = 1; -+ -+static __init int setup_alloc_from_bottom(char *s) -+{ -+ printk(KERN_INFO -+ "resource: allocating from bottom-up; please report a bug\n"); -+ resource_alloc_from_bottom = 1; -+ return 0; -+} -+early_param("resource_alloc_from_bottom", setup_alloc_from_bottom); -+ - static void *r_next(struct seq_file *m, void *v, loff_t *pos) - { - struct resource *p = v; -@@ -358,7 +375,74 @@ int __weak page_is_ram(unsigned long pfn) - } - - /* -+ * Find the resource before "child" in the sibling list of "root" children. -+ */ -+static struct resource *find_sibling_prev(struct resource *root, struct resource *child) -+{ -+ struct resource *this; -+ -+ for (this = root->child; this; this = this->sibling) -+ if (this->sibling == child) -+ return this; -+ -+ return NULL; -+} -+ -+/* -+ * Find empty slot in the resource tree given range and alignment. -+ * This version allocates from the end of the root resource first. -+ */ -+static int find_resource_from_top(struct resource *root, struct resource *new, -+ resource_size_t size, resource_size_t min, -+ resource_size_t max, resource_size_t align, -+ resource_size_t (*alignf)(void *, -+ const struct resource *, -+ resource_size_t, -+ resource_size_t), -+ void *alignf_data) -+{ -+ struct resource *this; -+ struct resource tmp = *new; -+ resource_size_t start; -+ -+ tmp.start = root->end; -+ tmp.end = root->end; -+ -+ this = find_sibling_prev(root, NULL); -+ for (;;) { -+ if (this) { -+ if (this->end < root->end) -+ tmp.start = this->end + 1; -+ } else -+ tmp.start = root->start; -+ if (tmp.start < min) -+ tmp.start = min; -+ if (tmp.end > max) -+ tmp.end = max; -+ tmp.start = ALIGN(tmp.start, align); -+ if (alignf) { -+ start = alignf(alignf_data, &tmp, size, align); -+ if (tmp.start <= start && start <= tmp.end) -+ tmp.start = start; -+ else -+ tmp.start = tmp.end; -+ } -+ if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) { -+ new->start = tmp.start; -+ new->end = tmp.start + size - 1; -+ return 0; -+ } -+ if (!this || this->start == root->start) -+ break; -+ tmp.end = this->start - 1; -+ this = find_sibling_prev(root, this); -+ } -+ return -EBUSY; -+} -+ -+/* - * Find empty slot in the resource tree given range and alignment. -+ * This version allocates from the beginning of the root resource first. - */ - static int find_resource(struct resource *root, struct resource *new, - resource_size_t size, resource_size_t min, -@@ -435,7 +519,10 @@ int allocate_resource(struct resource *root, struct resource *new, - int err; - - write_lock(&resource_lock); -- err = find_resource(root, new, size, min, max, align, alignf, alignf_data); -+ if (resource_alloc_from_bottom) -+ err = find_resource(root, new, size, min, max, align, alignf, alignf_data); -+ else -+ err = find_resource_from_top(root, new, size, min, max, align, alignf, alignf_data); - if (err >= 0 && __request_resource(root, new)) - err = -EBUSY; - write_unlock(&resource_lock); - --- -To unsubscribe from this list: send the line "unsubscribe linux-pci" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html -Allocate space from the highest-address PCI bus resource first, then work -downward. - -Previously, we looked for space in PCI host bridge windows in the order -we discovered the windows. For example, given the following windows -(discovered via an ACPI _CRS method): - - pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff] - pci_root PNP0A03:00: host bridge window [mem 0x000c0000-0x000effff] - pci_root PNP0A03:00: host bridge window [mem 0x000f0000-0x000fffff] - pci_root PNP0A03:00: host bridge window [mem 0xbff00000-0xf7ffffff] - pci_root PNP0A03:00: host bridge window [mem 0xff980000-0xff980fff] - pci_root PNP0A03:00: host bridge window [mem 0xff97c000-0xff97ffff] - pci_root PNP0A03:00: host bridge window [mem 0xfed20000-0xfed9ffff] - -we attempted to allocate from [mem 0x000a0000-0x000bffff] first, then -[mem 0x000c0000-0x000effff], and so on. - -With this patch, we allocate from [mem 0xff980000-0xff980fff] first, then -[mem 0xff97c000-0xff97ffff], [mem 0xfed20000-0xfed9ffff], etc. - -Allocating top-down follows Windows practice, so we're less likely to -trip over BIOS defects in the _CRS description. - -On the machine above (a Dell T3500), the [mem 0xbff00000-0xbfffffff] region -doesn't actually work and is likely a BIOS defect. The symptom is that we -move the AHCI controller to 0xbff00000, which leads to "Boot has failed, -sleeping forever," a BUG in ahci_stop_engine(), or some other boot failure. - -Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228#c43 -Reference: https://bugzilla.redhat.com/show_bug.cgi?id=620313 -Reference: https://bugzilla.redhat.com/show_bug.cgi?id=629933 -Reported-by: Brian Bloniarz -Reported-and-tested-by: Stefan Becker -Reported-by: Denys Vlasenko -Signed-off-by: Bjorn Helgaas ---- - - drivers/pci/bus.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++----- - 1 files changed, 48 insertions(+), 5 deletions(-) - - -diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c -index 7f0af0e..172bf26 100644 ---- a/drivers/pci/bus.c -+++ b/drivers/pci/bus.c -@@ -64,6 +64,49 @@ void pci_bus_remove_resources(struct pci_bus *bus) - } - } - -+/* -+ * Find the highest-address bus resource below the cursor "res". If the -+ * cursor is NULL, return the highest resource. -+ */ -+static struct resource *pci_bus_find_resource_prev(struct pci_bus *bus, -+ unsigned int type, -+ struct resource *res) -+{ -+ struct resource *r, *prev = NULL; -+ int i; -+ -+ pci_bus_for_each_resource(bus, r, i) { -+ if (!r) -+ continue; -+ -+ if ((r->flags & IORESOURCE_TYPE_BITS) != type) -+ continue; -+ -+ /* If this resource is at or past the cursor, skip it */ -+ if (res) { -+ if (r == res) -+ continue; -+ if (r->end > res->end) -+ continue; -+ if (r->end == res->end && r->start > res->start) -+ continue; -+ } -+ -+ if (!prev) -+ prev = r; -+ -+ /* -+ * A small resource is higher than a large one that ends at -+ * the same address. -+ */ -+ if (r->end > prev->end || -+ (r->end == prev->end && r->start > prev->start)) -+ prev = r; -+ } -+ -+ return prev; -+} -+ - /** - * pci_bus_alloc_resource - allocate a resource from a parent bus - * @bus: PCI bus -@@ -89,9 +132,10 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, - resource_size_t), - void *alignf_data) - { -- int i, ret = -ENOMEM; -+ int ret = -ENOMEM; - struct resource *r; - resource_size_t max = -1; -+ unsigned int type = res->flags & IORESOURCE_TYPE_BITS; - - type_mask |= IORESOURCE_IO | IORESOURCE_MEM; - -@@ -99,10 +143,9 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, - if (!(res->flags & IORESOURCE_MEM_64)) - max = PCIBIOS_MAX_MEM_32; - -- pci_bus_for_each_resource(bus, r, i) { -- if (!r) -- continue; -- -+ /* Look for space at highest addresses first */ -+ r = pci_bus_find_resource_prev(bus, type, NULL); -+ for ( ; r; r = pci_bus_find_resource_prev(bus, type, r)) { - /* type_mask must match */ - if ((res->flags ^ r->flags) & type_mask) - continue; - --- -To unsubscribe from this list: send the line "unsubscribe linux-pci" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html -Allocate from the end of a region, not the beginning. - -For example, if we need to allocate 0x800 bytes for a device on bus -0000:00 given these resources: - - [mem 0xbff00000-0xdfffffff] PCI Bus 0000:00 - [mem 0xc0000000-0xdfffffff] PCI Bus 0000:02 - -the available space at [mem 0xbff00000-0xbfffffff] is passed to the -alignment callback (pcibios_align_resource()). Prior to this patch, we -would put the new 0x800 byte resource at the beginning of that available -space, i.e., at [mem 0xbff00000-0xbff007ff]. - -With this patch, we put it at the end, at [mem 0xbffff800-0xbfffffff]. - -Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228#c41 -Signed-off-by: Bjorn Helgaas ---- - - arch/x86/pci/i386.c | 17 +++++++++++------ - 1 files changed, 11 insertions(+), 6 deletions(-) - - -diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c -index 5525309..826140a 100644 ---- a/arch/x86/pci/i386.c -+++ b/arch/x86/pci/i386.c -@@ -65,16 +65,21 @@ pcibios_align_resource(void *data, const struct resource *res, - resource_size_t size, resource_size_t align) - { - struct pci_dev *dev = data; -- resource_size_t start = res->start; -+ resource_size_t start = round_down(res->end - size + 1, align); - - if (res->flags & IORESOURCE_IO) { -- if (skip_isa_ioresource_align(dev)) -- return start; -- if (start & 0x300) -- start = (start + 0x3ff) & ~0x3ff; -+ -+ /* -+ * If we're avoiding ISA aliases, the largest contiguous I/O -+ * port space is 256 bytes. Clearing bits 9 and 10 preserves -+ * all 256-byte and smaller alignments, so the result will -+ * still be correctly aligned. -+ */ -+ if (!skip_isa_ioresource_align(dev)) -+ start &= ~0x300; - } else if (res->flags & IORESOURCE_MEM) { - if (start < BIOS_END) -- start = BIOS_END; -+ start = res->end; /* fail; no space */ - } - return start; - } - --- -To unsubscribe from this list: send the line "unsubscribe linux-pci" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html -The iomem_resource map reflects the available physical address space. -We statically initialize the end to -1, i.e., 0xffffffff_ffffffff, but -of course we can only use as much as the CPU can address. - -This patch updates the end based on the CPU capabilities, so we don't -mistakenly allocate space that isn't usable, as we're likely to do when -allocating from the top-down. - -Signed-off-by: Bjorn Helgaas ---- - - arch/x86/kernel/setup.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - - -diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index c3a4fbb..922b5a1 100644 ---- a/arch/x86/kernel/setup.c -+++ b/arch/x86/kernel/setup.c -@@ -788,6 +788,7 @@ void __init setup_arch(char **cmdline_p) - - x86_init.oem.arch_setup(); - -+ iomem_resource.end = (1ULL << boot_cpu_data.x86_phys_bits) - 1; - setup_memory_map(); - parse_setup_data(); - /* update the e820_saved too */ - --- -To unsubscribe from this list: send the line "unsubscribe linux-pci" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html -Request that allocate_resource() use available space from high addresses -first, rather than the default of using low addresses first. - -The most common place this makes a difference is when we move or assign -new PCI device resources. Low addresses are generally scarce, so it's -better to use high addresses when possible. This follows Windows practice -for PCI allocation. - -Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228#c42 -Signed-off-by: Bjorn Helgaas ---- - - arch/x86/kernel/setup.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - - -diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index 922b5a1..0fe76df 100644 ---- a/arch/x86/kernel/setup.c -+++ b/arch/x86/kernel/setup.c -@@ -788,6 +788,7 @@ void __init setup_arch(char **cmdline_p) - - x86_init.oem.arch_setup(); - -+ resource_alloc_from_bottom = 0; - iomem_resource.end = (1ULL << boot_cpu_data.x86_phys_bits) - 1; - setup_memory_map(); - parse_setup_data(); - --- -To unsubscribe from this list: send the line "unsubscribe linux-pci" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html \ No newline at end of file diff --git a/pnpacpi-cope-with-invalid-device-ids.patch b/pnpacpi-cope-with-invalid-device-ids.patch deleted file mode 100644 index 70b2ab9..0000000 --- a/pnpacpi-cope-with-invalid-device-ids.patch +++ /dev/null @@ -1,85 +0,0 @@ -commit 420a0f66378c84b00b0e603e4d38210102dbe367 -Author: Dmitry Torokhov -Date: Sat Sep 18 10:11:09 2010 -0700 - - PNPACPI: cope with invalid device IDs - - If primary ID (HID) is invalid try locating first valid ID on compatible - ID list before giving up. - - This helps, for example, to recognize i8042 AUX port on Sony Vaio VPCZ1 - which uses SNYSYN0003 as HID. Without the patch users are forced to - boot with i8042.nopnp to make use of their touchpads. - - Tested-by: Jan-Hendrik Zab - Signed-off-by: Dmitry Torokhov - Signed-off-by: Len Brown - -diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c -index dc4e32e..0d943ee 100644 ---- a/drivers/pnp/pnpacpi/core.c -+++ b/drivers/pnp/pnpacpi/core.c -@@ -28,7 +28,7 @@ - #include "../base.h" - #include "pnpacpi.h" - --static int num = 0; -+static int num; - - /* We need only to blacklist devices that have already an acpi driver that - * can't use pnp layer. We don't need to blacklist device that are directly -@@ -180,11 +180,24 @@ struct pnp_protocol pnpacpi_protocol = { - }; - EXPORT_SYMBOL(pnpacpi_protocol); - -+static char *pnpacpi_get_id(struct acpi_device *device) -+{ -+ struct acpi_hardware_id *id; -+ -+ list_for_each_entry(id, &device->pnp.ids, list) { -+ if (ispnpidacpi(id->id)) -+ return id->id; -+ } -+ -+ return NULL; -+} -+ - static int __init pnpacpi_add_device(struct acpi_device *device) - { - acpi_handle temp = NULL; - acpi_status status; - struct pnp_dev *dev; -+ char *pnpid; - struct acpi_hardware_id *id; - - /* -@@ -192,11 +205,17 @@ static int __init pnpacpi_add_device(struct acpi_device *device) - * driver should not be loaded. - */ - status = acpi_get_handle(device->handle, "_CRS", &temp); -- if (ACPI_FAILURE(status) || !ispnpidacpi(acpi_device_hid(device)) || -- is_exclusive_device(device) || (!device->status.present)) -+ if (ACPI_FAILURE(status)) -+ return 0; -+ -+ pnpid = pnpacpi_get_id(device); -+ if (!pnpid) -+ return 0; -+ -+ if (is_exclusive_device(device) || !device->status.present) - return 0; - -- dev = pnp_alloc_dev(&pnpacpi_protocol, num, acpi_device_hid(device)); -+ dev = pnp_alloc_dev(&pnpacpi_protocol, num, pnpid); - if (!dev) - return -ENOMEM; - -@@ -227,7 +246,7 @@ static int __init pnpacpi_add_device(struct acpi_device *device) - pnpacpi_parse_resource_option_data(dev); - - list_for_each_entry(id, &device->pnp.ids, list) { -- if (!strcmp(id->id, acpi_device_hid(device))) -+ if (!strcmp(id->id, pnpid)) - continue; - if (!ispnpidacpi(id->id)) - continue; diff --git a/runtime_pm_fixups.patch b/runtime_pm_fixups.patch index 6315dc1..7891158 100644 --- a/runtime_pm_fixups.patch +++ b/runtime_pm_fixups.patch @@ -110,5 +110,5 @@ index 4de84ce..284f43c 100644 -int acpi_disable_wakeup_device_power(struct acpi_device *dev); +int acpi_disable_wakeup_device_power(struct acpi_device *dev, int state); - #ifdef CONFIG_PM_SLEEP + #ifdef CONFIG_PM_OPS int acpi_pm_device_sleep_state(struct device *, int *); diff --git a/sources b/sources index de34965..a666d4d 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 61f3739a73afb6914cb007f37fb09b62 linux-2.6.36.tar.bz2 -1ae3ad96ed31fb8d40384add909bf994 patch-2.6.36-git8.bz2 +7364d9629734c34d09ec9ebd351d40b9 patch-2.6.37-rc1.bz2