
Hello community, here is the log from the commit of package kernel-source for openSUSE:Factory checked in at Wed Oct 21 01:06:30 CEST 2009. -------- --- kernel-source/kernel-debug.changes 2009-10-08 04:05:26.000000000 +0200 +++ kernel-source/kernel-debug.changes 2009-10-16 14:49:19.000000000 +0200 @@ -1,0 +2,121 @@ +Wed Oct 14 18:31:53 CEST 2009 - tiwai@suse.de + +- patches.drivers/alsa-hda-alc662-capture-fix: ALSA: hda - + Fix capture source checks for ALC662/663 codecs (bnc#546918). + +------------------------------------------------------------------- +Wed Oct 14 18:22:43 CEST 2009 - gregkh@suse.de + +- Update to 2.6.31.4 + - security fixes + - bugfixes + - obsoletes: + - patches.drivers/alsa-hda-2.6.32-rc1-toshiba-fix + +------------------------------------------------------------------- +Tue Oct 13 16:11:20 CEST 2009 - tiwai@suse.de + +- patches.drivers/alsa-hda-nvidia-hdmi-full-fmts: Refresh. Enable + all formats/rates as default. + +------------------------------------------------------------------- +Tue Oct 13 15:54:12 CEST 2009 - tiwai@suse.de + +- patches.drivers/alsa-hda-nvidia-hdmi-full-fmts: ALSA: hda - + Add full rates/formats support for Nvidia HDMI. +- patches.drivers/alsa-hda-realtek-overflow-fix: ALSA: hda - + Fix overflow of spec->init_verbs in patch_realtek.c. +- patches.drivers/alsa-hda-stac9228-dell-fix: ALSA: hda - Fix + volume-knob setup for Dell laptops with STAC9228 (bnc#545013). +- patches.drivers/alsa-hda-stac9228-fsc-fix: Refresh. + +------------------------------------------------------------------- +Tue Oct 13 01:11:05 CEST 2009 - gregkh@suse.de + +- Update config files. +- patches.drivers/samsung-laptop-driver.patch: Samsung laptop + driver. + +------------------------------------------------------------------- +Mon Oct 12 16:14:42 CEST 2009 - trenn@suse.de + +- patches.arch/amd_magny_cour_topology_fix.patch: x86: Fix CPU + llc_shared_map information for AMD Magny-Cours (bnc#545615). +- patches.arch/amd_magny_cour_topology_fix_1.patch: x86, sched: + Workaround broken sched domain creation for AMD Magny-Cours + (bnc#545615). +- patches.arch/amd_magny_cour_topology_fix_2.patch: x86, mcheck: + Use correct cpumask for shared bank4 (bnc#545615). +- patches.arch/amd_magny_cour_topology_fix_3.patch: x86, + cacheinfo: Fixup L3 cache information for AMD multi-node + processors (bnc#545615). + +------------------------------------------------------------------- +Mon Oct 12 11:13:52 CEST 2009 - jbeulich@novell.com + +- patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch: + fix up register usage. +- patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch: + fix up register usage (bnc#545206). + +------------------------------------------------------------------- +Sun Oct 11 17:48:28 CEST 2009 - tiwai@suse.de + +- patches.drivers/alsa-hda-stac9228-fsc-fix: ALSA: hda - Fix + mute sound with STAC9227/9228 codecs (bnc#546006). + +------------------------------------------------------------------- +Thu Oct 8 22:45:22 CEST 2009 - gregkh@suse.de + +- Update config files. + - disable CONFIG_STAGING for ia64, ppc, ppc64, and s390x + +------------------------------------------------------------------- +Thu Oct 8 05:47:26 CEST 2009 - sdietrich@suse.de + +- patches.fixes/futex-add-memory-barrier-commentary: futex: + Add memory barrier commentary to futex_wait_queue_me(). + +------------------------------------------------------------------- +Thu Oct 8 05:46:27 CEST 2009 - sdietrich@suse.de + +- patches.fixes/futex-fix-wakeup-race: futex: Fix wakeup race + by setting TASK_INTERRUPTIBLE before queue_me(). + +------------------------------------------------------------------- +Thu Oct 8 05:45:05 CEST 2009 - sdietrich@suse.de + +- patches.fixes/futex-correct-futex_q-woken-state-commentary: + futex: Correct futex_q woken state commentary. + +------------------------------------------------------------------- +Thu Oct 8 05:43:52 CEST 2009 - sdietrich@suse.de + +- patches.fixes/futex-make-function-kernel-doc-commentary-consistent: + futex: Make function kernel-doc commentary consistent. + +------------------------------------------------------------------- +Thu Oct 8 05:42:42 CEST 2009 - sdietrich@suse.de + +- patches.fixes/futex-correct-queue_me-and-unqueue_me-commentary: + futex: Correct queue_me and unqueue_me commentary. + +------------------------------------------------------------------- +Thu Oct 8 05:41:04 CEST 2009 - sdietrich@suse.de + +- patches.fixes/futex-correct-futex_wait_requeue_pi-commentary_2: + futex: Correct futex_wait_requeue_pi() commentary. + +------------------------------------------------------------------- +Thu Oct 8 05:39:09 CEST 2009 - sdietrich@suse.de + +- patches.fixes/futex-detect-mismatched-requeue-targets: futex: + Detect mismatched requeue targets. + +------------------------------------------------------------------- +Thu Oct 8 05:37:38 CEST 2009 - sdietrich@suse.de + +- patches.fixes/futex-correct-futex_wait_requeue_pi-commentary: + futex: Correct futex_wait_requeue_pi() commentary. + +------------------------------------------------------------------- kernel-default.changes: same change kernel-desktop.changes: same change kernel-kdump.changes: same change kernel-pae.changes: same change kernel-ppc64.changes: same change kernel-ps3.changes: same change kernel-s390.changes: same change kernel-source.changes: same change kernel-syms.changes: same change kernel-trace.changes: same change kernel-vanilla.changes: same change kernel-xen.changes: same change calling whatdependson for head-i586 Old: ---- minmem needed_space_in_mb ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kernel-debug.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-debug (Version 2.6.31.3) +# spec file for package kernel-debug (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor debug @@ -48,7 +48,7 @@ Name: kernel-debug Summary: A Debug Version of the Kernel -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-default.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-default (Version 2.6.31.3) +# spec file for package kernel-default (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor default @@ -48,7 +48,7 @@ Name: kernel-default Summary: The Standard Kernel -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-desktop.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-desktop (Version 2.6.31.3) +# spec file for package kernel-desktop (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor desktop @@ -48,7 +48,7 @@ Name: kernel-desktop Summary: Kernel optimized for the desktop -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-kdump.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-kdump (Version 2.6.31.3) +# spec file for package kernel-kdump (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor kdump @@ -48,7 +48,7 @@ Name: kernel-kdump Summary: kernel for kdump -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-pae.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-pae (Version 2.6.31.3) +# spec file for package kernel-pae (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor pae @@ -48,7 +48,7 @@ Name: kernel-pae Summary: Kernel with PAE Support -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-ppc64.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-ppc64 (Version 2.6.31.3) +# spec file for package kernel-ppc64 (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor ppc64 @@ -48,7 +48,7 @@ Name: kernel-ppc64 Summary: Kernel for ppc64 Systems -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-ps3.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-ps3 (Version 2.6.31.3) +# spec file for package kernel-ps3 (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor ps3 @@ -48,7 +48,7 @@ Name: kernel-ps3 Summary: kernel for ps3 bootloader -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-s390.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-s390 (Version 2.6.31.3) +# spec file for package kernel-s390 (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor s390 @@ -48,7 +48,7 @@ Name: kernel-s390 Summary: The Standard Kernel -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-source.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-source (Version 2.6.31.3) +# spec file for package kernel-source (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -19,7 +19,7 @@ # icecream 0 %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define src_install_dir usr/src/linux-%kernelrelease%variant @@ -28,7 +28,7 @@ Name: kernel-source Summary: The Linux Kernel Sources -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-syms.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:58.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:58.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-syms (Version 2.6.31.3) +# spec file for package kernel-syms (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -22,7 +22,7 @@ Name: kernel-syms Summary: Kernel Symbol Versions (modversions) -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-trace.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:59.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:59.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-trace (Version 2.6.31.3) +# spec file for package kernel-trace (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor trace @@ -48,7 +48,7 @@ Name: kernel-trace Summary: The Realtime Linux Kernel -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-vanilla.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:59.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:59.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-vanilla (Version 2.6.31.3) +# spec file for package kernel-vanilla (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor vanilla @@ -48,7 +48,7 @@ Name: kernel-vanilla Summary: The Standard Kernel - without any SUSE patches -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ kernel-xen.spec ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:03:59.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:03:59.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-xen (Version 2.6.31.3) +# spec file for package kernel-xen (Version 2.6.31.4) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -18,7 +18,7 @@ # norootforbuild %define srcversion 2.6.31 -%define patchversion 2.6.31.3 +%define patchversion 2.6.31.4 %define variant %{nil} %include %_sourcedir/kernel-spec-macros %define build_flavor xen @@ -48,7 +48,7 @@ Name: kernel-xen Summary: The Xen Kernel -Version: 2.6.31.3 +Version: 2.6.31.4 Release: 1 %if %using_buildservice %else ++++++ config.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/debug new/config/i386/debug --- old/config/i386/debug 2009-10-02 17:07:05.000000000 +0200 +++ new/config/i386/debug 2009-10-13 01:11:08.000000000 +0200 @@ -4352,6 +4352,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/default new/config/i386/default --- old/config/i386/default 2009-10-02 17:07:05.000000000 +0200 +++ new/config/i386/default 2009-10-13 01:11:08.000000000 +0200 @@ -4323,6 +4323,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/desktop new/config/i386/desktop --- old/config/i386/desktop 2009-10-02 17:07:05.000000000 +0200 +++ new/config/i386/desktop 2009-10-13 01:11:08.000000000 +0200 @@ -4150,6 +4150,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/pae new/config/i386/pae --- old/config/i386/pae 2009-10-02 17:07:05.000000000 +0200 +++ new/config/i386/pae 2009-10-13 01:11:08.000000000 +0200 @@ -4166,6 +4166,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/trace new/config/i386/trace --- old/config/i386/trace 2009-10-02 17:07:05.000000000 +0200 +++ new/config/i386/trace 2009-10-13 01:11:08.000000000 +0200 @@ -4166,6 +4166,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/vanilla new/config/i386/vanilla --- old/config/i386/vanilla 2009-10-02 17:07:05.000000000 +0200 +++ new/config/i386/vanilla 2009-10-13 01:11:08.000000000 +0200 @@ -4916,4 +4916,3 @@ CONFIG_HAS_DMA=y CONFIG_CHECK_SIGNATURE=y CONFIG_NLATTR=y -CONFIG_ACPI_CUSTOM_DSDT_INITRD=y diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/xen new/config/i386/xen --- old/config/i386/xen 2009-10-02 17:07:05.000000000 +0200 +++ new/config/i386/xen 2009-10-13 01:11:08.000000000 +0200 @@ -4074,6 +4074,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ia64/debug new/config/ia64/debug --- old/config/ia64/debug 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ia64/debug 2009-10-13 01:11:08.000000000 +0200 @@ -3438,66 +3438,7 @@ # TI VLYNQ # CONFIG_IRQ_PER_CPU=y -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -CONFIG_OTUS=m -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -# CONFIG_FB_UDL is not set +# CONFIG_STAGING is not set # # HP Simulator drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ia64/default new/config/ia64/default --- old/config/ia64/default 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ia64/default 2009-10-13 01:11:08.000000000 +0200 @@ -3420,66 +3420,7 @@ # TI VLYNQ # CONFIG_IRQ_PER_CPU=y -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -CONFIG_OTUS=m -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -# CONFIG_FB_UDL is not set +# CONFIG_STAGING is not set # # HP Simulator drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ia64/trace new/config/ia64/trace --- old/config/ia64/trace 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ia64/trace 2009-10-13 01:11:08.000000000 +0200 @@ -3427,66 +3427,7 @@ # TI VLYNQ # CONFIG_IRQ_PER_CPU=y -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -CONFIG_OTUS=m -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -# CONFIG_FB_UDL is not set +# CONFIG_STAGING is not set # # HP Simulator drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ia64/vanilla new/config/ia64/vanilla --- old/config/ia64/vanilla 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ia64/vanilla 2009-10-13 01:11:08.000000000 +0200 @@ -3400,66 +3400,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -CONFIG_OTUS=m -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -# CONFIG_FB_UDL is not set +# CONFIG_STAGING is not set # # HP Simulator drivers @@ -3979,4 +3920,3 @@ CONFIG_GENERIC_PENDING_IRQ=y CONFIG_IRQ_PER_CPU=y CONFIG_IOMMU_API=y -CONFIG_ACPI_CUSTOM_DSDT_INITRD=y diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc/default new/config/ppc/default --- old/config/ppc/default 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc/default 2009-10-13 01:11:08.000000000 +0200 @@ -3250,66 +3250,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc/kdump new/config/ppc/kdump --- old/config/ppc/kdump 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc/kdump 2009-10-13 01:11:08.000000000 +0200 @@ -2344,63 +2344,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc/ppc64 new/config/ppc/ppc64 --- old/config/ppc/ppc64 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc/ppc64 2009-10-13 01:11:08.000000000 +0200 @@ -3192,66 +3192,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc/ps3 new/config/ppc/ps3 --- old/config/ppc/ps3 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc/ps3 2009-10-13 01:11:08.000000000 +0200 @@ -972,28 +972,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_USB_IP_COMMON=y -CONFIG_USB_IP_VHCI_HCD=y -CONFIG_USB_IP_HOST=y -CONFIG_ECHO=y -CONFIG_ASUS_OLED=y -CONFIG_INPUT_MIMIO=y -CONFIG_TRANZPORT=y - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=y -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=y -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_PLAN9AUTH=y -CONFIG_USB_CPC=y -CONFIG_FB_UDL=y +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc/vanilla new/config/ppc/vanilla --- old/config/ppc/vanilla 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc/vanilla 2009-10-13 01:11:08.000000000 +0200 @@ -3229,66 +3229,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems @@ -3818,4 +3759,3 @@ CONFIG_VIRTIO_RING=m CONFIG_VIRTIO_PCI=m CONFIG_VIRTIO_BALLOON=m -CONFIG_ACPI_CUSTOM_DSDT_INITRD=y diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/debug new/config/ppc64/debug --- old/config/ppc64/debug 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc64/debug 2009-10-13 01:11:08.000000000 +0200 @@ -3097,66 +3097,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/default new/config/ppc64/default --- old/config/ppc64/default 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc64/default 2009-10-13 01:11:08.000000000 +0200 @@ -3087,66 +3087,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/kdump new/config/ppc64/kdump --- old/config/ppc64/kdump 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc64/kdump 2009-10-13 01:11:08.000000000 +0200 @@ -2344,63 +2344,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/ppc64 new/config/ppc64/ppc64 --- old/config/ppc64/ppc64 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc64/ppc64 2009-10-13 01:11:08.000000000 +0200 @@ -3192,66 +3192,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/vanilla new/config/ppc64/vanilla --- old/config/ppc64/vanilla 2009-10-02 17:07:05.000000000 +0200 +++ new/config/ppc64/vanilla 2009-10-13 01:11:08.000000000 +0200 @@ -3066,66 +3066,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_ET131X=m -# CONFIG_ET131X_DEBUG is not set -CONFIG_ME4000=m -CONFIG_MEILHAUS=m -CONFIG_ME0600=m -CONFIG_ME0900=m -CONFIG_ME1000=m -CONFIG_ME1400=m -CONFIG_ME1600=m -CONFIG_ME4600=m -CONFIG_ME6000=m -CONFIG_ME8100=m -CONFIG_ME8200=m -CONFIG_MEDUMMY=m -# CONFIG_VIDEO_GO7007 is not set -CONFIG_USB_IP_COMMON=m -CONFIG_USB_IP_VHCI_HCD=m -CONFIG_USB_IP_HOST=m -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m -CONFIG_USB_ATMEL=m -CONFIG_POCH=m -CONFIG_AGNX=m -# CONFIG_OTUS is not set -# CONFIG_COMEDI is not set -CONFIG_ASUS_OLED=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set -CONFIG_ALTERA_PCIE_CHDMA=m -CONFIG_RTL8187SE=m -CONFIG_RTL8192SU=m -CONFIG_INPUT_MIMIO=m -CONFIG_TRANZPORT=m - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_STLC45XX=m -CONFIG_B3DFG=m -CONFIG_IDE_PHISON=m -CONFIG_PLAN9AUTH=m -CONFIG_HECI=m -CONFIG_LINE6_USB=m -# CONFIG_DRM_RADEON_KMS is not set -CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_VT6655=m -CONFIG_USB_CPC=m -CONFIG_RDC_17F3101X=m -CONFIG_FB_UDL=m +# CONFIG_STAGING is not set # # File systems @@ -3656,4 +3597,3 @@ CONFIG_VIRTIO_RING=m CONFIG_VIRTIO_PCI=m CONFIG_VIRTIO_BALLOON=m -CONFIG_ACPI_CUSTOM_DSDT_INITRD=y diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/s390/s390 new/config/s390/s390 --- old/config/s390/s390 2009-10-02 17:07:05.000000000 +0200 +++ new/config/s390/s390 2009-10-13 01:11:08.000000000 +0200 @@ -960,22 +960,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_MEILHAUS=m -CONFIG_ECHO=m -# CONFIG_COMEDI is not set - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_PLAN9AUTH=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/s390x/default new/config/s390x/default --- old/config/s390x/default 2009-10-02 17:07:05.000000000 +0200 +++ new/config/s390x/default 2009-10-13 01:11:08.000000000 +0200 @@ -974,22 +974,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_MEILHAUS=m -CONFIG_ECHO=m -# CONFIG_COMEDI is not set - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_PLAN9AUTH=m +# CONFIG_STAGING is not set # # File systems diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/s390x/vanilla new/config/s390x/vanilla --- old/config/s390x/vanilla 2009-10-02 17:07:05.000000000 +0200 +++ new/config/s390x/vanilla 2009-10-13 01:11:08.000000000 +0200 @@ -979,22 +979,7 @@ # # TI VLYNQ # -CONFIG_STAGING=y -# CONFIG_STAGING_EXCLUDE_BUILD is not set -CONFIG_MEILHAUS=m -CONFIG_ECHO=m -# CONFIG_COMEDI is not set - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_DST=m -# CONFIG_DST_DEBUG is not set -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set -CONFIG_POHMELFS_CRYPTO=y -CONFIG_PLAN9AUTH=m +# CONFIG_STAGING is not set # # File systems @@ -1488,4 +1473,3 @@ # CONFIG_VIRTUALIZATION is not set CONFIG_VIRTIO=y CONFIG_VIRTIO_RING=y -CONFIG_ACPI_CUSTOM_DSDT_INITRD=y diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/debug new/config/x86_64/debug --- old/config/x86_64/debug 2009-10-02 17:07:05.000000000 +0200 +++ new/config/x86_64/debug 2009-10-13 01:11:08.000000000 +0200 @@ -4090,6 +4090,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/default new/config/x86_64/default --- old/config/x86_64/default 2009-10-02 17:07:05.000000000 +0200 +++ new/config/x86_64/default 2009-10-13 01:11:08.000000000 +0200 @@ -4085,6 +4085,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/desktop new/config/x86_64/desktop --- old/config/x86_64/desktop 2009-10-02 17:07:05.000000000 +0200 +++ new/config/x86_64/desktop 2009-10-13 01:11:08.000000000 +0200 @@ -4069,6 +4069,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/trace new/config/x86_64/trace --- old/config/x86_64/trace 2009-10-02 17:07:05.000000000 +0200 +++ new/config/x86_64/trace 2009-10-13 01:11:08.000000000 +0200 @@ -4085,6 +4085,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/vanilla new/config/x86_64/vanilla --- old/config/x86_64/vanilla 2009-10-02 17:07:05.000000000 +0200 +++ new/config/x86_64/vanilla 2009-10-13 01:11:08.000000000 +0200 @@ -4672,4 +4672,3 @@ CONFIG_HAS_DMA=y CONFIG_CHECK_SIGNATURE=y CONFIG_NLATTR=y -CONFIG_ACPI_CUSTOM_DSDT_INITRD=y diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/xen new/config/x86_64/xen --- old/config/x86_64/xen 2009-10-02 17:07:05.000000000 +0200 +++ new/config/x86_64/xen 2009-10-13 01:11:08.000000000 +0200 @@ -4012,6 +4012,7 @@ CONFIG_ACPI_WMI=m # CONFIG_ACPI_ASUS is not set CONFIG_ACPI_TOSHIBA=m +CONFIG_SAMSUNG_LAPTOP=m # # Firmware Drivers ++++++ patches.arch.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/amd_magny_cour_topology_fix.patch new/patches.arch/amd_magny_cour_topology_fix.patch --- old/patches.arch/amd_magny_cour_topology_fix.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.arch/amd_magny_cour_topology_fix.patch 2009-10-12 16:14:56.000000000 +0200 @@ -0,0 +1,115 @@ +From: Andreas Herrmann <andreas.herrmann3@amd.com> +Subject: x86: Fix CPU llc_shared_map information for AMD Magny-Cours +References: bnc#545615 +Patch-Mainline: yes +Commit-ID: 4a376ec3a2599c02207cd4cbd5dbf73783548463 + +Signed-off-by: Thomas Renninger <trenn@suse.de> + +Construct entire NodeID and use it as cpu_llc_id. Thus internal node +siblings are stored in llc_shared_map. + +Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> +Signed-off-by: H. Peter Anvin <hpa@zytor.com> + +diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h +index 4a28d22..847fee6 100644 +--- a/arch/x86/include/asm/cpufeature.h ++++ b/arch/x86/include/asm/cpufeature.h +@@ -95,6 +95,7 @@ + #define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */ + #define X86_FEATURE_CLFLUSH_MONITOR (3*32+25) /* "" clflush reqd with monitor */ + #define X86_FEATURE_EXTD_APICID (3*32+26) /* has extended APICID (8 bits) */ ++#define X86_FEATURE_AMD_DCM (3*32+27) /* multi-node processor */ + + /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ + #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ +diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c +index 0a717fc..a76d2c1 100644 +--- a/arch/x86/kernel/cpu/amd.c ++++ b/arch/x86/kernel/cpu/amd.c +@@ -251,6 +251,64 @@ static int __cpuinit nearby_node(int apicid) + #endif + + /* ++ * Fixup core topology information for AMD multi-node processors. ++ * Assumption 1: Number of cores in each internal node is the same. ++ * Assumption 2: Mixed systems with both single-node and dual-node ++ * processors are not supported. ++ */ ++#ifdef CONFIG_X86_HT ++static void __cpuinit amd_fixup_dcm(struct cpuinfo_x86 *c) ++{ ++#ifdef CONFIG_PCI ++ u32 t, cpn; ++ u8 n, n_id; ++ int cpu = smp_processor_id(); ++ ++ /* fixup topology information only once for a core */ ++ if (cpu_has(c, X86_FEATURE_AMD_DCM)) ++ return; ++ ++ /* check for multi-node processor on boot cpu */ ++ t = read_pci_config(0, 24, 3, 0xe8); ++ if (!(t & (1 << 29))) ++ return; ++ ++ set_cpu_cap(c, X86_FEATURE_AMD_DCM); ++ ++ /* cores per node: each internal node has half the number of cores */ ++ cpn = c->x86_max_cores >> 1; ++ ++ /* even-numbered NB_id of this dual-node processor */ ++ n = c->phys_proc_id << 1; ++ ++ /* ++ * determine internal node id and assign cores fifty-fifty to ++ * each node of the dual-node processor ++ */ ++ t = read_pci_config(0, 24 + n, 3, 0xe8); ++ n = (t>>30) & 0x3; ++ if (n == 0) { ++ if (c->cpu_core_id < cpn) ++ n_id = 0; ++ else ++ n_id = 1; ++ } else { ++ if (c->cpu_core_id < cpn) ++ n_id = 1; ++ else ++ n_id = 0; ++ } ++ ++ /* compute entire NodeID, use llc_shared_map to store sibling info */ ++ per_cpu(cpu_llc_id, cpu) = (c->phys_proc_id << 1) + n_id; ++ ++ /* fixup core id to be in range from 0 to cpn */ ++ c->cpu_core_id = c->cpu_core_id % cpn; ++#endif ++} ++#endif ++ ++/* + * On a AMD dual core setup the lower bits of the APIC id distingush the cores. + * Assumes number of cores is a power of two. + */ +@@ -267,6 +325,9 @@ static void __cpuinit amd_detect_cmp(struct cpuinfo_x86 *c) + c->phys_proc_id = c->initial_apicid >> bits; + /* use socket ID also for last level cache */ + per_cpu(cpu_llc_id, cpu) = c->phys_proc_id; ++ /* fixup topology information on multi-node processors */ ++ if ((c->x86 == 0x10) && (c->x86_model == 9)) ++ amd_fixup_dcm(c); + #endif + } + +@@ -277,7 +338,8 @@ static void __cpuinit srat_detect_node(struct cpuinfo_x86 *c) + int node; + unsigned apicid = cpu_has_apic ? hard_smp_processor_id() : c->apicid; + +- node = c->phys_proc_id; ++ node = per_cpu(cpu_llc_id, cpu); ++ + if (apicid_to_node[apicid] != NUMA_NO_NODE) + node = apicid_to_node[apicid]; + if (!node_online(node)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/amd_magny_cour_topology_fix_1.patch new/patches.arch/amd_magny_cour_topology_fix_1.patch --- old/patches.arch/amd_magny_cour_topology_fix_1.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.arch/amd_magny_cour_topology_fix_1.patch 2009-10-12 16:14:56.000000000 +0200 @@ -0,0 +1,76 @@ +From: Andreas Herrmann <andreas.herrmann3@amd.com> +Subject: x86, sched: Workaround broken sched domain creation for AMD Magny-Cours +References: bnc#545615 +Patch-Mainline: yes +Commit-ID: 5a925b4282d7f805deafde62001a83dbaf8be275 + +Signed-off-by: Thomas Renninger <trenn@suse.de> + +Current sched domain creation code can't handle multi-node processors. +When switching to power_savings scheduling errors show up and +system might hang later on (due to broken sched domain hierarchy): + + # echo 0 >> /sys/devices/system/cpu/sched_mc_power_savings + CPU0 attaching sched-domain: + domain 0: span 0-5 level MC + groups: 0 1 2 3 4 5 + domain 1: span 0-23 level NODE + groups: 0-5 6-11 18-23 12-17 + ... + # echo 1 >> /sys/devices/system/cpu/sched_mc_power_savings + CPU0 attaching sched-domain: + domain 0: span 0-11 level MC + groups: 0 1 2 3 4 5 6 7 8 9 10 11 + ERROR: parent span is not a superset of domain->span + domain 1: span 0-5 level CPU + ERROR: domain->groups does not contain CPU0 + groups: 6-11 (__cpu_power = 12288) + ERROR: groups don't span domain->span + domain 2: span 0-23 level NODE + groups: + ERROR: domain->cpu_power not set + + ERROR: groups don't span domain->span + ... + +Fixing all aspects of power-savings scheduling for Magny-Cours needs +some larger changes in the sched domain creation code. + +As a short-term and temporary workaround avoid the problems by +extending "the worst possible hack" ;-( +and always use llc_shared_map on AMD Magny-Cours when MC domain span +is calculated. + +With this I get: + + # echo 1 >> /sys/devices/system/cpu/sched_mc_power_savings + CPU0 attaching sched-domain: + domain 0: span 0-5 level MC + groups: 0 1 2 3 4 5 + domain 1: span 0-5 level CPU + groups: 0-5 (__cpu_power = 6144) + domain 2: span 0-23 level NODE + groups: 0-5 (__cpu_power = 6144) 6-11 (__cpu_power = 6144) 18-23 (__cpu_power = 6144) 12-17 (__cpu_power = 6144) + ... + +I.e. no errors during sched domain creation, no system hangs, and also +mc_power_savings scheduling works to a certain extend. + +Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> +Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> +Signed-off-by: H. Peter Anvin <hpa@zytor.com> + +diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c +index 2fecda6..c36cc14 100644 +--- a/arch/x86/kernel/smpboot.c ++++ b/arch/x86/kernel/smpboot.c +@@ -434,7 +434,8 @@ const struct cpumask *cpu_coregroup_mask(int cpu) + * For perf, we return last level cache shared map. + * And for power savings, we return cpu_core_map + */ +- if (sched_mc_power_savings || sched_smt_power_savings) ++ if ((sched_mc_power_savings || sched_smt_power_savings) && ++ !(cpu_has(c, X86_FEATURE_AMD_DCM))) + return cpu_core_mask(cpu); + else + return c->llc_shared_map; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/amd_magny_cour_topology_fix_2.patch new/patches.arch/amd_magny_cour_topology_fix_2.patch --- old/patches.arch/amd_magny_cour_topology_fix_2.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.arch/amd_magny_cour_topology_fix_2.patch 2009-10-12 16:14:56.000000000 +0200 @@ -0,0 +1,61 @@ +From: Andreas Herrmann <andreas.herrmann3@amd.com> +Subject: x86, mcheck: Use correct cpumask for shared bank4 +References: bnc#545615 +Patch-Mainline: yes +Commit-ID: cb9805ab5b97079f69a21b6b4e344a69d5c96157 + +Signed-off-by: Thomas Renninger <trenn@suse.de> + +This fixes threshold_bank4 support on multi-node processors. + +The correct mask to use is llc_shared_map, representing an internal +node on Magny-Cours. + +We need to create 2 sets of symlinks for sibling shared banks -- one +set for each internal node, symlinks of each set should target the +first core on same internal node. + +Currently only one set is created where all symlinks are targeting +the first core of the entire socket. + +Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> +Signed-off-by: H. Peter Anvin <hpa@zytor.com> + +diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c +index ddae216..1fecba4 100644 +--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c ++++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c +@@ -489,12 +489,14 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) + int i, err = 0; + struct threshold_bank *b = NULL; + char name[32]; ++ struct cpuinfo_x86 *c = &cpu_data(cpu); ++ + + sprintf(name, "threshold_bank%i", bank); + + #ifdef CONFIG_SMP + if (cpu_data(cpu).cpu_core_id && shared_bank[bank]) { /* symlink */ +- i = cpumask_first(cpu_core_mask(cpu)); ++ i = cpumask_first(c->llc_shared_map); + + /* first core not up yet */ + if (cpu_data(i).cpu_core_id) +@@ -514,7 +516,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) + if (err) + goto out; + +- cpumask_copy(b->cpus, cpu_core_mask(cpu)); ++ cpumask_copy(b->cpus, c->llc_shared_map); + per_cpu(threshold_banks, cpu)[bank] = b; + + goto out; +@@ -539,7 +541,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) + #ifndef CONFIG_SMP + cpumask_setall(b->cpus); + #else +- cpumask_copy(b->cpus, cpu_core_mask(cpu)); ++ cpumask_copy(b->cpus, c->llc_shared_map); + #endif + + per_cpu(threshold_banks, cpu)[bank] = b; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/amd_magny_cour_topology_fix_3.patch new/patches.arch/amd_magny_cour_topology_fix_3.patch --- old/patches.arch/amd_magny_cour_topology_fix_3.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.arch/amd_magny_cour_topology_fix_3.patch 2009-10-12 16:14:56.000000000 +0200 @@ -0,0 +1,107 @@ +From: Andreas Herrmann <andreas.herrmann3@amd.com> +Subject: x86, cacheinfo: Fixup L3 cache information for AMD multi-node processors +References: bnc#545615 +Patch-Mainline: yes +Commit-ID: a326e948c538e8ce998f30d92e146ecea8a30421 + +Signed-off-by: Thomas Renninger <trenn@suse.de> + +L3 cache size, associativity and shared_cpu information need to be +adapted to show information for an internal node instead of the +entire physical package. + +Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> +Signed-off-by: H. Peter Anvin <hpa@zytor.com> + +--- + arch/x86/kernel/cpu/intel_cacheinfo.c | 34 +++++++++++++++++++++++----------- + 1 file changed, 23 insertions(+), 11 deletions(-) + +Index: linux-2.6.31-openSUSE-11.2/arch/x86/kernel/cpu/intel_cacheinfo.c +=================================================================== +--- linux-2.6.31-openSUSE-11.2.orig/arch/x86/kernel/cpu/intel_cacheinfo.c ++++ linux-2.6.31-openSUSE-11.2/arch/x86/kernel/cpu/intel_cacheinfo.c +@@ -241,7 +241,7 @@ amd_cpuid4(int leaf, union _cpuid4_leaf_ + case 0: + if (!l1->val) + return; +- assoc = l1->assoc; ++ assoc = assocs[l1->assoc]; + line_size = l1->line_size; + lines_per_tag = l1->lines_per_tag; + size_in_kb = l1->size_in_kb; +@@ -249,7 +249,7 @@ amd_cpuid4(int leaf, union _cpuid4_leaf_ + case 2: + if (!l2.val) + return; +- assoc = l2.assoc; ++ assoc = assocs[l2.assoc]; + line_size = l2.line_size; + lines_per_tag = l2.lines_per_tag; + /* cpu_data has errata corrections for K7 applied */ +@@ -258,10 +258,14 @@ amd_cpuid4(int leaf, union _cpuid4_leaf_ + case 3: + if (!l3.val) + return; +- assoc = l3.assoc; ++ assoc = assocs[l3.assoc]; + line_size = l3.line_size; + lines_per_tag = l3.lines_per_tag; + size_in_kb = l3.size_encoded * 512; ++ if (boot_cpu_has(X86_FEATURE_AMD_DCM)) { ++ size_in_kb = size_in_kb >> 1; ++ assoc = assoc >> 1; ++ } + break; + default: + return; +@@ -270,18 +274,14 @@ amd_cpuid4(int leaf, union _cpuid4_leaf_ + eax->split.is_self_initializing = 1; + eax->split.type = types[leaf]; + eax->split.level = levels[leaf]; +- if (leaf == 3) +- eax->split.num_threads_sharing = +- current_cpu_data.x86_max_cores - 1; +- else +- eax->split.num_threads_sharing = 0; ++ eax->split.num_threads_sharing = 0; + eax->split.num_cores_on_die = current_cpu_data.x86_max_cores - 1; + + +- if (assoc == 0xf) ++ if (assoc == 0xffff) + eax->split.is_fully_associative = 1; + ebx->split.coherency_line_size = line_size - 1; +- ebx->split.ways_of_associativity = assocs[assoc] - 1; ++ ebx->split.ways_of_associativity = assoc - 1; + ebx->split.physical_line_partition = lines_per_tag - 1; + ecx->split.number_of_sets = (size_in_kb * 1024) / line_size / + (ebx->split.ways_of_associativity + 1) - 1; +@@ -514,7 +514,7 @@ unsigned int __cpuinit init_intel_cachei + static DEFINE_PER_CPU(struct _cpuid4_info *, cpuid4_info); + #define CPUID4_INFO_IDX(x, y) (&((per_cpu(cpuid4_info, x))[y])) + +-#ifdef CONFIG_SMP ++#if defined (CONFIG_SMP) && !defined(CONFIG_XEN) + static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index) + { + struct _cpuid4_info *this_leaf, *sibling_leaf; +@@ -522,6 +522,18 @@ static void __cpuinit cache_shared_cpu_m + int index_msb, i; + struct cpuinfo_x86 *c = &cpu_data(cpu); + ++ if ((index == 3) && (c->x86_vendor == X86_VENDOR_AMD)) { ++ struct cpuinfo_x86 *d; ++ for_each_online_cpu(i) { ++ if (!per_cpu(cpuid4_info, i)) ++ continue; ++ d = &cpu_data(i); ++ this_leaf = CPUID4_INFO_IDX(i, index); ++ cpumask_copy(to_cpumask(this_leaf->shared_cpu_map), ++ d->llc_shared_map); ++ } ++ return; ++ } + this_leaf = CPUID4_INFO_IDX(cpu, index); + num_threads_sharing = 1 + this_leaf->eax.split.num_threads_sharing; + ++++++ patches.drivers.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/alsa-hda-2.6.32-rc1-toshiba-fix new/patches.drivers/alsa-hda-2.6.32-rc1-toshiba-fix --- old/patches.drivers/alsa-hda-2.6.32-rc1-toshiba-fix 2009-10-07 15:20:35.000000000 +0200 +++ new/patches.drivers/alsa-hda-2.6.32-rc1-toshiba-fix 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -From 3db6c037c6954ed6d98ef199938e4004fea96908 Mon Sep 17 00:00:00 2001 -From: Manoj Iyer <manoj.iyer@canonical.com> -Date: Tue, 22 Sep 2009 18:33:29 -0500 -Subject: ALSA: hda - Added quirk to enable sound on Toshiba NB200 -Patch-mainline: 2.6.32-rc2 -References: - -Patch was tested on Toshiba NB200 and is found to enable sound. - -Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com> -Cc: stable@kernel.org -Signed-off-by: Takashi Iwai <tiwai@suse.de> - ---- - sound/pci/hda/patch_realtek.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c -index bc057a8..87da5e8 100644 ---- a/sound/pci/hda/patch_realtek.c -+++ b/sound/pci/hda/patch_realtek.c -@@ -16852,6 +16852,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = { - SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_ECS), - SND_PCI_QUIRK(0x105b, 0x0d47, "Foxconn 45CMX/45GMX/45CMX-K", - ALC662_3ST_6ch_DIG), -+ SND_PCI_QUIRK(0x1179, 0xff6e, "Toshiba NB200", ALC663_ASUS_MODE4), - SND_PCI_QUIRK(0x144d, 0xca00, "Samsung NC10", ALC272_SAMSUNG_NC10), - SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L", - ALC662_3ST_6ch_DIG), --- -1.6.4.2 - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/alsa-hda-alc662-capture-fix new/patches.drivers/alsa-hda-alc662-capture-fix --- old/patches.drivers/alsa-hda-alc662-capture-fix 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/alsa-hda-alc662-capture-fix 2009-10-14 18:31:55.000000000 +0200 @@ -0,0 +1,30 @@ +From 4b7348a15972274eb16182d10987f69da3e95719 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <tiwai@suse.de> +Date: Wed, 14 Oct 2009 18:25:23 +0200 +Subject: ALSA: hda - Fix capture source checks for ALC662/663 codecs +Patch-mainline: +References: bnc#546918 + +The ALC662/663 parser calls wrongly alc880_auto_create_input_ctls() +to check the capture source selections. This should be alc882, instead. + +Reference: Novell bnc#546918 + http://bugzilla.novell.com/show_bug.cgi?id=546918 + +Signed-off-by: Takashi Iwai <tiwai@suse.de> + +--- + sound/pci/hda/patch_realtek.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -17369,7 +17369,7 @@ + + /* create playback/capture controls for input pins */ + #define alc662_auto_create_input_ctls \ +- alc880_auto_create_input_ctls ++ alc882_auto_create_input_ctls + + static void alc662_auto_set_output_and_unmute(struct hda_codec *codec, + hda_nid_t nid, int pin_type, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/alsa-hda-nvidia-hdmi-full-fmts new/patches.drivers/alsa-hda-nvidia-hdmi-full-fmts --- old/patches.drivers/alsa-hda-nvidia-hdmi-full-fmts 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/alsa-hda-nvidia-hdmi-full-fmts 2009-10-14 18:31:55.000000000 +0200 @@ -0,0 +1,82 @@ +From f0613d5752d8f7d1d02e6d40947f38877fdf9c90 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <tiwai@suse.de> +Date: Fri, 9 Oct 2009 17:44:08 +0200 +Subject: ALSA: hda - Add full rates/formats support for Nvidia HDMI +Patch-mainline: 2.6.32-rc4 +References: + +Allow Nvidia HDMI to support more possible sample rates and formats. +At best, the really supported rates and formats should be determined +together with the negotiation with the HDMI receiver, but it's currently +not implemented yet (Nvidia stuff seems incompatible with HDMI 1.3 +standard in this regard). As a compromise, we enable all bits, assuming +that all recent devices do support such rates/formats. + +Tested-by: Alan Alan <alanwww1@gmail.com> +Signed-off-by: Takashi Iwai <tiwai@suse.de> + +--- + sound/pci/hda/patch_nvhdmi.c | 31 +++++++++++++++++++++++++------ + 1 file changed, 25 insertions(+), 6 deletions(-) + +--- a/sound/pci/hda/patch_nvhdmi.c ++++ b/sound/pci/hda/patch_nvhdmi.c +@@ -29,6 +29,9 @@ + #include "hda_codec.h" + #include "hda_local.h" + ++/* define below to restrict the supported rates and formats */ ++/* #define LIMITED_RATE_FMT_SUPPORT */ ++ + struct nvhdmi_spec { + struct hda_multi_out multiout; + +@@ -60,6 +63,22 @@ + {} /* terminator */ + }; + ++#ifdef LIMITED_RATE_FMT_SUPPORT ++/* support only the safe format and rate */ ++#define SUPPORTED_RATES SNDRV_PCM_RATE_48000 ++#define SUPPORTED_MAXBPS 16 ++#define SUPPORTED_FORMATS SNDRV_PCM_FMTBIT_S16_LE ++#else ++/* support all rates and formats */ ++#define SUPPORTED_RATES \ ++ (SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |\ ++ SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 |\ ++ SNDRV_PCM_RATE_192000) ++#define SUPPORTED_MAXBPS 24 ++#define SUPPORTED_FORMATS \ ++ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE) ++#endif ++ + /* + * Controls + */ +@@ -258,9 +277,9 @@ + .channels_min = 2, + .channels_max = 8, + .nid = Nv_Master_Convert_nid, +- .rates = SNDRV_PCM_RATE_48000, +- .maxbps = 16, +- .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ .rates = SUPPORTED_RATES, ++ .maxbps = SUPPORTED_MAXBPS, ++ .formats = SUPPORTED_FORMATS, + .ops = { + .open = nvhdmi_dig_playback_pcm_open, + .close = nvhdmi_dig_playback_pcm_close_8ch, +@@ -273,9 +292,9 @@ + .channels_min = 2, + .channels_max = 2, + .nid = Nv_Master_Convert_nid, +- .rates = SNDRV_PCM_RATE_48000, +- .maxbps = 16, +- .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ .rates = SUPPORTED_RATES, ++ .maxbps = SUPPORTED_MAXBPS, ++ .formats = SUPPORTED_FORMATS, + .ops = { + .open = nvhdmi_dig_playback_pcm_open, + .close = nvhdmi_dig_playback_pcm_close_2ch, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/alsa-hda-realtek-overflow-fix new/patches.drivers/alsa-hda-realtek-overflow-fix --- old/patches.drivers/alsa-hda-realtek-overflow-fix 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/alsa-hda-realtek-overflow-fix 2009-10-14 18:31:55.000000000 +0200 @@ -0,0 +1,28 @@ +From 2d9c648295d7bc376305337d29f540a5e411f632 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <tiwai@suse.de> +Date: Tue, 13 Oct 2009 08:06:55 +0200 +Subject: ALSA: hda - Fix overflow of spec->init_verbs in patch_realtek.c +Patch-mainline: 2.6.32-rc4 +References: + +ALC861-VD lenovo model causes overflow of spec->init_verbs entries due to +the recent changes. Simply increase the array size to avoid the overflow. + +Reported-by: Luca Tettamanti <kronos.it@gmail.com> +Signed-off-by: Takashi Iwai <tiwai@suse.de> + +--- + sound/pci/hda/patch_realtek.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -275,7 +275,7 @@ + struct snd_kcontrol_new *cap_mixer; /* capture mixer */ + unsigned int beep_amp; /* beep amp value, set via set_beep_amp() */ + +- const struct hda_verb *init_verbs[5]; /* initialization verbs ++ const struct hda_verb *init_verbs[10]; /* initialization verbs + * don't forget NULL + * termination! + */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/alsa-hda-stac9228-dell-fix new/patches.drivers/alsa-hda-stac9228-dell-fix --- old/patches.drivers/alsa-hda-stac9228-dell-fix 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/alsa-hda-stac9228-dell-fix 2009-10-14 18:31:55.000000000 +0200 @@ -0,0 +1,47 @@ +From ccca7cdc1b8dd2e7b67e9289a6abf117b11cbe6b Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <tiwai@suse.de> +Date: Tue, 13 Oct 2009 15:32:21 +0200 +Subject: ALSA: hda - Fix volume-knob setup for Dell laptops with STAC9228 +Patch-mainline: 2.6.32-rc4 +References: bnc#545013 + +The volume-knob widget needs to be set with 0x7f instead of 0xff +for Dell laptops with STAC9228 codec, too, like the previous commit. + +Reference: Novell bnc#545013 + http://bugzilla.novell.com/show_bug.cgi?id=545013 + +Signed-off-by: Takashi Iwai <tiwai@suse.de> + +--- + sound/pci/hda/patch_sigmatel.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +--- a/sound/pci/hda/patch_sigmatel.c ++++ b/sound/pci/hda/patch_sigmatel.c +@@ -908,6 +908,16 @@ + {} + }; + ++static struct hda_verb dell_3st_core_init[] = { ++ /* don't set delta bit */ ++ {0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0x7f}, ++ /* unmute node 0x1b */ ++ {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, ++ /* select node 0x03 as DAC */ ++ {0x0b, AC_VERB_SET_CONNECT_SEL, 0x01}, ++ {} ++}; ++ + static struct hda_verb stac927x_core_init[] = { + /* set master volume and direct control */ + { 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff}, +@@ -5625,7 +5635,7 @@ + spec->dmic_nids = stac927x_dmic_nids; + spec->num_dmics = STAC927X_NUM_DMICS; + +- spec->init = d965_core_init; ++ spec->init = dell_3st_core_init; + spec->dmux_nids = stac927x_dmux_nids; + spec->num_dmuxes = ARRAY_SIZE(stac927x_dmux_nids); + break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/alsa-hda-stac9228-fsc-fix new/patches.drivers/alsa-hda-stac9228-fsc-fix --- old/patches.drivers/alsa-hda-stac9228-fsc-fix 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/alsa-hda-stac9228-fsc-fix 2009-10-14 18:31:55.000000000 +0200 @@ -0,0 +1,95 @@ +From 364521d780a0073b1d6e1a2805d126686b7d2560 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <tiwai@suse.de> +Date: Sun, 11 Oct 2009 17:38:29 +0200 +Subject: ALSA: hda - Fix mute sound with STAC9227/9228 codecs +Patch-mainline: +References: bnc#546006 + +On FSC laptops, the sound gets muted gradually when the volume is chnaged. +This is due to the wrong volume-knob widget setup. The delta bit (bit 7) +shouldn't be set for these devices. + +This patch adds a new quirk to set the value 0x7f to the widget 0x24 +instead of 0xff. + +Reference: Novell bnc#546006 + http://bugzilla.novell.com/show_bug.cgi?id=546006 + +Signed-off-by: Takashi Iwai <tiwai@suse.de> + +--- + Documentation/sound/alsa/HD-Audio-Models.txt | 1 + + sound/pci/hda/patch_sigmatel.c | 17 +++++++++++++++++ + 2 files changed, 18 insertions(+) + +--- a/Documentation/sound/alsa/HD-Audio-Models.txt ++++ b/Documentation/sound/alsa/HD-Audio-Models.txt +@@ -357,6 +357,7 @@ + 5stack-no-fp D965 5stack without front panel + dell-3stack Dell Dimension E520 + dell-bios Fixes with Dell BIOS setup ++ volknob Fixes with volume-knob widget 0x24 + auto BIOS setup (default) + + STAC92HD71B* +--- a/sound/pci/hda/patch_sigmatel.c ++++ b/sound/pci/hda/patch_sigmatel.c +@@ -158,6 +158,7 @@ + STAC_D965_5ST_NO_FP, + STAC_DELL_3ST, + STAC_DELL_BIOS, ++ STAC_927X_VOLKNOB, + STAC_927X_MODELS + }; + +@@ -915,6 +916,14 @@ + {} + }; + ++static struct hda_verb stac927x_volknob_core_init[] = { ++ /* don't set delta bit */ ++ {0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0x7f}, ++ /* enable analog pc beep path */ ++ {0x01, AC_VERB_SET_DIGI_CONVERT_2, 1 << 5}, ++ {} ++}; ++ + static struct hda_verb stac9205_core_init[] = { + /* set master volume and direct control */ + { 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff}, +@@ -1999,6 +2008,7 @@ + [STAC_D965_5ST_NO_FP] = d965_5st_no_fp_pin_configs, + [STAC_DELL_3ST] = dell_3st_pin_configs, + [STAC_DELL_BIOS] = NULL, ++ [STAC_927X_VOLKNOB] = NULL, + }; + + static const char *stac927x_models[STAC_927X_MODELS] = { +@@ -2010,6 +2020,7 @@ + [STAC_D965_5ST_NO_FP] = "5stack-no-fp", + [STAC_DELL_3ST] = "dell-3stack", + [STAC_DELL_BIOS] = "dell-bios", ++ [STAC_927X_VOLKNOB] = "volknob", + }; + + static struct snd_pci_quirk stac927x_cfg_tbl[] = { +@@ -2045,6 +2056,8 @@ + "Intel D965", STAC_D965_5ST), + SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_INTEL, 0xff00, 0x2500, + "Intel D965", STAC_D965_5ST), ++ /* volume-knob fixes */ ++ SND_PCI_QUIRK_VENDOR(0x10cf, "FSC", STAC_927X_VOLKNOB), + {} /* terminator */ + }; + +@@ -5616,6 +5629,10 @@ + spec->dmux_nids = stac927x_dmux_nids; + spec->num_dmuxes = ARRAY_SIZE(stac927x_dmux_nids); + break; ++ case STAC_927X_VOLKNOB: ++ spec->num_dmics = 0; ++ spec->init = stac927x_volknob_core_init; ++ break; + default: + spec->num_dmics = 0; + spec->init = stac927x_core_init; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/samsung-laptop-driver.patch new/patches.drivers/samsung-laptop-driver.patch --- old/patches.drivers/samsung-laptop-driver.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/samsung-laptop-driver.patch 2009-10-14 18:31:55.000000000 +0200 @@ -0,0 +1,640 @@ +From foo@baz Fri Aug 21 15:51:53 PDT 2009 +Date: Fri, 21 Aug 2009 15:51:53 -0700 +To: Greg KH <greg@kroah.com> +From: Greg Kroah-Hartman <gregkh@suse.de> +Subject: Samsung laptop driver + +This driver implements backlight controls for Samsung laptops that +currently do not have ACPI support for this control. + +It has been tested on the N130 laptop and properly works there. + +Info for the NC10 was provided by Soeren Sonnenburg <bugreports@nn7.de> +Info for the NP-Q45 from Jérémie Huchet <jeremie@lamah.info> + +Many thanks to Dmitry Torokhov <dmitry.torokhov@gmail.com> for cleanups +and other suggestions on how to make the driver simpler. + +Cc: Soeren Sonnenburg <bugreports@nn7.de> +Cc: Jérémie Huchet <jeremie@lamah.info> +Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/platform/x86/Kconfig | 12 + drivers/platform/x86/Makefile | 1 + drivers/platform/x86/samsung-laptop.c | 582 ++++++++++++++++++++++++++++++++++ + 3 files changed, 595 insertions(+) + + +--- a/drivers/platform/x86/Kconfig ++++ b/drivers/platform/x86/Kconfig +@@ -425,4 +425,16 @@ config ACPI_TOSHIBA + + If you have a legacy free Toshiba laptop (such as the Libretto L1 + series), say Y. ++ ++config SAMSUNG_LAPTOP ++ tristate "Samsung Laptop driver" ++ depends on BACKLIGHT_CLASS_DEVICE ++ depends on DMI ++ ---help--- ++ This driver adds support to control the backlight on a number of ++ Samsung laptops, like the N130, and control for some of the LEDs ++ ++ It will only be loaded on laptops that properly need it, so it is ++ safe to say Y here. ++ + endif # X86_PLATFORM_DEVICES +--- a/drivers/platform/x86/Makefile ++++ b/drivers/platform/x86/Makefile +@@ -20,3 +20,4 @@ obj-$(CONFIG_INTEL_MENLOW) += intel_menl + obj-$(CONFIG_ACPI_WMI) += wmi.o + obj-$(CONFIG_ACPI_ASUS) += asus_acpi.o + obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o ++obj-$(CONFIG_SAMSUNG_LAPTOP) += samsung-laptop.o +--- /dev/null ++++ b/drivers/platform/x86/samsung-laptop.c +@@ -0,0 +1,582 @@ ++/* ++ * Samsung N130 Laptop driver ++ * ++ * Copyright (C) 2009 Greg Kroah-Hartman (gregkh@suse.de) ++ * Copyright (C) 2009 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published by ++ * the Free Software Foundation. ++ * ++ */ ++#include <linux/version.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/module.h> ++#include <linux/delay.h> ++#include <linux/pci.h> ++#include <linux/backlight.h> ++#include <linux/fb.h> ++#include <linux/dmi.h> ++#include <linux/platform_device.h> ++#include <linux/rfkill.h> ++ ++/* ++ * This driver is needed because a number of Samsung laptops do not hook ++ * their control settings through ACPI. So we have to poke around in the ++ * BIOS to do things like brightness values, and "special" key controls. ++ */ ++ ++/* ++ * We have 0 - 8 as valid brightness levels. The specs say that level 0 should ++ * be reserved by the BIOS (which really doesn't make much sense), we tell ++ * userspace that the value is 0 - 7 and then just tell the hardware 1 - 8 ++ */ ++#define MAX_BRIGHT 0x07 ++ ++/* Brightness is 0 - 8, as described above. Value 0 is for the BIOS to use */ ++#define GET_BRIGHTNESS 0x00 ++#define SET_BRIGHTNESS 0x01 ++ ++/* first byte: ++ * 0x00 - wireless is off ++ * 0x01 - wireless is on ++ * second byte: ++ * 0x02 - 3G is off ++ * 0x03 - 3G is on ++ * TODO, verify 3G is correct, that doesn't seem right... ++ */ ++#define GET_WIRELESS_BUTTON 0x02 ++#define SET_WIRELESS_BUTTON 0x03 ++ ++/* 0 is off, 1 is on */ ++#define GET_BACKLIGHT 0x04 ++#define SET_BACKLIGHT 0x05 ++ ++/* ++ * 0x80 or 0x00 - no action ++ * 0x81 - recovery key pressed ++ */ ++#define GET_RECOVERY_METHOD 0x06 ++#define SET_RECOVERY_METHOD 0x07 ++ ++/* 0 is low, 1 is high */ ++#define GET_PERFORMANCE_LEVEL 0x08 ++#define SET_PERFORMANCE_LEVEL 0x09 ++ ++/* ++ * Tell the BIOS that Linux is running on this machine. ++ * 81 is on, 80 is off ++ */ ++#define SET_LINUX 0x0a ++ ++ ++#define MAIN_FUNCTION 0x4c49 ++ ++#define SABI_HEADER_PORT 0x00 ++#define SABI_HEADER_RE_MEM 0x02 ++#define SABI_HEADER_IFACEFUNC 0x03 ++#define SABI_HEADER_EN_MEM 0x04 ++#define SABI_HEADER_DATA_OFFSET 0x05 ++#define SABI_HEADER_DATA_SEGMENT 0x07 ++ ++#define SABI_IFACE_MAIN 0x00 ++#define SABI_IFACE_SUB 0x02 ++#define SABI_IFACE_COMPLETE 0x04 ++#define SABI_IFACE_DATA 0x05 ++ ++/* Structure to get data back to the calling function */ ++struct sabi_retval { ++ u8 retval[20]; ++}; ++ ++static void __iomem *sabi; ++static void __iomem *sabi_iface; ++static void __iomem *f0000_segment; ++static struct backlight_device *backlight_device; ++static struct mutex sabi_mutex; ++static struct platform_device *sdev; ++static struct rfkill *rfk; ++ ++static int force; ++module_param(force, bool, 0); ++MODULE_PARM_DESC(force, "Disable the DMI check and forces the driver to be loaded"); ++ ++static int debug; ++module_param(debug, bool, S_IRUGO | S_IWUSR); ++MODULE_PARM_DESC(debug, "Debug enabled or not"); ++ ++static int sabi_get_command(u8 command, struct sabi_retval *sretval) ++{ ++ int retval = 0; ++ u16 port = readw(sabi + SABI_HEADER_PORT); ++ ++ mutex_lock(&sabi_mutex); ++ ++ /* enable memory to be able to write to it */ ++ outb(readb(sabi + SABI_HEADER_EN_MEM), port); ++ ++ /* write out the command */ ++ writew(MAIN_FUNCTION, sabi_iface + SABI_IFACE_MAIN); ++ writew(command, sabi_iface + SABI_IFACE_SUB); ++ writeb(0, sabi_iface + SABI_IFACE_COMPLETE); ++ outb(readb(sabi + SABI_HEADER_IFACEFUNC), port); ++ ++ /* write protect memory to make it safe */ ++ outb(readb(sabi + SABI_HEADER_RE_MEM), port); ++ ++ /* see if the command actually succeeded */ ++ if (readb(sabi_iface + SABI_IFACE_COMPLETE) == 0xaa && ++ readb(sabi_iface + SABI_IFACE_DATA) != 0xff) { ++ /* ++ * It did! ++ * Save off the data into a structure so the caller use it. ++ * Right now we only care about the first 4 bytes, ++ * I suppose there are commands that need more, but I don't ++ * know about them. ++ */ ++ sretval->retval[0] = readb(sabi_iface + SABI_IFACE_DATA); ++ sretval->retval[1] = readb(sabi_iface + SABI_IFACE_DATA + 1); ++ sretval->retval[2] = readb(sabi_iface + SABI_IFACE_DATA + 2); ++ sretval->retval[3] = readb(sabi_iface + SABI_IFACE_DATA + 3); ++ goto exit; ++ } ++ ++ /* Something bad happened, so report it and error out */ ++ printk(KERN_WARNING "SABI command 0x%02x failed with completion flag 0x%02x and output 0x%02x\n", ++ command, readb(sabi_iface + SABI_IFACE_COMPLETE), ++ readb(sabi_iface + SABI_IFACE_DATA)); ++ retval = -EINVAL; ++exit: ++ mutex_unlock(&sabi_mutex); ++ return retval; ++ ++} ++ ++static int sabi_set_command(u8 command, u8 data) ++{ ++ int retval = 0; ++ u16 port = readw(sabi + SABI_HEADER_PORT); ++ ++ mutex_lock(&sabi_mutex); ++ ++ /* enable memory to be able to write to it */ ++ outb(readb(sabi + SABI_HEADER_EN_MEM), port); ++ ++ /* write out the command */ ++ writew(MAIN_FUNCTION, sabi_iface + SABI_IFACE_MAIN); ++ writew(command, sabi_iface + SABI_IFACE_SUB); ++ writeb(0, sabi_iface + SABI_IFACE_COMPLETE); ++ writeb(data, sabi_iface + SABI_IFACE_DATA); ++ outb(readb(sabi + SABI_HEADER_IFACEFUNC), port); ++ ++ /* write protect memory to make it safe */ ++ outb(readb(sabi + SABI_HEADER_RE_MEM), port); ++ ++ /* see if the command actually succeeded */ ++ if (readb(sabi_iface + SABI_IFACE_COMPLETE) == 0xaa && ++ readb(sabi_iface + SABI_IFACE_DATA) != 0xff) { ++ /* it did! */ ++ goto exit; ++ } ++ ++ /* Something bad happened, so report it and error out */ ++ printk(KERN_WARNING "SABI command 0x%02x failed with completion flag 0x%02x and output 0x%02x\n", ++ command, readb(sabi_iface + SABI_IFACE_COMPLETE), ++ readb(sabi_iface + SABI_IFACE_DATA)); ++ retval = -EINVAL; ++exit: ++ mutex_unlock(&sabi_mutex); ++ return retval; ++} ++ ++static void test_backlight(void) ++{ ++ struct sabi_retval sretval; ++ ++ sabi_get_command(GET_BACKLIGHT, &sretval); ++ printk(KERN_DEBUG "backlight = 0x%02x\n", sretval.retval[0]); ++ ++ sabi_set_command(SET_BACKLIGHT, 0); ++ printk(KERN_DEBUG "backlight should be off\n"); ++ ++ sabi_get_command(GET_BACKLIGHT, &sretval); ++ printk(KERN_DEBUG "backlight = 0x%02x\n", sretval.retval[0]); ++ ++ msleep(1000); ++ ++ sabi_set_command(SET_BACKLIGHT, 1); ++ printk(KERN_DEBUG "backlight should be on\n"); ++ ++ sabi_get_command(GET_BACKLIGHT, &sretval); ++ printk(KERN_DEBUG "backlight = 0x%02x\n", sretval.retval[0]); ++} ++ ++static void test_wireless(void) ++{ ++ struct sabi_retval sretval; ++ ++ sabi_get_command(GET_WIRELESS_BUTTON, &sretval); ++ printk(KERN_DEBUG "wireless led = 0x%02x\n", sretval.retval[0]); ++ ++ sabi_set_command(SET_WIRELESS_BUTTON, 0); ++ printk(KERN_DEBUG "wireless led should be off\n"); ++ ++ sabi_get_command(GET_WIRELESS_BUTTON, &sretval); ++ printk(KERN_DEBUG "wireless led = 0x%02x\n", sretval.retval[0]); ++ ++ msleep(1000); ++ ++ sabi_set_command(SET_WIRELESS_BUTTON, 1); ++ printk(KERN_DEBUG "wireless led should be on\n"); ++ ++ sabi_get_command(GET_WIRELESS_BUTTON, &sretval); ++ printk(KERN_DEBUG "wireless led = 0x%02x\n", sretval.retval[0]); ++} ++ ++static u8 read_brightness(void) ++{ ++ struct sabi_retval sretval; ++ int user_brightness = 0; ++ int retval; ++ ++ retval = sabi_get_command(GET_BACKLIGHT, &sretval); ++ if (!retval) ++ user_brightness = sretval.retval[0]; ++ if (user_brightness != 0) ++ --user_brightness; ++ return user_brightness; ++} ++ ++static void set_brightness(u8 user_brightness) ++{ ++ sabi_set_command(SET_BRIGHTNESS, user_brightness + 1); ++} ++ ++static int get_brightness(struct backlight_device *bd) ++{ ++ return bd->props.brightness; ++} ++ ++static int update_status(struct backlight_device *bd) ++{ ++ set_brightness(bd->props.brightness); ++ ++ if (bd->props.power == FB_BLANK_UNBLANK) ++ sabi_set_command(SET_BACKLIGHT, 1); ++ else ++ sabi_set_command(SET_BACKLIGHT, 0); ++ return 0; ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = get_brightness, ++ .update_status = update_status, ++}; ++ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31) ++static int rfkill_set(void *data, bool blocked) ++{ ++ /* Do something with blocked...*/ ++ /* ++ * blocked == false is on ++ * blocked == true is off ++ */ ++ if (blocked) ++ sabi_set_command(SET_WIRELESS_BUTTON, 0); ++ else ++ sabi_set_command(SET_WIRELESS_BUTTON, 1); ++ ++ return 0; ++} ++ ++static struct rfkill_ops rfkill_ops = { ++ .set_block = rfkill_set, ++}; ++ ++static int init_wireless(struct platform_device *sdev) ++{ ++ int retval; ++ ++ rfk = rfkill_alloc("samsung-wifi", &sdev->dev, RFKILL_TYPE_WLAN, ++ &rfkill_ops, NULL); ++ if (!rfk) ++ return -ENOMEM; ++ ++ retval = rfkill_register(rfk); ++ if (retval) { ++ rfkill_destroy(rfk); ++ return -ENODEV; ++ } ++ ++ return 0; ++} ++ ++static void destroy_wireless(void) ++{ ++ rfkill_unregister(rfk); ++ rfkill_destroy(rfk); ++} ++ ++#else ++ ++static int rfkill_set(void *data, enum rfkill_state state) ++{ ++ if (state == RFKILL_STATE_UNBLOCKED) ++ sabi_set_command(SET_WIRELESS_BUTTON, 1); ++ else ++ sabi_set_command(SET_WIRELESS_BUTTON, 0); ++ ++ return 0; ++} ++ ++static int init_wireless(struct platform_device *sdev) ++{ ++ int retval; ++ ++ rfk = rfkill_allocate(&sdev->dev, RFKILL_TYPE_WLAN); ++ if (!rfk) ++ return -ENOMEM; ++ rfk->toggle_radio = rfkill_set; ++ rfk->name = "samsung-wifi"; ++ ++ retval = rfkill_register(rfk); ++ if (retval) { ++ rfkill_free(rfk); ++ return -ENODEV; ++ } ++ ++ return 0; ++} ++ ++static void destroy_wireless(void) ++{ ++ rfkill_unregister(rfk); ++} ++ ++#endif ++ ++static ssize_t get_silent_state(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ struct sabi_retval sretval; ++ int retval; ++ ++ /* Read the state */ ++ retval = sabi_get_command(GET_PERFORMANCE_LEVEL, &sretval); ++ if (retval) ++ return retval; ++ ++ /* The logic is backwards, yeah, lots of fun... */ ++ if (sretval.retval[0] == 0) ++ retval = 1; ++ else ++ retval = 0; ++ return sprintf(buf, "%d\n", retval); ++} ++ ++static ssize_t set_silent_state(struct device *dev, ++ struct device_attribute *attr, const char *buf, ++ size_t count) ++{ ++ char value; ++ ++ if (count >= 1) { ++ value = buf[0]; ++ if ((value == '0') || (value == 'n') || (value == 'N')) { ++ /* Turn speed up */ ++ sabi_set_command(SET_PERFORMANCE_LEVEL, 0x01); ++ } else if ((value == '1') || (value == 'y') || (value == 'Y')) { ++ /* Turn speed down */ ++ sabi_set_command(SET_PERFORMANCE_LEVEL, 0x00); ++ } else { ++ return -EINVAL; ++ } ++ } ++ return count; ++} ++static DEVICE_ATTR(silent, S_IWUGO | S_IRUGO, ++ get_silent_state, set_silent_state); ++ ++ ++static int __init dmi_check_cb(const struct dmi_system_id *id) ++{ ++ printk(KERN_INFO KBUILD_MODNAME ": found laptop model '%s'\n", ++ id->ident); ++ return 0; ++} ++ ++static struct dmi_system_id __initdata samsung_dmi_table[] = { ++ { ++ .ident = "N128", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "N128"), ++ DMI_MATCH(DMI_BOARD_NAME, "N128"), ++ }, ++ .callback = dmi_check_cb, ++ }, ++ { ++ .ident = "N130", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "N130"), ++ DMI_MATCH(DMI_BOARD_NAME, "N130"), ++ }, ++ .callback = dmi_check_cb, ++ }, ++ { }, ++}; ++MODULE_DEVICE_TABLE(dmi, samsung_dmi_table); ++ ++static int __init samsung_init(void) ++{ ++ struct sabi_retval sretval; ++ const char *testStr = "SECLINUX"; ++ void __iomem *memcheck; ++ unsigned int ifaceP; ++ int pStr; ++ int loca; ++ int retval; ++ ++ mutex_init(&sabi_mutex); ++ ++ if (!force && !dmi_check_system(samsung_dmi_table)) ++ return -ENODEV; ++ ++ f0000_segment = ioremap(0xf0000, 0xffff); ++ if (!f0000_segment) { ++ printk(KERN_ERR "Can't map the segment at 0xf0000\n"); ++ return -EINVAL; ++ } ++ ++ /* Try to find the signature "SECLINUX" in memory to find the header */ ++ pStr = 0; ++ memcheck = f0000_segment; ++ for (loca = 0; loca < 0xffff; loca++) { ++ char temp = readb(memcheck + loca); ++ ++ if (temp == testStr[pStr]) { ++ if (pStr == strlen(testStr)-1) ++ break; ++ ++pStr; ++ } else { ++ pStr = 0; ++ } ++ } ++ if (loca == 0xffff) { ++ printk(KERN_ERR "This computer does not support SABI\n"); ++ goto error_no_signature; ++ } ++ ++ /* point to the SMI port Number */ ++ loca += 1; ++ sabi = (memcheck + loca); ++ ++ if (debug) { ++ printk(KERN_DEBUG "This computer supports SABI==%x\n", ++ loca + 0xf0000 - 6); ++ printk(KERN_DEBUG "SABI header:\n"); ++ printk(KERN_DEBUG " SMI Port Number = 0x%04x\n", ++ readw(sabi + SABI_HEADER_PORT)); ++ printk(KERN_DEBUG " SMI Interface Function = 0x%02x\n", ++ readb(sabi + SABI_HEADER_IFACEFUNC)); ++ printk(KERN_DEBUG " SMI enable memory buffer = 0x%02x\n", ++ readb(sabi + SABI_HEADER_EN_MEM)); ++ printk(KERN_DEBUG " SMI restore memory buffer = 0x%02x\n", ++ readb(sabi + SABI_HEADER_RE_MEM)); ++ printk(KERN_DEBUG " SABI data offset = 0x%04x\n", ++ readw(sabi + SABI_HEADER_DATA_OFFSET)); ++ printk(KERN_DEBUG " SABI data segment = 0x%04x\n", ++ readw(sabi + SABI_HEADER_DATA_SEGMENT)); ++ } ++ ++ /* Get a pointer to the SABI Interface */ ++ ifaceP = (readw(sabi + SABI_HEADER_DATA_SEGMENT) & 0x0ffff) << 4; ++ ifaceP += readw(sabi + SABI_HEADER_DATA_OFFSET) & 0x0ffff; ++ sabi_iface = ioremap(ifaceP, 16); ++ if (!sabi_iface) { ++ printk(KERN_ERR "Can't remap %x\n", ifaceP); ++ goto exit; ++ } ++ if (debug) { ++ printk(KERN_DEBUG "ifaceP = 0x%08x\n", ifaceP); ++ printk(KERN_DEBUG "sabi_iface = %p\n", sabi_iface); ++ ++ test_backlight(); ++ test_wireless(); ++ ++ retval = sabi_get_command(GET_BRIGHTNESS, &sretval); ++ printk(KERN_DEBUG "brightness = 0x%02x\n", sretval.retval[0]); ++ } ++ ++ /* Turn on "Linux" mode in the BIOS */ ++ retval = sabi_set_command(SET_LINUX, 0x81); ++ if (retval) { ++ printk(KERN_ERR KBUILD_MODNAME ": Linux mode was not set!\n"); ++ goto error_no_platform; ++ } ++ ++ /* knock up a platform device to hang stuff off of */ ++ sdev = platform_device_register_simple("samsung", -1, NULL, 0); ++ if (IS_ERR(sdev)) ++ goto error_no_platform; ++ ++ /* create a backlight device to talk to this one */ ++ backlight_device = backlight_device_register("samsung", &sdev->dev, ++ NULL, &backlight_ops); ++ if (IS_ERR(backlight_device)) ++ goto error_no_backlight; ++ ++ backlight_device->props.max_brightness = MAX_BRIGHT; ++ backlight_device->props.brightness = read_brightness(); ++ backlight_device->props.power = FB_BLANK_UNBLANK; ++ backlight_update_status(backlight_device); ++ ++ retval = init_wireless(sdev); ++ if (retval) ++ goto error_no_rfk; ++ ++ retval = device_create_file(&sdev->dev, &dev_attr_silent); ++ if (retval) ++ goto error_file_create; ++ ++exit: ++ return 0; ++ ++error_file_create: ++ destroy_wireless(); ++ ++error_no_rfk: ++ backlight_device_unregister(backlight_device); ++ ++error_no_backlight: ++ platform_device_unregister(sdev); ++ ++error_no_platform: ++ iounmap(sabi_iface); ++ ++error_no_signature: ++ iounmap(f0000_segment); ++ return -EINVAL; ++} ++ ++static void __exit samsung_exit(void) ++{ ++ /* Turn off "Linux" mode in the BIOS */ ++ sabi_set_command(SET_LINUX, 0x80); ++ ++ device_remove_file(&sdev->dev, &dev_attr_silent); ++ backlight_device_unregister(backlight_device); ++ destroy_wireless(); ++ iounmap(sabi_iface); ++ iounmap(f0000_segment); ++ platform_device_unregister(sdev); ++} ++ ++module_init(samsung_init); ++module_exit(samsung_exit); ++ ++MODULE_AUTHOR("Greg Kroah-Hartman <gregkh@suse.de>"); ++MODULE_DESCRIPTION("Samsung Backlight driver"); ++MODULE_LICENSE("GPL"); ++++++ patches.fixes.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/futex-add-memory-barrier-commentary new/patches.fixes/futex-add-memory-barrier-commentary --- old/patches.fixes/futex-add-memory-barrier-commentary 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/futex-add-memory-barrier-commentary 2009-10-12 15:13:55.000000000 +0200 @@ -0,0 +1,34 @@ +Subject: futex: Add memory barrier commentary to futex_wait_queue_me() +From: Darren Hart dvhltc@us.ibm.com Thu Sep 24 11:54:47 2009 -0700 +Date: Thu Sep 24 22:30:10 2009 +0200: +Git: 9beba3c54dd180a26a1da2027cfbe9edfaf9c40e + +The memory barrier semantics of futex_wait_queue_me() are +non-obvious. Add some commentary to try and clarify it. + +Signed-off-by: Darren Hart <dvhltc@us.ibm.com> +Cc: Peter Zijlstra <peterz@infradead.org> +Cc: Eric Dumazet <eric.dumazet@gmail.com> +Cc: Dinakar Guniguntala <dino@in.ibm.com> +Cc: John Stultz <johnstul@us.ibm.com> +LKML-Reference: <20090924185447.694.38948.stgit@Aeon> +Signed-off-by: Ingo Molnar <mingo@elte.hu> +Acked-by: Sven-Thorsten Dietrich <sdietrich@suse.de> + +diff --git a/kernel/futex.c b/kernel/futex.c +index 463af2e..b911adc 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -1656,6 +1656,12 @@ out: + static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q, + struct hrtimer_sleeper *timeout) + { ++ /* ++ * The task state is guaranteed to be set before another task can ++ * wake it. set_current_state() is implemented using set_mb() and ++ * queue_me() calls spin_unlock() upon completion, both serializing ++ * access to the hash list and forcing another memory barrier. ++ */ + set_current_state(TASK_INTERRUPTIBLE); + queue_me(q, hb); + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/futex-correct-futex_q-woken-state-commentary new/patches.fixes/futex-correct-futex_q-woken-state-commentary --- old/patches.fixes/futex-correct-futex_q-woken-state-commentary 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/futex-correct-futex_q-woken-state-commentary 2009-10-12 15:13:55.000000000 +0200 @@ -0,0 +1,80 @@ +Subject: futex: Correct futex_q woken state commentary +From: Darren Hart dvhltc@us.ibm.com Mon Sep 21 22:30:30 2009 -0700 +Date: Tue Sep 22 10:37:44 2009 +0200: +Git: d8d88fbb186fe3ea37b2a58adb32413c98b59656 + +Use kernel-doc format to describe struct futex_q. + +Correct the wakeup definition to eliminate the statement about +waking the waiter between the plist_del() and the q->lock_ptr = 0. + +Note in the comment that PI futexes have a different definition of +the woken state. + +Signed-off-by: Darren Hart <dvhltc@us.ibm.com> +Acked-by: Peter Zijlstra <peterz@infradead.org> +Cc: Steven Rostedt <rostedt@goodmis.org> +Cc: Eric Dumazet <eric.dumazet@gmail.com> +Cc: Dinakar Guniguntala <dino@in.ibm.com> +Cc: John Stultz <johnstul@us.ibm.com> +LKML-Reference: <20090922053029.8717.62798.stgit@Aeon> +Signed-off-by: Ingo Molnar <mingo@elte.hu> +Acked-by: Sven-Thorsten Dietrich <sdietrich@suse.de> + +diff --git a/kernel/futex.c b/kernel/futex.c +index 720fa3d..f92afbe 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -89,36 +89,36 @@ struct futex_pi_state { + union futex_key key; + }; + +-/* +- * We use this hashed waitqueue instead of a normal wait_queue_t, so ++/** ++ * struct futex_q - The hashed futex queue entry, one per waiting task ++ * @task: the task waiting on the futex ++ * @lock_ptr: the hash bucket lock ++ * @key: the key the futex is hashed on ++ * @pi_state: optional priority inheritance state ++ * @rt_waiter: rt_waiter storage for use with requeue_pi ++ * @requeue_pi_key: the requeue_pi target futex key ++ * @bitset: bitset for the optional bitmasked wakeup ++ * ++ * We use this hashed waitqueue, instead of a normal wait_queue_t, so + * we can wake only the relevant ones (hashed queues may be shared). + * + * A futex_q has a woken state, just like tasks have TASK_RUNNING. + * It is considered woken when plist_node_empty(&q->list) || q->lock_ptr == 0. + * The order of wakup is always to make the first condition true, then +- * wake up q->waiter, then make the second condition true. ++ * the second. ++ * ++ * PI futexes are typically woken before they are removed from the hash list via ++ * the rt_mutex code. See unqueue_me_pi(). + */ + struct futex_q { + struct plist_node list; +- /* Waiter reference */ +- struct task_struct *task; + +- /* Which hash list lock to use: */ ++ struct task_struct *task; + spinlock_t *lock_ptr; +- +- /* Key which the futex is hashed on: */ + union futex_key key; +- +- /* Optional priority inheritance state: */ + struct futex_pi_state *pi_state; +- +- /* rt_waiter storage for requeue_pi: */ + struct rt_mutex_waiter *rt_waiter; +- +- /* The expected requeue pi target futex key: */ + union futex_key *requeue_pi_key; +- +- /* Bitset for the optional bitmasked wakeup */ + u32 bitset; + }; + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/futex-correct-futex_wait_requeue_pi-commentary new/patches.fixes/futex-correct-futex_wait_requeue_pi-commentary --- old/patches.fixes/futex-correct-futex_wait_requeue_pi-commentary 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/futex-correct-futex_wait_requeue_pi-commentary 2009-10-12 15:13:55.000000000 +0200 @@ -0,0 +1,66 @@ +Subject: futex: Correct futex_wait_requeue_pi() commentary +From: Darren Hart dvhltc@us.ibm.com Fri Jul 31 16:20:10 2009 -0700 +Date: Tue Aug 4 15:59:14 2009 +0200: +Git: cc6db4e60116c1f76577b6850a35ae7de69a95b6 + +The state machine described in the comments wasn't updated with +a follow-on fix. Address that and cleanup the corresponding +commentary in the function. + +Signed-off-by: Darren Hart <dvhltc@us.ibm.com> +Cc: Peter Zijlstra <peterz@infradead.org> +Cc: Steven Rostedt <rostedt@goodmis.org> +Cc: Thomas Gleixner <tglx@linutronix.de> +LKML-Reference: <4A737C2A.9090001@us.ibm.com> +Signed-off-by: Ingo Molnar <mingo@elte.hu> +Acked-by: Sven-Thorsten Dietrich <sdietrich@suse.de> + +diff --git a/kernel/futex.c b/kernel/futex.c +index 0672ff8..d077201 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -2102,11 +2102,11 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, + * We call schedule in futex_wait_queue_me() when we enqueue and return there + * via the following: + * 1) wakeup on uaddr2 after an atomic lock acquisition by futex_requeue() +- * 2) wakeup on uaddr2 after a requeue and subsequent unlock +- * 3) signal (before or after requeue) +- * 4) timeout (before or after requeue) ++ * 2) wakeup on uaddr2 after a requeue ++ * 3) signal ++ * 4) timeout + * +- * If 3, we setup a restart_block with futex_wait_requeue_pi() as the function. ++ * If 3, cleanup and return -ERESTARTNOINTR. + * + * If 2, we may then block on trying to take the rt_mutex and return via: + * 5) successful lock +@@ -2114,7 +2114,7 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, + * 7) timeout + * 8) other lock acquisition failure + * +- * If 6, we setup a restart_block with futex_lock_pi() as the function. ++ * If 6, return -EWOULDBLOCK (restarting the syscall would do the same). + * + * If 4 or 7, we cleanup and return with -ETIMEDOUT. + * +@@ -2232,14 +2232,11 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, int fshared, + rt_mutex_unlock(pi_mutex); + } else if (ret == -EINTR) { + /* +- * We've already been requeued, but we have no way to +- * restart by calling futex_lock_pi() directly. We +- * could restart the syscall, but that will look at +- * the user space value and return right away. So we +- * drop back with EWOULDBLOCK to tell user space that +- * "val" has been changed. That's the same what the +- * restart of the syscall would do in +- * futex_wait_setup(). ++ * We've already been requeued, but cannot restart by calling ++ * futex_lock_pi() directly. We could restart this syscall, but ++ * it would detect that the user space "val" changed and return ++ * -EWOULDBLOCK. Save the overhead of the restart and return ++ * -EWOULDBLOCK directly. + */ + ret = -EWOULDBLOCK; + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/futex-correct-futex_wait_requeue_pi-commentary_2 new/patches.fixes/futex-correct-futex_wait_requeue_pi-commentary_2 --- old/patches.fixes/futex-correct-futex_wait_requeue_pi-commentary_2 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/futex-correct-futex_wait_requeue_pi-commentary_2 2009-10-12 15:13:55.000000000 +0200 @@ -0,0 +1,46 @@ +Subject: futex: Correct futex_wait_requeue_pi() commentary +From: Darren Hart dvhltc@us.ibm.com Mon Sep 21 22:29:59 2009 -0700 +Date: Tue Sep 22 10:37:42 2009 +0200: +Git: 56ec1607b15b6a5f6de5aab14f16a763b88296fc + +Correct various typos and formatting inconsistencies in the +commentary of futex_wait_requeue_pi(). + +Signed-off-by: Darren Hart <dvhltc@us.ibm.com> +Acked-by: Peter Zijlstra <peterz@infradead.org> +Cc: Steven Rostedt <rostedt@goodmis.org> +Cc: Eric Dumazet <eric.dumazet@gmail.com> +Cc: Dinakar Guniguntala <dino@in.ibm.com> +Cc: John Stultz <johnstul@us.ibm.com> +LKML-Reference: <20090922052958.8717.21932.stgit@Aeon> +Signed-off-by: Ingo Molnar <mingo@elte.hu> +Acked-by: Sven-Thorsten Dietrich <sdietrich@suse.de> + +diff --git a/kernel/futex.c b/kernel/futex.c +index 248dd11..6c498b1 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -2114,12 +2114,12 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, + + /** + * futex_wait_requeue_pi() - Wait on uaddr and take uaddr2 +- * @uaddr: the futex we initialyl wait on (non-pi) ++ * @uaddr: the futex we initially wait on (non-pi) + * @fshared: whether the futexes are shared (1) or not (0). They must be + * the same type, no requeueing from private to shared, etc. + * @val: the expected value of uaddr + * @abs_time: absolute timeout +- * @bitset: 32 bit wakeup bitset set by userspace, defaults to all. ++ * @bitset: 32 bit wakeup bitset set by userspace, defaults to all + * @clockrt: whether to use CLOCK_REALTIME (1) or CLOCK_MONOTONIC (0) + * @uaddr2: the pi futex we will take prior to returning to user-space + * +@@ -2246,7 +2246,7 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, int fshared, + res = fixup_owner(uaddr2, fshared, &q, !ret); + /* + * If fixup_owner() returned an error, proprogate that. If it +- * acquired the lock, clear our -ETIMEDOUT or -EINTR. ++ * acquired the lock, clear -ETIMEDOUT or -EINTR. + */ + if (res) + ret = (res < 0) ? res : 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/futex-correct-queue_me-and-unqueue_me-commentary new/patches.fixes/futex-correct-queue_me-and-unqueue_me-commentary --- old/patches.fixes/futex-correct-queue_me-and-unqueue_me-commentary 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/futex-correct-queue_me-and-unqueue_me-commentary 2009-10-12 15:13:55.000000000 +0200 @@ -0,0 +1,78 @@ +Subject: futex: Correct queue_me and unqueue_me commentary +From: Darren Hart dvhltc@us.ibm.com Mon Sep 21 22:30:15 2009 -0700 +Date: Tue Sep 22 10:37:43 2009 +0200: +Git: d40d65c8dbdd39f0b64e043f6bd08f8a38f55194 + +The queue_me/unqueue_me commentary is oddly placed and out of date. +Clean it up and correct the inaccurate bits. + +Signed-off-by: Darren Hart <dvhltc@us.ibm.com> +Acked-by: Peter Zijlstra <peterz@infradead.org> +Cc: Steven Rostedt <rostedt@goodmis.org> +Cc: Eric Dumazet <eric.dumazet@gmail.com> +Cc: Dinakar Guniguntala <dino@in.ibm.com> +Cc: John Stultz <johnstul@us.ibm.com> +LKML-Reference: <20090922053015.8717.71713.stgit@Aeon> +Signed-off-by: Ingo Molnar <mingo@elte.hu> +Acked-by: Sven-Thorsten Dietrich <sdietrich@suse.de> + +diff --git a/kernel/futex.c b/kernel/futex.c +index 6c498b1..cedcd60 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -1350,6 +1350,25 @@ static inline struct futex_hash_bucket *queue_lock(struct futex_q *q) + return hb; + } + ++static inline void ++queue_unlock(struct futex_q *q, struct futex_hash_bucket *hb) ++{ ++ spin_unlock(&hb->lock); ++ drop_futex_key_refs(&q->key); ++} ++ ++/** ++ * queue_me() - Enqueue the futex_q on the futex_hash_bucket ++ * @q: The futex_q to enqueue ++ * @hb: The destination hash bucket ++ * ++ * The hb->lock must be held by the caller, and is released here. A call to ++ * queue_me() is typically paired with exactly one call to unqueue_me(). The ++ * exceptions involve the PI related operations, which may use unqueue_me_pi() ++ * or nothing if the unqueue is done as part of the wake process and the unqueue ++ * state is implicit in the state of woken task (see futex_wait_requeue_pi() for ++ * an example). ++ */ + static inline void queue_me(struct futex_q *q, struct futex_hash_bucket *hb) + { + int prio; +@@ -1373,19 +1392,17 @@ static inline void queue_me(struct futex_q *q, struct futex_hash_bucket *hb) + spin_unlock(&hb->lock); + } + +-static inline void +-queue_unlock(struct futex_q *q, struct futex_hash_bucket *hb) +-{ +- spin_unlock(&hb->lock); +- drop_futex_key_refs(&q->key); +-} +- +-/* +- * queue_me and unqueue_me must be called as a pair, each +- * exactly once. They are called with the hashed spinlock held. ++/** ++ * unqueue_me() - Remove the futex_q from its futex_hash_bucket ++ * @q: The futex_q to unqueue ++ * ++ * The q->lock_ptr must not be held by the caller. A call to unqueue_me() must ++ * be paired with exactly one earlier call to queue_me(). ++ * ++ * Returns: ++ * 1 - if the futex_q was still queued (and we removed unqueued it) ++ * 0 - if the futex_q was already removed by the waking thread + */ +- +-/* Return 1 if we were still queued (ie. 0 means we were woken) */ + static int unqueue_me(struct futex_q *q) + { + spinlock_t *lock_ptr; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/futex-detect-mismatched-requeue-targets new/patches.fixes/futex-detect-mismatched-requeue-targets --- old/patches.fixes/futex-detect-mismatched-requeue-targets 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/futex-detect-mismatched-requeue-targets 2009-10-12 15:13:55.000000000 +0200 @@ -0,0 +1,103 @@ +Subject: futex: Detect mismatched requeue targets +From: Darren Hart dvhltc@us.ibm.com Thu Aug 13 17:36:53 2009 -0700 +Date: Sun Aug 16 10:59:05 2009 +0200: +Git: 84bc4af59081ee974dd80210e694ab59ebe51ce8 + +There is currently no check to ensure that userspace uses the same +futex requeue target (uaddr2) in futex_requeue() that the waiter used +in futex_wait_requeue_pi(). A mismatch here could very unexpected +results as the waiter assumes it either wakes on uaddr1 or uaddr2. We +could detect this on wakeup in the waiter, but the cleanup is more +intense after the improper requeue has occured. + +This patch stores the waiter's expected requeue target in a new +requeue_pi_key pointer in the futex_q which futex_requeue() checks +prior to attempting to do a proxy lock acquistion or a requeue when +requeue_pi=1. If they don't match, return -EINVAL from futex_requeue, +aborting the requeue of any remaining waiters. + +Signed-off-by: Darren Hart <dvhltc@us.ibm.com> +Cc: Peter Zijlstra <peterz@infradead.org> +Cc: Eric Dumazet <eric.dumazet@gmail.com> +Cc: John Kacur <jkacur@redhat.com> +Cc: Dinakar Guniguntala <dino@in.ibm.com> +Cc: John Stultz <johnstul@us.ibm.com> +LKML-Reference: <20090814003650.14634.63916.stgit@Aeon> +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +Acked-by: Sven-Thorsten Dietrich <sdietrich@suse.de> + +diff --git a/kernel/futex.c b/kernel/futex.c +index d077201..f0dea28 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -115,6 +115,9 @@ struct futex_q { + /* rt_waiter storage for requeue_pi: */ + struct rt_mutex_waiter *rt_waiter; + ++ /* The expected requeue pi target futex key: */ ++ union futex_key *requeue_pi_key; ++ + /* Bitset for the optional bitmasked wakeup */ + u32 bitset; + }; +@@ -1080,6 +1083,10 @@ static int futex_proxy_trylock_atomic(u32 __user *pifutex, + if (!top_waiter) + return 0; + ++ /* Ensure we requeue to the expected futex. */ ++ if (!match_futex(top_waiter->requeue_pi_key, key2)) ++ return -EINVAL; ++ + /* + * Try to take the lock for top_waiter. Set the FUTEX_WAITERS bit in + * the contended case or if set_waiters is 1. The pi_state is returned +@@ -1260,6 +1267,12 @@ retry_private: + continue; + } + ++ /* Ensure we requeue to the expected futex for requeue_pi. */ ++ if (requeue_pi && !match_futex(this->requeue_pi_key, &key2)) { ++ ret = -EINVAL; ++ break; ++ } ++ + /* + * Requeue nr_requeue waiters and possibly one more in the case + * of requeue_pi if we couldn't acquire the lock atomically. +@@ -1735,6 +1748,7 @@ static int futex_wait(u32 __user *uaddr, int fshared, + q.pi_state = NULL; + q.bitset = bitset; + q.rt_waiter = NULL; ++ q.requeue_pi_key = NULL; + + if (abs_time) { + to = &timeout; +@@ -1842,6 +1856,7 @@ static int futex_lock_pi(u32 __user *uaddr, int fshared, + + q.pi_state = NULL; + q.rt_waiter = NULL; ++ q.requeue_pi_key = NULL; + retry: + q.key = FUTEX_KEY_INIT; + ret = get_futex_key(uaddr, fshared, &q.key, VERIFY_WRITE); +@@ -2153,15 +2168,16 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, int fshared, + debug_rt_mutex_init_waiter(&rt_waiter); + rt_waiter.task = NULL; + +- q.pi_state = NULL; +- q.bitset = bitset; +- q.rt_waiter = &rt_waiter; +- + key2 = FUTEX_KEY_INIT; + ret = get_futex_key(uaddr2, fshared, &key2, VERIFY_WRITE); + if (unlikely(ret != 0)) + goto out; + ++ q.pi_state = NULL; ++ q.bitset = bitset; ++ q.rt_waiter = &rt_waiter; ++ q.requeue_pi_key = &key2; ++ + /* Prepare to wait on uaddr. */ + ret = futex_wait_setup(uaddr, val, fshared, &q, &hb); + if (ret) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/futex-fix-wakeup-race new/patches.fixes/futex-fix-wakeup-race --- old/patches.fixes/futex-fix-wakeup-race 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/futex-fix-wakeup-race 2009-10-12 15:13:55.000000000 +0200 @@ -0,0 +1,71 @@ +Subject: futex: Fix wakeup race by setting TASK_INTERRUPTIBLE before queue_me() +From: Darren Hart dvhltc@us.ibm.com Mon Sep 21 22:30:38 2009 -0700 +Date: Tue Sep 22 10:37:44 2009 +0200: +Git: 0729e196147692d84d4c099fcff056eba2ed61d8 + +PI futexes do not use the same plist_node_empty() test for wakeup. +It was possible for the waiter (in futex_wait_requeue_pi()) to set +TASK_INTERRUPTIBLE after the waker assigned the rtmutex to the +waiter. The waiter would then note the plist was not empty and call +schedule(). The task would not be found by any subsequeuent futex +wakeups, resulting in a userspace hang. + +By moving the setting of TASK_INTERRUPTIBLE to before the call to +queue_me(), the race with the waker is eliminated. Since we no +longer call get_user() from within queue_me(), there is no need to +delay the setting of TASK_INTERRUPTIBLE until after the call to +queue_me(). + +The FUTEX_LOCK_PI operation is not affected as futex_lock_pi() +relies entirely on the rtmutex code to handle schedule() and +wakeup. The requeue PI code is affected because the waiter starts +as a non-PI waiter and is woken on a PI futex. + +Remove the crusty old comment about holding spinlocks() across +get_user() as we no longer do that. Correct the locking statement +with a description of why the test is performed. + +Signed-off-by: Darren Hart <dvhltc@us.ibm.com> +Acked-by: Peter Zijlstra <peterz@infradead.org> +Cc: Steven Rostedt <rostedt@goodmis.org> +Cc: Eric Dumazet <eric.dumazet@gmail.com> +Cc: Dinakar Guniguntala <dino@in.ibm.com> +Cc: John Stultz <johnstul@us.ibm.com> +LKML-Reference: <20090922053038.8717.97838.stgit@Aeon> +Signed-off-by: Ingo Molnar <mingo@elte.hu> +Acked-by: Sven-Thorsten Dietrich <sdietrich@suse.de> + +diff --git a/kernel/futex.c b/kernel/futex.c +index f92afbe..463af2e 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -1656,17 +1656,8 @@ out: + static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q, + struct hrtimer_sleeper *timeout) + { +- queue_me(q, hb); +- +- /* +- * There might have been scheduling since the queue_me(), as we +- * cannot hold a spinlock across the get_user() in case it +- * faults, and we cannot just set TASK_INTERRUPTIBLE state when +- * queueing ourselves into the futex hash. This code thus has to +- * rely on the futex_wake() code removing us from hash when it +- * wakes us up. +- */ + set_current_state(TASK_INTERRUPTIBLE); ++ queue_me(q, hb); + + /* Arm the timer */ + if (timeout) { +@@ -1676,8 +1667,8 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q, + } + + /* +- * !plist_node_empty() is safe here without any lock. +- * q.lock_ptr != 0 is not safe, because of ordering against wakeup. ++ * If we have been removed from the hash list, then another task ++ * has tried to wake us, and we can skip the call to schedule(). + */ + if (likely(!plist_node_empty(&q->list))) { + /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/futex-make-function-kernel-doc-commentary-consistent new/patches.fixes/futex-make-function-kernel-doc-commentary-consistent --- old/patches.fixes/futex-make-function-kernel-doc-commentary-consistent 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/futex-make-function-kernel-doc-commentary-consistent 2009-10-12 15:13:55.000000000 +0200 @@ -0,0 +1,115 @@ +Subject: futex: Make function kernel-doc commentary consistent +From: Darren Hart dvhltc@us.ibm.com Mon Sep 21 22:30:22 2009 -0700 +Date: Tue Sep 22 10:37:43 2009 +0200: +Git: d96ee56ce0582967fba9f3f0ac4503957147bea6 + +Make the existing function kernel-doc consistent throughout +futex.c, following Documentation/kernel-doc-nano-howto.txt as +closely as possible. + +When unsure, at least be consistent within futex.c. + +Signed-off-by: Darren Hart <dvhltc@us.ibm.com> +Acked-by: Peter Zijlstra <peterz@infradead.org> +Cc: Steven Rostedt <rostedt@goodmis.org> +Cc: Eric Dumazet <eric.dumazet@gmail.com> +Cc: Dinakar Guniguntala <dino@in.ibm.com> +Cc: John Stultz <johnstul@us.ibm.com> +LKML-Reference: <20090922053022.8717.13339.stgit@Aeon> +Signed-off-by: Ingo Molnar <mingo@elte.hu> +Acked-by: Sven-Thorsten Dietrich <sdietrich@suse.de> + +diff --git a/kernel/futex.c b/kernel/futex.c +index cedcd60..720fa3d 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -198,11 +198,12 @@ static void drop_futex_key_refs(union futex_key *key) + } + + /** +- * get_futex_key - Get parameters which are the keys for a futex. +- * @uaddr: virtual address of the futex +- * @fshared: 0 for a PROCESS_PRIVATE futex, 1 for PROCESS_SHARED +- * @key: address where result is stored. +- * @rw: mapping needs to be read/write (values: VERIFY_READ, VERIFY_WRITE) ++ * get_futex_key() - Get parameters which are the keys for a futex ++ * @uaddr: virtual address of the futex ++ * @fshared: 0 for a PROCESS_PRIVATE futex, 1 for PROCESS_SHARED ++ * @key: address where result is stored. ++ * @rw: mapping needs to be read/write (values: VERIFY_READ, ++ * VERIFY_WRITE) + * + * Returns a negative error code or 0 + * The key words are stored in *key on success. +@@ -288,8 +289,8 @@ void put_futex_key(int fshared, union futex_key *key) + drop_futex_key_refs(key); + } + +-/* +- * fault_in_user_writeable - fault in user address and verify RW access ++/** ++ * fault_in_user_writeable() - Fault in user address and verify RW access + * @uaddr: pointer to faulting user space address + * + * Slow path to fixup the fault we just took in the atomic write +@@ -309,8 +310,8 @@ static int fault_in_user_writeable(u32 __user *uaddr) + + /** + * futex_top_waiter() - Return the highest priority waiter on a futex +- * @hb: the hash bucket the futex_q's reside in +- * @key: the futex key (to distinguish it from other futex futex_q's) ++ * @hb: the hash bucket the futex_q's reside in ++ * @key: the futex key (to distinguish it from other futex futex_q's) + * + * Must be called with the hb lock held. + */ +@@ -588,7 +589,7 @@ lookup_pi_state(u32 uval, struct futex_hash_bucket *hb, + } + + /** +- * futex_lock_pi_atomic() - atomic work required to acquire a pi aware futex ++ * futex_lock_pi_atomic() - Atomic work required to acquire a pi aware futex + * @uaddr: the pi futex user address + * @hb: the pi futex hash bucket + * @key: the futex key associated with uaddr and hb +@@ -1011,9 +1012,9 @@ void requeue_futex(struct futex_q *q, struct futex_hash_bucket *hb1, + + /** + * requeue_pi_wake_futex() - Wake a task that acquired the lock during requeue +- * q: the futex_q +- * key: the key of the requeue target futex +- * hb: the hash_bucket of the requeue target futex ++ * @q: the futex_q ++ * @key: the key of the requeue target futex ++ * @hb: the hash_bucket of the requeue target futex + * + * During futex_requeue, with requeue_pi=1, it is possible to acquire the + * target futex if it is uncontended or via a lock steal. Set the futex_q key +@@ -2319,9 +2320,9 @@ out: + */ + + /** +- * sys_set_robust_list - set the robust-futex list head of a task +- * @head: pointer to the list-head +- * @len: length of the list-head, as userspace expects ++ * sys_set_robust_list() - Set the robust-futex list head of a task ++ * @head: pointer to the list-head ++ * @len: length of the list-head, as userspace expects + */ + SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head, + size_t, len) +@@ -2340,10 +2341,10 @@ SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head, + } + + /** +- * sys_get_robust_list - get the robust-futex list head of a task +- * @pid: pid of the process [zero for current task] +- * @head_ptr: pointer to a list-head pointer, the kernel fills it in +- * @len_ptr: pointer to a length field, the kernel fills in the header size ++ * sys_get_robust_list() - Get the robust-futex list head of a task ++ * @pid: pid of the process [zero for current task] ++ * @head_ptr: pointer to a list-head pointer, the kernel fills it in ++ * @len_ptr: pointer to a length field, the kernel fills in the header size + */ + SYSCALL_DEFINE3(get_robust_list, int, pid, + struct robust_list_head __user * __user *, head_ptr, ++++++ patches.kernel.org.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.kernel.org/patch-2.6.31.3-4 new/patches.kernel.org/patch-2.6.31.3-4 --- old/patches.kernel.org/patch-2.6.31.3-4 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.kernel.org/patch-2.6.31.3-4 2009-10-14 18:23:02.000000000 +0200 @@ -0,0 +1,1349 @@ +Subject: Linux 2.6.31.4 +From: Greg Kroah-Hartman <gregkh@suse.de> + +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +diff --git a/Documentation/networking/timestamping/timestamping.c b/Documentation/networking/timestamping/timestamping.c +index 43d1431..a7936fe 100644 +--- a/Documentation/networking/timestamping/timestamping.c ++++ b/Documentation/networking/timestamping/timestamping.c +@@ -381,7 +381,7 @@ int main(int argc, char **argv) + memset(&hwtstamp, 0, sizeof(hwtstamp)); + strncpy(hwtstamp.ifr_name, interface, sizeof(hwtstamp.ifr_name)); + hwtstamp.ifr_data = (void *)&hwconfig; +- memset(&hwconfig, 0, sizeof(&hwconfig)); ++ memset(&hwconfig, 0, sizeof(hwconfig)); + hwconfig.tx_type = + (so_timestamping_flags & SOF_TIMESTAMPING_TX_HARDWARE) ? + HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF; +diff --git a/Makefile b/Makefile +index 0138557..314a3aa 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 31 +-EXTRAVERSION = .3 ++EXTRAVERSION = .4 + NAME = Man-Eating Seals of Antiquity + + # *DOCUMENTATION* +diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S +index e590261..d76b026 100644 +--- a/arch/x86/ia32/ia32entry.S ++++ b/arch/x86/ia32/ia32entry.S +@@ -21,8 +21,8 @@ + #define __AUDIT_ARCH_LE 0x40000000 + + #ifndef CONFIG_AUDITSYSCALL +-#define sysexit_audit int_ret_from_sys_call +-#define sysretl_audit int_ret_from_sys_call ++#define sysexit_audit ia32_ret_from_sys_call ++#define sysretl_audit ia32_ret_from_sys_call + #endif + + #define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8) +@@ -39,12 +39,12 @@ + .endm + + /* clobbers %eax */ +- .macro CLEAR_RREGS _r9=rax ++ .macro CLEAR_RREGS offset=0, _r9=rax + xorl %eax,%eax +- movq %rax,R11(%rsp) +- movq %rax,R10(%rsp) +- movq %\_r9,R9(%rsp) +- movq %rax,R8(%rsp) ++ movq %rax,\offset+R11(%rsp) ++ movq %rax,\offset+R10(%rsp) ++ movq %\_r9,\offset+R9(%rsp) ++ movq %rax,\offset+R8(%rsp) + .endm + + /* +@@ -172,6 +172,10 @@ sysexit_from_sys_call: + movl RIP-R11(%rsp),%edx /* User %eip */ + CFI_REGISTER rip,rdx + RESTORE_ARGS 1,24,1,1,1,1 ++ xorq %r8,%r8 ++ xorq %r9,%r9 ++ xorq %r10,%r10 ++ xorq %r11,%r11 + popfq + CFI_ADJUST_CFA_OFFSET -8 + /*CFI_RESTORE rflags*/ +@@ -202,7 +206,7 @@ sysexit_from_sys_call: + + .macro auditsys_exit exit,ebpsave=RBP + testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) +- jnz int_ret_from_sys_call ++ jnz ia32_ret_from_sys_call + TRACE_IRQS_ON + sti + movl %eax,%esi /* second arg, syscall return value */ +@@ -218,8 +222,9 @@ sysexit_from_sys_call: + cli + TRACE_IRQS_OFF + testl %edi,TI_flags(%r10) +- jnz int_with_check +- jmp \exit ++ jz \exit ++ CLEAR_RREGS -ARGOFFSET ++ jmp int_with_check + .endm + + sysenter_auditsys: +@@ -329,6 +334,9 @@ sysretl_from_sys_call: + CFI_REGISTER rip,rcx + movl EFLAGS-ARGOFFSET(%rsp),%r11d + /*CFI_REGISTER rflags,r11*/ ++ xorq %r10,%r10 ++ xorq %r9,%r9 ++ xorq %r8,%r8 + TRACE_IRQS_ON + movl RSP-ARGOFFSET(%rsp),%esp + CFI_RESTORE rsp +@@ -353,7 +361,7 @@ cstar_tracesys: + #endif + xchgl %r9d,%ebp + SAVE_REST +- CLEAR_RREGS r9 ++ CLEAR_RREGS 0, r9 + movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */ + movq %rsp,%rdi /* &pt_regs -> arg1 */ + call syscall_trace_enter +@@ -425,6 +433,8 @@ ia32_do_call: + call *ia32_sys_call_table(,%rax,8) # xxx: rip relative + ia32_sysret: + movq %rax,RAX-ARGOFFSET(%rsp) ++ia32_ret_from_sys_call: ++ CLEAR_RREGS -ARGOFFSET + jmp int_ret_from_sys_call + + ia32_tracesys: +@@ -442,8 +452,8 @@ END(ia32_syscall) + + ia32_badsys: + movq $0,ORIG_RAX-ARGOFFSET(%rsp) +- movq $-ENOSYS,RAX-ARGOFFSET(%rsp) +- jmp int_ret_from_sys_call ++ movq $-ENOSYS,%rax ++ jmp ia32_sysret + + quiet_ni_syscall: + movq $-ENOSYS,%rax +diff --git a/arch/x86/include/asm/checksum_32.h b/arch/x86/include/asm/checksum_32.h +index 7c5ef8b..46fc474 100644 +--- a/arch/x86/include/asm/checksum_32.h ++++ b/arch/x86/include/asm/checksum_32.h +@@ -161,7 +161,8 @@ static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, + "adcl $0, %0 ;\n" + : "=&r" (sum) + : "r" (saddr), "r" (daddr), +- "r" (htonl(len)), "r" (htonl(proto)), "0" (sum)); ++ "r" (htonl(len)), "r" (htonl(proto)), "0" (sum) ++ : "memory"); + + return csum_fold(sum); + } +diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c +index 8c44c23..59cdfa4 100644 +--- a/arch/x86/kernel/acpi/cstate.c ++++ b/arch/x86/kernel/acpi/cstate.c +@@ -48,7 +48,7 @@ void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, + * P4, Core and beyond CPUs + */ + if (c->x86_vendor == X86_VENDOR_INTEL && +- (c->x86 > 0x6 || (c->x86 == 6 && c->x86_model >= 14))) ++ (c->x86 > 0xf || (c->x86 == 6 && c->x86_model >= 14))) + flags->bm_control = 0; + } + EXPORT_SYMBOL(acpi_processor_power_init_bm_check); +diff --git a/arch/x86/kernel/i8253.c b/arch/x86/kernel/i8253.c +index 5cf36c0..da890f0 100644 +--- a/arch/x86/kernel/i8253.c ++++ b/arch/x86/kernel/i8253.c +@@ -21,8 +21,10 @@ EXPORT_SYMBOL(i8253_lock); + + #ifdef CONFIG_X86_32 + static void pit_disable_clocksource(void); ++static void pit_enable_clocksource(void); + #else + static inline void pit_disable_clocksource(void) { } ++static inline void pit_enable_clocksource(void) { } + #endif + + /* +@@ -67,7 +69,7 @@ static void init_pit_timer(enum clock_event_mode mode, + break; + + case CLOCK_EVT_MODE_RESUME: +- /* Nothing to do here */ ++ pit_enable_clocksource(); + break; + } + spin_unlock(&i8253_lock); +@@ -200,19 +202,27 @@ static struct clocksource pit_cs = { + .shift = 20, + }; + ++int pit_cs_registered; + static void pit_disable_clocksource(void) + { +- /* +- * Use mult to check whether it is registered or not +- */ +- if (pit_cs.mult) { ++ if (pit_cs_registered) { + clocksource_unregister(&pit_cs); +- pit_cs.mult = 0; ++ pit_cs_registered = 0; ++ } ++} ++ ++static void pit_enable_clocksource(void) ++{ ++ if (!pit_cs_registered && !clocksource_register(&pit_cs)) { ++ pit_cs_registered = 1; + } + } + ++ ++ + static int __init init_pit_clocksource(void) + { ++ int ret; + /* + * Several reasons not to register PIT as a clocksource: + * +@@ -226,7 +236,10 @@ static int __init init_pit_clocksource(void) + + pit_cs.mult = clocksource_hz2mult(CLOCK_TICK_RATE, pit_cs.shift); + +- return clocksource_register(&pit_cs); ++ ret = clocksource_register(&pit_cs); ++ if (!ret) ++ pit_cs_registered = 1; ++ return ret; + } + arch_initcall(init_pit_clocksource); + +diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c +index bb6277d..b225176 100644 +--- a/arch/x86/kvm/lapic.c ++++ b/arch/x86/kvm/lapic.c +@@ -567,7 +567,7 @@ static void start_apic_timer(struct kvm_lapic *apic) + { + ktime_t now = apic->lapic_timer.timer.base->get_time(); + +- apic->lapic_timer.period = apic_get_reg(apic, APIC_TMICT) * ++ apic->lapic_timer.period = (u64)apic_get_reg(apic, APIC_TMICT) * + APIC_BUS_CYCLE_NS * apic->divide_count; + atomic_set(&apic->lapic_timer.pending, 0); + +diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c +index b1f658a..4ac6899 100644 +--- a/arch/x86/kvm/svm.c ++++ b/arch/x86/kvm/svm.c +@@ -709,6 +709,8 @@ static void svm_vcpu_load(struct kvm_vcpu *vcpu, int cpu) + rdtscll(tsc_this); + delta = vcpu->arch.host_tsc - tsc_this; + svm->vmcb->control.tsc_offset += delta; ++ if (is_nested(svm)) ++ svm->hsave->control.tsc_offset += delta; + vcpu->cpu = cpu; + kvm_migrate_timers(vcpu); + svm->asid_generation = 0; +@@ -1954,10 +1956,14 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 *data) + + switch (ecx) { + case MSR_IA32_TIME_STAMP_COUNTER: { +- u64 tsc; ++ u64 tsc_offset; + +- rdtscll(tsc); +- *data = svm->vmcb->control.tsc_offset + tsc; ++ if (is_nested(svm)) ++ tsc_offset = svm->hsave->control.tsc_offset; ++ else ++ tsc_offset = svm->vmcb->control.tsc_offset; ++ ++ *data = tsc_offset + native_read_tsc(); + break; + } + case MSR_K6_STAR: +@@ -2044,10 +2050,17 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 data) + + switch (ecx) { + case MSR_IA32_TIME_STAMP_COUNTER: { +- u64 tsc; ++ u64 tsc_offset = data - native_read_tsc(); ++ u64 g_tsc_offset = 0; ++ ++ if (is_nested(svm)) { ++ g_tsc_offset = svm->vmcb->control.tsc_offset - ++ svm->hsave->control.tsc_offset; ++ svm->hsave->control.tsc_offset = tsc_offset; ++ } ++ ++ svm->vmcb->control.tsc_offset = tsc_offset + g_tsc_offset; + +- rdtscll(tsc); +- svm->vmcb->control.tsc_offset = data - tsc; + break; + } + case MSR_K6_STAR: +diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c +index 6a768ff..ff72e4d 100644 +--- a/arch/x86/kvm/vmx.c ++++ b/arch/x86/kvm/vmx.c +@@ -661,7 +661,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) + if (vcpu->cpu != cpu) { + vcpu_clear(vmx); + kvm_migrate_timers(vcpu); +- vpid_sync_vcpu_all(vmx); ++ set_bit(KVM_REQ_TLB_FLUSH, &vcpu->requests); + local_irq_disable(); + list_add(&vmx->local_vcpus_link, + &per_cpu(vcpus_on_cpu, cpu)); +diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c +index 91a077f..8aafb62 100644 +--- a/arch/x86/kvm/x86.c ++++ b/arch/x86/kvm/x86.c +@@ -1429,6 +1429,8 @@ static int kvm_dev_ioctl_get_supported_cpuid(struct kvm_cpuid2 *cpuid, + + if (cpuid->nent < 1) + goto out; ++ if (cpuid->nent > KVM_MAX_CPUID_ENTRIES) ++ cpuid->nent = KVM_MAX_CPUID_ENTRIES; + r = -ENOMEM; + cpuid_entries = vmalloc(sizeof(struct kvm_cpuid_entry2) * cpuid->nent); + if (!cpuid_entries) +diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c +index 5691f16..8dff236 100644 +--- a/drivers/acpi/osl.c ++++ b/drivers/acpi/osl.c +@@ -1182,7 +1182,13 @@ int acpi_check_resource_conflict(struct resource *res) + res_list_elem->name, + (long long) res_list_elem->start, + (long long) res_list_elem->end); +- printk(KERN_INFO "ACPI: Device needs an ACPI driver\n"); ++ if (acpi_enforce_resources == ENFORCE_RESOURCES_LAX) ++ printk(KERN_NOTICE "ACPI: This conflict may" ++ " cause random problems and system" ++ " instability\n"); ++ printk(KERN_INFO "ACPI: If an ACPI driver is available" ++ " for this device, you should use it instead of" ++ " the native driver\n"); + } + if (acpi_enforce_resources == ENFORCE_RESOURCES_STRICT) + return -EBUSY; +diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c +index 79711b6..c644fec 100644 +--- a/drivers/ata/libata-eh.c ++++ b/drivers/ata/libata-eh.c +@@ -2541,14 +2541,14 @@ int ata_eh_reset(struct ata_link *link, int classify, + dev->pio_mode = XFER_PIO_0; + dev->flags &= ~ATA_DFLAG_SLEEPING; + +- if (!ata_phys_link_offline(ata_dev_phys_link(dev))) { +- /* apply class override */ +- if (lflags & ATA_LFLAG_ASSUME_ATA) +- classes[dev->devno] = ATA_DEV_ATA; +- else if (lflags & ATA_LFLAG_ASSUME_SEMB) +- classes[dev->devno] = ATA_DEV_SEMB_UNSUP; +- } else +- classes[dev->devno] = ATA_DEV_NONE; ++ if (ata_phys_link_offline(ata_dev_phys_link(dev))) ++ continue; ++ ++ /* apply class override */ ++ if (lflags & ATA_LFLAG_ASSUME_ATA) ++ classes[dev->devno] = ATA_DEV_ATA; ++ else if (lflags & ATA_LFLAG_ASSUME_SEMB) ++ classes[dev->devno] = ATA_DEV_SEMB_UNSUP; + } + + /* record current link speed */ +@@ -2581,34 +2581,48 @@ int ata_eh_reset(struct ata_link *link, int classify, + slave->eh_info.serror = 0; + spin_unlock_irqrestore(link->ap->lock, flags); + +- /* Make sure onlineness and classification result correspond. ++ /* ++ * Make sure onlineness and classification result correspond. + * Hotplug could have happened during reset and some + * controllers fail to wait while a drive is spinning up after + * being hotplugged causing misdetection. By cross checking +- * link onlineness and classification result, those conditions +- * can be reliably detected and retried. ++ * link on/offlineness and classification result, those ++ * conditions can be reliably detected and retried. + */ + nr_unknown = 0; + ata_for_each_dev(dev, link, ALL) { +- /* convert all ATA_DEV_UNKNOWN to ATA_DEV_NONE */ +- if (classes[dev->devno] == ATA_DEV_UNKNOWN) { +- classes[dev->devno] = ATA_DEV_NONE; +- if (ata_phys_link_online(ata_dev_phys_link(dev))) ++ if (ata_phys_link_online(ata_dev_phys_link(dev))) { ++ if (classes[dev->devno] == ATA_DEV_UNKNOWN) { ++ ata_dev_printk(dev, KERN_DEBUG, "link online " ++ "but device misclassifed\n"); ++ classes[dev->devno] = ATA_DEV_NONE; + nr_unknown++; ++ } ++ } else if (ata_phys_link_offline(ata_dev_phys_link(dev))) { ++ if (ata_class_enabled(classes[dev->devno])) ++ ata_dev_printk(dev, KERN_DEBUG, "link offline, " ++ "clearing class %d to NONE\n", ++ classes[dev->devno]); ++ classes[dev->devno] = ATA_DEV_NONE; ++ } else if (classes[dev->devno] == ATA_DEV_UNKNOWN) { ++ ata_dev_printk(dev, KERN_DEBUG, "link status unknown, " ++ "clearing UNKNOWN to NONE\n"); ++ classes[dev->devno] = ATA_DEV_NONE; + } + } + + if (classify && nr_unknown) { + if (try < max_tries) { + ata_link_printk(link, KERN_WARNING, "link online but " +- "device misclassified, retrying\n"); ++ "%d devices misclassified, retrying\n", ++ nr_unknown); + failed_link = link; + rc = -EAGAIN; + goto fail; + } + ata_link_printk(link, KERN_WARNING, +- "link online but device misclassified, " +- "device detection might fail\n"); ++ "link online but %d devices misclassified, " ++ "device detection might fail\n", nr_unknown); + } + + /* reset successful, schedule revalidation */ +diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c +index e48af9f..414372a 100644 +--- a/drivers/char/tty_ldisc.c ++++ b/drivers/char/tty_ldisc.c +@@ -516,7 +516,7 @@ static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old) + static int tty_ldisc_halt(struct tty_struct *tty) + { + clear_bit(TTY_LDISC, &tty->flags); +- return cancel_delayed_work(&tty->buf.work); ++ return cancel_delayed_work_sync(&tty->buf.work); + } + + /** +@@ -754,12 +754,9 @@ void tty_ldisc_hangup(struct tty_struct *tty) + * N_TTY. + */ + if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { +- /* Make sure the old ldisc is quiescent */ +- tty_ldisc_halt(tty); +- flush_scheduled_work(); +- + /* Avoid racing set_ldisc or tty_ldisc_release */ + mutex_lock(&tty->ldisc_mutex); ++ tty_ldisc_halt(tty); + if (tty->ldisc) { /* Not yet closed */ + /* Switch back to N_TTY */ + tty_ldisc_reinit(tty); +diff --git a/drivers/ide/sis5513.c b/drivers/ide/sis5513.c +index afca22b..3b88eba 100644 +--- a/drivers/ide/sis5513.c ++++ b/drivers/ide/sis5513.c +@@ -2,7 +2,7 @@ + * Copyright (C) 1999-2000 Andre Hedrick <andre@linux-ide.org> + * Copyright (C) 2002 Lionel Bouton <Lionel.Bouton@inet6.fr>, Maintainer + * Copyright (C) 2003 Vojtech Pavlik <vojtech@suse.cz> +- * Copyright (C) 2007 Bartlomiej Zolnierkiewicz ++ * Copyright (C) 2007-2009 Bartlomiej Zolnierkiewicz + * + * May be copied or modified under the terms of the GNU General Public License + * +@@ -281,11 +281,13 @@ static void config_drive_art_rwp(ide_drive_t *drive) + + pci_read_config_byte(dev, 0x4b, ®4bh); + ++ rw_prefetch = reg4bh & ~(0x11 << drive->dn); ++ + if (drive->media == ide_disk) +- rw_prefetch = 0x11 << drive->dn; ++ rw_prefetch |= 0x11 << drive->dn; + +- if ((reg4bh & (0x11 << drive->dn)) != rw_prefetch) +- pci_write_config_byte(dev, 0x4b, reg4bh|rw_prefetch); ++ if (reg4bh != rw_prefetch) ++ pci_write_config_byte(dev, 0x4b, rw_prefetch); + } + + static void sis_set_pio_mode(ide_drive_t *drive, const u8 pio) +diff --git a/drivers/net/appletalk/ipddp.c b/drivers/net/appletalk/ipddp.c +index 78cea5e..bf9ab65 100644 +--- a/drivers/net/appletalk/ipddp.c ++++ b/drivers/net/appletalk/ipddp.c +@@ -176,8 +176,7 @@ static int ipddp_xmit(struct sk_buff *skb, struct net_device *dev) + dev->stats.tx_packets++; + dev->stats.tx_bytes += skb->len; + +- if(aarp_send_ddp(rt->dev, skb, &rt->at, NULL) < 0) +- dev_kfree_skb(skb); ++ aarp_send_ddp(rt->dev, skb, &rt->at, NULL); + + spin_unlock(&ipddp_route_lock); + +diff --git a/drivers/net/iseries_veth.c b/drivers/net/iseries_veth.c +index e44215c..9048718 100644 +--- a/drivers/net/iseries_veth.c ++++ b/drivers/net/iseries_veth.c +@@ -495,7 +495,7 @@ static void veth_take_cap_ack(struct veth_lpar_connection *cnx, + cnx->remote_lp); + } else { + memcpy(&cnx->cap_ack_event, event, +- sizeof(&cnx->cap_ack_event)); ++ sizeof(cnx->cap_ack_event)); + cnx->state |= VETH_STATE_GOTCAPACK; + veth_kick_statemachine(cnx); + } +diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c +index 0a551d8..a606e7f 100644 +--- a/drivers/net/sky2.c ++++ b/drivers/net/sky2.c +@@ -1455,7 +1455,6 @@ static int sky2_up(struct net_device *dev) + if (ramsize > 0) { + u32 rxspace; + +- hw->flags |= SKY2_HW_RAM_BUFFER; + pr_debug(PFX "%s: ram buffer %dK\n", dev->name, ramsize); + if (ramsize < 16) + rxspace = ramsize / 2; +@@ -2942,6 +2941,9 @@ static int __devinit sky2_init(struct sky2_hw *hw) + ++hw->ports; + } + ++ if (sky2_read8(hw, B2_E_0)) ++ hw->flags |= SKY2_HW_RAM_BUFFER; ++ + return 0; + } + +diff --git a/drivers/net/tun.c b/drivers/net/tun.c +index 42b6c63..156f59b 100644 +--- a/drivers/net/tun.c ++++ b/drivers/net/tun.c +@@ -943,8 +943,6 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) + char *name; + unsigned long flags = 0; + +- err = -EINVAL; +- + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + +@@ -958,7 +956,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) + flags |= TUN_TAP_DEV; + name = "tap%d"; + } else +- goto failed; ++ return -EINVAL; + + if (*ifr->ifr_name) + name = ifr->ifr_name; +diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c +index fe04589..df49d0d 100644 +--- a/drivers/net/usb/smsc95xx.c ++++ b/drivers/net/usb/smsc95xx.c +@@ -1232,7 +1232,7 @@ static const struct driver_info smsc95xx_info = { + .rx_fixup = smsc95xx_rx_fixup, + .tx_fixup = smsc95xx_tx_fixup, + .status = smsc95xx_status, +- .flags = FLAG_ETHER, ++ .flags = FLAG_ETHER | FLAG_SEND_ZLP, + }; + + static const struct usb_device_id products[] = { +diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c +index edfd9e1..d49df73 100644 +--- a/drivers/net/usb/usbnet.c ++++ b/drivers/net/usb/usbnet.c +@@ -988,7 +988,7 @@ int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net) + * NOTE: strictly conforming cdc-ether devices should expect + * the ZLP here, but ignore the one-byte packet. + */ +- if ((length % dev->maxpacket) == 0) { ++ if (!(info->flags & FLAG_SEND_ZLP) && (length % dev->maxpacket) == 0) { + urb->transfer_buffer_length++; + if (skb_tailroom(skb)) { + skb->data[skb->len] = 0; +diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c +index 101fe4c..c6ac85d 100644 +--- a/fs/ecryptfs/main.c ++++ b/fs/ecryptfs/main.c +@@ -35,6 +35,7 @@ + #include <linux/key.h> + #include <linux/parser.h> + #include <linux/fs_stack.h> ++#include <linux/ima.h> + #include "ecryptfs_kernel.h" + + /** +@@ -118,6 +119,7 @@ int ecryptfs_init_persistent_file(struct dentry *ecryptfs_dentry) + const struct cred *cred = current_cred(); + struct ecryptfs_inode_info *inode_info = + ecryptfs_inode_to_private(ecryptfs_dentry->d_inode); ++ int opened_lower_file = 0; + int rc = 0; + + mutex_lock(&inode_info->lower_file_mutex); +@@ -134,9 +136,12 @@ int ecryptfs_init_persistent_file(struct dentry *ecryptfs_dentry) + "for lower_dentry [0x%p] and lower_mnt [0x%p]; " + "rc = [%d]\n", lower_dentry, lower_mnt, rc); + inode_info->lower_file = NULL; +- } ++ } else ++ opened_lower_file = 1; + } + mutex_unlock(&inode_info->lower_file_mutex); ++ if (opened_lower_file) ++ ima_counts_get(inode_info->lower_file); + return rc; + } + +diff --git a/fs/namei.c b/fs/namei.c +index 1f13751..fcfc553 100644 +--- a/fs/namei.c ++++ b/fs/namei.c +@@ -1533,9 +1533,11 @@ int may_open(struct path *path, int acc_mode, int flag) + if (error) + return error; + +- error = ima_path_check(path, +- acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC), ++ error = ima_path_check(path, acc_mode ? ++ acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC) : ++ ACC_MODE(flag) & (MAY_READ | MAY_WRITE), + IMA_COUNT_UPDATE); ++ + if (error) + return error; + /* +diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h +index dc3b132..708085a 100644 +--- a/include/linux/ftrace.h ++++ b/include/linux/ftrace.h +@@ -241,7 +241,7 @@ extern void ftrace_enable_daemon(void); + # define ftrace_set_filter(buf, len, reset) do { } while (0) + # define ftrace_disable_daemon() do { } while (0) + # define ftrace_enable_daemon() do { } while (0) +-static inline void ftrace_release(void *start, unsigned long size) { } ++static inline void ftrace_release_mod(struct module *mod) {} + static inline int register_ftrace_command(struct ftrace_func_command *cmd) + { + return -EINVAL; +diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h +index 310e18a..c42eeb3 100644 +--- a/include/linux/usb/usbnet.h ++++ b/include/linux/usb/usbnet.h +@@ -86,6 +86,7 @@ struct driver_info { + + #define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ + #define FLAG_WLAN 0x0080 /* use "wlan%d" names */ ++#define FLAG_SEND_ZLP 0x0200 /* hw requires ZLPs are sent */ + + + /* init device ... can sleep, or cause probe() failure */ +diff --git a/kernel/exit.c b/kernel/exit.c +index 869dc22..b8606f0 100644 +--- a/kernel/exit.c ++++ b/kernel/exit.c +@@ -987,8 +987,6 @@ NORET_TYPE void do_exit(long code) + tsk->mempolicy = NULL; + #endif + #ifdef CONFIG_FUTEX +- if (unlikely(!list_empty(&tsk->pi_state_list))) +- exit_pi_state_list(tsk); + if (unlikely(current->pi_state_cache)) + kfree(current->pi_state_cache); + #endif +diff --git a/kernel/fork.c b/kernel/fork.c +index e6c04d4..4b36858 100644 +--- a/kernel/fork.c ++++ b/kernel/fork.c +@@ -544,12 +544,18 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm) + + /* Get rid of any futexes when releasing the mm */ + #ifdef CONFIG_FUTEX +- if (unlikely(tsk->robust_list)) ++ if (unlikely(tsk->robust_list)) { + exit_robust_list(tsk); ++ tsk->robust_list = NULL; ++ } + #ifdef CONFIG_COMPAT +- if (unlikely(tsk->compat_robust_list)) ++ if (unlikely(tsk->compat_robust_list)) { + compat_exit_robust_list(tsk); ++ tsk->compat_robust_list = NULL; ++ } + #endif ++ if (unlikely(!list_empty(&tsk->pi_state_list))) ++ exit_pi_state_list(tsk); + #endif + + /* Get rid of any cached register state */ +diff --git a/kernel/futex.c b/kernel/futex.c +index e18cfbd..2362d06 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -912,8 +912,8 @@ retry: + hb1 = hash_futex(&key1); + hb2 = hash_futex(&key2); + +- double_lock_hb(hb1, hb2); + retry_private: ++ double_lock_hb(hb1, hb2); + op_ret = futex_atomic_op_inuser(op, uaddr2); + if (unlikely(op_ret < 0)) { + +@@ -2087,7 +2087,6 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, + * Unqueue the futex_q and determine which it was. + */ + plist_del(&q->list, &q->list.plist); +- drop_futex_key_refs(&q->key); + + if (timeout && !timeout->task) + ret = -ETIMEDOUT; +diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c +index e0f59a2..89aed59 100644 +--- a/kernel/time/tick-sched.c ++++ b/kernel/time/tick-sched.c +@@ -231,6 +231,13 @@ void tick_nohz_stop_sched_tick(int inidle) + if (!inidle && !ts->inidle) + goto end; + ++ /* ++ * Set ts->inidle unconditionally. Even if the system did not ++ * switch to NOHZ mode the cpu frequency governers rely on the ++ * update of the idle time accounting in tick_nohz_start_idle(). ++ */ ++ ts->inidle = 1; ++ + now = tick_nohz_start_idle(ts); + + /* +@@ -248,8 +255,6 @@ void tick_nohz_stop_sched_tick(int inidle) + if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) + goto end; + +- ts->inidle = 1; +- + if (need_resched()) + goto end; + +diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c +index 25edd5c..52eb251 100644 +--- a/kernel/trace/ftrace.c ++++ b/kernel/trace/ftrace.c +@@ -1110,14 +1110,9 @@ static void ftrace_replace_code(int enable) + failed = __ftrace_replace_code(rec, enable); + if (failed) { + rec->flags |= FTRACE_FL_FAILED; +- if ((system_state == SYSTEM_BOOTING) || +- !core_kernel_text(rec->ip)) { +- ftrace_free_rec(rec); +- } else { +- ftrace_bug(failed, rec->ip); +- /* Stop processing */ +- return; +- } ++ ftrace_bug(failed, rec->ip); ++ /* Stop processing */ ++ return; + } + } while_for_each_ftrace_rec(); + } +@@ -2801,19 +2796,17 @@ static int ftrace_convert_nops(struct module *mod, + } + + #ifdef CONFIG_MODULES +-void ftrace_release(void *start, void *end) ++void ftrace_release_mod(struct module *mod) + { + struct dyn_ftrace *rec; + struct ftrace_page *pg; +- unsigned long s = (unsigned long)start; +- unsigned long e = (unsigned long)end; + +- if (ftrace_disabled || !start || start == end) ++ if (ftrace_disabled) + return; + + mutex_lock(&ftrace_lock); + do_for_each_ftrace_rec(pg, rec) { +- if ((rec->ip >= s) && (rec->ip < e)) { ++ if (within_module_core(rec->ip, mod)) { + /* + * rec->ip is changed in ftrace_free_rec() + * It should not between s and e if record was freed. +@@ -2845,9 +2838,7 @@ static int ftrace_module_notify(struct notifier_block *self, + mod->num_ftrace_callsites); + break; + case MODULE_STATE_GOING: +- ftrace_release(mod->ftrace_callsites, +- mod->ftrace_callsites + +- mod->num_ftrace_callsites); ++ ftrace_release_mod(mod); + break; + } + +diff --git a/mm/swap_state.c b/mm/swap_state.c +index 42cd38e..0313a13 100644 +--- a/mm/swap_state.c ++++ b/mm/swap_state.c +@@ -66,10 +66,10 @@ void show_swap_cache_info(void) + } + + /* +- * add_to_swap_cache resembles add_to_page_cache_locked on swapper_space, ++ * __add_to_swap_cache resembles add_to_page_cache_locked on swapper_space, + * but sets SwapCache flag and private instead of mapping and index. + */ +-int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask) ++static int __add_to_swap_cache(struct page *page, swp_entry_t entry) + { + int error; + +@@ -77,28 +77,37 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask) + VM_BUG_ON(PageSwapCache(page)); + VM_BUG_ON(!PageSwapBacked(page)); + ++ page_cache_get(page); ++ SetPageSwapCache(page); ++ set_page_private(page, entry.val); ++ ++ spin_lock_irq(&swapper_space.tree_lock); ++ error = radix_tree_insert(&swapper_space.page_tree, entry.val, page); ++ if (likely(!error)) { ++ total_swapcache_pages++; ++ __inc_zone_page_state(page, NR_FILE_PAGES); ++ INC_CACHE_INFO(add_total); ++ } ++ spin_unlock_irq(&swapper_space.tree_lock); ++ ++ if (unlikely(error)) { ++ set_page_private(page, 0UL); ++ ClearPageSwapCache(page); ++ page_cache_release(page); ++ } ++ ++ return error; ++} ++ ++ ++int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask) ++{ ++ int error; ++ + error = radix_tree_preload(gfp_mask); + if (!error) { +- page_cache_get(page); +- SetPageSwapCache(page); +- set_page_private(page, entry.val); +- +- spin_lock_irq(&swapper_space.tree_lock); +- error = radix_tree_insert(&swapper_space.page_tree, +- entry.val, page); +- if (likely(!error)) { +- total_swapcache_pages++; +- __inc_zone_page_state(page, NR_FILE_PAGES); +- INC_CACHE_INFO(add_total); +- } +- spin_unlock_irq(&swapper_space.tree_lock); ++ error = __add_to_swap_cache(page, entry); + radix_tree_preload_end(); +- +- if (unlikely(error)) { +- set_page_private(page, 0UL); +- ClearPageSwapCache(page); +- page_cache_release(page); +- } + } + return error; + } +@@ -289,13 +298,24 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, + } + + /* ++ * call radix_tree_preload() while we can wait. ++ */ ++ err = radix_tree_preload(gfp_mask & GFP_KERNEL); ++ if (err) ++ break; ++ ++ /* + * Swap entry may have been freed since our caller observed it. + */ + err = swapcache_prepare(entry); +- if (err == -EEXIST) /* seems racy */ ++ if (err == -EEXIST) { /* seems racy */ ++ radix_tree_preload_end(); + continue; +- if (err) /* swp entry is obsolete ? */ ++ } ++ if (err) { /* swp entry is obsolete ? */ ++ radix_tree_preload_end(); + break; ++ } + + /* + * Associate the page with swap entry in the swap cache. +@@ -307,8 +327,9 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, + */ + __set_page_locked(new_page); + SetPageSwapBacked(new_page); +- err = add_to_swap_cache(new_page, entry, gfp_mask & GFP_KERNEL); ++ err = __add_to_swap_cache(new_page, entry); + if (likely(!err)) { ++ radix_tree_preload_end(); + /* + * Initiate read into locked page and return. + */ +@@ -316,6 +337,7 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, + swap_readpage(new_page); + return new_page; + } ++ radix_tree_preload_end(); + ClearPageSwapBacked(new_page); + __clear_page_locked(new_page); + swapcache_free(entry, NULL); +diff --git a/net/appletalk/aarp.c b/net/appletalk/aarp.c +index 89f99d3..9d4adfd 100644 +--- a/net/appletalk/aarp.c ++++ b/net/appletalk/aarp.c +@@ -599,7 +599,7 @@ int aarp_send_ddp(struct net_device *dev, struct sk_buff *skb, + + /* Non ELAP we cannot do. */ + if (dev->type != ARPHRD_ETHER) +- return -1; ++ goto free_it; + + skb->dev = dev; + skb->protocol = htons(ETH_P_ATALK); +@@ -634,7 +634,7 @@ int aarp_send_ddp(struct net_device *dev, struct sk_buff *skb, + if (!a) { + /* Whoops slipped... good job it's an unreliable protocol 8) */ + write_unlock_bh(&aarp_lock); +- return -1; ++ goto free_it; + } + + /* Set up the queue */ +@@ -663,15 +663,21 @@ out_unlock: + write_unlock_bh(&aarp_lock); + + /* Tell the ddp layer we have taken over for this frame. */ +- return 0; ++ goto sent; + + sendit: + if (skb->sk) + skb->priority = skb->sk->sk_priority; +- dev_queue_xmit(skb); ++ if (dev_queue_xmit(skb)) ++ goto drop; + sent: +- return 1; ++ return NET_XMIT_SUCCESS; ++free_it: ++ kfree_skb(skb); ++drop: ++ return NET_XMIT_DROP; + } ++EXPORT_SYMBOL(aarp_send_ddp); + + /* + * An entry in the aarp unresolved queue has become resolved. Send +diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c +index 875eda5..0e16544 100644 +--- a/net/appletalk/ddp.c ++++ b/net/appletalk/ddp.c +@@ -1270,8 +1270,10 @@ static int handle_ip_over_ddp(struct sk_buff *skb) + struct net_device_stats *stats; + + /* This needs to be able to handle ipddp"N" devices */ +- if (!dev) +- return -ENODEV; ++ if (!dev) { ++ kfree_skb(skb); ++ return NET_RX_DROP; ++ } + + skb->protocol = htons(ETH_P_IP); + skb_pull(skb, 13); +@@ -1281,8 +1283,7 @@ static int handle_ip_over_ddp(struct sk_buff *skb) + stats = netdev_priv(dev); + stats->rx_packets++; + stats->rx_bytes += skb->len + 13; +- netif_rx(skb); /* Send the SKB up to a higher place. */ +- return 0; ++ return netif_rx(skb); /* Send the SKB up to a higher place. */ + } + #else + /* make it easy for gcc to optimize this test out, i.e. kill the code */ +@@ -1290,9 +1291,8 @@ static int handle_ip_over_ddp(struct sk_buff *skb) + #define handle_ip_over_ddp(skb) 0 + #endif + +-static void atalk_route_packet(struct sk_buff *skb, struct net_device *dev, +- struct ddpehdr *ddp, __u16 len_hops, +- int origlen) ++static int atalk_route_packet(struct sk_buff *skb, struct net_device *dev, ++ struct ddpehdr *ddp, __u16 len_hops, int origlen) + { + struct atalk_route *rt; + struct atalk_addr ta; +@@ -1359,8 +1359,6 @@ static void atalk_route_packet(struct sk_buff *skb, struct net_device *dev, + /* 22 bytes - 12 ether, 2 len, 3 802.2 5 snap */ + struct sk_buff *nskb = skb_realloc_headroom(skb, 32); + kfree_skb(skb); +- if (!nskb) +- goto out; + skb = nskb; + } else + skb = skb_unshare(skb, GFP_ATOMIC); +@@ -1369,12 +1367,18 @@ static void atalk_route_packet(struct sk_buff *skb, struct net_device *dev, + * If the buffer didn't vanish into the lack of space bitbucket we can + * send it. + */ +- if (skb && aarp_send_ddp(rt->dev, skb, &ta, NULL) == -1) +- goto free_it; +-out: +- return; ++ if (skb == NULL) ++ goto drop; ++ ++ /* ++ * It is OK, NET_XMIT_SUCCESS == NET_RX_SUCCESS and ++ * NET_XMIT_DROP == NET_RX_DROP ++ */ ++ return aarp_send_ddp(rt->dev, skb, &ta, NULL); + free_it: + kfree_skb(skb); ++drop: ++ return NET_RX_DROP; + } + + /** +@@ -1404,7 +1408,7 @@ static int atalk_rcv(struct sk_buff *skb, struct net_device *dev, + + /* Don't mangle buffer if shared */ + if (!(skb = skb_share_check(skb, GFP_ATOMIC))) +- goto out; ++ goto drop; + + /* Size check and make sure header is contiguous */ + if (!pskb_may_pull(skb, sizeof(*ddp))) +@@ -1448,8 +1452,7 @@ static int atalk_rcv(struct sk_buff *skb, struct net_device *dev, + /* Not ours, so we route the packet via the correct + * AppleTalk iface + */ +- atalk_route_packet(skb, dev, ddp, len_hops, origlen); +- goto out; ++ return atalk_route_packet(skb, dev, ddp, len_hops, origlen); + } + + /* if IP over DDP is not selected this code will be optimized out */ +@@ -1472,11 +1475,12 @@ static int atalk_rcv(struct sk_buff *skb, struct net_device *dev, + + if (sock_queue_rcv_skb(sock, skb) < 0) + goto freeit; +-out: +- return 0; ++ ++ return NET_RX_SUCCESS; + freeit: + kfree_skb(skb); +- goto out; ++drop: ++ return NET_RX_DROP; + } + + /* +@@ -1652,10 +1656,10 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr + if (skb2) { + loopback = 1; + SOCK_DEBUG(sk, "SK %p: send out(copy).\n", sk); +- if (aarp_send_ddp(dev, skb2, +- &usat->sat_addr, NULL) == -1) +- kfree_skb(skb2); +- /* else queued/sent above in the aarp queue */ ++ /* ++ * If it fails it is queued/sent above in the aarp queue ++ */ ++ aarp_send_ddp(dev, skb2, &usat->sat_addr, NULL); + } + } + +@@ -1685,9 +1689,10 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr + usat = &gsat; + } + +- if (aarp_send_ddp(dev, skb, &usat->sat_addr, NULL) == -1) +- kfree_skb(skb); +- /* else queued/sent above in the aarp queue */ ++ /* ++ * If it fails it is queued/sent above in the aarp queue ++ */ ++ aarp_send_ddp(dev, skb, &usat->sat_addr, NULL); + } + SOCK_DEBUG(sk, "SK %p: Done write (%Zd).\n", sk, len); + +@@ -1865,7 +1870,6 @@ static struct packet_type ppptalk_packet_type __read_mostly = { + static unsigned char ddp_snap_id[] = { 0x08, 0x00, 0x07, 0x80, 0x9B }; + + /* Export symbols for use by drivers when AppleTalk is a module */ +-EXPORT_SYMBOL(aarp_send_ddp); + EXPORT_SYMBOL(atrtr_get_dev); + EXPORT_SYMBOL(atalk_find_dev_addr); + +diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c +index f03529c..f8969fe 100644 +--- a/net/ax25/af_ax25.c ++++ b/net/ax25/af_ax25.c +@@ -893,7 +893,6 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev) + + sock_init_data(NULL, sk); + +- sk->sk_destruct = ax25_free_sock; + sk->sk_type = osk->sk_type; + sk->sk_priority = osk->sk_priority; + sk->sk_protocol = osk->sk_protocol; +@@ -931,6 +930,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev) + } + + sk->sk_protinfo = ax25; ++ sk->sk_destruct = ax25_free_sock; + ax25->sk = sk; + + return sk; +@@ -1781,8 +1781,8 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) + ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ); + ax25_info.n2count = ax25->n2count; + ax25_info.state = ax25->state; +- ax25_info.rcv_q = sk_wmem_alloc_get(sk); +- ax25_info.snd_q = sk_rmem_alloc_get(sk); ++ ax25_info.rcv_q = sk_rmem_alloc_get(sk); ++ ax25_info.snd_q = sk_wmem_alloc_get(sk); + ax25_info.vs = ax25->vs; + ax25_info.vr = ax25->vr; + ax25_info.va = ax25->va; +diff --git a/net/core/dev.c b/net/core/dev.c +index 6a94475..a2f575b 100644 +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -2248,6 +2248,9 @@ int netif_receive_skb(struct sk_buff *skb) + int ret = NET_RX_DROP; + __be16 type; + ++ if (!skb->tstamp.tv64) ++ net_timestamp(skb); ++ + if (skb->vlan_tci && vlan_hwaccel_do_receive(skb)) + return NET_RX_SUCCESS; + +@@ -2255,9 +2258,6 @@ int netif_receive_skb(struct sk_buff *skb) + if (netpoll_receive_skb(skb)) + return NET_RX_DROP; + +- if (!skb->tstamp.tv64) +- net_timestamp(skb); +- + if (!skb->iif) + skb->iif = skb->dev->ifindex; + +diff --git a/net/core/sock.c b/net/core/sock.c +index 7633422..dd120d8 100644 +--- a/net/core/sock.c ++++ b/net/core/sock.c +@@ -1218,17 +1218,22 @@ void __init sk_init(void) + void sock_wfree(struct sk_buff *skb) + { + struct sock *sk = skb->sk; +- int res; ++ unsigned int len = skb->truesize; + +- /* In case it might be waiting for more memory. */ +- res = atomic_sub_return(skb->truesize, &sk->sk_wmem_alloc); +- if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) ++ if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) { ++ /* ++ * Keep a reference on sk_wmem_alloc, this will be released ++ * after sk_write_space() call ++ */ ++ atomic_sub(len - 1, &sk->sk_wmem_alloc); + sk->sk_write_space(sk); ++ len = 1; ++ } + /* +- * if sk_wmem_alloc reached 0, we are last user and should +- * free this sock, as sk_free() call could not do it. ++ * if sk_wmem_alloc reaches 0, we must finish what sk_free() ++ * could not do because of in-flight packets + */ +- if (res == 0) ++ if (atomic_sub_and_test(len, &sk->sk_wmem_alloc)) + __sk_free(sk); + } + EXPORT_SYMBOL(sock_wfree); +diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c +index f8d67cc..96440e5 100644 +--- a/net/ipv4/tcp_minisocks.c ++++ b/net/ipv4/tcp_minisocks.c +@@ -363,7 +363,7 @@ void tcp_twsk_destructor(struct sock *sk) + #ifdef CONFIG_TCP_MD5SIG + struct tcp_timewait_sock *twsk = tcp_twsk(sk); + if (twsk->tw_md5_keylen) +- tcp_put_md5sig_pool(); ++ tcp_free_md5sig_pool(); + #endif + } + +diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c +index 98b7327..2e41849 100644 +--- a/net/ipv6/sit.c ++++ b/net/ipv6/sit.c +@@ -313,7 +313,7 @@ static int ipip6_tunnel_get_prl(struct ip_tunnel *t, + + c = 0; + for (prl = t->prl; prl; prl = prl->next) { +- if (c > cmax) ++ if (c >= cmax) + break; + if (kprl.addr != htonl(INADDR_ANY) && prl->addr != kprl.addr) + continue; +diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c +index fc3ebb9..51ab497 100644 +--- a/net/unix/af_unix.c ++++ b/net/unix/af_unix.c +@@ -1501,6 +1501,7 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, + struct sk_buff *skb; + int sent = 0; + struct scm_cookie tmp_scm; ++ bool fds_sent = false; + + if (NULL == siocb->scm) + siocb->scm = &tmp_scm; +@@ -1562,12 +1563,14 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, + size = min_t(int, size, skb_tailroom(skb)); + + memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred)); +- if (siocb->scm->fp) { ++ /* Only send the fds in the first buffer */ ++ if (siocb->scm->fp && !fds_sent) { + err = unix_attach_fds(siocb->scm, skb); + if (err) { + kfree_skb(skb); + goto out_err; + } ++ fds_sent = true; + } + + err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size); +diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c +index 30eeb30..713bf69 100644 +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -16876,6 +16876,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = { + SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_ECS), + SND_PCI_QUIRK(0x105b, 0x0d47, "Foxconn 45CMX/45GMX/45CMX-K", + ALC662_3ST_6ch_DIG), ++ SND_PCI_QUIRK(0x1179, 0xff6e, "Toshiba NB200", ALC663_ASUS_MODE4), + SND_PCI_QUIRK(0x144d, 0xca00, "Samsung NC10", ALC272_SAMSUNG_NC10), + SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L", + ALC662_3ST_6ch_DIG), +diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c +index acfa476..91683a3 100644 +--- a/sound/pci/via82xx.c ++++ b/sound/pci/via82xx.c +@@ -1626,7 +1626,7 @@ static int snd_via8233_dxs_volume_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) + { + struct via82xx *chip = snd_kcontrol_chip(kcontrol); +- unsigned int idx = snd_ctl_get_ioff(kcontrol, &ucontrol->id); ++ unsigned int idx = kcontrol->id.subdevice; + + ucontrol->value.integer.value[0] = VIA_DXS_MAX_VOLUME - chip->playback_volume[idx][0]; + ucontrol->value.integer.value[1] = VIA_DXS_MAX_VOLUME - chip->playback_volume[idx][1]; +@@ -1646,7 +1646,7 @@ static int snd_via8233_dxs_volume_put(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) + { + struct via82xx *chip = snd_kcontrol_chip(kcontrol); +- unsigned int idx = snd_ctl_get_ioff(kcontrol, &ucontrol->id); ++ unsigned int idx = kcontrol->id.subdevice; + unsigned long port = chip->port + 0x10 * idx; + unsigned char val; + int i, change = 0; +@@ -1705,11 +1705,12 @@ static struct snd_kcontrol_new snd_via8233_pcmdxs_volume_control __devinitdata = + }; + + static struct snd_kcontrol_new snd_via8233_dxs_volume_control __devinitdata = { +- .name = "VIA DXS Playback Volume", +- .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ++ .iface = SNDRV_CTL_ELEM_IFACE_PCM, ++ .device = 0, ++ /* .subdevice set later */ ++ .name = "PCM Playback Volume", + .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE | + SNDRV_CTL_ELEM_ACCESS_TLV_READ), +- .count = 4, + .info = snd_via8233_dxs_volume_info, + .get = snd_via8233_dxs_volume_get, + .put = snd_via8233_dxs_volume_put, +@@ -1936,10 +1937,18 @@ static int __devinit snd_via8233_init_misc(struct via82xx *chip) + } + else /* Using DXS when PCM emulation is enabled is really weird */ + { +- /* Standalone DXS controls */ +- err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_via8233_dxs_volume_control, chip)); +- if (err < 0) +- return err; ++ for (i = 0; i < 4; ++i) { ++ struct snd_kcontrol *kctl; ++ ++ kctl = snd_ctl_new1( ++ &snd_via8233_dxs_volume_control, chip); ++ if (!kctl) ++ return -ENOMEM; ++ kctl->id.subdevice = i; ++ err = snd_ctl_add(chip->card, kctl); ++ if (err < 0) ++ return err; ++ } + } + } + /* select spdif data slot 10/11 */ +diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c +index b3a2de8..003b742 100644 +--- a/sound/soc/codecs/wm8350.c ++++ b/sound/soc/codecs/wm8350.c +@@ -580,7 +580,7 @@ static const struct snd_kcontrol_new wm8350_left_capt_mixer_controls[] = { + SOC_DAPM_SINGLE_TLV("L3 Capture Volume", + WM8350_INPUT_MIXER_VOLUME_L, 9, 7, 0, out_mix_tlv), + SOC_DAPM_SINGLE("PGA Capture Switch", +- WM8350_LEFT_INPUT_VOLUME, 14, 1, 0), ++ WM8350_LEFT_INPUT_VOLUME, 14, 1, 1), + }; + + /* Right Input Mixer */ +@@ -590,7 +590,7 @@ static const struct snd_kcontrol_new wm8350_right_capt_mixer_controls[] = { + SOC_DAPM_SINGLE_TLV("L3 Capture Volume", + WM8350_INPUT_MIXER_VOLUME_R, 13, 7, 0, out_mix_tlv), + SOC_DAPM_SINGLE("PGA Capture Switch", +- WM8350_RIGHT_INPUT_VOLUME, 14, 1, 0), ++ WM8350_RIGHT_INPUT_VOLUME, 14, 1, 1), + }; + + /* Left Mic Mixer */ ++++++ patches.xen.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch new/patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch --- old/patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch 2009-10-06 17:30:50.000000000 +0200 +++ new/patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch 2009-10-12 11:14:47.000000000 +0200 @@ -13,16 +13,12 @@ Signed-off-by: Magnus Damm <magnus@valinux.co.jp> Acked-by: jbeulich@novell.com ---- Applies to 2.6.19-rc1. + jb: fixed up register usage (paralleling what's needed for 2.6.30 on x86-64) - machine_kexec.c | 59 ----------------------------------------------------- - relocate_kernel.S | 58 +++++++++++++++++++++++++++++++++++++++++++++++----- - 2 files changed, 53 insertions(+), 64 deletions(-) - ---- head-2009-04-21.orig/arch/x86/kernel/machine_kexec_32.c 2009-04-21 10:18:25.000000000 +0200 -+++ head-2009-04-21/arch/x86/kernel/machine_kexec_32.c 2009-04-21 10:33:15.000000000 +0200 +--- head-2009-10-06.orig/arch/x86/kernel/machine_kexec_32.c 2009-10-12 10:33:15.000000000 +0200 ++++ head-2009-10-06/arch/x86/kernel/machine_kexec_32.c 2009-04-21 10:33:15.000000000 +0200 @@ -26,48 +26,6 @@ #include <asm/system.h> #include <asm/cacheflush.h> @@ -97,27 +93,19 @@ /* now call it */ image->start = relocate_kernel_ptr((unsigned long)image->head, (unsigned long)page_list, ---- head-2009-04-21.orig/arch/x86/kernel/relocate_kernel_32.S 2009-04-21 10:18:25.000000000 +0200 -+++ head-2009-04-21/arch/x86/kernel/relocate_kernel_32.S 2009-04-21 10:31:40.000000000 +0200 -@@ -87,14 +87,45 @@ relocate_kernel: +--- head-2009-10-06.orig/arch/x86/kernel/relocate_kernel_32.S 2009-10-12 10:33:15.000000000 +0200 ++++ head-2009-10-06/arch/x86/kernel/relocate_kernel_32.S 2009-10-12 10:39:36.000000000 +0200 +@@ -87,14 +87,32 @@ relocate_kernel: movl PTR(PA_PGD)(%ebp), %eax movl %eax, %cr3 + /* setup idt */ -+ movl %edi, %eax -+ addl $(idt_48 - relocate_kernel), %eax -+ lidtl (%eax) ++ lidtl idt_48 - relocate_kernel(%edi) + + /* setup gdt */ -+ movl %edi, %eax -+ addl $(gdt - relocate_kernel), %eax -+ movl %edi, %esi -+ addl $((gdt_48 - relocate_kernel) + 2), %esi -+ movl %eax, (%esi) -+ -+ movl %edi, %eax -+ addl $(gdt_48 - relocate_kernel), %eax -+ lgdtl (%eax) ++ leal gdt - relocate_kernel(%edi), %eax ++ movl %eax, (gdt_48 - relocate_kernel) + 2(%edi) ++ lgdtl gdt_48 - relocate_kernel(%edi) + + /* setup data segment registers */ + mov $(gdt_ds - gdt), %eax @@ -131,26 +119,18 @@ lea PAGE_SIZE(%edi), %esp - /* jump to identity mapped page */ -- movl %edi, %eax -- addl $(identity_mapped - relocate_kernel), %eax -- pushl %eax -- ret + /* load new code segment and jump to identity mapped page */ -+ movl %edi, %esi -+ xorl %eax, %eax -+ pushl %eax -+ pushl %esi -+ pushl %eax -+ movl $(gdt_cs - gdt), %eax -+ pushl %eax -+ movl %edi, %eax -+ addl $(identity_mapped - relocate_kernel),%eax -+ pushl %eax ++ pushl $0 ++ pushl $(gdt_cs - gdt) + movl %edi, %eax + addl $(identity_mapped - relocate_kernel), %eax + pushl %eax +- ret + iretl identity_mapped: /* store the start address on the stack */ -@@ -271,5 +302,22 @@ swap_pages: +@@ -271,5 +289,22 @@ swap_pages: popl %ebp ret diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch new/patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch --- old/patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch 2009-10-06 17:30:50.000000000 +0200 +++ new/patches.xen/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch 2009-10-12 11:14:47.000000000 +0200 @@ -13,16 +13,12 @@ Signed-off-by: Magnus Damm <magnus@valinux.co.jp> Acked-by: jbeulich@novell.com ---- Applies to 2.6.19-rc1. + jb: fixed up register usage for 2.6.30 (bnc#545206) - machine_kexec.c | 58 ----------------------------------------------------- - relocate_kernel.S | 50 +++++++++++++++++++++++++++++++++++++++++---- - 2 files changed, 45 insertions(+), 63 deletions(-) - ---- head-2009-04-21.orig/arch/x86/kernel/machine_kexec_64.c 2009-04-21 10:18:25.000000000 +0200 -+++ head-2009-04-21/arch/x86/kernel/machine_kexec_64.c 2009-04-21 10:35:13.000000000 +0200 +--- head-2009-10-06.orig/arch/x86/kernel/machine_kexec_64.c 2009-10-12 10:17:22.000000000 +0200 ++++ head-2009-10-06/arch/x86/kernel/machine_kexec_64.c 2009-04-21 10:35:13.000000000 +0200 @@ -201,47 +201,6 @@ static int init_pgtable(struct kimage *i return init_transition_pgtable(image, level4p); } @@ -96,53 +92,42 @@ /* now call it */ image->start = relocate_kernel((unsigned long)image->head, (unsigned long)page_list, ---- head-2009-04-21.orig/arch/x86/kernel/relocate_kernel_64.S 2009-04-21 10:18:25.000000000 +0200 -+++ head-2009-04-21/arch/x86/kernel/relocate_kernel_64.S 2009-04-21 10:38:05.000000000 +0200 -@@ -91,13 +91,39 @@ relocate_kernel: +--- head-2009-10-06.orig/arch/x86/kernel/relocate_kernel_64.S 2009-10-12 10:17:22.000000000 +0200 ++++ head-2009-10-06/arch/x86/kernel/relocate_kernel_64.S 2009-10-12 10:32:00.000000000 +0200 +@@ -91,13 +91,30 @@ relocate_kernel: /* Switch to the identity mapped page tables */ movq %r9, %cr3 + /* setup idt */ -+ movq %r8, %rax -+ addq $(idt_80 - relocate_kernel), %rax -+ lidtq (%rax) ++ lidtq idt_80 - relocate_kernel(%r8) + + /* setup gdt */ -+ movq %r8, %rax -+ addq $(gdt - relocate_kernel), %rax -+ movq %r8, %r9 -+ addq $((gdt_80 - relocate_kernel) + 2), %r9 -+ movq %rax, (%r9) -+ -+ movq %r8, %rax -+ addq $(gdt_80 - relocate_kernel), %rax -+ lgdtq (%rax) ++ leaq gdt - relocate_kernel(%r8), %rax ++ movq %rax, (gdt_80 - relocate_kernel) + 2(%r8) ++ lgdtq gdt_80 - relocate_kernel(%r8) + + /* setup data segment registers */ + xorl %eax, %eax -+ movl %eax, %ds -+ movl %eax, %es -+ movl %eax, %fs -+ movl %eax, %gs -+ movl %eax, %ss ++ movl %eax, %ds ++ movl %eax, %es ++ movl %eax, %fs ++ movl %eax, %gs ++ movl %eax, %ss + /* setup a new stack at the end of the physical control page */ lea PAGE_SIZE(%r8), %rsp - /* jump to identity mapped page */ -- addq $(identity_mapped - relocate_kernel), %r8 -- pushq %r8 -- ret + /* load new code segment and jump to identity mapped page */ -+ movq %r8, %rax -+ addq $(identity_mapped - relocate_kernel), %rax + addq $(identity_mapped - relocate_kernel), %r8 + pushq $(gdt_cs - gdt) -+ pushq %rax + pushq %r8 +- ret + lretq identity_mapped: /* store the start address on the stack */ -@@ -262,5 +288,20 @@ swap_pages: +@@ -262,5 +279,20 @@ swap_pages: 3: ret ++++++ series.conf ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:04:02.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:04:02.000000000 +0200 @@ -30,6 +30,7 @@ patches.kernel.org/patch-2.6.31.1 patches.kernel.org/patch-2.6.31.1-2 patches.kernel.org/patch-2.6.31.2-3 + patches.kernel.org/patch-2.6.31.3-4 ######################################################## # Build fixes that apply to the vanilla kernel too. @@ -103,6 +104,19 @@ patches.suse/self-ptrace.patch ######################################################## + # PI / Futex + ######################################################## + patches.fixes/futex-correct-futex_wait_requeue_pi-commentary + patches.fixes/futex-detect-mismatched-requeue-targets + patches.fixes/futex-correct-futex_wait_requeue_pi-commentary_2 + patches.fixes/futex-correct-queue_me-and-unqueue_me-commentary + patches.fixes/futex-make-function-kernel-doc-commentary-consistent + patches.fixes/futex-correct-futex_q-woken-state-commentary + patches.fixes/futex-fix-wakeup-race + patches.fixes/futex-add-memory-barrier-commentary + + + ######################################################## # Architecture-specific patches. These used to be all # at the end of series.conf, but since we don't do # conditional builds anymore, there's no point. @@ -141,6 +155,11 @@ patches.arch/add_support_for_hpet_msi_intr_remap.patch patches.arch/add_x86_support_for_hpet_msi_intr_remap.patch + patches.arch/amd_magny_cour_topology_fix.patch + patches.arch/amd_magny_cour_topology_fix_1.patch + patches.arch/amd_magny_cour_topology_fix_2.patch + patches.arch/amd_magny_cour_topology_fix_3.patch + ######################################################## # x86_64/4096CPUS - from SGI ######################################################## @@ -447,6 +466,7 @@ patches.suse/bootsplash patches.drivers/elousb.patch patches.fixes/input-add-acer-aspire-5710-to-nomux.patch + patches.drivers/samsung-laptop-driver.patch ########################################################## # Sound @@ -461,11 +481,15 @@ # more udpates patches.drivers/alsa-hda-2.6.32-pre patches.drivers/alsa-hda-2.6.32-rc1 - patches.drivers/alsa-hda-2.6.32-rc1-toshiba-fix patches.drivers/alsa-hda-2.6.32-rc2 patches.drivers/alsa-hda-alc861-toshiba-fix patches.drivers/alsa-hda-alc660vd-asus-a7k-fix patches.drivers/alsa-hda-alc268-automic-fix + patches.drivers/alsa-hda-realtek-overflow-fix + patches.drivers/alsa-hda-nvidia-hdmi-full-fmts + patches.drivers/alsa-hda-stac9228-fsc-fix + patches.drivers/alsa-hda-stac9228-dell-fix + patches.drivers/alsa-hda-alc662-capture-fix patches.drivers/alsa-ctxfi-01-Native-timer-support-for-emu20k2 patches.drivers/alsa-ctxfi-03-Simple-code-clean-up ++++++ source-timestamp ++++++ --- /var/tmp/diff_new_pack.us3c2w/_old 2009-10-21 01:04:02.000000000 +0200 +++ /var/tmp/diff_new_pack.us3c2w/_new 2009-10-21 01:04:02.000000000 +0200 @@ -1,3 +1,3 @@ -2009-10-08 00:27:25 +0200 -GIT Revision: a6f42d11c9c21d4bcac911d3cf369c8a041bea0c -GIT Branch: master +2009-10-16 11:44:06 +0200 +GIT Revision: 6bdc2d13d5a004187235e0209ee2037e58ca5ead +GIT Branch: openSUSE-11.2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org