Hello community, here is the log from the commit of package kernel-source checked in at Wed May 7 01:37:04 CEST 2008. -------- --- kernel-source/kernel-debug.changes 2008-04-30 16:22:16.000000000 +0200 +++ /mounts/work_src_done/STABLE/kernel-source/kernel-debug.changes 2008-05-02 09:15:29.000000000 +0200 @@ -1,0 +2,27 @@ +Fri May 2 04:54:45 CEST 2008 - teheo@suse.de + +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). + +------------------------------------------------------------------- +Fri May 2 00:16:13 CEST 2008 - gregkh@suse.de + +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes + +------------------------------------------------------------------- +Thu May 1 22:46:16 CEST 2008 - agruen@suse.de + +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). + +------------------------------------------------------------------- +Thu May 1 12:39:42 CEST 2008 - teheo@suse.de + +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). + +------------------------------------------------------------------- kernel-default.changes: same change kernel-dummy.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-vanilla.changes: same change kernel-xen.changes: same change ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kernel-debug.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:09.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:09.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-debug (Version 2.6.25) +# spec file for package kernel-debug (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-debug Summary: A Debug Version of the Kernel -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel Url: http://www.kernel.org/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif %ifarch %ix86 @@ -190,12 +190,12 @@ -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-debug-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-debug-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -269,7 +269,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-debug +KERNELRELEASE=2.6.25.1-$RELEASE-debug EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -587,7 +587,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-default.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:10.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:10.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-default (Version 2.6.25) +# spec file for package kernel-default (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-default Summary: The Standard Kernel for both Uniprocessor and Multiprocessor Systems -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel Url: http://www.kernel.org/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif %ifarch %ix86 @@ -208,12 +208,12 @@ -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-default-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-default-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -287,7 +287,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-default +KERNELRELEASE=2.6.25.1-$RELEASE-default EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -605,7 +605,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-dummy.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:10.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:10.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-dummy (Version 2.6.25) +# spec file for package kernel-dummy (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -15,8 +15,8 @@ Name: kernel-dummy Summary: Internal dummy package for synchronizing release numbers -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel AutoReqProv: off @@ -29,7 +29,7 @@ -------- Andreas Gruenbacher <agruen@suse.de> -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %install rm -rf %buildroot @@ -39,7 +39,23 @@ %files %defattr(-, root, root) /etc/dummy + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-kdump.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:11.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:11.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-kdump (Version 2.6.25) +# spec file for package kernel-kdump (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-kdump Summary: kernel for kdump -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel Url: http://lse.sourceforge.net/kdump/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif %ifarch ppc @@ -189,12 +189,12 @@ -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-kdump-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-kdump-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -268,7 +268,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-kdump +KERNELRELEASE=2.6.25.1-$RELEASE-kdump EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -586,7 +586,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-pae.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:11.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:11.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-pae (Version 2.6.25) +# spec file for package kernel-pae (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-pae Summary: Kernel with PAE Support -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel Url: http://www.kernel.org/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif Provides: k_smp4G kernel-bigsmp @@ -185,12 +185,12 @@ -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-pae-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-pae-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -264,7 +264,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-pae +KERNELRELEASE=2.6.25.1-$RELEASE-pae EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -582,7 +582,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-ppc64.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:11.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:11.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-ppc64 (Version 2.6.25) +# spec file for package kernel-ppc64 (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-ppc64 Summary: Kernel for ppc64 Systems -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later; LGPL v2.1 or later Group: System/Kernel Url: http://www.kernel.org/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif %ifarch ppc @@ -202,12 +202,12 @@ Tom Gall <tom_gall@vnet.ibm.com> see /usr/src/linux/CREDITS for more details. -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-ppc64-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-ppc64-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -281,7 +281,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-ppc64 +KERNELRELEASE=2.6.25.1-$RELEASE-ppc64 EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -599,7 +599,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-ps3.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:11.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:11.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-ps3 (Version 2.6.25) +# spec file for package kernel-ps3 (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-ps3 Summary: kernel for ps3 bootloader -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel Url: http://www.kernel.org/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif %ifarch ppc @@ -188,12 +188,12 @@ -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-ps3-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-ps3-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -267,7 +267,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-ps3 +KERNELRELEASE=2.6.25.1-$RELEASE-ps3 EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -585,7 +585,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-s390.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:12.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:12.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-s390 (Version 2.6.25) +# spec file for package kernel-s390 (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-s390 Summary: The Standard Kernel -Version: 2.6.25 -Release: 22 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel Url: http://www.kernel.org/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif Provides: kernel-32bit k_deflt @@ -183,12 +183,12 @@ -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-s390-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-s390-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -262,7 +262,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-s390 +KERNELRELEASE=2.6.25.1-$RELEASE-s390 EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -580,7 +580,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-source.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:12.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:12.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-source (Version 2.6.25) +# spec file for package kernel-source (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -22,8 +22,8 @@ Name: kernel-source Summary: The Linux Kernel Sources -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 only Group: Development/Sources AutoReqProv: off @@ -33,7 +33,7 @@ BuildRequires: kernel-dummy %endif Provides: linux -Provides: kernel-source = 2.6.25-%source_rel +Provides: kernel-source = 2.6.25.1-%source_rel %if "kernel-source" == "kernel-source" Provides: linux lx_suse lx_sus22 lx_sus24 Obsoletes: linux lx-gdt lx-hack lx-suse lx1162_1 lx1162_2 lx1212_1 lx1212_2 lx1213_1 lx1213_2 lx121_1 lx121_2 lx126_1 lx126_2 lx129_1 lx129_2 lx_large kernel_headers lx_suse lx_sus22 lx_sus24 @@ -105,7 +105,7 @@ see /usr/src/linux/CREDITS for more details. -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then @@ -127,9 +127,9 @@ chmod -Rf a+rX,g-w,o-w . # Apply the patches needed for this architecture. %_sourcedir/guards %symbols < %_sourcedir/series.conf \ - > %_builddir/kernel-source-2.6.25/kernel-source.patches -for patch in $(< %_builddir/kernel-source-2.6.25/kernel-source.patches); do - if ! patch -s -E -p1 --no-backup-if-mismatch -i %_builddir/kernel-source-2.6.25/$patch; then + > %_builddir/kernel-source-2.6.25.1/kernel-source.patches +for patch in $(< %_builddir/kernel-source-2.6.25.1/kernel-source.patches); do + if ! patch -s -E -p1 --no-backup-if-mismatch -i %_builddir/kernel-source-2.6.25.1/$patch; then echo "*** Patch $patch failed ***" exit 1 fi @@ -140,7 +140,7 @@ RELEASE=${RELEASE#[^0-9]*.} done %_sourcedir/install-configs %_sourcedir %_builddir/%buildsubdir $RELEASE -KERNELRELEASE=2.6.25-$RELEASE +KERNELRELEASE=2.6.25.1-$RELEASE cat > %_builddir/%{name}-%{version}/.rpm-defs <<EOF KERNELRELEASE=$KERNELRELEASE SYMBOLS="%symbols" @@ -162,8 +162,8 @@ esac set -- kernel-$flavor $flavor $(case $flavor in (rt|rt_*) echo RT ;; esac) %_sourcedir/guards $* %symbols < %_sourcedir/series.conf \ - > %_builddir/kernel-source-2.6.25/kernel-$flavor.patches - diff -q %_builddir/kernel-source-2.6.25/kernel-{source,$flavor}.patches \ + > %_builddir/kernel-source-2.6.25.1/kernel-$flavor.patches + diff -q %_builddir/kernel-source-2.6.25.1/kernel-{source,$flavor}.patches \ || continue o=$RPM_BUILD_ROOT/usr/src/linux-$KERNELRELEASE-obj/$arch/$flavor mkdir -p $o @@ -282,7 +282,23 @@ %post -f source-post.sh %files -f kernel-source.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-syms.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:12.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:12.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-syms (Version 2.6.25) +# spec file for package kernel-syms (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -21,8 +21,8 @@ Name: kernel-syms Summary: Kernel Symbol Versions (modversions) -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: Development/Sources AutoReqProv: off @@ -61,7 +61,7 @@ #!BuildIgnore: irqbalance xen #!BuildIgnore: perl-Bootloader mkinitrd Requires: linux -Requires: kernel-source = 2.6.25-%source_rel +Requires: kernel-source = 2.6.25.1-%source_rel Source11: arch-symbols Source12: guards Source21: config.conf @@ -92,7 +92,7 @@ see /usr/src/linux/CREDITS for more details. -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep echo "Architecture symbol(s):" %symbols @@ -143,7 +143,23 @@ /usr/src/linux-*-obj /boot/symsets-*-*.tar.gz /lib/modules/*/build + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-vanilla.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:12.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:12.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-vanilla (Version 2.6.25) +# spec file for package kernel-vanilla (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-vanilla Summary: The Standard Kernel - without any SUSE patches -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel Url: http://www.kernel.org/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif %ifarch %ix86 @@ -200,12 +200,12 @@ -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-vanilla-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-vanilla-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -279,7 +279,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-vanilla +KERNELRELEASE=2.6.25.1-$RELEASE-vanilla EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -597,7 +597,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ kernel-xen.spec ++++++ --- /var/tmp/diff_new_pack.O24184/_old 2008-05-07 01:04:12.000000000 +0200 +++ /var/tmp/diff_new_pack.O24184/_new 2008-05-07 01:04:12.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package kernel-xen (Version 2.6.25) +# spec file for package kernel-xen (Version 2.6.25.1) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -42,8 +42,8 @@ Name: kernel-xen Summary: The Xen Kernel -Version: 2.6.25 -Release: 25 +Version: 2.6.25.1 +Release: 1 License: GPL v2 or later Group: System/Kernel Url: http://www.kernel.org/ @@ -83,8 +83,8 @@ %if %build_xen Requires: xen >= xen-3.0.4_13138 %ifarch %ix86 -Provides: kernel-xenpae = 2.6.25 -Obsoletes: kernel-xenpae <= 2.6.25 +Provides: kernel-xenpae = 2.6.25.1 +Obsoletes: kernel-xenpae <= 2.6.25.1 %endif #!BuildIgnore: xen %endif @@ -110,7 +110,7 @@ #Conflicts: kernel %else %if ! %build_xen -Provides: kernel = 2.6.25-%source_rel +Provides: kernel = 2.6.25.1-%source_rel %endif %endif %ifarch %ix86 @@ -189,12 +189,12 @@ -Source Timestamp: 2008-04-30 07:56:05 +0200 +Source Timestamp: 2008-05-02 05:00:13 +0200 %prep if ! [ -e %_sourcedir/linux-2.6.25.tar.bz2 ]; then - echo "The kernel-xen-2.6.25.nosrc.rpm package does not contain the" \ - "complete sources. Please install kernel-source-2.6.25.src.rpm." + echo "The kernel-xen-2.6.25.1.nosrc.rpm package does not contain the" \ + "complete sources. Please install kernel-source-2.6.25.1.src.rpm." exit 1 fi echo "Architecture symbol(s):" %symbols @@ -268,7 +268,7 @@ EOF %endif cat >> ../.rpm-defs <<EOF -KERNELRELEASE=2.6.25-$RELEASE-xen +KERNELRELEASE=2.6.25.1-$RELEASE-xen EOF %if 0%{?__debug_package:1} cat >> ../.rpm-defs <<EOF @@ -586,7 +586,23 @@ %postun -f postun.sh %files -f kernel.files + %changelog +* Fri May 02 2008 teheo@suse.de +- patches.drivers/libata-sata_inic162x-update-to-0.4: + sata_inic162x: update to 0.4 (385599). +* Fri May 02 2008 gregkh@suse.de +- update to 2.6.25.1: + - fixes CVE-2008-1375 and CVE-2008-1675 + - lots of other minor bugfixes +* Fri May 02 2008 agruen@suse.de +- Provide "kernel(flavor:symset) = version" instead of + "kernel(symset) = version". This disambiguates the case where + several kernel flavors end up with the same modver checksums + (190163, 355628). +* Thu May 01 2008 teheo@suse.de +- patches.drivers/libata-ata_piix-verify-sidpr: ata_piix: verify + SIDPR access before enabling it (385535). * Wed Apr 30 2008 gregkh@suse.de - novfs: fixes needed due to apparmor vfs core changes (extended attributes probably do not work now...) ++++++ build-source-timestamp ++++++ --- kernel-source/build-source-timestamp 2008-04-30 16:22:09.000000000 +0200 +++ /mounts/work_src_done/STABLE/kernel-source/build-source-timestamp 2008-05-02 09:15:26.000000000 +0200 @@ -1 +1 @@ -2008-04-30 07:56:05 +0200 +2008-05-02 05:00:13 +0200 ++++++ config.tar.bz2 ++++++ ++++++ find-provides ++++++ --- kernel-source/find-provides 2008-04-30 16:22:23.000000000 +0200 +++ /mounts/work_src_done/STABLE/kernel-source/find-provides 2008-05-02 09:15:31.000000000 +0200 @@ -8,9 +8,11 @@ for file in "${filelist[@]}"; do case "$file" in */symsets-*.tar.gz) + flavor=${file%.tar.gz} + flavor=${flavor##*-} for symset in $(tar tfz "$file" | grep -v '/$'); do class=${symset##*/} ; class=${class%.*} - echo "kernel($class) = ${symset##*.}" + echo "kernel($flavor:$class) = ${symset##*.}" done ;; esac ++++++ kabi.tar.bz2 ++++++ ++++++ needed_space_in_mb ++++++ --- kernel-source/needed_space_in_mb 2008-05-01 14:13:35.000000000 +0200 +++ /mounts/work_src_done/STABLE/kernel-source/needed_space_in_mb 2008-05-02 09:15:44.000000000 +0200 @@ -1 +1 @@ -6000 +6144 ++++++ novell-kmp.tar.bz2 ++++++ ++++++ patches.addon.tar.bz2 ++++++ ++++++ patches.apparmor.tar.bz2 ++++++ ++++ 2331 lines of diff (skipped) ++++++ patches.arch.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.arch/ppc-prom-nodisplay.patch new/patches.arch/ppc-prom-nodisplay.patch --- old/patches.arch/ppc-prom-nodisplay.patch 2008-03-06 17:36:16.000000000 +0100 +++ new/patches.arch/ppc-prom-nodisplay.patch 2008-05-02 09:00:33.000000000 +0200 @@ -39,11 +39,11 @@ --- arch/powerpc/kernel/prom_init.c | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) + 1 files changed, 10 insertions(+), 2 deletions(-) --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c -@@ -172,6 +172,7 @@ static unsigned long __initdata dt_strin +@@ -172,6 +172,7 @@ static unsigned long __initdata prom_initrd_start, prom_initrd_end; @@ -51,7 +51,7 @@ #ifdef CONFIG_PPC64 static int __initdata prom_iommu_force_on; static int __initdata prom_iommu_off; -@@ -557,9 +558,7 @@ unsigned long prom_memparse(const char * +@@ -557,9 +558,7 @@ static void __init early_cmdline_parse(void) { struct prom_t *_prom = &RELOC(prom); @@ -61,7 +61,7 @@ char *p; int l = 0; -@@ -574,6 +573,14 @@ static void __init early_cmdline_parse(v +@@ -574,6 +573,14 @@ #endif /* CONFIG_CMDLINE */ prom_printf("command line: %s\n", RELOC(prom_cmd_line)); @@ -76,7 +76,7 @@ #ifdef CONFIG_PPC64 opt = strstr(RELOC(prom_cmd_line), RELOC("iommu=")); if (opt) { -@@ -2412,6 +2419,7 @@ unsigned long __init prom_init(unsigned +@@ -2415,6 +2422,7 @@ /* * Initialize display devices */ ++++++ patches.drivers.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/alsa-dell-xps-m1330-hp-fix new/patches.drivers/alsa-dell-xps-m1330-hp-fix --- old/patches.drivers/alsa-dell-xps-m1330-hp-fix 2008-04-23 17:34:16.000000000 +0200 +++ new/patches.drivers/alsa-dell-xps-m1330-hp-fix 2008-05-02 09:00:33.000000000 +0200 @@ -12,11 +12,13 @@ Signed-off-by: Takashi Iwai <tiwai@suse.de> --- -diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c -index b75bf34..b8e69a1 100644 +--- + sound/pci/hda/patch_sigmatel.c | 8 ++------ + 1 files changed, 2 insertions(+), 6 deletions(-) + --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c -@@ -2509,12 +2509,8 @@ static int stac92xx_auto_create_hp_ctls(struct hda_codec *codec, +@@ -2378,12 +2378,8 @@ return err; } if (spec->multiout.hp_nid) { diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/alsa-hda-intel-new-ati-id new/patches.drivers/alsa-hda-intel-new-ati-id --- old/patches.drivers/alsa-hda-intel-new-ati-id 2008-04-23 17:34:16.000000000 +0200 +++ new/patches.drivers/alsa-hda-intel-new-ati-id 2008-05-02 09:00:33.000000000 +0200 @@ -9,11 +9,13 @@ Signed-off-by: Libin Yang <Libin.yang@amd.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> --- -diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c -index f3242e1..66dceff 100644 +--- + sound/pci/hda/hda_intel.c | 3 +++ + 1 files changed, 3 insertions(+) + --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c -@@ -2051,6 +2051,9 @@ static struct pci_device_id azx_ids[] = { +@@ -2015,6 +2015,9 @@ { 0x1002, 0xaa20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV635 HDMI */ { 0x1002, 0xaa28, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV620 HDMI */ { 0x1002, 0xaa30, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV770 HDMI */ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/alsa-hda-intel-new-nvidia-id new/patches.drivers/alsa-hda-intel-new-nvidia-id --- old/patches.drivers/alsa-hda-intel-new-nvidia-id 2008-04-23 17:34:16.000000000 +0200 +++ new/patches.drivers/alsa-hda-intel-new-nvidia-id 2008-05-02 09:00:33.000000000 +0200 @@ -10,11 +10,13 @@ Signed-off-by: Takashi Iwai <tiwai@suse.de> --- -diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c -index 48677f3..3d9f0bd 100644 +--- + sound/pci/hda/hda_intel.c | 4 ++++ + 1 files changed, 4 insertions(+) + --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c -@@ -2071,6 +2071,10 @@ static struct pci_device_id azx_ids[] = { +@@ -2047,6 +2047,10 @@ { PCI_DEVICE(0x10de, 0x0ac1), .driver_data = AZX_DRIVER_NVIDIA }, { PCI_DEVICE(0x10de, 0x0ac2), .driver_data = AZX_DRIVER_NVIDIA }, { PCI_DEVICE(0x10de, 0x0ac3), .driver_data = AZX_DRIVER_NVIDIA }, diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/alsa-hda-intel-use-PCI_DEVICE new/patches.drivers/alsa-hda-intel-use-PCI_DEVICE --- old/patches.drivers/alsa-hda-intel-use-PCI_DEVICE 2008-04-23 17:34:16.000000000 +0200 +++ new/patches.drivers/alsa-hda-intel-use-PCI_DEVICE 2008-05-02 09:00:33.000000000 +0200 @@ -9,11 +9,13 @@ Signed-off-by: Takashi Iwai <tiwai@suse.de> --- -diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c -index cf1a1d0..c495ca0 100644 +--- + sound/pci/hda/hda_intel.c | 98 ++++++++++++++++++++++++---------------------- + 1 files changed, 53 insertions(+), 45 deletions(-) + --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c -@@ -2017,51 +2017,59 @@ static void __devexit azx_remove(struct pci_dev *pci) +@@ -1994,51 +1994,59 @@ /* PCI IDs */ static struct pci_device_id azx_ids[] = { diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/libata-ata_piix-verify-sidpr new/patches.drivers/libata-ata_piix-verify-sidpr --- old/patches.drivers/libata-ata_piix-verify-sidpr 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/libata-ata_piix-verify-sidpr 2008-05-01 12:44:39.000000000 +0200 @@ -0,0 +1,59 @@ +From: Tejun Heo <teheo@suse.de> +Subject: ata_piix: verify SIDPR access before enabling it +References: 385535 + +On certain configurations (certain macbooks), even though all the +conditions for SIDPR access described in the datasheet are met, +actually reading those registers just returns 0 and have no effect on +write. Verify SIDPR is actually working before enabling it. + +This is reported by Ryan Roth in OSDL bz#10512. + +Signed-off-by: Tejun Heo <teheo@suse.de> +--- + drivers/ata/ata_piix.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +Index: linux-2.6.25/drivers/ata/ata_piix.c +=================================================================== +--- linux-2.6.25.orig/drivers/ata/ata_piix.c ++++ linux-2.6.25/drivers/ata/ata_piix.c +@@ -1531,6 +1531,8 @@ static void __devinit piix_init_sidpr(st + { + struct pci_dev *pdev = to_pci_dev(host->dev); + struct piix_host_priv *hpriv = host->private_data; ++ struct ata_device *dev0 = &host->ports[0]->link.device[0]; ++ u32 scontrol; + int i; + + /* check for availability */ +@@ -1549,6 +1551,29 @@ static void __devinit piix_init_sidpr(st + return; + + hpriv->sidpr = pcim_iomap_table(pdev)[PIIX_SIDPR_BAR]; ++ ++ /* SCR access via SIDPR doesn't work on some configurations. ++ * Give it a test drive by inhibiting power save modes which ++ * we'll do anyway. ++ */ ++ scontrol = piix_sidpr_read(dev0, SCR_CONTROL); ++ ++ /* if IPM is already 3, SCR access is probably working. Don't ++ * un-inhibit power save modes as BIOS might have inhibited ++ * them for a reason. ++ */ ++ if ((scontrol & 0xf00) != 0x300) { ++ scontrol |= 0x300; ++ piix_sidpr_write(dev0, SCR_CONTROL, scontrol); ++ scontrol = piix_sidpr_read(dev0, SCR_CONTROL); ++ ++ if ((scontrol & 0xf00) != 0x300) { ++ dev_printk(KERN_INFO, host->dev, "SCR access via " ++ "SIDPR is available but doesn't work\n"); ++ return; ++ } ++ } ++ + host->ports[0]->ops = &piix_sidpr_sata_ops; + host->ports[1]->ops = &piix_sidpr_sata_ops; + } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/libata-sata_inic162x-update-to-0.4 new/patches.drivers/libata-sata_inic162x-update-to-0.4 --- old/patches.drivers/libata-sata_inic162x-update-to-0.4 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/libata-sata_inic162x-update-to-0.4 2008-05-02 05:00:13.000000000 +0200 @@ -0,0 +1,986 @@ +From: Tejun Heo <teheo@suse.de> +Subject: sata_inic162x: update to 0.4 +References: 385599 + +Update sata_inic162x from virtually useless 0.3 to mostly working 0.4. +As the 0.3 driver is severely broken and this doesn't affect any other +drivers, this patch just can't go wrong. + +Signed-off-by: Tejun Heo <teheo@suse.de> +--- + drivers/ata/sata_inic162x.c | 664 +++++++++++++++++++++++++++----------------- + 1 file changed, 417 insertions(+), 247 deletions(-) + +Index: linux-2.6.25/drivers/ata/sata_inic162x.c +=================================================================== +--- linux-2.6.25.orig/drivers/ata/sata_inic162x.c ++++ linux-2.6.25/drivers/ata/sata_inic162x.c +@@ -10,13 +10,33 @@ + * right. Documentation is available at initio's website but it only + * documents registers (not programming model). + * +- * - ATA disks work. +- * - Hotplug works. +- * - ATAPI read works but burning doesn't. This thing is really +- * peculiar about ATAPI and I couldn't figure out how ATAPI PIO and +- * ATAPI DMA WRITE should be programmed. If you've got a clue, be +- * my guest. +- * - Both STR and STD work. ++ * This driver has interesting history. The first version was written ++ * from the documentation and a 2.4 IDE driver posted on a Taiwan ++ * company, which didn't use any IDMA features and couldn't handle ++ * LBA48. The resulting driver couldn't handle LBA48 devices either ++ * making it pretty useless. ++ * ++ * After a while, initio picked the driver up, renamed it to ++ * sata_initio162x, updated it to use IDMA for ATA DMA commands and ++ * posted it on their website. It only used ATA_PROT_DMA for IDMA and ++ * attaching both devices and issuing IDMA and !IDMA commands ++ * simultaneously broke it due to PIRQ masking interaction but it did ++ * show how to use the IDMA (ADMA + some initio specific twists) ++ * engine. ++ * ++ * Then, I picked up their changes again and here's the usable driver ++ * which uses IDMA for everything. Everything works now including ++ * LBA48, CD/DVD burning, suspend/resume and hotplug. There are some ++ * issues tho. Result Tf is not resported properly, NCQ isn't ++ * supported yet and CD/DVD writing works with DMA assisted PIO ++ * protocol (which, for native SATA devices, shouldn't cause any ++ * noticeable difference). ++ * ++ * Anyways, so, here's finally a working driver for inic162x. Enjoy! ++ * ++ * initio: If you guys wanna improve the driver regarding result TF ++ * access and other stuff, please feel free to contact me. I'll be ++ * happy to assist. + */ + + #include <linux/kernel.h> +@@ -28,13 +48,19 @@ + #include <scsi/scsi_device.h> + + #define DRV_NAME "sata_inic162x" +-#define DRV_VERSION "0.3" ++#define DRV_VERSION "0.4" + + enum { +- MMIO_BAR = 5, ++ MMIO_BAR_PCI = 5, ++ MMIO_BAR_CARDBUS = 1, + + NR_PORTS = 2, + ++ IDMA_CPB_TBL_SIZE = 4 * 32, ++ ++ INIC_DMA_BOUNDARY = 0xffffff, ++ ++ HOST_ACTRL = 0x08, + HOST_CTL = 0x7c, + HOST_STAT = 0x7e, + HOST_IRQ_STAT = 0xbc, +@@ -43,22 +69,37 @@ enum { + PORT_SIZE = 0x40, + + /* registers for ATA TF operation */ +- PORT_TF = 0x00, +- PORT_ALT_STAT = 0x08, ++ PORT_TF_DATA = 0x00, ++ PORT_TF_FEATURE = 0x01, ++ PORT_TF_NSECT = 0x02, ++ PORT_TF_LBAL = 0x03, ++ PORT_TF_LBAM = 0x04, ++ PORT_TF_LBAH = 0x05, ++ PORT_TF_DEVICE = 0x06, ++ PORT_TF_COMMAND = 0x07, ++ PORT_TF_ALT_STAT = 0x08, + PORT_IRQ_STAT = 0x09, + PORT_IRQ_MASK = 0x0a, + PORT_PRD_CTL = 0x0b, + PORT_PRD_ADDR = 0x0c, + PORT_PRD_XFERLEN = 0x10, ++ PORT_CPB_CPBLAR = 0x18, ++ PORT_CPB_PTQFIFO = 0x1c, + + /* IDMA register */ + PORT_IDMA_CTL = 0x14, ++ PORT_IDMA_STAT = 0x16, ++ ++ PORT_RPQ_FIFO = 0x1e, ++ PORT_RPQ_CNT = 0x1f, + + PORT_SCR = 0x20, + + /* HOST_CTL bits */ + HCTL_IRQOFF = (1 << 8), /* global IRQ off */ +- HCTL_PWRDWN = (1 << 13), /* power down PHYs */ ++ HCTL_FTHD0 = (1 << 10), /* fifo threshold 0 */ ++ HCTL_FTHD1 = (1 << 11), /* fifo threshold 1*/ ++ HCTL_PWRDWN = (1 << 12), /* power down PHYs */ + HCTL_SOFTRST = (1 << 13), /* global reset (no phy reset) */ + HCTL_RPGSEL = (1 << 15), /* register page select */ + +@@ -81,9 +122,7 @@ enum { + PIRQ_PENDING = (1 << 7), /* port IRQ pending (STAT only) */ + + PIRQ_ERR = PIRQ_OFFLINE | PIRQ_ONLINE | PIRQ_FATAL, +- +- PIRQ_MASK_DMA_READ = PIRQ_REPLY | PIRQ_ATA, +- PIRQ_MASK_OTHER = PIRQ_REPLY | PIRQ_COMPLETE, ++ PIRQ_MASK_DEFAULT = PIRQ_REPLY | PIRQ_ATA, + PIRQ_MASK_FREEZE = 0xff, + + /* PORT_PRD_CTL bits */ +@@ -96,16 +135,98 @@ enum { + IDMA_CTL_RST_IDMA = (1 << 5), /* reset IDMA machinary */ + IDMA_CTL_GO = (1 << 7), /* IDMA mode go */ + IDMA_CTL_ATA_NIEN = (1 << 8), /* ATA IRQ disable */ ++ ++ /* PORT_IDMA_STAT bits */ ++ IDMA_STAT_PERR = (1 << 0), /* PCI ERROR MODE */ ++ IDMA_STAT_CPBERR = (1 << 1), /* ADMA CPB error */ ++ IDMA_STAT_LGCY = (1 << 3), /* ADMA legacy */ ++ IDMA_STAT_UIRQ = (1 << 4), /* ADMA unsolicited irq */ ++ IDMA_STAT_STPD = (1 << 5), /* ADMA stopped */ ++ IDMA_STAT_PSD = (1 << 6), /* ADMA pause */ ++ IDMA_STAT_DONE = (1 << 7), /* ADMA done */ ++ ++ IDMA_STAT_ERR = IDMA_STAT_PERR | IDMA_STAT_CPBERR, ++ ++ /* CPB Control Flags*/ ++ CPB_CTL_VALID = (1 << 0), /* CPB valid */ ++ CPB_CTL_QUEUED = (1 << 1), /* queued command */ ++ CPB_CTL_DATA = (1 << 2), /* data, rsvd in datasheet */ ++ CPB_CTL_IEN = (1 << 3), /* PCI interrupt enable */ ++ CPB_CTL_DEVDIR = (1 << 4), /* device direction control */ ++ ++ /* CPB Response Flags */ ++ CPB_RESP_DONE = (1 << 0), /* ATA command complete */ ++ CPB_RESP_REL = (1 << 1), /* ATA release */ ++ CPB_RESP_IGNORED = (1 << 2), /* CPB ignored */ ++ CPB_RESP_ATA_ERR = (1 << 3), /* ATA command error */ ++ CPB_RESP_SPURIOUS = (1 << 4), /* ATA spurious interrupt error */ ++ CPB_RESP_UNDERFLOW = (1 << 5), /* APRD deficiency length error */ ++ CPB_RESP_OVERFLOW = (1 << 6), /* APRD exccess length error */ ++ CPB_RESP_CPB_ERR = (1 << 7), /* CPB error flag */ ++ ++ /* PRD Control Flags */ ++ PRD_DRAIN = (1 << 1), /* ignore data excess */ ++ PRD_CDB = (1 << 2), /* atapi packet command pointer */ ++ PRD_DIRECT_INTR = (1 << 3), /* direct interrupt */ ++ PRD_DMA = (1 << 4), /* data transfer method */ ++ PRD_WRITE = (1 << 5), /* data dir, rsvd in datasheet */ ++ PRD_IOM = (1 << 6), /* io/memory transfer */ ++ PRD_END = (1 << 7), /* APRD chain end */ + }; + ++/* Comman Parameter Block */ ++struct inic_cpb { ++ u8 resp_flags; /* Response Flags */ ++ u8 error; /* ATA Error */ ++ u8 status; /* ATA Status */ ++ u8 ctl_flags; /* Control Flags */ ++ __le32 len; /* Total Transfer Length */ ++ __le32 prd; /* First PRD pointer */ ++ u8 rsvd[4]; ++ /* 16 bytes */ ++ u8 feature; /* ATA Feature */ ++ u8 hob_feature; /* ATA Ex. Feature */ ++ u8 device; /* ATA Device/Head */ ++ u8 mirctl; /* Mirror Control */ ++ u8 nsect; /* ATA Sector Count */ ++ u8 hob_nsect; /* ATA Ex. Sector Count */ ++ u8 lbal; /* ATA Sector Number */ ++ u8 hob_lbal; /* ATA Ex. Sector Number */ ++ u8 lbam; /* ATA Cylinder Low */ ++ u8 hob_lbam; /* ATA Ex. Cylinder Low */ ++ u8 lbah; /* ATA Cylinder High */ ++ u8 hob_lbah; /* ATA Ex. Cylinder High */ ++ u8 command; /* ATA Command */ ++ u8 ctl; /* ATA Control */ ++ u8 slave_error; /* Slave ATA Error */ ++ u8 slave_status; /* Slave ATA Status */ ++ /* 32 bytes */ ++} __packed; ++ ++/* Physical Region Descriptor */ ++struct inic_prd { ++ __le32 mad; /* Physical Memory Address */ ++ __le16 len; /* Transfer Length */ ++ u8 rsvd; ++ u8 flags; /* Control Flags */ ++} __packed; ++ ++struct inic_pkt { ++ struct inic_cpb cpb; ++ struct inic_prd prd[LIBATA_MAX_PRD + 1]; /* + 1 for cdb */ ++ u8 cdb[ATAPI_CDB_LEN]; ++} __packed; ++ + struct inic_host_priv { +- u16 cached_hctl; ++ void __iomem *mmio_base; ++ u16 cached_hctl; + }; + + struct inic_port_priv { +- u8 dfl_prdctl; +- u8 cached_prdctl; +- u8 cached_pirq_mask; ++ struct inic_pkt *pkt; ++ dma_addr_t pkt_dma; ++ u32 *cpb_tbl; ++ dma_addr_t cpb_tbl_dma; + }; + + static struct scsi_host_template inic_sht = { +@@ -115,11 +236,12 @@ static struct scsi_host_template inic_sh + .queuecommand = ata_scsi_queuecmd, + .can_queue = ATA_DEF_QUEUE, + .this_id = ATA_SHT_THIS_ID, +- .sg_tablesize = LIBATA_MAX_PRD, ++ .sg_tablesize = LIBATA_MAX_PRD, /* maybe it can be larger? */ + .cmd_per_lun = ATA_SHT_CMD_PER_LUN, + .emulated = ATA_SHT_EMULATED, + .use_clustering = ATA_SHT_USE_CLUSTERING, + .proc_name = DRV_NAME, ++ .dma_boundary = INIC_DMA_BOUNDARY, + .dma_boundary = ATA_DMA_BOUNDARY, + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, +@@ -134,54 +256,34 @@ static const int scr_map[] = { + + static void __iomem *inic_port_base(struct ata_port *ap) + { +- return ap->host->iomap[MMIO_BAR] + ap->port_no * PORT_SIZE; +-} +- +-static void __inic_set_pirq_mask(struct ata_port *ap, u8 mask) +-{ +- void __iomem *port_base = inic_port_base(ap); +- struct inic_port_priv *pp = ap->private_data; +- +- writeb(mask, port_base + PORT_IRQ_MASK); +- pp->cached_pirq_mask = mask; +-} +- +-static void inic_set_pirq_mask(struct ata_port *ap, u8 mask) +-{ +- struct inic_port_priv *pp = ap->private_data; ++ struct inic_host_priv *hpriv = ap->host->private_data; + +- if (pp->cached_pirq_mask != mask) +- __inic_set_pirq_mask(ap, mask); ++ return hpriv->mmio_base + ap->port_no * PORT_SIZE; + } + + static void inic_reset_port(void __iomem *port_base) + { + void __iomem *idma_ctl = port_base + PORT_IDMA_CTL; +- u16 ctl; + +- ctl = readw(idma_ctl); +- ctl &= ~(IDMA_CTL_RST_IDMA | IDMA_CTL_ATA_NIEN | IDMA_CTL_GO); ++ /* stop IDMA engine */ ++ readw(idma_ctl); /* flush */ ++ msleep(1); + + /* mask IRQ and assert reset */ +- writew(ctl | IDMA_CTL_RST_IDMA | IDMA_CTL_ATA_NIEN, idma_ctl); ++ writew(IDMA_CTL_RST_IDMA, idma_ctl); + readw(idma_ctl); /* flush */ +- +- /* give it some time */ + msleep(1); + + /* release reset */ +- writew(ctl | IDMA_CTL_ATA_NIEN, idma_ctl); ++ writew(0, idma_ctl); + + /* clear irq */ + writeb(0xff, port_base + PORT_IRQ_STAT); +- +- /* reenable ATA IRQ, turn off IDMA mode */ +- writew(ctl, idma_ctl); + } + + static int inic_scr_read(struct ata_port *ap, unsigned sc_reg, u32 *val) + { +- void __iomem *scr_addr = ap->ioaddr.scr_addr; ++ void __iomem *scr_addr = inic_port_base(ap) + PORT_SCR; + void __iomem *addr; + + if (unlikely(sc_reg >= ARRAY_SIZE(scr_map))) +@@ -198,125 +300,126 @@ static int inic_scr_read(struct ata_port + + static int inic_scr_write(struct ata_port *ap, unsigned sc_reg, u32 val) + { +- void __iomem *scr_addr = ap->ioaddr.scr_addr; +- void __iomem *addr; ++ void __iomem *scr_addr = inic_port_base(ap) + PORT_SCR; + + if (unlikely(sc_reg >= ARRAY_SIZE(scr_map))) + return -EINVAL; + +- addr = scr_addr + scr_map[sc_reg] * 4; + writel(val, scr_addr + scr_map[sc_reg] * 4); + return 0; + } + +-/* +- * In TF mode, inic162x is very similar to SFF device. TF registers +- * function the same. DMA engine behaves similary using the same PRD +- * format as BMDMA but different command register, interrupt and event +- * notification methods are used. The following inic_bmdma_*() +- * functions do the impedance matching. +- */ +-static void inic_bmdma_setup(struct ata_queued_cmd *qc) ++static void inic_stop_idma(struct ata_port *ap) + { +- struct ata_port *ap = qc->ap; +- struct inic_port_priv *pp = ap->private_data; + void __iomem *port_base = inic_port_base(ap); +- int rw = qc->tf.flags & ATA_TFLAG_WRITE; + +- /* make sure device sees PRD table writes */ +- wmb(); +- +- /* load transfer length */ +- writel(qc->nbytes, port_base + PORT_PRD_XFERLEN); +- +- /* turn on DMA and specify data direction */ +- pp->cached_prdctl = pp->dfl_prdctl | PRD_CTL_DMAEN; +- if (!rw) +- pp->cached_prdctl |= PRD_CTL_WR; +- writeb(pp->cached_prdctl, port_base + PORT_PRD_CTL); +- +- /* issue r/w command */ +- ap->ops->exec_command(ap, &qc->tf); ++ readb(port_base + PORT_RPQ_FIFO); ++ readb(port_base + PORT_RPQ_CNT); ++ writew(0, port_base + PORT_IDMA_CTL); + } + +-static void inic_bmdma_start(struct ata_queued_cmd *qc) ++static void inic_host_err_intr(struct ata_port *ap, u8 irq_stat, u16 idma_stat) + { +- struct ata_port *ap = qc->ap; ++ struct ata_eh_info *ehi = &ap->link.eh_info; + struct inic_port_priv *pp = ap->private_data; +- void __iomem *port_base = inic_port_base(ap); ++ struct inic_cpb *cpb = &pp->pkt->cpb; ++ bool freeze = false; + +- /* start host DMA transaction */ +- pp->cached_prdctl |= PRD_CTL_START; +- writeb(pp->cached_prdctl, port_base + PORT_PRD_CTL); +-} ++ ata_ehi_clear_desc(ehi); ++ ata_ehi_push_desc(ehi, "irq_stat=0x%x idma_stat=0x%x", ++ irq_stat, idma_stat); + +-static void inic_bmdma_stop(struct ata_queued_cmd *qc) +-{ +- struct ata_port *ap = qc->ap; +- struct inic_port_priv *pp = ap->private_data; +- void __iomem *port_base = inic_port_base(ap); ++ inic_stop_idma(ap); + +- /* stop DMA engine */ +- writeb(pp->dfl_prdctl, port_base + PORT_PRD_CTL); +-} ++ if (irq_stat & (PIRQ_OFFLINE | PIRQ_ONLINE)) { ++ ata_ehi_push_desc(ehi, "hotplug"); ++ ata_ehi_hotplugged(ehi); ++ freeze = true; ++ } + +-static u8 inic_bmdma_status(struct ata_port *ap) +-{ +- /* event is already verified by the interrupt handler */ +- return ATA_DMA_INTR; +-} ++ if (idma_stat & IDMA_STAT_PERR) { ++ ata_ehi_push_desc(ehi, "PCI error"); ++ freeze = true; ++ } + +-static void inic_irq_clear(struct ata_port *ap) +-{ +- /* noop */ ++ if (idma_stat & IDMA_STAT_CPBERR) { ++ ata_ehi_push_desc(ehi, "CPB error"); ++ ++ if (cpb->resp_flags & CPB_RESP_IGNORED) { ++ __ata_ehi_push_desc(ehi, " ignored"); ++ ehi->err_mask |= AC_ERR_INVALID; ++ freeze = true; ++ } ++ ++ if (cpb->resp_flags & CPB_RESP_ATA_ERR) ++ ehi->err_mask |= AC_ERR_DEV; ++ ++ if (cpb->resp_flags & CPB_RESP_SPURIOUS) { ++ __ata_ehi_push_desc(ehi, " spurious-intr"); ++ ehi->err_mask |= AC_ERR_HSM; ++ freeze = true; ++ } ++ ++ if (cpb->resp_flags & ++ (CPB_RESP_UNDERFLOW | CPB_RESP_OVERFLOW)) { ++ __ata_ehi_push_desc(ehi, " data-over/underflow"); ++ ehi->err_mask |= AC_ERR_HSM; ++ freeze = true; ++ } ++ } ++ ++ if (freeze) ++ ata_port_freeze(ap); ++ else ++ ata_port_abort(ap); + } + + static void inic_host_intr(struct ata_port *ap) + { + void __iomem *port_base = inic_port_base(ap); +- struct ata_eh_info *ehi = &ap->link.eh_info; ++ struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->link.active_tag); + u8 irq_stat; ++ u16 idma_stat; + +- /* fetch and clear irq */ ++ /* read and clear IRQ status */ + irq_stat = readb(port_base + PORT_IRQ_STAT); + writeb(irq_stat, port_base + PORT_IRQ_STAT); ++ idma_stat = readw(port_base + PORT_IDMA_STAT); + +- if (likely(!(irq_stat & PIRQ_ERR))) { +- struct ata_queued_cmd *qc = +- ata_qc_from_tag(ap, ap->link.active_tag); +- +- if (unlikely(!qc || (qc->tf.flags & ATA_TFLAG_POLLING))) { +- ata_chk_status(ap); /* clear ATA interrupt */ +- return; +- } ++ if (unlikely((irq_stat & PIRQ_ERR) || (idma_stat & IDMA_STAT_ERR))) ++ inic_host_err_intr(ap, irq_stat, idma_stat); ++ ++ if (unlikely(!qc)) ++ goto spurious; + +- if (likely(ata_host_intr(ap, qc))) +- return; ++ if (likely(idma_stat & IDMA_STAT_DONE)) { ++ inic_stop_idma(ap); + +- ata_chk_status(ap); /* clear ATA interrupt */ +- ata_port_printk(ap, KERN_WARNING, "unhandled " +- "interrupt, irq_stat=%x\n", irq_stat); ++ /* Depending on circumstances, device error ++ * isn't reported by IDMA, check it explicitly. ++ */ ++ if (unlikely(readb(port_base + PORT_TF_COMMAND) & ++ (ATA_DF | ATA_ERR))) ++ qc->err_mask |= AC_ERR_DEV; ++ ++ ata_qc_complete(qc); + return; + } + +- /* error */ +- ata_ehi_push_desc(ehi, "irq_stat=0x%x", irq_stat); +- +- if (irq_stat & (PIRQ_OFFLINE | PIRQ_ONLINE)) { +- ata_ehi_hotplugged(ehi); +- ata_port_freeze(ap); +- } else +- ata_port_abort(ap); ++ spurious: ++ ata_port_printk(ap, KERN_WARNING, "unhandled interrupt: " ++ "cmd=0x%x irq_stat=0x%x idma_stat=0x%x\n", ++ qc ? qc->tf.command : 0xff, irq_stat, idma_stat); + } + + static irqreturn_t inic_interrupt(int irq, void *dev_instance) + { + struct ata_host *host = dev_instance; +- void __iomem *mmio_base = host->iomap[MMIO_BAR]; ++ struct inic_host_priv *hpriv = host->private_data; + u16 host_irq_stat; + int i, handled = 0;; + +- host_irq_stat = readw(mmio_base + HOST_IRQ_STAT); ++ host_irq_stat = readw(hpriv->mmio_base + HOST_IRQ_STAT); + + if (unlikely(!(host_irq_stat & HIRQ_GLOBAL))) + goto out; +@@ -346,60 +449,151 @@ static irqreturn_t inic_interrupt(int ir + return IRQ_RETVAL(handled); + } + +-static unsigned int inic_qc_issue(struct ata_queued_cmd *qc) ++static int inic_check_atapi_dma(struct ata_queued_cmd *qc) + { +- struct ata_port *ap = qc->ap; +- +- /* ATA IRQ doesn't wait for DMA transfer completion and vice +- * versa. Mask IRQ selectively to detect command completion. +- * Without it, ATA DMA read command can cause data corruption. +- * +- * Something similar might be needed for ATAPI writes. I +- * tried a lot of combinations but couldn't find the solution. ++ /* For some reason ATAPI_PROT_DMA doesn't work for some ++ * commands including writes and other misc ops. Use PIO ++ * protocol instead, which BTW is driven by the DMA engine ++ * anyway, so it shouldn't make much difference for native ++ * SATA devices. + */ +- if (qc->tf.protocol == ATA_PROT_DMA && +- !(qc->tf.flags & ATA_TFLAG_WRITE)) +- inic_set_pirq_mask(ap, PIRQ_MASK_DMA_READ); +- else +- inic_set_pirq_mask(ap, PIRQ_MASK_OTHER); ++ if (atapi_cmd_type(qc->cdb[0]) == READ) ++ return 0; ++ return 1; ++} + +- /* Issuing a command to yet uninitialized port locks up the +- * controller. Most of the time, this happens for the first +- * command after reset which are ATA and ATAPI IDENTIFYs. +- * Fast fail if stat is 0x7f or 0xff for those commands. +- */ +- if (unlikely(qc->tf.command == ATA_CMD_ID_ATA || +- qc->tf.command == ATA_CMD_ID_ATAPI)) { +- u8 stat = ata_chk_status(ap); +- if (stat == 0x7f || stat == 0xff) +- return AC_ERR_HSM; ++static void inic_fill_sg(struct inic_prd *prd, struct ata_queued_cmd *qc) ++{ ++ struct scatterlist *sg; ++ unsigned int si; ++ u8 flags = 0; ++ ++ if (qc->tf.flags & ATA_TFLAG_WRITE) ++ flags |= PRD_WRITE; ++ ++ if (ata_is_dma(qc->tf.protocol)) ++ flags |= PRD_DMA; ++ ++ for_each_sg(qc->sg, sg, qc->n_elem, si) { ++ prd->mad = cpu_to_le32(sg_dma_address(sg)); ++ prd->len = cpu_to_le16(sg_dma_len(sg)); ++ prd->flags = flags; ++ prd++; + } + +- return ata_qc_issue_prot(qc); ++ WARN_ON(!si); ++ prd[-1].flags |= PRD_END; + } + +-static void inic_freeze(struct ata_port *ap) ++static void inic_qc_prep(struct ata_queued_cmd *qc) + { ++ struct inic_port_priv *pp = qc->ap->private_data; ++ struct inic_pkt *pkt = pp->pkt; ++ struct inic_cpb *cpb = &pkt->cpb; ++ struct inic_prd *prd = pkt->prd; ++ bool is_atapi = ata_is_atapi(qc->tf.protocol); ++ bool is_data = ata_is_data(qc->tf.protocol); ++ unsigned int cdb_len = 0; ++ ++ VPRINTK("ENTER\n"); ++ ++ if (is_atapi) ++ cdb_len = qc->dev->cdb_len; ++ ++ /* prepare packet, based on initio driver */ ++ memset(pkt, 0, sizeof(struct inic_pkt)); ++ ++ cpb->ctl_flags = CPB_CTL_VALID | CPB_CTL_IEN; ++ if (is_atapi || is_data) ++ cpb->ctl_flags |= CPB_CTL_DATA; ++ ++ cpb->len = cpu_to_le32(qc->nbytes + cdb_len); ++ cpb->prd = cpu_to_le32(pp->pkt_dma + offsetof(struct inic_pkt, prd)); ++ ++ cpb->device = qc->tf.device; ++ cpb->feature = qc->tf.feature; ++ cpb->nsect = qc->tf.nsect; ++ cpb->lbal = qc->tf.lbal; ++ cpb->lbam = qc->tf.lbam; ++ cpb->lbah = qc->tf.lbah; ++ ++ if (qc->tf.flags & ATA_TFLAG_LBA48) { ++ cpb->hob_feature = qc->tf.hob_feature; ++ cpb->hob_nsect = qc->tf.hob_nsect; ++ cpb->hob_lbal = qc->tf.hob_lbal; ++ cpb->hob_lbam = qc->tf.hob_lbam; ++ cpb->hob_lbah = qc->tf.hob_lbah; ++ } ++ ++ cpb->command = qc->tf.command; ++ /* don't load ctl - dunno why. it's like that in the initio driver */ ++ ++ /* setup PRD for CDB */ ++ if (is_atapi) { ++ memcpy(pkt->cdb, qc->cdb, ATAPI_CDB_LEN); ++ prd->mad = cpu_to_le32(pp->pkt_dma + ++ offsetof(struct inic_pkt, cdb)); ++ prd->len = cpu_to_le16(cdb_len); ++ prd->flags = PRD_CDB | PRD_WRITE; ++ if (!is_data) ++ prd->flags |= PRD_END; ++ prd++; ++ } ++ ++ /* setup sg table */ ++ if (is_data) ++ inic_fill_sg(prd, qc); ++ ++ pp->cpb_tbl[0] = pp->pkt_dma; ++} ++ ++static unsigned int inic_qc_issue(struct ata_queued_cmd *qc) ++{ ++ struct ata_port *ap = qc->ap; + void __iomem *port_base = inic_port_base(ap); + +- __inic_set_pirq_mask(ap, PIRQ_MASK_FREEZE); ++ /* fire up the ADMA engine */ ++ writew(HCTL_FTHD0, port_base + HOST_CTL); ++ writew(IDMA_CTL_GO, port_base + PORT_IDMA_CTL); ++ writeb(0, port_base + PORT_CPB_PTQFIFO); + +- ata_chk_status(ap); +- writeb(0xff, port_base + PORT_IRQ_STAT); ++ return 0; ++} + +- readb(port_base + PORT_IRQ_STAT); /* flush */ ++static void inic_tf_read(struct ata_port *ap, struct ata_taskfile *tf) ++{ ++ void __iomem *port_base = inic_port_base(ap); ++ ++ tf->feature = readb(port_base + PORT_TF_FEATURE); ++ tf->nsect = readb(port_base + PORT_TF_NSECT); ++ tf->lbal = readb(port_base + PORT_TF_LBAL); ++ tf->lbam = readb(port_base + PORT_TF_LBAM); ++ tf->lbah = readb(port_base + PORT_TF_LBAH); ++ tf->device = readb(port_base + PORT_TF_DEVICE); ++ tf->command = readb(port_base + PORT_TF_COMMAND); + } + +-static void inic_thaw(struct ata_port *ap) ++static u8 inic_check_status(struct ata_port *ap) + { + void __iomem *port_base = inic_port_base(ap); + +- ata_chk_status(ap); ++ return readb(port_base + PORT_TF_COMMAND); ++} ++ ++static void inic_freeze(struct ata_port *ap) ++{ ++ void __iomem *port_base = inic_port_base(ap); ++ ++ writeb(PIRQ_MASK_FREEZE, port_base + PORT_IRQ_MASK); + writeb(0xff, port_base + PORT_IRQ_STAT); ++} + +- __inic_set_pirq_mask(ap, PIRQ_MASK_OTHER); ++static void inic_thaw(struct ata_port *ap) ++{ ++ void __iomem *port_base = inic_port_base(ap); + +- readb(port_base + PORT_IRQ_STAT); /* flush */ ++ writeb(0xff, port_base + PORT_IRQ_STAT); ++ writeb(PIRQ_MASK_DEFAULT, port_base + PORT_IRQ_MASK); + } + + /* +@@ -413,17 +607,15 @@ static int inic_hardreset(struct ata_lin + void __iomem *port_base = inic_port_base(ap); + void __iomem *idma_ctl = port_base + PORT_IDMA_CTL; + const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context); +- u16 val; + int rc; + + /* hammer it into sane state */ + inic_reset_port(port_base); + +- val = readw(idma_ctl); +- writew(val | IDMA_CTL_RST_ATA, idma_ctl); ++ writew(IDMA_CTL_RST_ATA, idma_ctl); + readw(idma_ctl); /* flush */ + msleep(1); +- writew(val & ~IDMA_CTL_RST_ATA, idma_ctl); ++ writew(0, idma_ctl); + + rc = sata_link_resume(link, timing, deadline); + if (rc) { +@@ -447,10 +639,10 @@ static int inic_hardreset(struct ata_lin + return rc; + } + +- ata_tf_read(ap, &tf); ++ inic_tf_read(ap, &tf); + *class = ata_dev_classify(&tf); + if (*class == ATA_DEV_UNKNOWN) +- *class = ATA_DEV_NONE; ++ *class = ATA_DEV_ATA; + } + + return 0; +@@ -459,18 +651,9 @@ static int inic_hardreset(struct ata_lin + static void inic_error_handler(struct ata_port *ap) + { + void __iomem *port_base = inic_port_base(ap); +- struct inic_port_priv *pp = ap->private_data; +- unsigned long flags; + +- /* reset PIO HSM and stop DMA engine */ + inic_reset_port(port_base); + +- spin_lock_irqsave(ap->lock, flags); +- ap->hsm_task_state = HSM_ST_IDLE; +- writeb(pp->dfl_prdctl, port_base + PORT_PRD_CTL); +- spin_unlock_irqrestore(ap->lock, flags); +- +- /* PIO and DMA engines have been stopped, perform recovery */ + ata_do_eh(ap, ata_std_prereset, NULL, inic_hardreset, + ata_std_postreset); + } +@@ -482,26 +665,18 @@ static void inic_post_internal_cmd(struc + inic_reset_port(inic_port_base(qc->ap)); + } + +-static void inic_dev_config(struct ata_device *dev) +-{ +- /* inic can only handle upto LBA28 max sectors */ +- if (dev->max_sectors > ATA_MAX_SECTORS) +- dev->max_sectors = ATA_MAX_SECTORS; +- +- if (dev->n_sectors >= 1 << 28) { +- ata_dev_printk(dev, KERN_ERR, +- "ERROR: This driver doesn't support LBA48 yet and may cause\n" +- " data corruption on such devices. Disabling.\n"); +- ata_dev_disable(dev); +- } +-} +- + static void init_port(struct ata_port *ap) + { + void __iomem *port_base = inic_port_base(ap); ++ struct inic_port_priv *pp = ap->private_data; ++ ++ /* clear packet and CPB table */ ++ memset(pp->pkt, 0, sizeof(struct inic_pkt)); ++ memset(pp->cpb_tbl, 0, IDMA_CPB_TBL_SIZE); + +- /* Setup PRD address */ ++ /* setup PRD and CPB lookup table addresses */ + writel(ap->prd_dma, port_base + PORT_PRD_ADDR); ++ writel(pp->cpb_tbl_dma, port_base + PORT_CPB_CPBLAR); + } + + static int inic_port_resume(struct ata_port *ap) +@@ -512,74 +687,65 @@ static int inic_port_resume(struct ata_p + + static int inic_port_start(struct ata_port *ap) + { +- void __iomem *port_base = inic_port_base(ap); ++ struct device *dev = ap->host->dev; + struct inic_port_priv *pp; +- u8 tmp; + int rc; + + /* alloc and initialize private data */ +- pp = devm_kzalloc(ap->host->dev, sizeof(*pp), GFP_KERNEL); ++ pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); + if (!pp) + return -ENOMEM; + ap->private_data = pp; + +- /* default PRD_CTL value, DMAEN, WR and START off */ +- tmp = readb(port_base + PORT_PRD_CTL); +- tmp &= ~(PRD_CTL_DMAEN | PRD_CTL_WR | PRD_CTL_START); +- pp->dfl_prdctl = tmp; +- + /* Alloc resources */ + rc = ata_port_start(ap); +- if (rc) { +- kfree(pp); ++ if (rc) + return rc; +- } ++ ++ pp->pkt = dmam_alloc_coherent(dev, sizeof(struct inic_pkt), ++ &pp->pkt_dma, GFP_KERNEL); ++ if (!pp->pkt) ++ return -ENOMEM; ++ ++ pp->cpb_tbl = dmam_alloc_coherent(dev, IDMA_CPB_TBL_SIZE, ++ &pp->cpb_tbl_dma, GFP_KERNEL); ++ if (!pp->cpb_tbl) ++ return -ENOMEM; + + init_port(ap); + + return 0; + } + +-static struct ata_port_operations inic_port_ops = { +- .tf_load = ata_tf_load, +- .tf_read = ata_tf_read, +- .check_status = ata_check_status, +- .exec_command = ata_exec_command, +- .dev_select = ata_std_dev_select, ++static void inic_irq_clear(struct ata_port *ap) ++{ ++ /* nada */ ++} + +- .scr_read = inic_scr_read, +- .scr_write = inic_scr_write, ++static struct ata_port_operations inic_port_ops = { ++ .check_status = inic_check_status, ++ .tf_read = inic_tf_read, ++ .dev_select = ata_noop_dev_select, + +- .bmdma_setup = inic_bmdma_setup, +- .bmdma_start = inic_bmdma_start, +- .bmdma_stop = inic_bmdma_stop, +- .bmdma_status = inic_bmdma_status, ++ .check_atapi_dma = inic_check_atapi_dma, ++ .qc_prep = inic_qc_prep, ++ .qc_issue = inic_qc_issue, + + .irq_clear = inic_irq_clear, +- .irq_on = ata_irq_on, +- +- .qc_prep = ata_qc_prep, +- .qc_issue = inic_qc_issue, +- .data_xfer = ata_data_xfer, + + .freeze = inic_freeze, + .thaw = inic_thaw, + .error_handler = inic_error_handler, + .post_internal_cmd = inic_post_internal_cmd, +- .dev_config = inic_dev_config, + +- .port_resume = inic_port_resume, ++ .scr_read = inic_scr_read, ++ .scr_write = inic_scr_write, + ++ .port_resume = inic_port_resume, + .port_start = inic_port_start, + }; + + static struct ata_port_info inic_port_info = { +- /* For some reason, ATAPI_PROT_PIO is broken on this +- * controller, and no, PIO_POLLING does't fix it. It somehow +- * manages to report the wrong ireason and ignoring ireason +- * results in machine lock up. Tell libata to always prefer +- * DMA. +- */ + .flags = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA, + .pio_mask = 0x1f, /* pio0-4 */ + .mwdma_mask = 0x07, /* mwdma0-2 */ +@@ -632,7 +798,6 @@ static int inic_pci_device_resume(struct + { + struct ata_host *host = dev_get_drvdata(&pdev->dev); + struct inic_host_priv *hpriv = host->private_data; +- void __iomem *mmio_base = host->iomap[MMIO_BAR]; + int rc; + + rc = ata_pci_device_do_resume(pdev); +@@ -640,7 +805,7 @@ static int inic_pci_device_resume(struct + return rc; + + if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) { +- rc = init_controller(mmio_base, hpriv->cached_hctl); ++ rc = init_controller(hpriv->mmio_base, hpriv->cached_hctl); + if (rc) + return rc; + } +@@ -658,6 +823,7 @@ static int inic_init_one(struct pci_dev + struct ata_host *host; + struct inic_host_priv *hpriv; + void __iomem * const *iomap; ++ int mmio_bar; + int i, rc; + + if (!printed_version++) +@@ -671,38 +837,42 @@ static int inic_init_one(struct pci_dev + + host->private_data = hpriv; + +- /* acquire resources and fill host */ ++ /* Acquire resources and fill host. Note that PCI and cardbus ++ * use different BARs. ++ */ + rc = pcim_enable_device(pdev); + if (rc) + return rc; + +- rc = pcim_iomap_regions(pdev, 0x3f, DRV_NAME); ++ if (pci_resource_flags(pdev, MMIO_BAR_PCI) & IORESOURCE_MEM) ++ mmio_bar = MMIO_BAR_PCI; ++ else ++ mmio_bar = MMIO_BAR_CARDBUS; ++ ++ rc = pcim_iomap_regions(pdev, 1 << mmio_bar, DRV_NAME); + if (rc) + return rc; + host->iomap = iomap = pcim_iomap_table(pdev); ++ hpriv->mmio_base = iomap[mmio_bar]; ++ hpriv->cached_hctl = readw(hpriv->mmio_base + HOST_CTL); + + for (i = 0; i < NR_PORTS; i++) { + struct ata_port *ap = host->ports[i]; +- struct ata_ioports *port = &ap->ioaddr; +- unsigned int offset = i * PORT_SIZE; ++ void __iomem *port_base = inic_port_base(ap); ++ struct ata_ioports *ioaddr = &ap->ioaddr; + +- port->cmd_addr = iomap[2 * i]; +- port->altstatus_addr = +- port->ctl_addr = (void __iomem *) +- ((unsigned long)iomap[2 * i + 1] | ATA_PCI_CTL_OFS); +- port->scr_addr = iomap[MMIO_BAR] + offset + PORT_SCR; +- +- ata_std_ports(port); +- +- ata_port_pbar_desc(ap, MMIO_BAR, -1, "mmio"); +- ata_port_pbar_desc(ap, MMIO_BAR, offset, "port"); +- ata_port_desc(ap, "cmd 0x%llx ctl 0x%llx", +- (unsigned long long)pci_resource_start(pdev, 2 * i), +- (unsigned long long)pci_resource_start(pdev, (2 * i + 1)) | +- ATA_PCI_CTL_OFS); +- } ++ ioaddr->cmd_addr = port_base + PORT_TF_COMMAND; ++ ioaddr->error_addr = port_base + PORT_TF_FEATURE; ++ ioaddr->feature_addr = port_base + PORT_TF_FEATURE; ++ ioaddr->nsect_addr = port_base + PORT_TF_NSECT; ++ ioaddr->lbal_addr = port_base + PORT_TF_LBAL; ++ ioaddr->lbam_addr = port_base + PORT_TF_LBAM; ++ ioaddr->lbah_addr = port_base + PORT_TF_LBAH; ++ ioaddr->device_addr = port_base + PORT_TF_DEVICE; + +- hpriv->cached_hctl = readw(iomap[MMIO_BAR] + HOST_CTL); ++ ata_port_pbar_desc(ap, mmio_bar, -1, "mmio"); ++ ata_port_pbar_desc(ap, mmio_bar, i * PORT_SIZE, "port"); ++ } + + /* Set dma_mask. This devices doesn't support 64bit addressing. */ + rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); +@@ -731,7 +901,7 @@ static int inic_init_one(struct pci_dev + return rc; + } + +- rc = init_controller(iomap[MMIO_BAR], hpriv->cached_hctl); ++ rc = init_controller(hpriv->mmio_base, hpriv->cached_hctl); + if (rc) { + dev_printk(KERN_ERR, &pdev->dev, + "failed to initialize controller\n"); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/usb-persist-1-USB-EHCI-carry-out-port-handover-during-each-root.patch new/patches.drivers/usb-persist-1-USB-EHCI-carry-out-port-handover-during-each-root.patch --- old/patches.drivers/usb-persist-1-USB-EHCI-carry-out-port-handover-during-each-root.patch 2008-04-17 18:13:57.000000000 +0200 +++ new/patches.drivers/usb-persist-1-USB-EHCI-carry-out-port-handover-during-each-root.patch 2008-05-02 09:00:33.000000000 +0200 @@ -55,7 +55,7 @@ --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -2891,7 +2891,13 @@ +@@ -2892,7 +2892,13 @@ static int hub_thread(void *__unused) { diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/usb-persist-2-USB-reorganize-code-in-hub.c.patch new/patches.drivers/usb-persist-2-USB-reorganize-code-in-hub.c.patch --- old/patches.drivers/usb-persist-2-USB-reorganize-code-in-hub.c.patch 2008-03-11 19:00:53.000000000 +0100 +++ new/patches.drivers/usb-persist-2-USB-reorganize-code-in-hub.c.patch 2008-05-02 09:00:33.000000000 +0200 @@ -14,14 +14,12 @@ Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- - drivers/usb/core/hub.c | 58 ++++++++++++++++++++++++++--------------------- + drivers/usb/core/hub.c | 58 +++++++++++++++++++++++++++---------------------- 1 files changed, 32 insertions(+), 26 deletions(-) -diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index acd4658..98c39fb 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -334,6 +334,27 @@ static int get_port_status(struct usb_device *hdev, int port1, +@@ -334,6 +334,27 @@ return status; } @@ -49,7 +47,7 @@ static void kick_khubd(struct usb_hub *hub) { unsigned long flags; -@@ -611,9 +632,8 @@ static void hub_port_logical_disconnect(struct usb_hub *hub, int port1) +@@ -611,9 +632,8 @@ } /* caller has locked the hub device */ @@ -60,7 +58,7 @@ struct usb_device *hdev = hub->hdev; int i; -@@ -623,6 +643,14 @@ static int hub_pre_reset(struct usb_interface *intf) +@@ -623,6 +643,14 @@ usb_disconnect(&hdev->children[i]); } hub_quiesce(hub); @@ -75,7 +73,7 @@ return 0; } -@@ -911,7 +939,7 @@ static void hub_disconnect(struct usb_interface *intf) +@@ -911,7 +939,7 @@ /* Disconnect all children and quiesce the hub */ hub->error = 0; @@ -84,7 +82,7 @@ usb_set_intfdata (intf, NULL); -@@ -1511,28 +1539,6 @@ out_authorized: +@@ -1511,28 +1539,6 @@ } @@ -113,7 +111,7 @@ /* Returns 1 if @hub is a WUSB root hub, 0 otherwise */ static unsigned hub_is_wusb(struct usb_hub *hub) { -@@ -2727,7 +2733,7 @@ static void hub_events(void) +@@ -2728,7 +2734,7 @@ /* If the hub has died, clean up after it */ if (hdev->state == USB_STATE_NOTATTACHED) { hub->error = -ENODEV; @@ -122,6 +120,3 @@ goto loop; } --- -1.5.4.3 - diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.drivers/usb-persist-5-USB-check-serial-number-string-after-device-reset.patch new/patches.drivers/usb-persist-5-USB-check-serial-number-string-after-device-reset.patch --- old/patches.drivers/usb-persist-5-USB-check-serial-number-string-after-device-reset.patch 2008-03-11 19:00:53.000000000 +0100 +++ new/patches.drivers/usb-persist-5-USB-check-serial-number-string-after-device-reset.patch 2008-05-02 09:00:33.000000000 +0200 @@ -15,16 +15,14 @@ Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- - Documentation/usb/persist.txt | 8 ++-- - drivers/usb/core/hub.c | 65 +++++++++++++++++++++++++++++++--------- - drivers/usb/core/message.c | 2 +- - 3 files changed, 55 insertions(+), 20 deletions(-) + Documentation/usb/persist.txt | 8 ++--- + drivers/usb/core/hub.c | 63 ++++++++++++++++++++++++++++++++---------- + drivers/usb/core/message.c | 2 - + 3 files changed, 54 insertions(+), 19 deletions(-) -diff --git a/Documentation/usb/persist.txt b/Documentation/usb/persist.txt -index bea58db..d56cb1a 100644 --- a/Documentation/usb/persist.txt +++ b/Documentation/usb/persist.txt -@@ -136,10 +136,10 @@ aren't guaranteed to be 100% accurate. +@@ -136,10 +136,10 @@ If you replace one USB device with another of the same type (same manufacturer, same IDs, and so on) there's an excellent chance the @@ -39,22 +37,19 @@ Furthermore it's quite possible to leave a USB device exactly the same while changing its media. If you replace the flash memory card in a -diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index 277d4ec..545fa72 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -3011,16 +3011,36 @@ void usb_hub_cleanup(void) +@@ -3012,16 +3012,36 @@ usb_deregister(&hub_driver); } /* usb_hub_cleanup() */ -static int config_descriptors_changed(struct usb_device *udev) --{ ++static int descriptors_changed(struct usb_device *udev, ++ struct usb_device_descriptor *old_device_descriptor) + { - unsigned index; - unsigned len = 0; - struct usb_config_descriptor *buf; -+static int descriptors_changed(struct usb_device *udev, -+ struct usb_device_descriptor *old_device_descriptor) -+{ + int changed = 0; + unsigned index; + unsigned serial_len = 0; @@ -62,7 +57,7 @@ + unsigned old_length; + int length; + char *buf; -+ + + if (memcmp(&udev->descriptor, old_device_descriptor, + sizeof(*old_device_descriptor)) != 0) + return 1; @@ -75,7 +70,7 @@ + */ + if (udev->serial) + serial_len = strlen(udev->serial) + 1; - ++ + len = serial_len; for (index = 0; index < udev->descriptor.bNumConfigurations; index++) { - if (len < le16_to_cpu(udev->config[index].desc.wTotalLength)) @@ -87,7 +82,7 @@ buf = kmalloc(len, GFP_NOIO); if (buf == NULL) { dev_err(&udev->dev, "no mem to re-read configs after reset\n"); -@@ -3028,25 +3048,41 @@ static int config_descriptors_changed(struct usb_device *udev) +@@ -3029,25 +3049,41 @@ return 1; } for (index = 0; index < udev->descriptor.bNumConfigurations; index++) { @@ -135,7 +130,7 @@ } /** -@@ -3119,8 +3155,7 @@ int usb_reset_device(struct usb_device *udev) +@@ -3120,8 +3156,7 @@ goto re_enumerate; /* Device might have changed firmware (DFU or similar) */ @@ -145,11 +140,9 @@ dev_info(&udev->dev, "device firmware changed\n"); udev->descriptor = descriptor; /* for disconnect() calls */ goto re_enumerate; -diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c -index fefb922..a45076e 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c -@@ -784,7 +784,7 @@ int usb_string(struct usb_device *dev, int index, char *buf, size_t size) +@@ -784,7 +784,7 @@ if (size <= 0 || !buf || !index) return -EINVAL; buf[0] = 0; @@ -158,6 +151,3 @@ if (!tbuf) return -ENOMEM; --- -1.5.4.3 - ++++++ patches.fixes.tar.bz2 ++++++ ++++++ patches.kernel.org.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.kernel.org/patch-2.6.25.1 new/patches.kernel.org/patch-2.6.25.1 --- old/patches.kernel.org/patch-2.6.25.1 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.kernel.org/patch-2.6.25.1 2008-05-02 00:21:45.000000000 +0200 @@ -0,0 +1,1163 @@ +From: Greg Kroah-Hartman <gregkh@suse.de> +Subject: Linux 2.6.25.1 + +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +diff --git a/Makefile b/Makefile +index 39516bf..675d37c 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 25 +-EXTRAVERSION = ++EXTRAVERSION = .1 + NAME = Funky Weasel is Jiggy wit it + + # *DOCUMENTATION* +diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c +index 8c71daf..9fee37e 100644 +--- a/arch/alpha/kernel/osf_sys.c ++++ b/arch/alpha/kernel/osf_sys.c +@@ -75,6 +75,7 @@ osf_set_program_attributes(unsigned long text_start, unsigned long text_len, + lock_kernel(); + mm = current->mm; + mm->end_code = bss_start + bss_len; ++ mm->start_brk = bss_start + bss_len; + mm->brk = bss_start + bss_len; + #if 0 + printk("set_program_attributes(%lx %lx %lx %lx)\n", +diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c +index 4ca5486..f239b30 100644 +--- a/arch/x86/kernel/io_apic_32.c ++++ b/arch/x86/kernel/io_apic_32.c +@@ -2477,6 +2477,7 @@ void destroy_irq(unsigned int irq) + dynamic_irq_cleanup(irq); + + spin_lock_irqsave(&vector_lock, flags); ++ clear_bit(irq_vector[irq], used_vectors); + irq_vector[irq] = 0; + spin_unlock_irqrestore(&vector_lock, flags); + } +diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c +index a871586..579745c 100644 +--- a/arch/x86/pci/irq.c ++++ b/arch/x86/pci/irq.c +@@ -200,7 +200,7 @@ static int pirq_ali_get(struct pci_dev *router, struct pci_dev *dev, int pirq) + { + static const unsigned char irqmap[16] = { 0, 9, 3, 10, 4, 5, 7, 6, 1, 11, 0, 12, 0, 14, 0, 15 }; + +- WARN_ON_ONCE(pirq >= 16); ++ WARN_ON_ONCE(pirq > 16); + return irqmap[read_config_nybble(router, 0x48, pirq-1)]; + } + +@@ -209,7 +209,7 @@ static int pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq, i + static const unsigned char irqmap[16] = { 0, 8, 0, 2, 4, 5, 7, 6, 0, 1, 3, 9, 11, 0, 13, 15 }; + unsigned int val = irqmap[irq]; + +- WARN_ON_ONCE(pirq >= 16); ++ WARN_ON_ONCE(pirq > 16); + if (val) { + write_config_nybble(router, 0x48, pirq-1, val); + return 1; +@@ -260,7 +260,7 @@ static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq + { + static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 }; + +- WARN_ON_ONCE(pirq >= 5); ++ WARN_ON_ONCE(pirq > 5); + return read_config_nybble(router, 0x55, pirqmap[pirq-1]); + } + +@@ -268,7 +268,7 @@ static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq + { + static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 }; + +- WARN_ON_ONCE(pirq >= 5); ++ WARN_ON_ONCE(pirq > 5); + write_config_nybble(router, 0x55, pirqmap[pirq-1], irq); + return 1; + } +@@ -282,7 +282,7 @@ static int pirq_ite_get(struct pci_dev *router, struct pci_dev *dev, int pirq) + { + static const unsigned char pirqmap[4] = { 1, 0, 2, 3 }; + +- WARN_ON_ONCE(pirq >= 4); ++ WARN_ON_ONCE(pirq > 4); + return read_config_nybble(router,0x43, pirqmap[pirq-1]); + } + +@@ -290,7 +290,7 @@ static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, i + { + static const unsigned char pirqmap[4] = { 1, 0, 2, 3 }; + +- WARN_ON_ONCE(pirq >= 4); ++ WARN_ON_ONCE(pirq > 4); + write_config_nybble(router, 0x43, pirqmap[pirq-1], irq); + return 1; + } +diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c +index b2112f5..a3b2374 100644 +--- a/drivers/infiniband/hw/nes/nes.c ++++ b/drivers/infiniband/hw/nes/nes.c +@@ -751,13 +751,13 @@ static void __devexit nes_remove(struct pci_dev *pcidev) + + list_del(&nesdev->list); + nes_destroy_cqp(nesdev); ++ ++ free_irq(pcidev->irq, nesdev); + tasklet_kill(&nesdev->dpc_tasklet); + + /* Deallocate the Adapter Structure */ + nes_destroy_adapter(nesdev->nesadapter); + +- free_irq(pcidev->irq, nesdev); +- + if (nesdev->msi_enabled) { + pci_disable_msi(pcidev); + } +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index 0bef878..96b1a0e 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c ++++ b/drivers/infiniband/hw/nes/nes_cm.c +@@ -1834,8 +1834,10 @@ int mini_cm_recv_pkt(struct nes_cm_core *cm_core, struct nes_vnic *nesvnic, + nfo.rem_addr = ntohl(iph->saddr); + nfo.rem_port = ntohs(tcph->source); + +- nes_debug(NES_DBG_CM, "Received packet: dest=0x%08X:0x%04X src=0x%08X:0x%04X\n", +- iph->daddr, tcph->dest, iph->saddr, tcph->source); ++ nes_debug(NES_DBG_CM, "Received packet: dest=" NIPQUAD_FMT ++ ":0x%04X src=" NIPQUAD_FMT ":0x%04X\n", ++ NIPQUAD(iph->daddr), tcph->dest, ++ NIPQUAD(iph->saddr), tcph->source); + + /* note: this call is going to increment cm_node ref count */ + cm_node = find_node(cm_core, +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index 49e53e4..496655e 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c ++++ b/drivers/infiniband/hw/nes/nes_hw.c +@@ -625,6 +625,15 @@ unsigned int nes_reset_adapter_ne020(struct nes_device *nesdev, u8 *OneG_Mode) + nes_debug(NES_DBG_INIT, "Did not see full soft reset done.\n"); + return 0; + } ++ ++ i = 0; ++ while ((nes_read_indexed(nesdev, NES_IDX_INT_CPU_STATUS) != 0x80) && i++ < 10000) ++ mdelay(1); ++ if (i >= 10000) { ++ printk(KERN_ERR PFX "Internal CPU not ready, status = %02X\n", ++ nes_read_indexed(nesdev, NES_IDX_INT_CPU_STATUS)); ++ return 0; ++ } + } + + /* port reset */ +@@ -673,17 +682,6 @@ unsigned int nes_reset_adapter_ne020(struct nes_device *nesdev, u8 *OneG_Mode) + } + } + +- +- +- i = 0; +- while ((nes_read_indexed(nesdev, NES_IDX_INT_CPU_STATUS) != 0x80) && i++ < 10000) +- mdelay(1); +- if (i >= 10000) { +- printk(KERN_ERR PFX "Internal CPU not ready, status = %02X\n", +- nes_read_indexed(nesdev, NES_IDX_INT_CPU_STATUS)); +- return 0; +- } +- + return port_count; + } + +diff --git a/drivers/md/dm-exception-store.c b/drivers/md/dm-exception-store.c +index 5bbce29..c7d305b 100644 +--- a/drivers/md/dm-exception-store.c ++++ b/drivers/md/dm-exception-store.c +@@ -131,7 +131,7 @@ struct pstore { + + static unsigned sectors_to_pages(unsigned sectors) + { +- return sectors / (PAGE_SIZE >> 9); ++ return DIV_ROUND_UP(sectors, PAGE_SIZE >> 9); + } + + static int alloc_area(struct pstore *ps) +diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c +index 8c9a8ad..8bf5596 100644 +--- a/drivers/media/video/cx88/cx88-cards.c ++++ b/drivers/media/video/cx88/cx88-cards.c +@@ -1354,6 +1354,10 @@ static const struct cx88_board cx88_boards[] = { + }}, + /* fixme: Add radio support */ + .mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD, ++ .radio = { ++ .type = CX88_RADIO, ++ .gpio0 = 0xe780, ++ }, + }, + [CX88_BOARD_ADSTECH_PTV_390] = { + .name = "ADS Tech Instant Video PCI", +diff --git a/drivers/media/video/ivtv/ivtv-ioctl.c b/drivers/media/video/ivtv/ivtv-ioctl.c +index edef2a5..1e6f36e 100644 +--- a/drivers/media/video/ivtv/ivtv-ioctl.c ++++ b/drivers/media/video/ivtv/ivtv-ioctl.c +@@ -741,7 +741,8 @@ int ivtv_v4l2_ioctls(struct ivtv *itv, struct file *filp, unsigned int cmd, void + + memset(vcap, 0, sizeof(*vcap)); + strcpy(vcap->driver, IVTV_DRIVER_NAME); /* driver name */ +- strcpy(vcap->card, itv->card_name); /* card type */ ++ strncpy(vcap->card, itv->card_name, ++ sizeof(vcap->card)-1); /* card type */ + strcpy(vcap->bus_info, pci_name(itv->dev)); /* bus info... */ + vcap->version = IVTV_DRIVER_VERSION; /* version */ + vcap->capabilities = itv->v4l2_cap; /* capabilities */ +diff --git a/drivers/media/video/tea5761.c b/drivers/media/video/tea5761.c +index 5326eec..de7e060 100644 +--- a/drivers/media/video/tea5761.c ++++ b/drivers/media/video/tea5761.c +@@ -249,14 +249,19 @@ int tea5761_autodetection(struct i2c_adapter* i2c_adap, u8 i2c_addr) + + if (16 != (rc = tuner_i2c_xfer_recv(&i2c, buffer, 16))) { + printk(KERN_WARNING "it is not a TEA5761. Received %i chars.\n", rc); +- return EINVAL; ++ return -EINVAL; + } + +- if (!((buffer[13] != 0x2b) || (buffer[14] != 0x57) || (buffer[15] != 0x061))) { +- printk(KERN_WARNING "Manufacturer ID= 0x%02x, Chip ID = %02x%02x. It is not a TEA5761\n",buffer[13],buffer[14],buffer[15]); +- return EINVAL; ++ if ((buffer[13] != 0x2b) || (buffer[14] != 0x57) || (buffer[15] != 0x061)) { ++ printk(KERN_WARNING "Manufacturer ID= 0x%02x, Chip ID = %02x%02x." ++ " It is not a TEA5761\n", ++ buffer[13], buffer[14], buffer[15]); ++ return -EINVAL; + } +- printk(KERN_WARNING "TEA5761 detected.\n"); ++ printk(KERN_WARNING "tea5761: TEA%02x%02x detected. " ++ "Manufacturer ID= 0x%02x\n", ++ buffer[14], buffer[15], buffer[13]); ++ + return 0; + } + +diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c +index 78a09a2..8cdbdd0 100644 +--- a/drivers/media/video/tuner-core.c ++++ b/drivers/media/video/tuner-core.c +@@ -1112,8 +1112,8 @@ static int tuner_probe(struct i2c_client *client) + if (!no_autodetect) { + switch (client->addr) { + case 0x10: +- if (tea5761_autodetection(t->i2c->adapter, t->i2c->addr) +- != EINVAL) { ++ if (tea5761_autodetection(t->i2c->adapter, ++ t->i2c->addr) >= 0) { + t->type = TUNER_TEA5761; + t->mode_mask = T_RADIO; + t->mode = T_STANDBY; +@@ -1125,7 +1125,7 @@ static int tuner_probe(struct i2c_client *client) + + goto register_client; + } +- break; ++ return -ENODEV; + case 0x42: + case 0x43: + case 0x4a: +diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c +index c082cf0..de11039 100644 +--- a/drivers/net/s2io.c ++++ b/drivers/net/s2io.c +@@ -84,7 +84,7 @@ + #include "s2io.h" + #include "s2io-regs.h" + +-#define DRV_VERSION "2.0.26.20" ++#define DRV_VERSION "2.0.26.22" + + /* S2io Driver name & version. */ + static char s2io_driver_name[] = "Neterion"; +@@ -2339,7 +2339,7 @@ static void free_tx_buffers(struct s2io_nic *nic) + for (i = 0; i < config->tx_fifo_num; i++) { + unsigned long flags; + spin_lock_irqsave(&mac_control->fifos[i].tx_lock, flags); +- for (j = 0; j < config->tx_cfg[i].fifo_len - 1; j++) { ++ for (j = 0; j < config->tx_cfg[i].fifo_len; j++) { + txdp = (struct TxD *) \ + mac_control->fifos[i].list_info[j].list_virt_addr; + skb = s2io_txdl_getskb(&mac_control->fifos[i], txdp, j); +diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c +index 17585e5..432e837 100644 +--- a/drivers/net/tehuti.c ++++ b/drivers/net/tehuti.c +@@ -625,6 +625,12 @@ static void __init bdx_firmware_endianess(void) + s_firmLoad[i] = CPU_CHIP_SWAP32(s_firmLoad[i]); + } + ++static int bdx_range_check(struct bdx_priv *priv, u32 offset) ++{ ++ return (offset > (u32) (BDX_REGS_SIZE / priv->nic->port_num)) ? ++ -EINVAL : 0; ++} ++ + static int bdx_ioctl_priv(struct net_device *ndev, struct ifreq *ifr, int cmd) + { + struct bdx_priv *priv = ndev->priv; +@@ -643,9 +649,15 @@ static int bdx_ioctl_priv(struct net_device *ndev, struct ifreq *ifr, int cmd) + DBG("%d 0x%x 0x%x\n", data[0], data[1], data[2]); + } + ++ if (!capable(CAP_SYS_RAWIO)) ++ return -EPERM; ++ + switch (data[0]) { + + case BDX_OP_READ: ++ error = bdx_range_check(priv, data[1]); ++ if (error < 0) ++ return error; + data[2] = READ_REG(priv, data[1]); + DBG("read_reg(0x%x)=0x%x (dec %d)\n", data[1], data[2], + data[2]); +@@ -655,6 +667,9 @@ static int bdx_ioctl_priv(struct net_device *ndev, struct ifreq *ifr, int cmd) + break; + + case BDX_OP_WRITE: ++ error = bdx_range_check(priv, data[1]); ++ if (error < 0) ++ return error; + WRITE_REG(priv, data[1], data[2]); + DBG("write_reg(0x%x, 0x%x)\n", data[1], data[2]); + break; +diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c +index 96043c5..bc4c62b 100644 +--- a/drivers/net/tg3.c ++++ b/drivers/net/tg3.c +@@ -64,8 +64,8 @@ + + #define DRV_MODULE_NAME "tg3" + #define PFX DRV_MODULE_NAME ": " +-#define DRV_MODULE_VERSION "3.90" +-#define DRV_MODULE_RELDATE "April 12, 2008" ++#define DRV_MODULE_VERSION "3.91" ++#define DRV_MODULE_RELDATE "April 18, 2008" + + #define TG3_DEF_MAC_MODE 0 + #define TG3_DEF_RX_MODE 0 +@@ -4135,11 +4135,21 @@ static int tigon3_dma_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb, + u32 last_plus_one, u32 *start, + u32 base_flags, u32 mss) + { +- struct sk_buff *new_skb = skb_copy(skb, GFP_ATOMIC); ++ struct sk_buff *new_skb; + dma_addr_t new_addr = 0; + u32 entry = *start; + int i, ret = 0; + ++ if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) ++ new_skb = skb_copy(skb, GFP_ATOMIC); ++ else { ++ int more_headroom = 4 - ((unsigned long)skb->data & 3); ++ ++ new_skb = skb_copy_expand(skb, ++ skb_headroom(skb) + more_headroom, ++ skb_tailroom(skb), GFP_ATOMIC); ++ } ++ + if (!new_skb) { + ret = -1; + } else { +@@ -4462,7 +4472,9 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev) + + would_hit_hwbug = 0; + +- if (tg3_4g_overflow_test(mapping, len)) ++ if (tp->tg3_flags3 & TG3_FLG3_5701_DMA_BUG) ++ would_hit_hwbug = 1; ++ else if (tg3_4g_overflow_test(mapping, len)) + would_hit_hwbug = 1; + + tg3_set_txd(tp, entry, mapping, len, base_flags, +@@ -11339,6 +11351,38 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) + } + } + ++ if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { ++ static struct tg3_dev_id { ++ u32 vendor; ++ u32 device; ++ } bridge_chipsets[] = { ++ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, ++ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, ++ { }, ++ }; ++ struct tg3_dev_id *pci_id = &bridge_chipsets[0]; ++ struct pci_dev *bridge = NULL; ++ ++ while (pci_id->vendor != 0) { ++ bridge = pci_get_device(pci_id->vendor, ++ pci_id->device, ++ bridge); ++ if (!bridge) { ++ pci_id++; ++ continue; ++ } ++ if (bridge->subordinate && ++ (bridge->subordinate->number <= ++ tp->pdev->bus->number) && ++ (bridge->subordinate->subordinate >= ++ tp->pdev->bus->number)) { ++ tp->tg3_flags3 |= TG3_FLG3_5701_DMA_BUG; ++ pci_dev_put(bridge); ++ break; ++ } ++ } ++ } ++ + /* The EPB bridge inside 5714, 5715, and 5780 cannot support + * DMA addresses > 40-bit. This bridge may have other additional + * 57xx devices behind it in some 4-port NIC designs for example. +diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h +index c1075a7..c688c3a 100644 +--- a/drivers/net/tg3.h ++++ b/drivers/net/tg3.h +@@ -2476,6 +2476,7 @@ struct tg3 { + #define TG3_FLG3_NO_NVRAM_ADDR_TRANS 0x00000001 + #define TG3_FLG3_ENABLE_APE 0x00000002 + #define TG3_FLG3_5761_5784_AX_FIXES 0x00000004 ++#define TG3_FLG3_5701_DMA_BUG 0x00000008 + + struct timer_list timer; + u16 timer_counter; +diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c +index 48e9124..4ec1915 100644 +--- a/drivers/net/wireless/b43/dma.c ++++ b/drivers/net/wireless/b43/dma.c +@@ -822,6 +822,18 @@ static u64 supported_dma_mask(struct b43_wldev *dev) + return DMA_30BIT_MASK; + } + ++static enum b43_dmatype dma_mask_to_engine_type(u64 dmamask) ++{ ++ if (dmamask == DMA_30BIT_MASK) ++ return B43_DMA_30BIT; ++ if (dmamask == DMA_32BIT_MASK) ++ return B43_DMA_32BIT; ++ if (dmamask == DMA_64BIT_MASK) ++ return B43_DMA_64BIT; ++ B43_WARN_ON(1); ++ return B43_DMA_30BIT; ++} ++ + /* Main initialization function. */ + static + struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev, +@@ -982,6 +994,42 @@ void b43_dma_free(struct b43_wldev *dev) + dma->tx_ring0 = NULL; + } + ++static int b43_dma_set_mask(struct b43_wldev *dev, u64 mask) ++{ ++ u64 orig_mask = mask; ++ bool fallback = 0; ++ int err; ++ ++ /* Try to set the DMA mask. If it fails, try falling back to a ++ * lower mask, as we can always also support a lower one. */ ++ while (1) { ++ err = ssb_dma_set_mask(dev->dev, mask); ++ if (!err) ++ break; ++ if (mask == DMA_64BIT_MASK) { ++ mask = DMA_32BIT_MASK; ++ fallback = 1; ++ continue; ++ } ++ if (mask == DMA_32BIT_MASK) { ++ mask = DMA_30BIT_MASK; ++ fallback = 1; ++ continue; ++ } ++ b43err(dev->wl, "The machine/kernel does not support " ++ "the required %u-bit DMA mask\n", ++ (unsigned int)dma_mask_to_engine_type(orig_mask)); ++ return -EOPNOTSUPP; ++ } ++ if (fallback) { ++ b43info(dev->wl, "DMA mask fallback from %u-bit to %u-bit\n", ++ (unsigned int)dma_mask_to_engine_type(orig_mask), ++ (unsigned int)dma_mask_to_engine_type(mask)); ++ } ++ ++ return 0; ++} ++ + int b43_dma_init(struct b43_wldev *dev) + { + struct b43_dma *dma = &dev->dma; +@@ -991,27 +1039,10 @@ int b43_dma_init(struct b43_wldev *dev) + enum b43_dmatype type; + + dmamask = supported_dma_mask(dev); +- switch (dmamask) { +- default: +- B43_WARN_ON(1); +- case DMA_30BIT_MASK: +- type = B43_DMA_30BIT; +- break; +- case DMA_32BIT_MASK: +- type = B43_DMA_32BIT; +- break; +- case DMA_64BIT_MASK: +- type = B43_DMA_64BIT; +- break; +- } +- err = ssb_dma_set_mask(dev->dev, dmamask); +- if (err) { +- b43err(dev->wl, "The machine/kernel does not support " +- "the required DMA mask (0x%08X%08X)\n", +- (unsigned int)((dmamask & 0xFFFFFFFF00000000ULL) >> 32), +- (unsigned int)(dmamask & 0x00000000FFFFFFFFULL)); +- return -EOPNOTSUPP; +- } ++ type = dma_mask_to_engine_type(dmamask); ++ err = b43_dma_set_mask(dev, dmamask); ++ if (err) ++ return err; + + err = -ENOMEM; + /* setup TX DMA channels. */ +diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c +index c73a75b..f23317e 100644 +--- a/drivers/net/wireless/b43/main.c ++++ b/drivers/net/wireless/b43/main.c +@@ -78,6 +78,11 @@ static int modparam_nohwcrypt; + module_param_named(nohwcrypt, modparam_nohwcrypt, int, 0444); + MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption."); + ++static int modparam_btcoex = 1; ++module_param_named(btcoex, modparam_btcoex, int, 0444); ++MODULE_PARM_DESC(btcoex, "Enable Bluetooth coexistance (default on)"); ++ ++ + static const struct ssb_device_id b43_ssb_tbl[] = { + SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5), + SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 6), +@@ -3339,6 +3344,8 @@ static void b43_bluetooth_coext_enable(struct b43_wldev *dev) + struct ssb_sprom *sprom = &dev->dev->bus->sprom; + u32 hf; + ++ if (!modparam_btcoex) ++ return; + if (!(sprom->boardflags_lo & B43_BFL_BTCOEXIST)) + return; + if (dev->phy.type != B43_PHYTYPE_B && !dev->phy.gmode) +@@ -3350,11 +3357,13 @@ static void b43_bluetooth_coext_enable(struct b43_wldev *dev) + else + hf |= B43_HF_BTCOEX; + b43_hf_write(dev, hf); +- //TODO + } + + static void b43_bluetooth_coext_disable(struct b43_wldev *dev) +-{ //TODO ++{ ++ if (!modparam_btcoex) ++ return; ++ //TODO + } + + static void b43_imcfglo_timeouts_workaround(struct b43_wldev *dev) +@@ -4000,8 +4009,16 @@ static int b43_one_core_attach(struct ssb_device *dev, struct b43_wl *wl) + return err; + } + ++#define IS_PDEV(pdev, _vendor, _device, _subvendor, _subdevice) ( \ ++ (pdev->vendor == PCI_VENDOR_ID_##_vendor) && \ ++ (pdev->device == _device) && \ ++ (pdev->subsystem_vendor == PCI_VENDOR_ID_##_subvendor) && \ ++ (pdev->subsystem_device == _subdevice) ) ++ + static void b43_sprom_fixup(struct ssb_bus *bus) + { ++ struct pci_dev *pdev; ++ + /* boardflags workarounds */ + if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL && + bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74) +@@ -4009,6 +4026,13 @@ static void b43_sprom_fixup(struct ssb_bus *bus) + if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE && + bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40) + bus->sprom.boardflags_lo |= B43_BFL_PACTRL; ++ if (bus->bustype == SSB_BUSTYPE_PCI) { ++ pdev = bus->host_pci; ++ if (IS_PDEV(pdev, BROADCOM, 0x4318, ASUSTEK, 0x100F) || ++ IS_PDEV(pdev, BROADCOM, 0x4320, LINKSYS, 0x0015) || ++ IS_PDEV(pdev, BROADCOM, 0x4320, LINKSYS, 0x0013)) ++ bus->sprom.boardflags_lo &= ~B43_BFL_BTCOEXIST; ++ } + } + + static void b43_wireless_exit(struct ssb_device *dev, struct b43_wl *wl) +diff --git a/drivers/rtc/rtc-pcf8583.c b/drivers/rtc/rtc-pcf8583.c +index 8b39970..3d09d8f 100644 +--- a/drivers/rtc/rtc-pcf8583.c ++++ b/drivers/rtc/rtc-pcf8583.c +@@ -15,7 +15,7 @@ + #include <linux/i2c.h> + #include <linux/slab.h> + #include <linux/string.h> +-#include <linux/mc146818rtc.h> ++#include <linux/rtc.h> + #include <linux/init.h> + #include <linux/errno.h> + #include <linux/bcd.h> +diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c +index 3c1b433..0e8e092 100644 +--- a/drivers/scsi/qla2xxx/qla_os.c ++++ b/drivers/scsi/qla2xxx/qla_os.c +@@ -2357,7 +2357,7 @@ qla2x00_do_dpc(void *data) + } else { + fcport->login_retry = 0; + } +- if (fcport->login_retry == 0) ++ if (fcport->login_retry == 0 && status != QLA_SUCCESS) + fcport->loop_id = FC_NO_LOOP_ID; + } + if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) +diff --git a/drivers/serial/dz.c b/drivers/serial/dz.c +index 116211f..0dddd68 100644 +--- a/drivers/serial/dz.c ++++ b/drivers/serial/dz.c +@@ -819,7 +819,7 @@ static void dz_console_putchar(struct uart_port *uport, int ch) + dz_out(dport, DZ_TCR, mask); + iob(); + udelay(2); +- } while (loops--); ++ } while (--loops); + + if (loops) /* Cannot send otherwise. */ + dz_out(dport, DZ_TDR, ch); +diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c +index b434df7..274a448 100644 +--- a/drivers/ssb/pci.c ++++ b/drivers/ssb/pci.c +@@ -482,6 +482,11 @@ static int sprom_extract(struct ssb_bus *bus, struct ssb_sprom *out, + goto unsupported; + } + ++ if (out->boardflags_lo == 0xFFFF) ++ out->boardflags_lo = 0; /* per specs */ ++ if (out->boardflags_hi == 0xFFFF) ++ out->boardflags_hi = 0; /* per specs */ ++ + return 0; + unsupported: + ssb_printk(KERN_WARNING PFX "Unsupported SPROM revision %d " +diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c +index 68fc521..7f1bc97 100644 +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -2664,6 +2664,7 @@ loop: + if ((status == -ENOTCONN) || (status == -ENOTSUPP)) + break; + } ++ dev_err(hub_dev, "unable to enumerate USB device on port %d\n", port1); + + done: + hub_port_disable(hub, port1, 1); +diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c +index d0360f6..b0e2275 100644 +--- a/drivers/usb/host/ohci-pci.c ++++ b/drivers/usb/host/ohci-pci.c +@@ -312,11 +312,13 @@ static int ohci_pci_suspend (struct usb_hcd *hcd, pm_message_t message) + + static int ohci_pci_resume (struct usb_hcd *hcd) + { ++ struct ohci_hcd *ohci = hcd_to_ohci(hcd); ++ + set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); + + /* FIXME: we should try to detect loss of VBUS power here */ + prepare_for_handover(hcd); +- ++ ohci_writel(ohci, OHCI_INTR_MIE, &ohci->regs->intrenable); + return 0; + } + +diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c +index ed67881..7b02a4a 100644 +--- a/drivers/usb/serial/sierra.c ++++ b/drivers/usb/serial/sierra.c +@@ -164,6 +164,7 @@ static struct usb_device_id id_table [] = { + { USB_DEVICE(0x1199, 0x6812) }, /* Sierra Wireless MC8775 & AC 875U */ + { USB_DEVICE(0x1199, 0x6813) }, /* Sierra Wireless MC8775 (Thinkpad internal) */ + { USB_DEVICE(0x1199, 0x6815) }, /* Sierra Wireless MC8775 */ ++ { USB_DEVICE(0x03f0, 0x1e1d) }, /* HP hs2300 a.k.a MC8775 */ + { USB_DEVICE(0x1199, 0x6820) }, /* Sierra Wireless AirCard 875 */ + { USB_DEVICE(0x1199, 0x6832) }, /* Sierra Wireless MC8780*/ + { USB_DEVICE(0x1199, 0x6833) }, /* Sierra Wireless MC8781*/ +diff --git a/fs/aio.c b/fs/aio.c +index 2283686..ae94e1d 100644 +--- a/fs/aio.c ++++ b/fs/aio.c +@@ -1166,7 +1166,10 @@ retry: + break; + if (min_nr <= i) + break; +- ret = 0; ++ if (unlikely(ctx->dead)) { ++ ret = -EINVAL; ++ break; ++ } + if (to.timed_out) /* Only check after read evt */ + break; + /* Try to only show up in io wait if there are ops +@@ -1231,6 +1234,13 @@ static void io_destroy(struct kioctx *ioctx) + + aio_cancel_all(ioctx); + wait_for_all_aios(ioctx); ++ ++ /* ++ * Wake up any waiters. The setting of ctx->dead must be seen ++ * by other CPUs at this point. Right now, we rely on the ++ * locking done by the above calls to ensure this consistency. ++ */ ++ wake_up(&ioctx->wait); + put_ioctx(ioctx); /* once for the lookup */ + } + +diff --git a/fs/dnotify.c b/fs/dnotify.c +index 28d01ed..eaecc4c 100644 +--- a/fs/dnotify.c ++++ b/fs/dnotify.c +@@ -20,6 +20,7 @@ + #include <linux/init.h> + #include <linux/spinlock.h> + #include <linux/slab.h> ++#include <linux/file.h> + + int dir_notify_enable __read_mostly = 1; + +@@ -66,6 +67,7 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg) + struct dnotify_struct **prev; + struct inode *inode; + fl_owner_t id = current->files; ++ struct file *f; + int error = 0; + + if ((arg & ~DN_MULTISHOT) == 0) { +@@ -92,6 +94,15 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg) + prev = &odn->dn_next; + } + ++ rcu_read_lock(); ++ f = fcheck(fd); ++ rcu_read_unlock(); ++ /* we'd lost the race with close(), sod off silently */ ++ /* note that inode->i_lock prevents reordering problems ++ * between accesses to descriptor table and ->i_dnotify */ ++ if (f != filp) ++ goto out_free; ++ + error = __f_setown(filp, task_pid(current), PIDTYPE_PID, 0); + if (error) + goto out_free; +diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c +index a1db918..4c895f3 100644 +--- a/fs/jffs2/erase.c ++++ b/fs/jffs2/erase.c +@@ -419,9 +419,6 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb + if (jffs2_write_nand_cleanmarker(c, jeb)) + goto filebad; + } +- +- /* Everything else got zeroed before the erase */ +- jeb->free_size = c->sector_size; + } else { + + struct kvec vecs[1]; +@@ -449,18 +446,19 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb + + goto filebad; + } +- +- /* Everything else got zeroed before the erase */ +- jeb->free_size = c->sector_size; +- /* FIXME Special case for cleanmarker in empty block */ +- jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, c->cleanmarker_size, NULL); + } ++ /* Everything else got zeroed before the erase */ ++ jeb->free_size = c->sector_size; + + down(&c->erase_free_sem); + spin_lock(&c->erase_completion_lock); ++ + c->erasing_size -= c->sector_size; +- c->free_size += jeb->free_size; +- c->used_size += jeb->used_size; ++ c->free_size += c->sector_size; ++ ++ /* Account for cleanmarker now, if it's in-band */ ++ if (c->cleanmarker_size && !jffs2_cleanmarker_oob(c)) ++ jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, c->cleanmarker_size, NULL); + + jffs2_dbg_acct_sanity_check_nolock(c,jeb); + jffs2_dbg_acct_paranoia_check_nolock(c, jeb); +diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h +index b9e1740..44c81c7 100644 +--- a/include/linux/rtnetlink.h ++++ b/include/linux/rtnetlink.h +@@ -740,13 +740,13 @@ extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change); + extern void rtnl_lock(void); + extern void rtnl_unlock(void); + extern int rtnl_trylock(void); ++extern int rtnl_is_locked(void); + + extern void rtnetlink_init(void); + extern void __rtnl_unlock(void); + + #define ASSERT_RTNL() do { \ +- if (unlikely(rtnl_trylock())) { \ +- rtnl_unlock(); \ ++ if (unlikely(!rtnl_is_locked())) { \ + printk(KERN_ERR "RTNL: assertion failed at %s (%d)\n", \ + __FILE__, __LINE__); \ + dump_stack(); \ +diff --git a/include/net/tcp.h b/include/net/tcp.h +index 4fd3eb2..d69d12e 100644 +--- a/include/net/tcp.h ++++ b/include/net/tcp.h +@@ -776,11 +776,14 @@ extern void tcp_enter_cwr(struct sock *sk, const int set_ssthresh); + extern __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst); + + /* Slow start with delack produces 3 packets of burst, so that +- * it is safe "de facto". ++ * it is safe "de facto". This will be the default - same as ++ * the default reordering threshold - but if reordering increases, ++ * we must be able to allow cwnd to burst at least this much in order ++ * to not pull it back when holes are filled. + */ + static __inline__ __u32 tcp_max_burst(const struct tcp_sock *tp) + { +- return 3; ++ return tp->reordering; + } + + /* Returns end sequence number of the receiver's advertised window */ +diff --git a/include/net/xfrm.h b/include/net/xfrm.h +index 0d255ae..97577de 100644 +--- a/include/net/xfrm.h ++++ b/include/net/xfrm.h +@@ -435,6 +435,9 @@ struct xfrm_tmpl + /* May skip this transfomration if no SA is found */ + __u8 optional; + ++/* Skip aalgos/ealgos/calgos checks. */ ++ __u8 allalgs; ++ + /* Bit mask of algos allowed for acquisition */ + __u32 aalgos; + __u32 ealgos; +diff --git a/kernel/cgroup.c b/kernel/cgroup.c +index 2727f92..6d8de05 100644 +--- a/kernel/cgroup.c ++++ b/kernel/cgroup.c +@@ -1722,7 +1722,12 @@ void cgroup_enable_task_cg_lists(void) + use_task_css_set_links = 1; + do_each_thread(g, p) { + task_lock(p); +- if (list_empty(&p->cg_list)) ++ /* ++ * We should check if the process is exiting, otherwise ++ * it will race with cgroup_exit() in that the list ++ * entry won't be deleted though the process has exited. ++ */ ++ if (!(p->flags & PF_EXITING) && list_empty(&p->cg_list)) + list_add(&p->cg_list, &p->cgroups->tasks); + task_unlock(p); + } while_each_thread(g, p); +diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c +index 98bee01..c15a359 100644 +--- a/kernel/hrtimer.c ++++ b/kernel/hrtimer.c +@@ -590,7 +590,6 @@ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, + list_add_tail(&timer->cb_entry, + &base->cpu_base->cb_pending); + timer->state = HRTIMER_STATE_PENDING; +- raise_softirq(HRTIMER_SOFTIRQ); + return 1; + default: + BUG(); +@@ -633,6 +632,11 @@ static int hrtimer_switch_to_hres(void) + return 1; + } + ++static inline void hrtimer_raise_softirq(void) ++{ ++ raise_softirq(HRTIMER_SOFTIRQ); ++} ++ + #else + + static inline int hrtimer_hres_active(void) { return 0; } +@@ -651,6 +655,7 @@ static inline int hrtimer_reprogram(struct hrtimer *timer, + { + return 0; + } ++static inline void hrtimer_raise_softirq(void) { } + + #endif /* CONFIG_HIGH_RES_TIMERS */ + +@@ -850,7 +855,7 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) + { + struct hrtimer_clock_base *base, *new_base; + unsigned long flags; +- int ret; ++ int ret, raise; + + base = lock_hrtimer_base(timer, &flags); + +@@ -884,8 +889,18 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) + enqueue_hrtimer(timer, new_base, + new_base->cpu_base == &__get_cpu_var(hrtimer_bases)); + ++ /* ++ * The timer may be expired and moved to the cb_pending ++ * list. We can not raise the softirq with base lock held due ++ * to a possible deadlock with runqueue lock. ++ */ ++ raise = timer->state == HRTIMER_STATE_PENDING; ++ + unlock_hrtimer_base(timer, &flags); + ++ if (raise) ++ hrtimer_raise_softirq(); ++ + return ret; + } + EXPORT_SYMBOL_GPL(hrtimer_start); +@@ -1080,8 +1095,19 @@ static void run_hrtimer_pending(struct hrtimer_cpu_base *cpu_base) + * If the timer was rearmed on another CPU, reprogram + * the event device. + */ +- if (timer->base->first == &timer->node) +- hrtimer_reprogram(timer, timer->base); ++ struct hrtimer_clock_base *base = timer->base; ++ ++ if (base->first == &timer->node && ++ hrtimer_reprogram(timer, base)) { ++ /* ++ * Timer is expired. Thus move it from tree to ++ * pending list again. ++ */ ++ __remove_hrtimer(timer, base, ++ HRTIMER_STATE_PENDING, 0); ++ list_add_tail(&timer->cb_entry, ++ &base->cpu_base->cb_pending); ++ } + } + } + spin_unlock_irq(&cpu_base->lock); +diff --git a/mm/pagewalk.c b/mm/pagewalk.c +index 1cf1417..0afd238 100644 +--- a/mm/pagewalk.c ++++ b/mm/pagewalk.c +@@ -9,11 +9,15 @@ static int walk_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, + int err = 0; + + pte = pte_offset_map(pmd, addr); +- do { ++ for (;;) { + err = walk->pte_entry(pte, addr, addr + PAGE_SIZE, private); + if (err) + break; +- } while (pte++, addr += PAGE_SIZE, addr != end); ++ addr += PAGE_SIZE; ++ if (addr == end) ++ break; ++ pte++; ++ } + + pte_unmap(pte); + return err; +diff --git a/net/can/raw.c b/net/can/raw.c +index 94cd7f2..c92cb8e 100644 +--- a/net/can/raw.c ++++ b/net/can/raw.c +@@ -573,7 +573,8 @@ static int raw_getsockopt(struct socket *sock, int level, int optname, + int fsize = ro->count * sizeof(struct can_filter); + if (len > fsize) + len = fsize; +- err = copy_to_user(optval, ro->filter, len); ++ if (copy_to_user(optval, ro->filter, len)) ++ err = -EFAULT; + } else + len = 0; + release_sock(sk); +diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c +index 2bd9c5f..0cb2772 100644 +--- a/net/core/rtnetlink.c ++++ b/net/core/rtnetlink.c +@@ -82,6 +82,11 @@ int rtnl_trylock(void) + return mutex_trylock(&rtnl_mutex); + } + ++int rtnl_is_locked(void) ++{ ++ return mutex_is_locked(&rtnl_mutex); ++} ++ + static struct rtnl_link *rtnl_msg_handlers[NPROTO]; + + static inline int rtm_msgindex(int msgtype) +@@ -1389,6 +1394,7 @@ EXPORT_SYMBOL(rtnetlink_put_metrics); + EXPORT_SYMBOL(rtnl_lock); + EXPORT_SYMBOL(rtnl_trylock); + EXPORT_SYMBOL(rtnl_unlock); ++EXPORT_SYMBOL(rtnl_is_locked); + EXPORT_SYMBOL(rtnl_unicast); + EXPORT_SYMBOL(rtnl_notify); + EXPORT_SYMBOL(rtnl_set_sk_err); +diff --git a/net/dccp/probe.c b/net/dccp/probe.c +index 7053bb8..44eddcf 100644 +--- a/net/dccp/probe.c ++++ b/net/dccp/probe.c +@@ -145,7 +145,7 @@ static ssize_t dccpprobe_read(struct file *file, char __user *buf, + goto out_free; + + cnt = kfifo_get(dccpw.fifo, tbuf, len); +- error = copy_to_user(buf, tbuf, cnt); ++ error = copy_to_user(buf, tbuf, cnt) ? -EFAULT : 0; + + out_free: + vfree(tbuf); +diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c +index 87dd5bf..a79a547 100644 +--- a/net/ipv4/tcp_probe.c ++++ b/net/ipv4/tcp_probe.c +@@ -190,19 +190,18 @@ static ssize_t tcpprobe_read(struct file *file, char __user *buf, + + width = tcpprobe_sprint(tbuf, sizeof(tbuf)); + +- if (width < len) ++ if (cnt + width < len) + tcp_probe.tail = (tcp_probe.tail + 1) % bufsize; + + spin_unlock_bh(&tcp_probe.lock); + + /* if record greater than space available + return partial buffer (so far) */ +- if (width >= len) ++ if (cnt + width >= len) + break; + +- error = copy_to_user(buf + cnt, tbuf, width); +- if (error) +- break; ++ if (copy_to_user(buf + cnt, tbuf, width)) ++ return -EFAULT; + cnt += width; + } + +diff --git a/net/key/af_key.c b/net/key/af_key.c +index e9ef9af..5ceab25 100644 +--- a/net/key/af_key.c ++++ b/net/key/af_key.c +@@ -1856,7 +1856,7 @@ parse_ipsecrequest(struct xfrm_policy *xp, struct sadb_x_ipsecrequest *rq) + t->encap_family = xp->family; + + /* No way to set this via kame pfkey */ +- t->aalgos = t->ealgos = t->calgos = ~0; ++ t->allalgs = 1; + xp->xfrm_nr++; + return 0; + } +diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c +index 063cbc5..f9293c7 100644 +--- a/net/rose/af_rose.c ++++ b/net/rose/af_rose.c +@@ -760,8 +760,10 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le + + rose->neighbour = rose_get_neigh(&addr->srose_addr, &cause, + &diagnostic); +- if (!rose->neighbour) +- return -ENETUNREACH; ++ if (!rose->neighbour) { ++ err = -ENETUNREACH; ++ goto out_release; ++ } + + rose->lci = rose_new_lci(rose->neighbour); + if (!rose->lci) { +diff --git a/net/tipc/socket.c b/net/tipc/socket.c +index 2290903..ac04733 100644 +--- a/net/tipc/socket.c ++++ b/net/tipc/socket.c +@@ -1600,8 +1600,8 @@ static int getsockopt(struct socket *sock, + else if (len < sizeof(value)) { + res = -EINVAL; + } +- else if ((res = copy_to_user(ov, &value, sizeof(value)))) { +- /* couldn't return value */ ++ else if (copy_to_user(ov, &value, sizeof(value))) { ++ res = -EFAULT; + } + else { + res = put_user(sizeof(value), ol); +diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c +index 9fc4c31..c44076c 100644 +--- a/net/xfrm/xfrm_policy.c ++++ b/net/xfrm/xfrm_policy.c +@@ -1772,7 +1772,7 @@ xfrm_state_ok(struct xfrm_tmpl *tmpl, struct xfrm_state *x, + (x->id.spi == tmpl->id.spi || !tmpl->id.spi) && + (x->props.reqid == tmpl->reqid || !tmpl->reqid) && + x->props.mode == tmpl->mode && +- ((tmpl->aalgos & (1<<x->props.aalgo)) || ++ (tmpl->allalgs || (tmpl->aalgos & (1<<x->props.aalgo)) || + !(xfrm_id_proto_match(tmpl->id.proto, IPSEC_PROTO_ANY))) && + !(x->props.mode != XFRM_MODE_TRANSPORT && + xfrm_state_addr_cmp(tmpl, x, family)); +diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c +index 019d21d..12f19be 100644 +--- a/net/xfrm/xfrm_user.c ++++ b/net/xfrm/xfrm_user.c +@@ -975,6 +975,8 @@ static void copy_templates(struct xfrm_policy *xp, struct xfrm_user_tmpl *ut, + t->aalgos = ut->aalgos; + t->ealgos = ut->ealgos; + t->calgos = ut->calgos; ++ /* If all masks are ~0, then we allow all algorithms. */ ++ t->allalgs = !~(t->aalgos & t->ealgos & t->calgos); + t->encap_family = ut->family; + } + } +diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c +index d39b59c..f4fa982 100644 +--- a/security/selinux/hooks.c ++++ b/security/selinux/hooks.c +@@ -756,9 +756,18 @@ static void selinux_sb_clone_mnt_opts(const struct super_block *oldsb, + int set_context = (oldsbsec->flags & CONTEXT_MNT); + int set_rootcontext = (oldsbsec->flags & ROOTCONTEXT_MNT); + +- /* we can't error, we can't save the info, this shouldn't get called +- * this early in the boot process. */ +- BUG_ON(!ss_initialized); ++ /* ++ * if the parent was able to be mounted it clearly had no special lsm ++ * mount options. thus we can safely put this sb on the list and deal ++ * with it later ++ */ ++ if (!ss_initialized) { ++ spin_lock(&sb_security_lock); ++ if (list_empty(&newsbsec->list)) ++ list_add(&newsbsec->list, &superblock_security_head); ++ spin_unlock(&sb_security_lock); ++ return; ++ } + + /* how can we clone if the old one wasn't set up?? */ + BUG_ON(!oldsbsec->initialized); ++++++ patches.rpmify.tar.bz2 ++++++ ++++++ patches.rt.tar.bz2 ++++++ ++++++ patches.suse.tar.bz2 ++++++ ++++ 8489 lines of diff (skipped) ++++++ patches.uml.tar.bz2 ++++++ ++++++ patches.xen.tar.bz2 ++++++ ++++ 13441 lines of diff (skipped) ++++++ series.conf ++++++ --- kernel-source/series.conf 2008-04-30 16:21:36.000000000 +0200 +++ /mounts/work_src_done/STABLE/kernel-source/series.conf 2008-05-02 09:15:13.000000000 +0200 @@ -27,6 +27,7 @@ # DO NOT MODIFY THEM! # Send separate patches upstream if you find a problem... ######################################################## + patches.kernel.org/patch-2.6.25.1 ######################################################## # Build fixes that apply to the vanilla kernel too. @@ -327,6 +328,8 @@ patches.drivers/libata-add-waits-for-govault patches.drivers/libata-unlock-hpa-by-default patches.drivers/libata-sata_nv-disable-ADMA + patches.drivers/libata-ata_piix-verify-sidpr + patches.drivers/libata-sata_inic162x-update-to-0.4 patches.fixes/mptbase-vmware-fix ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org